use microGInstaller if available & minor ui state fix
This commit is contained in:
@@ -492,7 +492,7 @@ private fun ScreenContentApp(
|
||||
is ExtraScreen.MicroG -> MicroGScreen(
|
||||
packageName = app.packageName,
|
||||
onNavigateUp = ::onNavigateBack,
|
||||
onIgnore = { onInstall(ignoreMicroG = true) }
|
||||
onIgnore = { onInstall(ignoreMicroG = it) }
|
||||
)
|
||||
|
||||
is Screen.DevProfile -> DevProfileScreen(
|
||||
|
||||
@@ -49,7 +49,7 @@ import com.aurora.store.viewmodel.onboarding.MicroGViewModel
|
||||
fun MicroGScreen(
|
||||
packageName: String,
|
||||
onNavigateUp: () -> Unit,
|
||||
onIgnore: () -> Unit,
|
||||
onIgnore: (Boolean) -> Unit,
|
||||
appDetailsViewModel: AppDetailsViewModel = hiltViewModel(key = packageName),
|
||||
viewModel: MicroGViewModel = hiltViewModel(),
|
||||
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
||||
@@ -57,7 +57,7 @@ fun MicroGScreen(
|
||||
val app by appDetailsViewModel.app.collectAsStateWithLifecycle()
|
||||
val topAppBarTitle = when {
|
||||
windowAdaptiveInfo.isWindowCompact -> app!!.displayName
|
||||
else -> stringResource(R.string.onboarding_title_gsf)
|
||||
else -> stringResource(R.string.onboarding_title_gsf)
|
||||
}
|
||||
|
||||
ScreenContent(
|
||||
@@ -75,7 +75,7 @@ private fun ScreenContent(
|
||||
uiState: MicroGUIState = MicroGUIState(),
|
||||
onNavigateUp: () -> Unit = {},
|
||||
onInstall: () -> Unit = {},
|
||||
onIgnore: () -> Unit = {},
|
||||
onIgnore: (Boolean) -> Unit = {},
|
||||
windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
@@ -101,7 +101,10 @@ private fun ScreenContent(
|
||||
modifier = Modifier.weight(1F),
|
||||
onInstall = {
|
||||
when {
|
||||
PermissionProvider.isGranted(context, PermissionType.INSTALL_UNKNOWN_APPS) -> {
|
||||
PermissionProvider.isGranted(
|
||||
context,
|
||||
PermissionType.INSTALL_UNKNOWN_APPS
|
||||
) -> {
|
||||
onInstall()
|
||||
}
|
||||
|
||||
@@ -128,10 +131,14 @@ private fun ScreenContent(
|
||||
|
||||
Button(
|
||||
modifier = Modifier.weight(1F),
|
||||
onClick = onIgnore
|
||||
onClick = { onIgnore(uiState.isInstalled) },
|
||||
enabled = !uiState.isDownloading
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.action_ignore),
|
||||
text = if (uiState.isInstalled)
|
||||
stringResource(R.string.action_install)
|
||||
else
|
||||
stringResource(R.string.action_ignore),
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
@@ -143,7 +150,7 @@ private fun ScreenContent(
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun MicroGScreenPreview(@PreviewParameter(AppPreviewProvider ::class) app: App) {
|
||||
private fun MicroGScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||
PreviewTemplate {
|
||||
ScreenContent(topAppBarTitle = app.displayName)
|
||||
}
|
||||
|
||||
@@ -166,6 +166,10 @@ class AppInstaller @Inject constructor(
|
||||
private val defaultInstaller: IInstaller
|
||||
get() = sessionInstaller
|
||||
|
||||
fun getMicroGInstaller(): IInstaller {
|
||||
return microGInstaller
|
||||
}
|
||||
|
||||
fun getPreferredInstaller(): IInstaller {
|
||||
return when (getCurrentInstaller(context)) {
|
||||
Installer.SESSION -> sessionInstaller
|
||||
|
||||
@@ -26,6 +26,10 @@ object MigrationHelper {
|
||||
override fun migrate(db: SupportSQLiteDatabase) = migrateFrom4To5(db)
|
||||
}
|
||||
|
||||
val MIGRATION_5_6 = object : Migration(5, 6) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) = migrateFrom5To6(db)
|
||||
}
|
||||
|
||||
private const val TAG = "MigrationHelper"
|
||||
|
||||
private fun migrateFrom1To2(database: SupportSQLiteDatabase) {
|
||||
@@ -83,4 +87,21 @@ object MigrationHelper {
|
||||
database.endTransaction()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add requiresGMS column to download table for checking if app requires GMS to install.
|
||||
*/
|
||||
private fun migrateFrom5To6(database: SupportSQLiteDatabase) {
|
||||
database.beginTransaction()
|
||||
try {
|
||||
database.execSQL(
|
||||
"ALTER TABLE `download` ADD COLUMN requiresGMS INTEGER NOT NULL DEFAULT 0"
|
||||
)
|
||||
database.setTransactionSuccessful()
|
||||
} catch (exception: Exception) {
|
||||
Log.e(TAG, "Failed while migrating from database version 5 to 6", exception)
|
||||
} finally {
|
||||
database.endTransaction()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.aurora.store.data.room.MigrationHelper.MIGRATION_1_2
|
||||
import com.aurora.store.data.room.MigrationHelper.MIGRATION_2_3
|
||||
import com.aurora.store.data.room.MigrationHelper.MIGRATION_3_4
|
||||
import com.aurora.store.data.room.MigrationHelper.MIGRATION_4_5
|
||||
import com.aurora.store.data.room.MigrationHelper.MIGRATION_5_6
|
||||
import com.aurora.store.data.room.download.DownloadConverter
|
||||
import com.aurora.store.data.room.download.DownloadDao
|
||||
import com.aurora.store.data.room.favourite.FavouriteDao
|
||||
@@ -30,7 +31,7 @@ object RoomModule {
|
||||
downloadConverter: DownloadConverter
|
||||
): AuroraDatabase {
|
||||
return Room.databaseBuilder(context, AuroraDatabase::class.java, DATABASE)
|
||||
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5)
|
||||
.addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6)
|
||||
.addTypeConverter(downloadConverter)
|
||||
.build()
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.os.Parcelable
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.aurora.extensions.requiresGMS
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.gplayapi.data.models.PlayFile
|
||||
import com.aurora.store.data.model.DownloadStatus
|
||||
@@ -35,7 +36,8 @@ data class Download(
|
||||
var fileList: List<PlayFile>,
|
||||
val sharedLibs: List<SharedLib>,
|
||||
val targetSdk: Int = 1,
|
||||
val downloadedAt: Long = 0
|
||||
val downloadedAt: Long = 0,
|
||||
val requiresGMS: Boolean = false
|
||||
) : Parcelable {
|
||||
val isFinished get() = status in DownloadStatus.finished
|
||||
val isRunning get() = status in DownloadStatus.running
|
||||
@@ -61,7 +63,8 @@ data class Download(
|
||||
app.fileList.filterNot { it.url.isBlank() },
|
||||
app.dependencies.dependentLibraries.map { SharedLib.fromApp(it) },
|
||||
app.targetSdk,
|
||||
Date().time
|
||||
Date().time,
|
||||
app.requiresGMS()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,9 @@ import androidx.work.ForegroundInfo
|
||||
import androidx.work.WorkInfo.Companion.STOP_REASON_CANCELLED_BY_APP
|
||||
import androidx.work.WorkInfo.Companion.STOP_REASON_USER
|
||||
import androidx.work.WorkerParameters
|
||||
import com.aurora.Constants.FLAVOUR_HUAWEI
|
||||
import com.aurora.extensions.copyTo
|
||||
import com.aurora.extensions.isHuawei
|
||||
import com.aurora.extensions.isPAndAbove
|
||||
import com.aurora.extensions.isQAndAbove
|
||||
import com.aurora.extensions.isSAndAbove
|
||||
@@ -28,6 +30,7 @@ import com.aurora.gplayapi.data.models.PlayFile
|
||||
import com.aurora.gplayapi.helpers.PurchaseHelper
|
||||
import com.aurora.gplayapi.network.IHttpClient
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.BuildConfig
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.data.helper.DownloadHelper
|
||||
@@ -40,7 +43,9 @@ import com.aurora.store.data.providers.AuthProvider
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.data.room.download.DownloadDao
|
||||
import com.aurora.store.util.CertUtil
|
||||
import com.aurora.store.util.FlavouredUtil
|
||||
import com.aurora.store.util.NotificationUtil
|
||||
import com.aurora.store.util.PackageUtil
|
||||
import com.aurora.store.util.PathUtil
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
@@ -88,8 +93,11 @@ class DownloadWorker @AssistedInject constructor(
|
||||
inner class NoNetworkException : Exception(context.getString(R.string.title_no_network))
|
||||
inner class NothingToDownloadException : Exception(context.getString(R.string.purchase_no_file))
|
||||
inner class DownloadFailedException : Exception(context.getString(R.string.download_failed))
|
||||
inner class DownloadCancelledException : Exception(context.getString(R.string.download_canceled))
|
||||
inner class VerificationFailedException : Exception(context.getString(R.string.verification_failed))
|
||||
inner class DownloadCancelledException :
|
||||
Exception(context.getString(R.string.download_canceled))
|
||||
|
||||
inner class VerificationFailedException :
|
||||
Exception(context.getString(R.string.verification_failed))
|
||||
|
||||
override suspend fun doWork(): Result {
|
||||
super.doWork()
|
||||
@@ -198,7 +206,10 @@ class DownloadWorker @AssistedInject constructor(
|
||||
private suspend fun onSuccess(): Result {
|
||||
return withContext(NonCancellable) {
|
||||
return@withContext try {
|
||||
appInstaller.getPreferredInstaller().install(download)
|
||||
if (BuildConfig.FLAVOR == FLAVOUR_HUAWEI && download.requiresGMS && PackageUtil.hasMicroGCompanion(context))
|
||||
appInstaller.getMicroGInstaller().install(download)
|
||||
else
|
||||
appInstaller.getPreferredInstaller().install(download)
|
||||
Result.success()
|
||||
} catch (exception: Exception) {
|
||||
Log.e(TAG, "Failed to install ${download.packageName}", exception)
|
||||
@@ -220,7 +231,7 @@ class DownloadWorker @AssistedInject constructor(
|
||||
notifyStatus(DownloadStatus.CANCELLED)
|
||||
}
|
||||
|
||||
else -> {
|
||||
else -> {
|
||||
notifyStatus(status = DownloadStatus.FAILED, exception = exception)
|
||||
AuroraApp.events.send(
|
||||
InstallerEvent.Failed(
|
||||
@@ -410,7 +421,7 @@ class DownloadWorker @AssistedInject constructor(
|
||||
downloadDao.updateProgress(download.packageName, 100, 0, 0)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
val notification = NotificationUtil.getDownloadNotification(
|
||||
|
||||
@@ -11,6 +11,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.aurora.Constants.FLAVOUR_HUAWEI
|
||||
import com.aurora.Constants.PACKAGE_NAME_GMS
|
||||
import com.aurora.Constants.PACKAGE_NAME_PLAY_STORE
|
||||
import com.aurora.extensions.areNotificationsEnabled
|
||||
@@ -82,7 +83,7 @@ class OnboardingViewModel @Inject constructor(
|
||||
Log.i(TAG, "Finishing onboarding with defaults")
|
||||
context.saveDefaultPreferences()
|
||||
|
||||
if (BuildConfig.FLAVOR == "huawei") {
|
||||
if (BuildConfig.FLAVOR == FLAVOUR_HUAWEI) {
|
||||
blacklistProvider.blacklist(PACKAGE_NAME_GMS)
|
||||
blacklistProvider.blacklist(PACKAGE_NAME_PLAY_STORE)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user