|
|
|
@@ -16,23 +16,18 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|
|
|
|
import androidx.compose.foundation.layout.height
|
|
|
|
|
import androidx.compose.foundation.layout.padding
|
|
|
|
|
import androidx.compose.foundation.rememberScrollState
|
|
|
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
|
|
|
import androidx.compose.foundation.verticalScroll
|
|
|
|
|
import androidx.compose.material.icons.Icons
|
|
|
|
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
|
|
|
|
import androidx.compose.material.icons.outlined.BatteryChargingFull
|
|
|
|
|
import androidx.compose.material.icons.outlined.Memory
|
|
|
|
|
import androidx.compose.material3.Button
|
|
|
|
|
import androidx.compose.material3.Card
|
|
|
|
|
import androidx.compose.material3.CardDefaults
|
|
|
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
|
|
|
import androidx.compose.material3.Icon
|
|
|
|
|
import androidx.compose.material3.IconButton
|
|
|
|
|
import androidx.compose.material3.ListItem
|
|
|
|
|
import androidx.compose.material3.ListItemDefaults
|
|
|
|
|
import androidx.compose.material3.MaterialTheme
|
|
|
|
|
import androidx.compose.material3.OutlinedButton
|
|
|
|
|
import androidx.compose.material3.Switch
|
|
|
|
|
import androidx.compose.material3.Text
|
|
|
|
|
import androidx.compose.material3.TopAppBar
|
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
@@ -40,12 +35,9 @@ 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.Alignment
|
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
|
import androidx.compose.ui.draw.clip
|
|
|
|
|
import androidx.compose.ui.graphics.Color
|
|
|
|
|
import androidx.compose.ui.platform.LocalContext
|
|
|
|
|
import androidx.compose.ui.res.stringResource
|
|
|
|
|
import androidx.compose.ui.text.font.FontWeight
|
|
|
|
@@ -53,13 +45,8 @@ import androidx.compose.ui.unit.dp
|
|
|
|
|
import androidx.navigation.NavController
|
|
|
|
|
import io.nekohasekai.sfa.R
|
|
|
|
|
import io.nekohasekai.sfa.bg.ServiceConnection
|
|
|
|
|
import io.nekohasekai.sfa.compose.base.GlobalEventBus
|
|
|
|
|
import io.nekohasekai.sfa.compose.base.UiEvent
|
|
|
|
|
import io.nekohasekai.sfa.compose.topbar.OverrideTopBar
|
|
|
|
|
import io.nekohasekai.sfa.database.Settings
|
|
|
|
|
import io.nekohasekai.sfa.ktx.launchCustomTab
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
|
|
|
|
@Composable
|
|
|
|
@@ -79,11 +66,8 @@ fun ServiceSettingsScreen(navController: NavController, serviceConnection: Servi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val context = LocalContext.current
|
|
|
|
|
val scope = rememberCoroutineScope()
|
|
|
|
|
// Check battery optimization status
|
|
|
|
|
var isBatteryOptimizationIgnored by remember { mutableStateOf(false) }
|
|
|
|
|
var ignoreMemoryLimit by remember { mutableStateOf(Settings.disableMemoryLimit) }
|
|
|
|
|
|
|
|
|
|
// Activity result launcher for battery optimization permission
|
|
|
|
|
val requestBatteryOptimizationLauncher =
|
|
|
|
|
rememberLauncherForActivityResult(
|
|
|
|
@@ -187,56 +171,6 @@ fun ServiceSettingsScreen(navController: NavController, serviceConnection: Servi
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Options Section
|
|
|
|
|
Card(
|
|
|
|
|
modifier =
|
|
|
|
|
Modifier
|
|
|
|
|
.fillMaxWidth()
|
|
|
|
|
.padding(horizontal = 16.dp),
|
|
|
|
|
colors =
|
|
|
|
|
CardDefaults.cardColors(
|
|
|
|
|
containerColor = MaterialTheme.colorScheme.surfaceContainer,
|
|
|
|
|
),
|
|
|
|
|
) {
|
|
|
|
|
ListItem(
|
|
|
|
|
headlineContent = {
|
|
|
|
|
Text(
|
|
|
|
|
stringResource(R.string.ignore_memory_limit),
|
|
|
|
|
style = MaterialTheme.typography.bodyLarge,
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
supportingContent = {
|
|
|
|
|
Text(
|
|
|
|
|
stringResource(R.string.ignore_memory_limit_description),
|
|
|
|
|
style = MaterialTheme.typography.bodyMedium,
|
|
|
|
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
modifier = Modifier.padding(top = 4.dp),
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
leadingContent = {
|
|
|
|
|
Icon(
|
|
|
|
|
imageVector = Icons.Outlined.Memory,
|
|
|
|
|
contentDescription = null,
|
|
|
|
|
tint = MaterialTheme.colorScheme.primary,
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
trailingContent = {
|
|
|
|
|
Switch(checked = ignoreMemoryLimit, onCheckedChange = { checked ->
|
|
|
|
|
ignoreMemoryLimit = checked
|
|
|
|
|
scope.launch(Dispatchers.IO) {
|
|
|
|
|
Settings.disableMemoryLimit = checked
|
|
|
|
|
GlobalEventBus.tryEmit(UiEvent.RestartToTakeEffect)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
modifier = Modifier.clip(RoundedCornerShape(12.dp)),
|
|
|
|
|
colors =
|
|
|
|
|
ListItemDefaults.colors(
|
|
|
|
|
containerColor = Color.Transparent,
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|