Implementing installation of dependent libraries before installing the main package
This commit is contained in:
@@ -171,7 +171,7 @@ dependencies {
|
|||||||
implementation "com.github.topjohnwu.libsu:core:5.0.5"
|
implementation "com.github.topjohnwu.libsu:core:5.0.5"
|
||||||
|
|
||||||
//Love <3
|
//Love <3
|
||||||
implementation "com.gitlab.AuroraOSS:gplayapi:3.1.2"
|
implementation "com.gitlab.AuroraOSS:gplayapi:3.1.3"
|
||||||
|
|
||||||
//Browser
|
//Browser
|
||||||
implementation 'androidx.browser:browser:1.5.0'
|
implementation 'androidx.browser:browser:1.5.0'
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import androidx.core.content.ContextCompat
|
|||||||
import androidx.lifecycle.LifecycleService
|
import androidx.lifecycle.LifecycleService
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import com.aurora.Constants
|
import com.aurora.Constants
|
||||||
|
import com.aurora.extensions.isOAndAbove
|
||||||
import com.aurora.extensions.stackTraceToString
|
import com.aurora.extensions.stackTraceToString
|
||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
import com.aurora.gplayapi.data.models.AuthData
|
import com.aurora.gplayapi.data.models.AuthData
|
||||||
@@ -24,6 +25,7 @@ import com.aurora.store.data.model.UpdateFile
|
|||||||
import com.aurora.store.data.network.HttpClient
|
import com.aurora.store.data.network.HttpClient
|
||||||
import com.aurora.store.data.providers.AuthProvider
|
import com.aurora.store.data.providers.AuthProvider
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
|
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||||
import com.tonyodev.fetch2.*
|
import com.tonyodev.fetch2.*
|
||||||
import com.tonyodev.fetch2core.DownloadBlock
|
import com.tonyodev.fetch2core.DownloadBlock
|
||||||
import com.tonyodev.fetch2core.FetchObserver
|
import com.tonyodev.fetch2core.FetchObserver
|
||||||
@@ -481,6 +483,19 @@ class UpdateService: LifecycleService() {
|
|||||||
app.offerType
|
app.offerType
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (app.dependencies.dependentLibraries.isNotEmpty() && isOAndAbove()) {
|
||||||
|
app.dependencies.dependentLibraries.forEach {
|
||||||
|
if (!isSharedLibraryInstalled(this, it.packageName, it.versionCode)) {
|
||||||
|
updateApp(it, removeExisiting)
|
||||||
|
while (containsInInstalling(it.packageName) ||
|
||||||
|
!isSharedLibraryInstalled(this, it.packageName, it.versionCode)
|
||||||
|
) {
|
||||||
|
Thread.sleep(1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
files.filter { it.url.isNotEmpty() }
|
files.filter { it.url.isNotEmpty() }
|
||||||
.map { RequestBuilder.buildRequest(this, app, it) }
|
.map { RequestBuilder.buildRequest(this, app, it) }
|
||||||
.toList()
|
.toList()
|
||||||
|
|||||||
@@ -25,10 +25,13 @@ import android.content.IntentFilter
|
|||||||
import android.content.pm.PackageInfo
|
import android.content.pm.PackageInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.pm.PackageManager.PackageInfoFlags
|
import android.content.pm.PackageManager.PackageInfoFlags
|
||||||
|
import android.content.pm.SharedLibraryInfo
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.core.content.pm.PackageInfoCompat
|
import androidx.core.content.pm.PackageInfoCompat
|
||||||
|
import com.aurora.extensions.isOAndAbove
|
||||||
import com.aurora.extensions.isTAndAbove
|
import com.aurora.extensions.isTAndAbove
|
||||||
|
import okhttp3.internal.immutableListOf
|
||||||
|
|
||||||
|
|
||||||
object PackageUtil {
|
object PackageUtil {
|
||||||
@@ -51,6 +54,17 @@ object PackageUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isSharedLibraryInstalled(context: Context, packageName: String, versionCode: Int): Boolean {
|
||||||
|
if (isOAndAbove()) {
|
||||||
|
val sharedLibraries = getAllSharedLibraries(context)
|
||||||
|
return sharedLibraries.any {
|
||||||
|
it.name == packageName && it.version == versionCode
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun isUpdatable(context: Context, packageName: String, versionCode: Long): Boolean {
|
fun isUpdatable(context: Context, packageName: String, versionCode: Long): Boolean {
|
||||||
return try {
|
return try {
|
||||||
val packageInfo = getPackageInfo(context, packageName)
|
val packageInfo = getPackageInfo(context, packageName)
|
||||||
@@ -106,6 +120,16 @@ object PackageUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getAllSharedLibraries(context: Context, flags: Int = 0): List<SharedLibraryInfo> {
|
||||||
|
return if (isTAndAbove()) {
|
||||||
|
context.packageManager.getSharedLibraries(PackageInfoFlags.of(flags.toLong()))
|
||||||
|
} else if (isOAndAbove()) {
|
||||||
|
context.packageManager.getSharedLibraries(flags)
|
||||||
|
} else {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getAllPackages(context: Context): List<PackageInfo> {
|
fun getAllPackages(context: Context): List<PackageInfo> {
|
||||||
val packageInfoSet: MutableList<PackageInfo> = mutableListOf()
|
val packageInfoSet: MutableList<PackageInfo> = mutableListOf()
|
||||||
val packageManager: PackageManager = context.packageManager
|
val packageManager: PackageManager = context.packageManager
|
||||||
|
|||||||
Reference in New Issue
Block a user