commit 2917f1b6e50b30eba4d58ffabef7faa26e131157
parent d4d0362b0e85cb4cb4d9c5f0749b923e53e29d1e
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Wed, 4 Oct 2023 22:42:13 +0200
fix(setup_activity): permission screen crash
Diffstat:
3 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/SetupActivity.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/SetupActivity.kt
@@ -141,6 +141,10 @@ class SetupActivity : ComponentActivity() {
) {
requiredScreens.forEach { screen ->
screen.allowNext = { canGoNext = it }
+ screen.goNext = {
+ canGoNext = true
+ nextScreen()
+ }
composable(screen.route) {
BackHandler(true) {}
Column(
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/SetupScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/SetupScreen.kt
@@ -12,6 +12,7 @@ import me.rhunk.snapenhance.RemoteSideContext
abstract class SetupScreen {
lateinit var context: RemoteSideContext
lateinit var allowNext: (Boolean) -> Unit
+ lateinit var goNext: () -> Unit
lateinit var route: String
@Composable
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/PermissionsScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/PermissionsScreen.kt
@@ -18,6 +18,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.OutlinedCard
import androidx.compose.material3.Text
import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
@@ -56,66 +57,82 @@ class PermissionsScreen : SetupScreen() {
var isBatteryOptimisationIgnored by remember { mutableStateOf(false) }
val coroutineScope = rememberCoroutineScope()
- LaunchedEffect(Unit) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- notificationPermissionGranted = context.androidContext.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
- }
- val powerManager = context.androidContext.getSystemService(Context.POWER_SERVICE) as PowerManager
- isBatteryOptimisationIgnored = powerManager.isIgnoringBatteryOptimizations(context.androidContext.packageName)
- }
-
if (isBatteryOptimisationIgnored && notificationPermissionGranted) {
allowNext(true)
} else {
allowNext(false)
}
+ LaunchedEffect(Unit) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ notificationPermissionGranted =
+ context.androidContext.checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
+ }
+ val powerManager =
+ context.androidContext.getSystemService(Context.POWER_SERVICE) as PowerManager
+ isBatteryOptimisationIgnored =
+ powerManager.isIgnoringBatteryOptimizations(context.androidContext.packageName)
+ if (isBatteryOptimisationIgnored && notificationPermissionGranted) {
+ goNext()
+ }
+ }
+
DialogText(text = context.translation["setup.permissions.dialog"])
OutlinedCard(
modifier = Modifier
- .padding(16.dp)
.fillMaxWidth(),
) {
Column(
+ verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier
- .padding(5.dp)
+ .padding(all = 16.dp),
) {
Row(
- horizontalArrangement = Arrangement.Absolute.SpaceAround
+ verticalAlignment = Alignment.CenterVertically,
) {
- DialogText(text = context.translation["setup.permissions.dialog"], modifier = Modifier.weight(1f))
+ DialogText(
+ text = context.translation["setup.permissions.notification_access"],
+ modifier = Modifier.weight(1f)
+ )
if (notificationPermissionGranted) {
GrantedIcon()
- return@Row
- }
-
- RequestButton {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- activityLauncherHelper.requestPermission(Manifest.permission.POST_NOTIFICATIONS) { resultCode, _ ->
- coroutineScope.launch {
- notificationPermissionGranted = resultCode == ComponentActivity.RESULT_OK
+ } else {
+ RequestButton {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ activityLauncherHelper.requestPermission(Manifest.permission.POST_NOTIFICATIONS) { resultCode, _ ->
+ coroutineScope.launch {
+ notificationPermissionGranted =
+ resultCode == ComponentActivity.RESULT_OK
+ }
}
}
}
}
}
- Row {
- DialogText(text = context.translation["setup.permissions.battery_optimization"], modifier = Modifier.weight(1f))
+
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ DialogText(
+ text = context.translation["setup.permissions.battery_optimization"],
+ modifier = Modifier.weight(1f)
+ )
if (isBatteryOptimisationIgnored) {
GrantedIcon()
- return@Row
- }
- RequestButton {
- activityLauncherHelper.launch(Intent().apply {
- action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
- data = Uri.parse("package:${context.androidContext.packageName}")
- }) { resultCode, _ ->
- coroutineScope.launch {
- isBatteryOptimisationIgnored = resultCode == 0
+ } else {
+ RequestButton {
+ activityLauncherHelper.launch(Intent().apply {
+ action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
+ data = Uri.parse("package:${context.androidContext.packageName}")
+ }) { resultCode, _ ->
+ coroutineScope.launch {
+ isBatteryOptimisationIgnored = resultCode == 0
+ }
}
}
}
+
}
}
}