mirror of
https://github.com/revanced/revanced-manager.git
synced 2025-04-30 05:54:26 +02:00
actually fix the bug
This commit is contained in:
parent
536a24169c
commit
be4066bbf6
@ -5,6 +5,7 @@ import android.content.Intent
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.pager.HorizontalPager
|
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.data.room.apps.installed.InstalledApp
|
||||||
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault
|
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault
|
||||||
import app.revanced.manager.patcher.aapt.Aapt
|
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.AppTopBar
|
||||||
import app.revanced.manager.ui.component.AutoUpdatesDialog
|
import app.revanced.manager.ui.component.AutoUpdatesDialog
|
||||||
import app.revanced.manager.ui.component.AvailableUpdateDialog
|
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.haptics.HapticTab
|
||||||
import app.revanced.manager.ui.component.bundle.ImportPatchBundleDialog
|
import app.revanced.manager.ui.component.bundle.ImportPatchBundleDialog
|
||||||
import app.revanced.manager.ui.viewmodel.DashboardViewModel
|
import app.revanced.manager.ui.viewmodel.DashboardViewModel
|
||||||
|
import app.revanced.manager.util.RequestInstallAppsContract
|
||||||
import app.revanced.manager.util.toast
|
import app.revanced.manager.util.toast
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.androidx.compose.koinViewModel
|
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 {
|
val availableUpdate by remember {
|
||||||
derivedStateOf { vm.updatedManagerVersion.takeIf { showDialog } }
|
derivedStateOf { vm.updatedManagerVersion.takeIf { showUpdateDialog } }
|
||||||
}
|
}
|
||||||
|
|
||||||
availableUpdate?.let { version ->
|
availableUpdate?.let { version ->
|
||||||
AvailableUpdateDialog(
|
AvailableUpdateDialog(
|
||||||
onDismiss = { showDialog = false },
|
onDismiss = { showUpdateDialog = false },
|
||||||
setShowManagerUpdateDialogOnLaunch = vm::setShowManagerUpdateDialogOnLaunch,
|
setShowManagerUpdateDialogOnLaunch = vm::setShowManagerUpdateDialogOnLaunch,
|
||||||
onConfirm = onUpdateClick,
|
onConfirm = onUpdateClick,
|
||||||
newVersion = version
|
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(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
if (bundlesSelectable) {
|
if (bundlesSelectable) {
|
||||||
@ -188,6 +207,10 @@ fun DashboardScreen(
|
|||||||
}
|
}
|
||||||
return@HapticFloatingActionButton
|
return@HapticFloatingActionButton
|
||||||
}
|
}
|
||||||
|
if (vm.android11BugActive) {
|
||||||
|
showAndroid11Dialog = true
|
||||||
|
return@HapticFloatingActionButton
|
||||||
|
}
|
||||||
|
|
||||||
onAppSelectorClick()
|
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))
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
@ -46,11 +46,6 @@ class DashboardViewModel(
|
|||||||
|
|
||||||
val newDownloaderPluginsAvailable = downloaderPluginRepository.newPluginPackageNames.map { it.isNotEmpty() }
|
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.
|
* 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.
|
* 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()
|
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 {
|
init {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
checkForManagerUpdates()
|
checkForManagerUpdates()
|
||||||
|
@ -3,15 +3,12 @@ package app.revanced.manager.util
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import android.os.Environment
|
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import androidx.activity.result.contract.ActivityResultContract
|
import androidx.activity.result.contract.ActivityResultContract
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import org.koin.core.component.KoinComponent
|
import org.koin.core.component.KoinComponent
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
|
|
||||||
class RequestInstallAppsContract : ActivityResultContract<String, Boolean>(), KoinComponent {
|
object RequestInstallAppsContract : ActivityResultContract<String, Boolean>(), KoinComponent {
|
||||||
private val pm: PM by inject()
|
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))
|
override fun createIntent(context: Context, input: String) = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.fromParts("package", input, null))
|
||||||
|
|
||||||
|
@ -35,6 +35,9 @@
|
|||||||
<string name="bundle_name_default">Default</string>
|
<string name="bundle_name_default">Default</string>
|
||||||
<string name="bundle_name_fallback">Unnamed</string>
|
<string name="bundle_name_fallback">Unnamed</string>
|
||||||
|
|
||||||
|
<string name="android_11_bug_dialog_title">Android 11 bug</string>
|
||||||
|
<string name="android_11_bug_dialog_description">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.</string>
|
||||||
|
|
||||||
<string name="selected_app_meta_any_version">Any available version</string>
|
<string name="selected_app_meta_any_version">Any available version</string>
|
||||||
<string name="app_source_dialog_title">Select source</string>
|
<string name="app_source_dialog_title">Select source</string>
|
||||||
<string name="app_source_dialog_option_auto">Auto</string>
|
<string name="app_source_dialog_option_auto">Auto</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user