From a38bffded5c3a06a9457892dbd89217e23def6b5 Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Sat, 14 Feb 2026 12:19:47 +0800 Subject: [PATCH] fix: crash when open System -> Options (#243) Upgrade AGP --- app/build.gradle.kts | 1 - .../java/com/bintianqi/owndroid/dpm/System.kt | 67 +++++++++++++------ build.gradle.kts | 1 - gradle/libs.versions.toml | 3 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 47 insertions(+), 27 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fa9225d..77dcbdb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) alias(libs.plugins.compose) alias(libs.plugins.serialization) } diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt index ebc2fbd..3f4a433 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt @@ -357,8 +357,10 @@ fun SystemOptionsScreen(vm: MyViewModel, onNavigateUp: () -> Unit) { val secureSettingsStatus = remember { mutableStateMapOf() } LaunchedEffect(Unit) { vm.getSystemOptionsStatus() - globalSettingsStatus.putAll(vm.getGlobalSettings()) - secureSettingsStatus.putAll(vm.getSecureSettings()) + if (privilege.device) { + globalSettingsStatus.putAll(vm.getGlobalSettings()) + secureSettingsStatus.putAll(vm.getSecureSettings()) + } } MyScaffold(R.string.options, onNavigateUp, 0.dp) { SwitchItem(R.string.disable_cam, status.cameraDisabled, vm::setCameraDisabled, @@ -403,21 +405,25 @@ fun SystemOptionsScreen(vm: MyViewModel, onNavigateUp: () -> Unit) { } SwitchItem(R.string.stay_on_while_plugged_in, status.stayOnWhilePluggedIn, vm::setStayOnWhilePluggedIn, R.drawable.mobile_phone_fill0) - globalSettings.forEach { - SwitchItem(it.name, globalSettingsStatus[it.setting] ?: false, { state -> - vm.setGlobalSetting(it.setting, state) - globalSettingsStatus[it.setting] = state - }, it.icon) - } - secureSettings.forEach { - SwitchItem(it.name, secureSettingsStatus[it.setting] ?: false, { state -> - vm.setSecureSetting(it.setting, state) - secureSettingsStatus[it.setting] = state - }, it.icon) + if (privilege.device) { + globalSettings.forEach { + SwitchItem(it.name, globalSettingsStatus[it.setting] ?: false, { state -> + vm.setGlobalSetting(it.setting, state) + globalSettingsStatus[it.setting] = state + }, it.icon) + } + secureSettings.forEach { + SwitchItem(it.name, secureSettingsStatus[it.setting] ?: false, { state -> + vm.setSecureSetting(it.setting, state) + secureSettingsStatus[it.setting] = state + }, it.icon) + } } if (VERSION.SDK_INT < 34) { Row( - Modifier.fillMaxWidth().padding(horizontal = HorizontalPadding), + Modifier + .fillMaxWidth() + .padding(horizontal = HorizontalPadding), verticalAlignment = Alignment.CenterVertically ) { Text(stringResource(R.string.status_bar), style = typography.titleMedium) @@ -597,7 +603,10 @@ fun DefaultInputMethodScreen( MyLazyScaffold(R.string.default_input_method, navigateUp) { items(imList) { (id, info) -> Row( - Modifier.fillMaxWidth().clickable { selectedIm = id }.padding(8.dp), + Modifier + .fillMaxWidth() + .clickable { selectedIm = id } + .padding(8.dp), verticalAlignment = Alignment.CenterVertically ) { RadioButton(selectedIm == id, { selectedIm = id }) @@ -613,7 +622,9 @@ fun DefaultInputMethodScreen( Button({ setIm(selectedIm) context.showOperationResultToast(true) - }, Modifier.fillMaxWidth().padding(horizontal = HorizontalPadding)) { + }, Modifier + .fillMaxWidth() + .padding(horizontal = HorizontalPadding)) { Text(stringResource(R.string.apply)) } Spacer(Modifier.height(BottomPadding)) @@ -678,7 +689,9 @@ fun ChangeTimeScreen(setTime: (Long, Boolean) -> Boolean, onNavigateUp: () -> Un value = datePickerState.selectedDateMillis?.let { formatDate(it) } ?: "", onValueChange = {}, readOnly = true, label = { Text(stringResource(R.string.date)) }, - modifier = Modifier.fillMaxWidth().clickableTextField { picker = 1 } + modifier = Modifier + .fillMaxWidth() + .clickableTextField { picker = 1 } ) OutlinedTextField( value = timePickerState.hour.toString().padStart(2, '0') + ":" + @@ -1678,14 +1691,18 @@ fun SecurityLoggingScreen( val date = SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(Date()) exportLauncher.launch("security_logs_$date") }, - Modifier.fillMaxWidth().padding(horizontal = HorizontalPadding), + Modifier + .fillMaxWidth() + .padding(horizontal = HorizontalPadding), logsCount > 0 ) { Text(stringResource(R.string.export_logs)) } if (logsCount > 0) FilledTonalButton( { dialog = true }, - Modifier.fillMaxWidth().padding(HorizontalPadding, 4.dp) + Modifier + .fillMaxWidth() + .padding(HorizontalPadding, 4.dp) ) { Text(stringResource(R.string.delete_logs)) } @@ -1699,7 +1716,9 @@ fun SecurityLoggingScreen( context.showOperationResultToast(false) } }, - modifier = Modifier.fillMaxWidth().padding(HorizontalPadding, 15.dp) + modifier = Modifier + .fillMaxWidth() + .padding(HorizontalPadding, 15.dp) ) { Text(stringResource(R.string.pre_reboot_security_logs)) } @@ -1900,7 +1919,9 @@ fun WipeDataScreen( dialog = 1 }, colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError), - modifier = Modifier.fillMaxWidth().padding(HorizontalPadding, 5.dp) + modifier = Modifier + .fillMaxWidth() + .padding(HorizontalPadding, 5.dp) ) { Text("WipeData") } @@ -1912,7 +1933,9 @@ fun WipeDataScreen( dialog = 2 }, colors = ButtonDefaults.buttonColors(containerColor = colorScheme.error, contentColor = colorScheme.onError), - modifier = Modifier.fillMaxWidth().padding(HorizontalPadding, 5.dp) + modifier = Modifier + .fillMaxWidth() + .padding(HorizontalPadding, 5.dp) ) { Text("WipeDevice") } diff --git a/build.gradle.kts b/build.gradle.kts index 922f551..3756278 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false - alias(libs.plugins.kotlin.android) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f57ec20..6771f2e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.13.2" +agp = "9.0.1" kotlin = "2.3.10" navigation-compose = "2.9.7" @@ -40,6 +40,5 @@ serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization [plugins] android-application = { id = "com.android.application", version.ref = "agp" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version = "2.3.10" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 388b252..1930c9f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Fri Jan 12 20:22:20 CST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://downloads.gradle.org/distributions/gradle-9.0.0-bin.zip +distributionUrl=https\://downloads.gradle.org/distributions/gradle-9.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists