Implementing installation of dependent libraries before installing the main package

This commit is contained in:
Evengard
2023-05-31 12:26:47 +00:00
committed by Aayush Gupta
parent 574390e89f
commit dbc12d7445
3 changed files with 40 additions and 1 deletions

View File

@@ -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'

View File

@@ -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()

View File

@@ -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