Merge branch 'library-deps' into 'master'
Implementing installation of dependent libraries before installing the main package See merge request AuroraOSS/AuroraStore!215
This commit is contained in:
@@ -171,7 +171,7 @@ dependencies {
|
||||
implementation "com.github.topjohnwu.libsu:core:5.0.5"
|
||||
|
||||
//Love <3
|
||||
implementation "com.gitlab.AuroraOSS:gplayapi:3.1.2"
|
||||
implementation "com.gitlab.AuroraOSS:gplayapi:3.1.3"
|
||||
|
||||
//Browser
|
||||
implementation 'androidx.browser:browser:1.5.0'
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.LifecycleService
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.aurora.Constants
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import com.aurora.extensions.stackTraceToString
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
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.providers.AuthProvider
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.PackageUtil.isSharedLibraryInstalled
|
||||
import com.tonyodev.fetch2.*
|
||||
import com.tonyodev.fetch2core.DownloadBlock
|
||||
import com.tonyodev.fetch2core.FetchObserver
|
||||
@@ -481,6 +483,19 @@ class UpdateService: LifecycleService() {
|
||||
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() }
|
||||
.map { RequestBuilder.buildRequest(this, app, it) }
|
||||
.toList()
|
||||
|
||||
@@ -25,10 +25,13 @@ import android.content.IntentFilter
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.PackageManager.PackageInfoFlags
|
||||
import android.content.pm.SharedLibraryInfo
|
||||
import android.content.res.Configuration
|
||||
import android.os.Build
|
||||
import androidx.core.content.pm.PackageInfoCompat
|
||||
import com.aurora.extensions.isOAndAbove
|
||||
import com.aurora.extensions.isTAndAbove
|
||||
import okhttp3.internal.immutableListOf
|
||||
|
||||
|
||||
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 {
|
||||
return try {
|
||||
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> {
|
||||
val packageInfoSet: MutableList<PackageInfo> = mutableListOf()
|
||||
val packageManager: PackageManager = context.packageManager
|
||||
|
||||
Reference in New Issue
Block a user