fix: Granted perms didn't update the UI

This commit is contained in:
Ahmad Ansori Palembani 2024-06-12 07:12:57 +07:00
parent 66b61f8c41
commit bde3f25fe9
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6

View file

@ -24,16 +24,15 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.core.content.getSystemService import androidx.core.content.getSystemService
import androidx.lifecycle.Lifecycle import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.LocalLifecycleOwner
import dev.yokai.presentation.component.Gap import dev.yokai.presentation.component.Gap
import dev.yokai.presentation.theme.Size import dev.yokai.presentation.theme.Size
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
@ -41,6 +40,8 @@ import eu.kanade.tachiyomi.R
internal class PermissionStep : OnboardingStep { internal class PermissionStep : OnboardingStep {
private var installGranted by mutableStateOf(false) private var installGranted by mutableStateOf(false)
private var notificationGranted by mutableStateOf(false)
private var batteryGranted by mutableStateOf(false)
override val isComplete: Boolean override val isComplete: Boolean
get() = installGranted get() = installGranted
@ -50,28 +51,9 @@ internal class PermissionStep : OnboardingStep {
val context = LocalContext.current val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current val lifecycleOwner = LocalLifecycleOwner.current
var notificationGranted by remember {
mutableStateOf(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED
} else {
true
}
)
}
var batteryGranted by remember {
mutableStateOf(
context
.getSystemService<PowerManager>()!!
.isIgnoringBatteryOptimizations(context.packageName)
)
}
DisposableEffect(lifecycleOwner.lifecycle) { DisposableEffect(lifecycleOwner.lifecycle) {
val observer = LifecycleEventObserver { _, event -> val observer = object : DefaultLifecycleObserver {
if (event == Lifecycle.Event.ON_RESUME) { override fun onResume(owner: LifecycleOwner) {
installGranted = installGranted =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.packageManager.canRequestPackageInstalls() context.packageManager.canRequestPackageInstalls()
@ -82,15 +64,20 @@ internal class PermissionStep : OnboardingStep {
Settings.Secure.INSTALL_NON_MARKET_APPS Settings.Secure.INSTALL_NON_MARKET_APPS
) != 0 ) != 0
} }
batteryGranted = notificationGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context context.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) ==
.getSystemService<PowerManager>()!! PackageManager.PERMISSION_GRANTED
} else {
true
}
batteryGranted = context.getSystemService<PowerManager>()!!
.isIgnoringBatteryOptimizations(context.packageName) .isIgnoringBatteryOptimizations(context.packageName)
} }
} }
lifecycleOwner.lifecycle.addObserver(observer) lifecycleOwner.lifecycle.addObserver(observer)
onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
} }
Column( Column(
@ -123,7 +110,7 @@ internal class PermissionStep : OnboardingStep {
val permissionRequester = val permissionRequester =
rememberLauncherForActivityResult( rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission(), contract = ActivityResultContracts.RequestPermission(),
onResult = { bool -> notificationGranted = bool }, onResult = { /* No-op, handled on resume */ },
) )
PermissionItem( PermissionItem(
title = stringResource(R.string.onboarding_permission_notifications), title = stringResource(R.string.onboarding_permission_notifications),