From be4066bbf6ad79dba823a6863c14ece5e5fee7da Mon Sep 17 00:00:00 2001 From: Ax333l Date: Fri, 20 Dec 2024 21:16:08 +0100 Subject: [PATCH] actually fix the bug --- .../manager/ui/screen/DashboardScreen.kt | 50 +++++++++++++++++-- .../ui/viewmodel/DashboardViewModel.kt | 10 ++-- .../util/RequestInstallAppsContract.kt | 5 +- app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt index 6d316899..55fc771b 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.net.Uri import android.provider.Settings import androidx.activity.compose.BackHandler +import androidx.activity.compose.rememberLauncherForActivityResult import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.pager.HorizontalPager @@ -27,6 +28,7 @@ import app.revanced.manager.R import app.revanced.manager.data.room.apps.installed.InstalledApp import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault import app.revanced.manager.patcher.aapt.Aapt +import app.revanced.manager.ui.component.AlertDialogExtended import app.revanced.manager.ui.component.AppTopBar import app.revanced.manager.ui.component.AutoUpdatesDialog import app.revanced.manager.ui.component.AvailableUpdateDialog @@ -36,6 +38,7 @@ import app.revanced.manager.ui.component.haptics.HapticFloatingActionButton import app.revanced.manager.ui.component.haptics.HapticTab import app.revanced.manager.ui.component.bundle.ImportPatchBundleDialog import app.revanced.manager.ui.viewmodel.DashboardViewModel +import app.revanced.manager.util.RequestInstallAppsContract import app.revanced.manager.util.toast import kotlinx.coroutines.launch import org.koin.androidx.compose.koinViewModel @@ -93,20 +96,36 @@ fun DashboardScreen( ) } - var showDialog by rememberSaveable { mutableStateOf(vm.prefs.showManagerUpdateDialogOnLaunch.getBlocking()) } + var showUpdateDialog by rememberSaveable { mutableStateOf(vm.prefs.showManagerUpdateDialogOnLaunch.getBlocking()) } val availableUpdate by remember { - derivedStateOf { vm.updatedManagerVersion.takeIf { showDialog } } + derivedStateOf { vm.updatedManagerVersion.takeIf { showUpdateDialog } } } availableUpdate?.let { version -> AvailableUpdateDialog( - onDismiss = { showDialog = false }, + onDismiss = { showUpdateDialog = false }, setShowManagerUpdateDialogOnLaunch = vm::setShowManagerUpdateDialogOnLaunch, onConfirm = onUpdateClick, newVersion = version ) } + val context = LocalContext.current + var showAndroid11Dialog by rememberSaveable { mutableStateOf(false) } + val installAppsPermissionLauncher = + rememberLauncherForActivityResult(RequestInstallAppsContract) { granted -> + showAndroid11Dialog = false + if (granted) onAppSelectorClick() + } + if (showAndroid11Dialog) Android11Dialog( + onDismissRequest = { + showAndroid11Dialog = false + }, + onContinue = { + installAppsPermissionLauncher.launch(context.packageName) + } + ) + Scaffold( topBar = { if (bundlesSelectable) { @@ -188,6 +207,10 @@ fun DashboardScreen( } return@HapticFloatingActionButton } + if (vm.android11BugActive) { + showAndroid11Dialog = true + return@HapticFloatingActionButton + } onAppSelectorClick() } @@ -316,4 +339,25 @@ fun Notifications( } } } +} + +@Composable +fun Android11Dialog(onDismissRequest: () -> Unit, onContinue: () -> Unit) { + AlertDialogExtended( + onDismissRequest = onDismissRequest, + confirmButton = { + TextButton(onClick = onContinue) { + Text(stringResource(R.string.continue_)) + } + }, + title = { + Text(stringResource(R.string.android_11_bug_dialog_title)) + }, + icon = { + Icon(Icons.Outlined.BugReport, null) + }, + text = { + Text(stringResource(R.string.android_11_bug_dialog_description)) + } + ) } \ No newline at end of file diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt index f48c9172..303bd06a 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt @@ -46,11 +46,6 @@ class DashboardViewModel( val newDownloaderPluginsAvailable = downloaderPluginRepository.newPluginPackageNames.map { it.isNotEmpty() } - var updatedManagerVersion: String? by mutableStateOf(null) - private set - var showBatteryOptimizationsWarning by mutableStateOf(false) - private set - /** * Android 11 kills the app process after granting the "install apps" permission, which is a problem for the patcher screen. * This value is true when the conditions that trigger the bug are met. @@ -59,6 +54,11 @@ class DashboardViewModel( */ val android11BugActive get() = Build.VERSION.SDK_INT == Build.VERSION_CODES.R && !pm.canInstallPackages() + var updatedManagerVersion: String? by mutableStateOf(null) + private set + var showBatteryOptimizationsWarning by mutableStateOf(false) + private set + init { viewModelScope.launch { checkForManagerUpdates() diff --git a/app/src/main/java/app/revanced/manager/util/RequestInstallAppsContract.kt b/app/src/main/java/app/revanced/manager/util/RequestInstallAppsContract.kt index bb435a82..e745f341 100644 --- a/app/src/main/java/app/revanced/manager/util/RequestInstallAppsContract.kt +++ b/app/src/main/java/app/revanced/manager/util/RequestInstallAppsContract.kt @@ -3,15 +3,12 @@ package app.revanced.manager.util import android.content.Context import android.content.Intent import android.net.Uri -import android.os.Build -import android.os.Environment import android.provider.Settings import androidx.activity.result.contract.ActivityResultContract -import androidx.annotation.RequiresApi import org.koin.core.component.KoinComponent import org.koin.core.component.inject -class RequestInstallAppsContract : ActivityResultContract(), KoinComponent { +object RequestInstallAppsContract : ActivityResultContract(), KoinComponent { private val pm: PM by inject() override fun createIntent(context: Context, input: String) = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.fromParts("package", input, null)) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b9ba4305..f88f1b1c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,6 +35,9 @@ Default Unnamed + Android 11 bug + The app installation permission must be granted ahead of time to avoid a bug in the Android 11 system that will negatively affect the user experience. + Any available version Select source Auto