diff --git a/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/SettingsScreen.kt b/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/SettingsScreen.kt
index 36b18ff..22e8671 100644
--- a/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/SettingsScreen.kt
+++ b/app/src/main/java/io/nekohasekai/sfa/compose/screen/settings/SettingsScreen.kt
@@ -1,5 +1,7 @@
package io.nekohasekai.sfa.compose.screen.settings
+import android.os.Build
+import android.os.PowerManager
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
@@ -31,8 +33,12 @@ import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
@@ -53,6 +59,15 @@ fun SettingsScreen(navController: NavController) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
val hasUpdate by UpdateState.hasUpdate
+ var isBatteryOptimizationIgnored by remember { mutableStateOf(true) }
+
+ LaunchedEffect(Unit) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ val pm = context.getSystemService(PowerManager::class.java)
+ isBatteryOptimizationIgnored =
+ pm?.isIgnoringBatteryOptimizations(context.packageName) == true
+ }
+ }
Column(
modifier =
@@ -140,6 +155,11 @@ fun SettingsScreen(navController: NavController) {
tint = MaterialTheme.colorScheme.primary,
)
},
+ trailingContent = {
+ if (!isBatteryOptimizationIgnored) {
+ Badge(containerColor = MaterialTheme.colorScheme.primary)
+ }
+ },
modifier = Modifier.clickable { navController.navigate("settings/service") },
colors =
ListItemDefaults.colors(
@@ -299,17 +319,16 @@ fun SettingsScreen(navController: NavController) {
}
}
- // Debug
- Spacer(modifier = Modifier.height(16.dp))
-
- Text(
- text = stringResource(R.string.title_debug),
- style = MaterialTheme.typography.labelLarge,
- color = MaterialTheme.colorScheme.primary,
- modifier = Modifier.padding(horizontal = 32.dp, vertical = 8.dp),
- )
-
if (BuildConfig.DEBUG) {
+ // Debug
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Text(
+ text = stringResource(R.string.title_debug),
+ style = MaterialTheme.typography.labelLarge,
+ color = MaterialTheme.colorScheme.primary,
+ modifier = Modifier.padding(horizontal = 32.dp, vertical = 8.dp),
+ )
Card(
modifier =
Modifier
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 59d1123..1da920a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -143,7 +143,7 @@
Background permission
Apply for the necessary permissions in order for the VPN to function properly.\n\nIf you are using a device made by a Chinese company, the card may not disappear after the permission is granted.
Read More
- Ignore Battery Optimizations
+ Ignore
Import remote profile
Are you sure to import remote profile %1$s? You will connect to %2$s to download the configuration.
Profile Override