diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt index 91942bd0..0e07807d 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/MainActivity.kt @@ -26,6 +26,8 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue @@ -52,6 +54,9 @@ import com.sukisu.ultra.ui.screen.ModulePager import com.sukisu.ultra.ui.screen.SettingPager import com.sukisu.ultra.ui.screen.SuperUserPager import com.sukisu.ultra.ui.theme.KernelSUTheme +import com.sukisu.ultra.ui.theme.LocalWallpaperState +import com.sukisu.ultra.ui.theme.wallpaperContainerColor +import com.sukisu.ultra.ui.theme.wallpaperTransitionAlpha import com.sukisu.ultra.ui.util.install import top.yukonga.miuix.kmp.basic.Scaffold import top.yukonga.miuix.kmp.theme.MiuixTheme @@ -74,6 +79,14 @@ class MainActivity : ComponentActivity() { val prefs = context.getSharedPreferences("settings", MODE_PRIVATE) var colorMode by remember { mutableIntStateOf(prefs.getInt("color_mode", 0)) } var keyColorInt by remember { mutableIntStateOf(prefs.getInt("key_color", 0)) } + val wallpaperUriPref = prefs.getString("wallpaper_uri", null) + var wallpaperUri by remember { mutableStateOf(wallpaperUriPref) } + var wallpaperAlpha by remember { + mutableFloatStateOf(prefs.getFloat("wallpaper_alpha", 0f)) + } + var wallpaperScaleMode by remember { + mutableIntStateOf(prefs.getInt("wallpaper_scale_mode", 0)) + } val keyColor = remember(keyColorInt) { if (keyColorInt == 0) null else Color(keyColorInt) } val darkMode = when (colorMode) { @@ -98,18 +111,29 @@ class MainActivity : ComponentActivity() { when (key) { "color_mode" -> colorMode = prefs.getInt("color_mode", 0) "key_color" -> keyColorInt = prefs.getInt("key_color", 0) + "wallpaper_uri" -> wallpaperUri = prefs.getString("wallpaper_uri", null) + "wallpaper_alpha" -> wallpaperAlpha = prefs.getFloat("wallpaper_alpha", 0f) + "wallpaper_scale_mode" -> wallpaperScaleMode = prefs.getInt("wallpaper_scale_mode", 0) } } prefs.registerOnSharedPreferenceChangeListener(listener) onDispose { prefs.unregisterOnSharedPreferenceChangeListener(listener) } } - KernelSUTheme(colorMode = colorMode, keyColor = keyColor) { + KernelSUTheme( + colorMode = colorMode, + keyColor = keyColor, + wallpaperUri = wallpaperUri, + wallpaperAlpha = wallpaperAlpha, + wallpaperScaleMode = wallpaperScaleMode + ) { val navController = rememberNavController() val navigator = navController.rememberDestinationsNavigator() val initialIntent = remember { intent } - Scaffold { + Scaffold( + containerColor = wallpaperContainerColor() + ) { DestinationsNavHost( modifier = Modifier, navGraph = NavGraphs.root, @@ -166,9 +190,12 @@ fun MainScreen(navController: DestinationsNavigator) { val coroutineScope = rememberCoroutineScope() val pagerState = rememberPagerState(initialPage = 0, pageCount = { 4 }) val hazeState = remember { HazeState() } + val wallpaperState = LocalWallpaperState.current + val hazeBackgroundAlpha = wallpaperTransitionAlpha(wallpaperState.surfaceAlpha) + val hazeTintAlpha = wallpaperTransitionAlpha(0.8f * wallpaperState.surfaceAlpha) val hazeStyle = HazeStyle( - backgroundColor = MiuixTheme.colorScheme.background, - tint = HazeTint(MiuixTheme.colorScheme.background.copy(0.8f)) + backgroundColor = MiuixTheme.colorScheme.background.copy(alpha = hazeBackgroundAlpha), + tint = HazeTint(MiuixTheme.colorScheme.background.copy(alpha = hazeTintAlpha)) ) val handlePageChange: (Int) -> Unit = remember(pagerState, coroutineScope) { { page -> @@ -191,6 +218,7 @@ fun MainScreen(navController: DestinationsNavigator) { LocalHandlePageChange provides handlePageChange ) { Scaffold( + containerColor = wallpaperContainerColor(), bottomBar = { BottomBar(hazeState, hazeStyle) }, diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/DynamicManagerCard.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/DynamicManagerCard.kt index 7cc9b277..4ba5cea4 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/component/DynamicManagerCard.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/DynamicManagerCard.kt @@ -37,6 +37,7 @@ import top.yukonga.miuix.kmp.extra.SuperArrow import top.yukonga.miuix.kmp.extra.SuperDialog import top.yukonga.miuix.kmp.extra.SuperSwitch import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors @Composable fun DynamicManagerCard() { @@ -44,6 +45,7 @@ fun DynamicManagerCard() { modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val context = LocalContext.current val scope = rememberCoroutineScope() diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/kernelFlash/KernelFlash.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/kernelFlash/KernelFlash.kt index aaa94e02..0e6de993 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/kernelFlash/KernelFlash.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/kernelFlash/KernelFlash.kt @@ -31,6 +31,8 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.sukisu.ultra.R import com.sukisu.ultra.ui.component.KeyEventBlocker import com.sukisu.ultra.ui.util.reboot +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -206,6 +208,7 @@ fun KernelFlashScreen( } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( flashState = flashState, @@ -247,6 +250,7 @@ fun KernelFlashScreen( Column( modifier = Modifier .fillMaxSize() + .background(wallpaperContainerColor()) .padding(it) .scrollEndHaptic(), ) { @@ -291,7 +295,8 @@ private fun FlashProgressIndicator( Card( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp, vertical = 12.dp) + .padding(horizontal = 16.dp, vertical = 12.dp), + colors = wallpaperCardColors() ) { Column( modifier = Modifier diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/About.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/About.kt index 212c8586..6d8e444b 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/About.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/About.kt @@ -46,6 +46,8 @@ import dev.chrisbanes.haze.hazeEffect import dev.chrisbanes.haze.hazeSource import com.sukisu.ultra.BuildConfig import com.sukisu.ultra.R +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.basic.Card import top.yukonga.miuix.kmp.basic.Icon import top.yukonga.miuix.kmp.basic.IconButton @@ -82,6 +84,7 @@ fun AboutScreen(navigator: DestinationsNavigator) { val result = extractLinks(htmlString) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( modifier = Modifier.hazeEffect(hazeState) { @@ -154,7 +157,8 @@ fun AboutScreen(navigator: DestinationsNavigator) { } item { Card( - modifier = Modifier.padding(bottom = 12.dp) + modifier = Modifier.padding(bottom = 12.dp), + colors = wallpaperCardColors() ) { result.forEach { SuperArrow( diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/AppProfile.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/AppProfile.kt index f1e26d9a..e1dbdaaa 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/AppProfile.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/AppProfile.kt @@ -95,6 +95,8 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.Back import top.yukonga.miuix.kmp.icon.icons.useful.ImmersionMore import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -144,6 +146,7 @@ fun AppProfileScreen( } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( onBack = dropUnlessResumed { navigator.popBackStack() }, @@ -264,6 +267,7 @@ private fun AppProfileInner( .fillMaxWidth() .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), insideMargin = PaddingValues(horizontal = 16.dp, vertical = 14.dp) ) { Row( @@ -362,6 +366,7 @@ private fun AppProfileInner( .fillMaxWidth() .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), ) { SuperSwitch( leftAction = { @@ -449,6 +454,7 @@ private fun AppProfileInner( .fillMaxWidth() .padding(horizontal = 12.dp) .padding(bottom = if (rootMode != Mode.Default) 12.dp else 0.dp), + colors = wallpaperCardColors(), ) { AnimatedVisibility( visible = rootMode == Mode.Template, @@ -485,6 +491,7 @@ private fun AppProfileInner( .fillMaxWidth() .padding(horizontal = 12.dp) .padding(bottom = if (nonRootMode != Mode.Default) 12.dp else 0.dp), + colors = wallpaperCardColors(), ) { AnimatedVisibility( visible = nonRootMode == Mode.Custom, @@ -511,6 +518,7 @@ private fun AppProfileInner( .fillMaxWidth() .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), ) { Spacer(Modifier.height(3.dp)) affectedApps.forEach { app -> @@ -654,6 +662,7 @@ private fun ProfileBox( modifier = Modifier .fillMaxWidth() .padding(horizontal = 12.dp), + colors = wallpaperCardColors(), ) { SuperDropdown( title = stringResource(R.string.profile), diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ExecuteModuleAction.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ExecuteModuleAction.kt index 84eec3bf..248d165b 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ExecuteModuleAction.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ExecuteModuleAction.kt @@ -60,6 +60,7 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.Back import top.yukonga.miuix.kmp.icon.icons.useful.Save import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.scrollEndHaptic import java.io.File import java.text.SimpleDateFormat @@ -109,6 +110,7 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( onBack = dropUnlessResumed { diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Flash.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Flash.kt index a500ddad..3d4a7d25 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Flash.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Flash.kt @@ -58,6 +58,7 @@ import com.sukisu.ultra.R import com.sukisu.ultra.ui.component.KeyEventBlocker import com.sukisu.ultra.ui.util.FlashResult import com.sukisu.ultra.ui.util.LkmSelection +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import com.sukisu.ultra.ui.util.flashModule import com.sukisu.ultra.ui.util.installBoot import com.sukisu.ultra.ui.util.reboot @@ -171,6 +172,7 @@ fun FlashScreen( } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( flashing, diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt index 4aa683f7..b4acc6fc 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Home.kt @@ -93,6 +93,8 @@ import top.yukonga.miuix.kmp.icon.icons.useful.Save import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme import top.yukonga.miuix.kmp.theme.MiuixTheme.isDynamicColor +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.PressFeedbackType import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical @@ -118,6 +120,7 @@ fun HomePager( val themeMode = prefs.getInt("color_mode", 0) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( kernelVersion = kernelVersion, @@ -407,6 +410,7 @@ private fun StatusCard( modifier = Modifier .fillMaxWidth() .weight(1f), + colors = wallpaperCardColors(), insideMargin = PaddingValues(16.dp), onClick = { onClickSuperuser() }, showIndication = true, @@ -437,6 +441,7 @@ private fun StatusCard( modifier = Modifier .fillMaxWidth() .weight(1f), + colors = wallpaperCardColors(), insideMargin = PaddingValues(16.dp), onClick = { onclickModule() }, showIndication = true, @@ -471,6 +476,7 @@ private fun StatusCard( onClick = { if (kernelVersion.isGKI()) onClickInstall() }, + colors = wallpaperCardColors(), showIndication = true, pressFeedbackType = PressFeedbackType.Sink ) { @@ -495,6 +501,7 @@ private fun StatusCard( onClick = { if (kernelVersion.isGKI()) onClickInstall() }, + colors = wallpaperCardColors(), showIndication = true, pressFeedbackType = PressFeedbackType.Sink ) { @@ -560,6 +567,7 @@ fun LearnMoreCard() { Card( modifier = Modifier .fillMaxWidth(), + colors = wallpaperCardColors(), ) { BasicComponent( title = stringResource(R.string.home_learn_kernelsu), @@ -586,6 +594,7 @@ fun DonateCard() { Card( modifier = Modifier .fillMaxWidth(), + colors = wallpaperCardColors(), ) { BasicComponent( title = stringResource(R.string.home_support_title), @@ -610,14 +619,14 @@ fun DonateCard() { private fun InfoCard() { val manualHookText = stringResource(R.string.manual_hook) val inlineHookText = stringResource(R.string.inline_hook) - val TracepointHookText = stringResource(R.string.tracepoint_hook) + val tracepointHookText = stringResource(R.string.tracepoint_hook) val unknownHookText = stringResource(R.string.selinux_status_unknown) val susfsInfo = rememberSusfsInfo(manualHookText, inlineHookText) val isSusfsSupported = susfsInfo.status == SusfsStatus.Supported - val hookTypeLabel = remember(manualHookText, inlineHookText, TracepointHookText) { + val hookTypeLabel = remember(manualHookText, inlineHookText, tracepointHookText) { val localized = when (val rawType = Natives.getHookType()) { "Manual" -> manualHookText - "Tracepoint" -> TracepointHookText + "Tracepoint" -> tracepointHookText else -> rawType } localized.ifBlank { unknownHookText } @@ -647,7 +656,9 @@ private fun InfoCard() { val uname = Os.uname() val managerVersion = getManagerVersion(context) - Card { + Card( + colors = wallpaperCardColors(), + ) { Column( modifier = Modifier .fillMaxWidth() diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Install.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Install.kt index 2b233bab..b6edf683 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Install.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Install.kt @@ -95,6 +95,8 @@ import top.yukonga.miuix.kmp.icon.icons.useful.Edit import top.yukonga.miuix.kmp.icon.icons.useful.Move import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -248,6 +250,7 @@ fun InstallScreen( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopBar( onBack = dropUnlessResumed { navigator.popBackStack() }, @@ -275,6 +278,7 @@ fun InstallScreen( Card( modifier = Modifier .fillMaxWidth(), + colors = wallpaperCardColors(), ) { SelectInstallMethod( onSelected = { method -> @@ -296,6 +300,7 @@ fun InstallScreen( modifier = Modifier .fillMaxWidth() .padding(top = 12.dp), + colors = wallpaperCardColors(), ) { val isOta = installMethod is InstallMethod.DirectInstallToInactiveSlot val suffix = produceState(initialValue = "", isOta) { @@ -338,6 +343,7 @@ fun InstallScreen( modifier = Modifier .fillMaxWidth() .padding(top = 12.dp), + colors = wallpaperCardColors(), ) { SuperArrow( title = stringResource(id = R.string.install_upload_lkm_file), @@ -367,6 +373,7 @@ fun InstallScreen( modifier = Modifier .fillMaxWidth() .padding(top = 12.dp), + colors = wallpaperCardColors(), ) { SuperArrow( title = stringResource( @@ -394,6 +401,7 @@ fun InstallScreen( modifier = Modifier .fillMaxWidth() .padding(top = 12.dp), + colors = wallpaperCardColors(), ) { SuperArrow( title = when (kpmPatchOption) { diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Kpm.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Kpm.kt index fc71c9ca..a04d4de1 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Kpm.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Kpm.kt @@ -70,6 +70,8 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.Refresh import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -346,6 +348,7 @@ fun KpmScreen( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { searchStatus.TopAppBarAnim(hazeState = hazeState, hazeStyle = hazeStyle) { TopAppBar( @@ -695,7 +698,8 @@ private fun KpmList( Card( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 12.dp, vertical = 12.dp) + .padding(horizontal = 12.dp, vertical = 12.dp), + colors = wallpaperCardColors() ) { Row( modifier = Modifier @@ -866,6 +870,7 @@ private fun KpmModuleItem( modifier = Modifier .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), insideMargin = PaddingValues(16.dp) ) { Row( diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/LogViewer.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/LogViewer.kt index f4834cfd..b17c668f 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/LogViewer.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/LogViewer.kt @@ -27,6 +27,8 @@ import com.ramcosta.composedestinations.annotation.RootGraph import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.sukisu.ultra.R import com.sukisu.ultra.ui.util.* +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -206,6 +208,7 @@ fun LogViewer(navigator: DestinationsNavigator) { } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( title = stringResource(R.string.log_viewer_title), @@ -384,7 +387,8 @@ private fun LogControlPanel( Card( modifier = Modifier .fillMaxWidth() - .padding(horizontal = SPACING_LARGE, vertical = SPACING_MEDIUM) + .padding(horizontal = SPACING_LARGE, vertical = SPACING_MEDIUM), + colors = wallpaperCardColors() ) { Column { SuperArrow( @@ -572,7 +576,8 @@ private fun LogEntryCard(entry: LogEntry) { Card( modifier = Modifier.fillMaxWidth(), - onClick = { expanded = !expanded } + onClick = { expanded = !expanded }, + colors = wallpaperCardColors() ) { Column( modifier = Modifier.padding(SPACING_LARGE) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt index 68f06a1c..fd15f160 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Module.kt @@ -141,6 +141,8 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.ImmersionMore import top.yukonga.miuix.kmp.icon.icons.useful.Undo import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -393,6 +395,7 @@ fun ModulePager( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { searchStatus.TopAppBarAnim(hazeState = hazeState, hazeStyle = hazeStyle) { TopAppBar( @@ -929,6 +932,7 @@ fun ModuleItem( modifier = Modifier .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), insideMargin = PaddingValues(16.dp) ) { Row( diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt index 8842ac06..4841cc79 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt @@ -79,6 +79,8 @@ import top.yukonga.miuix.kmp.extra.SuperArrow import top.yukonga.miuix.kmp.extra.SuperDropdown import top.yukonga.miuix.kmp.extra.SuperSwitch import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -103,6 +105,7 @@ fun SettingPager( val isKpmAvailable = rememberKpmAvailable() Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( modifier = Modifier.hazeEffect(hazeState) { @@ -148,6 +151,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { SuperSwitch( title = stringResource(id = R.string.settings_check_update), @@ -198,6 +202,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val personalization = stringResource(id = R.string.personalization) SuperArrow( @@ -225,6 +230,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { SuperArrow( title = toolsTitle, @@ -251,6 +257,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val profileTemplate = stringResource(id = R.string.settings_profile_template) SuperArrow( @@ -278,6 +285,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val kpmTitle = stringResource(id = R.string.kpm_title) SuperArrow( @@ -305,6 +313,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val modeItems = listOf( stringResource(id = R.string.settings_mode_default), @@ -555,6 +564,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { var umountChecked by rememberSaveable { mutableStateOf(Natives.isDefaultUmountModules()) } SuperSwitch( @@ -606,6 +616,7 @@ fun SettingPager( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val uninstall = stringResource(id = R.string.settings_uninstall) SuperArrow( @@ -631,6 +642,7 @@ fun SettingPager( modifier = Modifier .padding(vertical = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { if (isSuLogEnabled) { val sulog = stringResource(id = R.string.log_viewer_view_logs) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuperUser.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuperUser.kt index 29cc402b..9a63f885 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuperUser.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuperUser.kt @@ -98,6 +98,8 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.basic.ArrowRight import top.yukonga.miuix.kmp.icon.icons.useful.ImmersionMore import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.PressFeedbackType import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical @@ -138,6 +140,7 @@ fun SuperUserPager( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { searchStatus.TopAppBarAnim(hazeState = hazeState, hazeStyle = hazeStyle) { TopAppBar( @@ -394,7 +397,8 @@ private fun SimpleAppItem( ) Card( modifier = Modifier - .padding(start = 6.dp, end = 12.dp, bottom = 6.dp) + .padding(start = 6.dp, end = 12.dp, bottom = 6.dp), + colors = wallpaperCardColors() ) { BasicComponent( title = app.label, @@ -501,6 +505,7 @@ private fun GroupItem( modifier = Modifier .padding(horizontal = 12.dp) .padding(bottom = 12.dp), + colors = wallpaperCardColors(), onClick = onClickPrimary, onLongPress = if (group.apps.size > 1) onToggleExpand else null, pressFeedbackType = PressFeedbackType.Sink, diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Template.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Template.kt index 9b07fd5a..23f9aaa0 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Template.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Template.kt @@ -101,6 +101,8 @@ import top.yukonga.miuix.kmp.icon.icons.useful.Copy import top.yukonga.miuix.kmp.icon.icons.useful.Refresh import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.PressFeedbackType import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical @@ -169,6 +171,7 @@ fun AppProfileTemplateScreen( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { val clipboardManager = LocalClipboardManager.current val context = LocalContext.current @@ -310,6 +313,7 @@ private fun TemplateItem( ) { Card( modifier = Modifier.padding(bottom = 12.dp), + colors = wallpaperCardColors(), onClick = { navigator.navigate(TemplateEditorScreenDestination(template, !template.local)) { popUpTo(TemplateEditorScreenDestination) { diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/TemplateEditor.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/TemplateEditor.kt index 1c17f7c1..179e4d09 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/TemplateEditor.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/TemplateEditor.kt @@ -61,6 +61,8 @@ import top.yukonga.miuix.kmp.icon.icons.useful.Back import top.yukonga.miuix.kmp.icon.icons.useful.Confirm import top.yukonga.miuix.kmp.icon.icons.useful.Delete import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic @@ -96,6 +98,7 @@ fun TemplateEditorScreen( } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { val saveTemplateFailed = stringResource(id = R.string.app_profile_template_save_failed) val idConflictError = stringResource(id = R.string.app_profile_template_id_exist) @@ -164,6 +167,7 @@ fun TemplateEditorScreen( modifier = Modifier .fillMaxWidth() .padding(12.dp), + colors = wallpaperCardColors(), ) { var errorHint by remember { mutableStateOf(false) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/UmountManager.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/UmountManager.kt index 92b07bc6..9ca077f8 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/UmountManager.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/UmountManager.kt @@ -24,6 +24,8 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.sukisu.ultra.R import com.sukisu.ultra.ui.component.rememberConfirmDialog import com.sukisu.ultra.ui.component.ConfirmResult +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import com.sukisu.ultra.ui.util.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -87,6 +89,7 @@ fun UmountManager(navigator: DestinationsNavigator) { } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( title = stringResource(R.string.umount_path_manager), @@ -133,7 +136,8 @@ fun UmountManager(navigator: DestinationsNavigator) { Card( modifier = Modifier .fillMaxWidth() - .padding(SPACING_LARGE) + .padding(SPACING_LARGE), + colors = wallpaperCardColors() ) { Row( modifier = Modifier.padding(SPACING_LARGE), @@ -309,7 +313,8 @@ fun UmountPathCard( val context = LocalContext.current Card( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + colors = wallpaperCardColors() ) { Row( modifier = Modifier diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/Personalization.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/Personalization.kt index 68efe9cc..39801999 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/Personalization.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/Personalization.kt @@ -1,7 +1,19 @@ package com.sukisu.ultra.ui.screen.settings +import android.annotation.SuppressLint import android.content.Context +import android.content.Intent +import android.content.SharedPreferences +import android.os.Build +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.PickVisualMediaRequest +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.add @@ -15,8 +27,12 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Palette import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue @@ -42,15 +58,24 @@ import top.yukonga.miuix.kmp.basic.Icon import top.yukonga.miuix.kmp.basic.IconButton import top.yukonga.miuix.kmp.basic.MiuixScrollBehavior import top.yukonga.miuix.kmp.basic.Scaffold +import top.yukonga.miuix.kmp.basic.Slider +import top.yukonga.miuix.kmp.basic.SliderDefaults import top.yukonga.miuix.kmp.basic.TopAppBar +import top.yukonga.miuix.kmp.basic.Text +import top.yukonga.miuix.kmp.basic.TextButton import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.Back import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor +import top.yukonga.miuix.kmp.extra.SuperArrow import top.yukonga.miuix.kmp.extra.SuperDropdown import top.yukonga.miuix.kmp.utils.getWindowSize import top.yukonga.miuix.kmp.utils.overScrollVertical import top.yukonga.miuix.kmp.utils.scrollEndHaptic +import kotlin.math.roundToInt +@SuppressLint("ObsoleteSdkInt") @Composable @Destination fun Personalization( @@ -64,6 +89,7 @@ fun Personalization( ) Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( modifier = Modifier.hazeEffect(hazeState) { @@ -110,6 +136,7 @@ fun Personalization( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val themeItems = listOf( stringResource(id = R.string.settings_theme_mode_system), @@ -190,8 +217,260 @@ fun Personalization( } ) } + + Spacer(modifier = Modifier.height(8.dp)) + + val isSystemDarkMode = isSystemInDarkTheme() + val isDarkThemeActive = when (themeMode) { + 1, 4 -> false + 2, 5 -> true + else -> isSystemDarkMode + } + val wallpaperAlphaMin = if (isDarkThemeActive) 0.2f else 0f + val wallpaperEnabledAlpha = if (isDarkThemeActive) 0.5f else 0.3f + val wallpaperPreferenceState = rememberWallpaperPreferenceState( + prefs = prefs, + wallpaperAlphaMin = wallpaperAlphaMin, + wallpaperEnabledAlpha = wallpaperEnabledAlpha + ) + + val summaryText = if (wallpaperPreferenceState.isEnabled) { + stringResource(id = R.string.settings_wallpaper_summary_selected) + } else { + stringResource(id = R.string.settings_wallpaper_summary) + } + + val wallpaperPicker = rememberLauncherForActivityResult( + ActivityResultContracts.PickVisualMedia() + ) { uri -> + if (uri != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + context.contentResolver.takePersistableUriPermission( + uri, + Intent.FLAG_GRANT_READ_URI_PERMISSION + ) + } catch (_: SecurityException) { + } + } + val uriString = uri.toString() + wallpaperPreferenceState.setWallpaper(uriString) + } + } + + SuperArrow( + title = stringResource(id = R.string.settings_wallpaper), + summary = summaryText, + leftAction = { + Icon( + Icons.Rounded.Palette, + modifier = Modifier.padding(end = 16.dp), + contentDescription = stringResource(id = R.string.settings_wallpaper), + tint = colorScheme.onBackground + ) + }, + onClick = { + wallpaperPicker.launch( + PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) + ) + } + ) + + val wallpaperModes = listOf( + stringResource(id = R.string.settings_wallpaper_mode_fill), + stringResource(id = R.string.settings_wallpaper_mode_stretch), + stringResource(id = R.string.settings_wallpaper_mode_fit) + ) + + AnimatedVisibility(visible = wallpaperPreferenceState.isEnabled) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp, vertical = 12.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + TextButton( + modifier = Modifier.weight(1f), + text = stringResource(id = R.string.settings_wallpaper_replace), + onClick = { + wallpaperPicker.launch( + PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) + ) + } + ) + TextButton( + modifier = Modifier.weight(1f), + text = stringResource(id = R.string.settings_wallpaper_remove), + onClick = { + wallpaperPreferenceState.removeWallpaper() + } + ) + } + + Spacer(modifier = Modifier.height(12.dp)) + + SuperDropdown( + title = stringResource(id = R.string.settings_wallpaper_mode), + summary = stringResource(id = R.string.settings_wallpaper_mode_summary), + items = wallpaperModes, + leftAction = { + Icon( + Icons.Rounded.Palette, + modifier = Modifier.padding(end = 16.dp), + contentDescription = stringResource(id = R.string.settings_wallpaper_mode), + tint = colorScheme.onBackground + ) + }, + selectedIndex = wallpaperPreferenceState.scaleMode, + onSelectedIndexChange = { index -> + wallpaperPreferenceState.updateScaleMode(index) + } + ) + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(top = 12.dp) + ) { + Text( + text = stringResource( + id = R.string.settings_wallpaper_opacity_label, + (wallpaperPreferenceState.sliderValue * 100).roundToInt() + ), + color = colorScheme.onBackground + ) + Slider( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp), + value = wallpaperPreferenceState.sliderValue, + onValueChange = wallpaperPreferenceState::onSliderChange, + valueRange = wallpaperPreferenceState.minAlpha..1f, + steps = 8, + colors = SliderDefaults.sliderColors( + thumbColor = colorScheme.primary, + ), + onValueChangeFinished = { + wallpaperPreferenceState.onSliderChangeFinished() + } + ) + } + } + } } } } } } + +@Composable +private fun rememberWallpaperPreferenceState( + prefs: SharedPreferences, + wallpaperAlphaMin: Float, + wallpaperEnabledAlpha: Float +): WallpaperPreferenceState { + val state = remember(prefs) { + WallpaperPreferenceState( + prefs = prefs, + initialUri = prefs.getString("wallpaper_uri", null), + initialScaleMode = prefs.getInt("wallpaper_scale_mode", 0), + initialAlpha = prefs.getFloat("wallpaper_alpha", wallpaperAlphaMin) + .coerceAtLeast(wallpaperAlphaMin), + initialMinAlpha = wallpaperAlphaMin, + initialEnabledAlpha = wallpaperEnabledAlpha + ) + } + LaunchedEffect(wallpaperAlphaMin, wallpaperEnabledAlpha) { + state.updateBounds(wallpaperAlphaMin, wallpaperEnabledAlpha) + } + return state +} + +@Stable +private class WallpaperPreferenceState( + private val prefs: SharedPreferences, + initialUri: String?, + initialScaleMode: Int, + initialAlpha: Float, + initialMinAlpha: Float, + initialEnabledAlpha: Float, +) { + var uri by mutableStateOf(initialUri) + private set + + val isEnabled: Boolean + get() = !uri.isNullOrBlank() + + var scaleMode by mutableIntStateOf(initialScaleMode) + private set + + var sliderValue by mutableFloatStateOf(initialAlpha) + private set + + var minAlpha by mutableFloatStateOf(initialMinAlpha) + private set + + var enabledAlpha by mutableFloatStateOf(initialEnabledAlpha) + private set + + private var persistedAlpha by mutableFloatStateOf(initialAlpha) + + fun onSliderChange(value: Float) { + sliderValue = value + } + + fun onSliderChangeFinished() { + setAlphaInternal(sliderValue) + } + + fun setWallpaper(uriString: String) { + uri = uriString + val targetAlpha = enabledAlpha.coerceAtLeast(minAlpha) + prefs.edit { + putString("wallpaper_uri", uriString) + putFloat("wallpaper_alpha", targetAlpha) + } + setAlphaInternal(targetAlpha, skipPersist = true) + } + + fun removeWallpaper() { + prefs.edit { + remove("wallpaper_uri") + putFloat("wallpaper_alpha", 1f) + } + uri = null + setAlphaInternal(1f, skipPersist = true) + } + + fun updateScaleMode(index: Int) { + scaleMode = index + prefs.edit { putInt("wallpaper_scale_mode", index) } + } + + fun updateBounds(min: Float, enabled: Float) { + val coercedMin = min.coerceIn(0f, 1f) + val coercedEnabled = enabled.coerceIn(coercedMin, 1f) + val alphaAdjusted = persistedAlpha.coerceAtLeast(coercedMin) + val needsAlphaUpdate = alphaAdjusted != persistedAlpha || coercedMin != minAlpha + minAlpha = coercedMin + enabledAlpha = coercedEnabled + if (sliderValue < coercedMin) { + sliderValue = coercedMin + } + if (needsAlphaUpdate) { + setAlphaInternal(alphaAdjusted, skipPersist = false) + } + } + + private fun setAlphaInternal(target: Float, skipPersist: Boolean = false) { + val coerced = target.coerceIn(minAlpha, 1f) + persistedAlpha = coerced + sliderValue = coerced + if (!skipPersist) { + prefs.edit { putFloat("wallpaper_alpha", coerced) } + } + } +} diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/ToolsScreen.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/ToolsScreen.kt index edeb290a..81244804 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/ToolsScreen.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/settings/ToolsScreen.kt @@ -53,6 +53,8 @@ import com.sukisu.ultra.ui.component.ConfirmResult import com.sukisu.ultra.ui.component.DynamicManagerCard import com.sukisu.ultra.ui.component.KsuIsValid import com.sukisu.ultra.ui.component.rememberConfirmDialog +import com.sukisu.ultra.ui.theme.wallpaperCardColors +import com.sukisu.ultra.ui.theme.wallpaperContainerColor import com.sukisu.ultra.ui.util.cleanRuntimeEnvironment import com.sukisu.ultra.ui.util.getUidMultiUserScan import com.sukisu.ultra.ui.util.readUidScannerFile @@ -101,6 +103,7 @@ fun Tools( val prefs = remember { context.getSharedPreferences("settings", Context.MODE_PRIVATE) } Scaffold( + containerColor = wallpaperContainerColor(), topBar = { TopAppBar( modifier = Modifier.hazeEffect(hazeState) { @@ -143,6 +146,7 @@ fun Tools( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { UidScannerSection(prefs = prefs, scope = scope, context = context) } @@ -153,6 +157,7 @@ fun Tools( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val lkmMode = Natives.isLkmMode if (lkmMode) { @@ -347,6 +352,7 @@ fun SelinuxToggleSection( modifier = Modifier .padding(top = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { val statusLabel = getSELinuxStatus() SuperSwitch( @@ -457,6 +463,7 @@ private fun AllowlistBackupSection( modifier = Modifier .padding(vertical = 12.dp) .fillMaxWidth(), + colors = wallpaperCardColors(), ) { SuperArrow( title = stringResource(R.string.allowlist_backup_title), diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt new file mode 100644 index 00000000..acde2ac3 --- /dev/null +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/CardManage.kt @@ -0,0 +1,74 @@ +package com.sukisu.ultra.ui.theme + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.lerp +import top.yukonga.miuix.kmp.basic.CardDefaults +import top.yukonga.miuix.kmp.theme.MiuixTheme + +@Stable +data class WallpaperState( + val enabled: Boolean, + val surfaceAlpha: Float, + val transitionBlend: Float +) + +val LocalWallpaperState = compositionLocalOf { + WallpaperState( + enabled = false, + surfaceAlpha = 1f, + transitionBlend = 0f + ) +} + +@Composable +fun wallpaperContainerColor(): Color { + val wallpaperState = LocalWallpaperState.current + if (!wallpaperState.enabled) { + return MiuixTheme.colorScheme.surface + } + val base = MiuixTheme.colorScheme.surface + val adjustedAlpha = wallpaperState.surfaceAlpha.coerceIn(0f, 1f) + return base.copy(alpha = adjustedAlpha) +} + +@Composable +fun wallpaperSurfaceColor(base: Color = MiuixTheme.colorScheme.surface): Color { + val wallpaperState = LocalWallpaperState.current + if (!wallpaperState.enabled) { + return base + } + val alphaMultiplier = wallpaperState.surfaceAlpha.coerceIn(0f, 1f) + val dimOverlay = Color.Black.copy(alpha = 0.25f) + val tintedBase = lerp(base, dimOverlay, 0.15f) + return tintedBase.copy(alpha = tintedBase.alpha * alphaMultiplier) +} + +@Composable +fun wallpaperContentColor(): Color { + return MiuixTheme.colorScheme.onSurface +} + +@Composable +fun wallpaperTransitionAlpha( + enabledAlpha: Float, + disabledAlpha: Float = 1f +): Float { + val wallpaperState = LocalWallpaperState.current + val blend = wallpaperState.transitionBlend.coerceIn(0f, 1f) + val clampedEnabled = enabledAlpha.coerceIn(0f, 1f) + val clampedDisabled = disabledAlpha.coerceIn(0f, 1f) + return (clampedDisabled + (clampedEnabled - clampedDisabled) * blend) + .coerceIn(0f, 1f) +} + +@Composable +fun wallpaperCardColors( + background: Color = wallpaperSurfaceColor(), + content: Color = wallpaperContentColor(), +) = CardDefaults.defaultColors( + color = background, + contentColor = content, +) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Theme.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Theme.kt index 6aa58cf3..fffb08ed 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Theme.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/theme/Theme.kt @@ -1,8 +1,21 @@ package com.sukisu.ultra.ui.theme +import android.net.Uri +import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.zIndex +import coil.compose.rememberAsyncImagePainter +import coil.request.ImageRequest import top.yukonga.miuix.kmp.theme.ColorSchemeMode import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.ThemeController @@ -11,6 +24,9 @@ import top.yukonga.miuix.kmp.theme.ThemeController fun KernelSUTheme( colorMode: Int = 0, keyColor: Color? = null, + wallpaperUri: String? = null, + wallpaperAlpha: Float = 1f, + wallpaperScaleMode: Int = 0, content: @Composable () -> Unit ) { val isDark = isSystemInDarkTheme() @@ -37,6 +53,63 @@ fun KernelSUTheme( } return MiuixTheme( controller = controller, - content = content - ) + ) { + val context = LocalContext.current + val hasWallpaper = !wallpaperUri.isNullOrBlank() + val surfaceAlpha = if (hasWallpaper) wallpaperAlpha.coerceIn(0f, 1f) else 1f + val uri = wallpaperUri?.takeIf { it.isNotBlank() }?.let(Uri::parse) + + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + if (hasWallpaper && uri != null) { + val contentScale = when (wallpaperScaleMode) { + 1 -> ContentScale.FillBounds + 2 -> ContentScale.Fit + else -> ContentScale.Crop + } + Image( + modifier = Modifier.fillMaxSize(), + painter = rememberAsyncImagePainter( + ImageRequest.Builder(context) + .data(uri) + .crossfade(true) + .build() + ), + contentDescription = null, + contentScale = contentScale + ) + + val scrimBase = if (isDark) 0.25f else 0.05f + val scrimScale = if (isDark) 0.75f else 0.4f + val overlayAlpha = (scrimBase + (1f - surfaceAlpha) * scrimScale).coerceIn(0f, if (isDark) 0.85f else 0.45f) + if (overlayAlpha > 0f) { + val overlayColor = if (isDark) { + Color.Black.copy(alpha = overlayAlpha) + } else { + Color.White.copy(alpha = overlayAlpha * 0.6f) + } + Box( + modifier = Modifier + .fillMaxSize() + .background(overlayColor) + ) + } + } + + CompositionLocalProvider( + LocalWallpaperState provides WallpaperState( + enabled = hasWallpaper, + surfaceAlpha = surfaceAlpha, + transitionBlend = if (hasWallpaper) 1f else 0f + ) + ) { + Box( + modifier = Modifier + .fillMaxSize() + .zIndex(1f) + ) { + content() + } + } + } + } } diff --git a/manager/app/src/main/res/values-ar/strings.xml b/manager/app/src/main/res/values-ar/strings.xml index 5049e8d8..df9105b4 100644 --- a/manager/app/src/main/res/values-ar/strings.xml +++ b/manager/app/src/main/res/values-ar/strings.xml @@ -5,8 +5,6 @@ إضغط للتثبيت يعمل الإصدار: %d - مستخدمين الجذر: %d - الإضافات: %d غير مدعوم KernelSU يدعم GKI kernels فقط إصدار النواة @@ -60,12 +58,8 @@ تشغيل الإفتراضي نموذج - موروث - عالمي - فردي مجموعات مُخصّص - تركيب مساحة الاسم الغاء تحميل الإضافات فشل تحديث ملف تعريف التطبيق لـ %s سياق SELinux @@ -90,7 +84,6 @@ معرف القالب غير صالح مزامنة القوالب عبر الإنترنت إنشاء قالب - للقراءة فقط استيراد / تصدير فشل في حفظ القالب تحرير القالب diff --git a/manager/app/src/main/res/values-az/strings.xml b/manager/app/src/main/res/values-az/strings.xml index 86518745..50d6777d 100644 --- a/manager/app/src/main/res/values-az/strings.xml +++ b/manager/app/src/main/res/values-az/strings.xml @@ -1,13 +1,11 @@ Ana səhifə - Super istifadəçilər: %d Nüvə Yüklənmədi Yükləmək üçün toxunun İşləyir Versiya: %d - Modullar: %d Hal-hazırda KernelSU yalnız GKI nüvələrini dəstəkləyir Dəstəklənmir Yüklə @@ -58,10 +56,6 @@ Profil adı Bacarıqlar Modulları umount et - Miras qalmış - Qlobal - Bölmənin ad sahəsi - Fərdi Qruplar Defolt olaraq modulları umount et SELinux konteksi @@ -97,6 +91,5 @@ Yadda saxla Sil Şablonu göstər - Yalnız oxu Şablon ID-si artıq mövcuddur! diff --git a/manager/app/src/main/res/values-bn-rBD/strings.xml b/manager/app/src/main/res/values-bn-rBD/strings.xml index 9d8ddff7..d03cee6f 100644 --- a/manager/app/src/main/res/values-bn-rBD/strings.xml +++ b/manager/app/src/main/res/values-bn-rBD/strings.xml @@ -6,7 +6,6 @@ মোডিউল ইনেবল করা যায়নি: %s ইন্সটল করটে চাপুন কাজ করছে - মোডিউল: %d অমূলক কর্নেল ম্যানেজার ভারসন @@ -21,7 +20,6 @@ রিবুট সেটিংস সফট রিবুট - গ্লোবাল গ্রুপস এসইলিনাক্স কন্টেক্সট %s এর জন্য অ্যাপ প্রফাইল আপডেট করা যায়নি @@ -32,10 +30,6 @@ মোডিউল ডিসেবল করা যায়নি: %s কোনো মোডিউল ইন্সটল করা নেই সংস্করণ: %d - সুপার ইউজার: %d - নেইম স্পেস মাউন্ট - ইনহেরিটেড - ইন্ডিভিজুয়াল ক্যাপাবিলিটিস আনমাউন্ট মোডিউলস রিকভারিতে বুট diff --git a/manager/app/src/main/res/values-bn/strings.xml b/manager/app/src/main/res/values-bn/strings.xml index 398b2ade..56352ef8 100644 --- a/manager/app/src/main/res/values-bn/strings.xml +++ b/manager/app/src/main/res/values-bn/strings.xml @@ -5,8 +5,6 @@ ইনস্টল করার জন্য ক্লিক করুন ওয়ার্কিং ওয়ার্কিং সংস্করণ: %d - সুপার ইউজার: %d - মডিউল: %d অসমর্থিত KernelSU শুধুমাত্র GKI কার্নেল সমর্থন করে কার্নেল @@ -53,15 +51,12 @@ কার্নেলএসইউ বিনামূল্যে এবং ওপেন সোর্স, এবং সবসময় থাকবে। আপনি সবসময় একটি অনুদান দিয়ে আপনার কৃতজ্ঞতা প্রদর্শন করতে পারেন. আমাদের %2$s চ্যানেল মার্জ করুন]]> প্রফাইলের নাম - নেমস্পেস মাউন্ট গ্রুপস যোগ্যতা এসই লিনাক্স কনটেক্সট ডিফল্ট টেমপ্লেট কাস্টম - গ্লোবাল - আলাদাভাবে আনমাউন্ট মোডিউল ম্যানেজার সঠিকভাবে কাজ করার জন্য বর্তমান KernelSU সংস্করণ %d খুবই কম। অনুগ্রহ করে %d বা উচ্চতর সংস্করণে আপগ্রেড করুন! লগ সংরক্ষণ করুন diff --git a/manager/app/src/main/res/values-bs/strings.xml b/manager/app/src/main/res/values-bs/strings.xml index 688e47f2..6722eff1 100644 --- a/manager/app/src/main/res/values-bs/strings.xml +++ b/manager/app/src/main/res/values-bs/strings.xml @@ -1,9 +1,5 @@ - Imenski prostor nosača - Naslijeđen - Globalan - Pojedinačan Grupe Sposobnosti SELinux kontekst @@ -24,8 +20,6 @@ Početna Nije instalirano Kliknite da instalirate - Superkorisnici: %d - Module: %d Nepodržano KernelSU samo podržava GKI kernele sad Verzija Upravitelja diff --git a/manager/app/src/main/res/values-da/strings.xml b/manager/app/src/main/res/values-da/strings.xml index 09095c6e..4e5fd6af 100644 --- a/manager/app/src/main/res/values-da/strings.xml +++ b/manager/app/src/main/res/values-da/strings.xml @@ -1,7 +1,6 @@ Arbejder - Moduler: %d Ikke understøttet Kernel-version KernelSU understøtter nu kun GKI-kerner. @@ -36,9 +35,6 @@ Join our %2$s channel]]> Standard Skabelon - Monter namespace - Arvet - Global Grupper Evner SELinux-kontext @@ -56,7 +52,6 @@ Version: %d Hjem Ikke installeret - Superbrugere: %d Fingeraftryk Ukendt Aktivering af modul fejlede: %s @@ -72,7 +67,6 @@ KernelSU er, og vil altid være, gratis og åben kildekode. Du kan dog vise os, at du holder af os, ved at give en donation. Brugerdefineret Profilnavn - Individuel Opdatering af App Profil for %s fejlede Den globale standardværdi for \"Umount moduler\" i App Profile. Hvis aktiveret, fjernes alle modulændringer til systemet for apps, der ikke har en profil angivet. Domæne @@ -97,7 +91,6 @@ Gem Slet Visningsskabelon - Skrivebeskyttet Skabelon-ID findes allerede! Import/Eksport Importér fra udklipsholder diff --git a/manager/app/src/main/res/values-de/strings.xml b/manager/app/src/main/res/values-de/strings.xml index 8bdad66b..babdd5a8 100644 --- a/manager/app/src/main/res/values-de/strings.xml +++ b/manager/app/src/main/res/values-de/strings.xml @@ -7,7 +7,6 @@ Version: %d Superuser Tippe zum Installieren - Superuser: %d Unbekannt Erzwingen In den Bootloader-Modus neustarten @@ -28,9 +27,6 @@ Vorlage Benutzerdefiniert App-Profilaktualisierung für %s fehlgeschlagen - Geerbt - Global - Individuell Domäne Aktualisieren Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen. @@ -41,7 +37,6 @@ Neue Version %s verfügbar, tippen zum Aktualisieren. Stopp erzwingen Neustarten - Module: %d Manager-Version SELinux Status Deaktiviert @@ -65,7 +60,6 @@ Neustarten, damit Änderungen wirksam werden Unserem %2$s-Kanal beitreten]]> Profilname - Namespace einhängen Gruppen Fähigkeiten Module aushängen @@ -90,7 +84,6 @@ Ungültige Vorlagen-ID Online-Vorlagen synchronisieren Vorlage erstellen - Schreibgeschützt Import/Export Schlug beim Speichern der Vorlage fehl Vorlage bearbeiten diff --git a/manager/app/src/main/res/values-es/strings.xml b/manager/app/src/main/res/values-es/strings.xml index 8d825095..ca2fe736 100644 --- a/manager/app/src/main/res/values-es/strings.xml +++ b/manager/app/src/main/res/values-es/strings.xml @@ -5,8 +5,6 @@ Haz clic para instalar Funcionando Versión: %d - Superusuarios: %d - Módulos: %d Sin soporte KernelSU solo admite kernels GKI por ahora Versión del kernel @@ -57,10 +55,6 @@ Plantilla Personalizado Nombre de perfil - Montaje del espacio de nombres - Heredado - Global - Individual Grupos Capacidades Contexto SELinux @@ -91,7 +85,6 @@ ID de plantilla no válida Sincronizar plantillas en línea Crear plantilla - Sólo lectura Importar/Exportar No se ha podido guardar la plantilla Editar plantilla diff --git a/manager/app/src/main/res/values-et/strings.xml b/manager/app/src/main/res/values-et/strings.xml index 839a6320..d7f24dd5 100644 --- a/manager/app/src/main/res/values-et/strings.xml +++ b/manager/app/src/main/res/values-et/strings.xml @@ -2,7 +2,6 @@ Töötamine Versioon: %d - Mooduleid: %d Tuum Manageri versioon Sõrmejälg @@ -19,7 +18,6 @@ Õpi KernelSUd https://kernelsu.org/guide/what-is-kernelsu.html Vaikimisi - Haagi nimeruum Lahtihaagitud moodulid Rakenduseprofiili uuendamine %s jaoks ebaõnnestus Haagi moodulid vaikimisi lahti @@ -28,7 +26,6 @@ Muuda malli Rakenduseprofiili mall ID - Vaid lugemiseks Malli ID juba eksisteerib! Ekspordi lõikelauale Sünkrooni võrgumallid @@ -37,7 +34,6 @@ Klõpsa paigaldamiseks Pole paigaldatud Mittetoetatud - Superkasutajaid: %d KernelSU toetab hetkel vaid GSI tuumasid SELinuxi olek Keelatud @@ -71,9 +67,6 @@ Vaata lähtekoodi %1$sis
Liitu meie %2$si kanaliga
Profiili nimi Kohandatud - Päritud - Globaalne - Individuaalne Võimekused Sobimatu malli ID SELinux kontekst diff --git a/manager/app/src/main/res/values-fa/strings.xml b/manager/app/src/main/res/values-fa/strings.xml index 874c197d..bc9b11f3 100644 --- a/manager/app/src/main/res/values-fa/strings.xml +++ b/manager/app/src/main/res/values-fa/strings.xml @@ -5,8 +5,6 @@ برای نصب ضربه بزنید به درستی کار می‌کند نسخه: %d - برنامه های با دسترسی روت: %d - ماژول‌ها: %d پشتیبانی نشده کرنل اس یو فقط هسته های gki را پشتیبانی میکند هسته @@ -59,10 +57,6 @@ قالب شخصی سازی شده اسم پروفایل - Mount namespace - اثر گرفته - گلوبال - تکی جداکردن ماژول ها ذخیره گزارش‌ها
diff --git a/manager/app/src/main/res/values-fil/strings.xml b/manager/app/src/main/res/values-fil/strings.xml index e8895d13..d033dd9d 100644 --- a/manager/app/src/main/res/values-fil/strings.xml +++ b/manager/app/src/main/res/values-fil/strings.xml @@ -10,7 +10,6 @@ Gumagana Bersyon: %d Hindi matukoy - Mga Modyul: %d Hindi Suportado Sinusuportahan lamang ng KernelSU ang mga GKI na kernel Nabigong paganahin ang module: %s @@ -39,8 +38,6 @@ Suportahan Kami Ang KernelSU ay, at palaging magiging, libre, at open source. Gayunpaman, maaari mong ipakita sa amin na nagmamalasakit ka sa pamamagitan ng pagbibigay ng donasyon. Sumali sa aming %2$s channel]]> - I-mount ang namespace - Indibidwal Mga Grupo Mga Kakayanan Konteksto ng SELinux @@ -64,10 +61,8 @@ I-uninstall Itago ang mga application ng system Pangalan ng profile - Minana Ang pangkalahatang default na halaga para sa \"Umount modules\" sa Mga Profile ng App. Kung pinagana, aalisin nito ang lahat ng mga pagbabago sa modyul sa system para sa mga aplikasyon na walang hanay ng Profile. I-save ang mga Log - Mga Superuser: %d Bersyon ng kernel Fingerprint Superuser @@ -80,7 +75,6 @@ Default Template Pasadya - Global I-unmount ang mga module bilang default Domain I-update @@ -97,7 +91,6 @@ I-save Burahin Tignan ang template - Read only Umiiral na ang Template ID! I-import/I-export Mag-import mula sa clipboard diff --git a/manager/app/src/main/res/values-fr/strings.xml b/manager/app/src/main/res/values-fr/strings.xml index e045ebd9..f3acd1f3 100644 --- a/manager/app/src/main/res/values-fr/strings.xml +++ b/manager/app/src/main/res/values-fr/strings.xml @@ -3,8 +3,6 @@ Non installé Fonctionnel Version : %d - Super-utilisateurs : %d - Modules : %d KernelSU ne prend désormais en charge que les noyaux GKI Version du noyau Empreinte digitale @@ -56,11 +54,7 @@ Par défaut Personnalisé Nom du profil - Espace de noms de montage - Hérité - Individuel Contexte SELinux - Global Groupes Capacités Démonter les modules @@ -90,7 +84,6 @@ ID de modèle invalide Synchroniser les modèles en ligne Créer un modèle - Lecture seule Importer/exporter Échec de l\'enregistrement du modèle Modifier le modèle diff --git a/manager/app/src/main/res/values-hi/strings.xml b/manager/app/src/main/res/values-hi/strings.xml index de1c2795..9d811ab9 100644 --- a/manager/app/src/main/res/values-hi/strings.xml +++ b/manager/app/src/main/res/values-hi/strings.xml @@ -9,24 +9,19 @@ लॉग भेजे डिसेबल्ड (बंद) हमें प्रोत्साहन दें - Inherited मॉड्यूल बंद कर दिए गए हैं क्योंकि यह मैजिक के साथ टकरा रहे है! क्या बदलाव हुए है पर्मिसिव डाउनलोड में रिबूट करें डिफ़ॉल्ट रूप से मॉड्यूल अनमाउन्ट करें इस विकल्प को चालू करने से KernelSU को इस एप्लिकेशन के लिए मॉड्यूल द्वारा किसी भी मोडिफाइड फ़ाइल को रिस्टोर करें। - Individual %s मॉड्यूल चालू करने में विफल जबर्दस्ती बंद करें EDL मोड में रिबूट करें फिर से चालू करें क्षमताएं - सुपरयूजर : %d %s की डाउनलोडिंग स्टार्ट करें - Global ऐप प्रोफाइल में \"अनमाउंट मॉड्यूल\" के लिए ग्लोबल डिफ़ॉल्ट वैल्यू। यदि चालू किया गया है, तो यह एप्लीकेशंस के लिऐ सिस्टम के सभी मॉड्यूल मोडिफिकेशन को हटा देगा जिनकी प्रोफ़ाइल सेट नहीं है। - मॉड्यूल्स : %d एनफोर्सिंग SELinux context फिंगरप्रिंट @@ -39,7 +34,6 @@ प्रोफाइल का नाम KernelSU मुफ़्त और ओपन सोर्स और हमेशा रहेगा। हालाँकि आप दान देकर हमें दिखा सकते हैं कि आप संरक्षण करते हैं। अनइंस्टॉल करें - Namspace माउंट करें इंस्टाल करें इंस्टाल करने के लिए क्लिक करें नियम diff --git a/manager/app/src/main/res/values-hr/strings.xml b/manager/app/src/main/res/values-hr/strings.xml index 594ae453..ee373a72 100644 --- a/manager/app/src/main/res/values-hr/strings.xml +++ b/manager/app/src/main/res/values-hr/strings.xml @@ -11,8 +11,6 @@ Verzija: %d Kliknite da instalirate Radi - Superkorisnici: %d - Moduli: %d Nepodržano KernelSU sada samo podržava GKI kernele Verzija kernela @@ -57,11 +55,7 @@ Šablon Prilagođeno Naziv profila - Naslijeđen - Imenski prostor nosača Ažuriranje Profila Aplikacije za %s nije uspjelo - Globalan - Pojedinačan Umount module Grupe Sposobnosti @@ -95,7 +89,6 @@ Spremi Izbriši Prikaži predložak - Samo za čitanje ID predloška već postoji! Uvoz/Izvoz Uvezi iz međuspremnika diff --git a/manager/app/src/main/res/values-hu/strings.xml b/manager/app/src/main/res/values-hu/strings.xml index 5604c989..f1404663 100644 --- a/manager/app/src/main/res/values-hu/strings.xml +++ b/manager/app/src/main/res/values-hu/strings.xml @@ -2,7 +2,6 @@ Működik Verzió: %d - Modulok: %d A KernelSU jelenleg csak GKI kerneleket támogat Kernel Alkalmazás verziója @@ -28,10 +27,7 @@ Sablon Egyedi Profil neve - Névtér csatlakoztatása - Örökölt https://kernelsu.org/guide/what-is-kernelsu.html - Különálló Csoportok Jogosultságok SELinux kontextus @@ -48,7 +44,6 @@ Kezdőlap Nincs telepítve Kattintson a telepítéshez - Engedélyezett alkalmazások: %d Nem támogatott SELinux állapot Kényszerített @@ -72,7 +67,6 @@ Naplók küldése Indítsa újra a készüléket a változások érvényesítéséhez A KernelSU ingyenes, nyílt forráskódú és mindig is az lesz. Ön azonban adományozással megmutathatja, hogy törődik a projekttel. - Globális Modulok leválasztása Nem sikerült frissíteni az App Profilt ehhez: %s A \"Modulok leválasztása\" globális alapértelmezett értéke az App Profile-ban. Ha engedélyezve van, eltávolít minden modulmódosítást a rendszerből azon alkalmazások esetében, amelyeknek nincs profilja beállítva. @@ -90,7 +84,6 @@ Hibás sablon ID Online sablonok szinkronizálása Sablon készítése - Csak olvasható Import/Export A sablon mentése sikertelen Sablon szerkesztése diff --git a/manager/app/src/main/res/values-in/strings.xml b/manager/app/src/main/res/values-in/strings.xml index 87e5e4db..59318913 100644 --- a/manager/app/src/main/res/values-in/strings.xml +++ b/manager/app/src/main/res/values-in/strings.xml @@ -5,8 +5,6 @@ Klik untuk menginstal Berfungsi Versi: %d - SuperUser: %d - Modul: %d Tidak didukung KernelSU saat ini hanya mendukung kernel GKI. Versi kernel @@ -57,10 +55,6 @@ Templat Khusus Nama profil - Gunakan Namespace - Diwariskan - Universal - Individual Kelompok Kemampuan Konteks SELinux @@ -102,7 +96,6 @@ Hapus Papan klip kosong! Lihat templat - readonly Debugging WebView Dapat digunakan untuk mendebug antarmuka web (WebUI). Harap aktifkan hanya saat diperlukan. %1$s image partisi terekomendasi diff --git a/manager/app/src/main/res/values-it/strings.xml b/manager/app/src/main/res/values-it/strings.xml index f601e5ae..48fbdd18 100644 --- a/manager/app/src/main/res/values-it/strings.xml +++ b/manager/app/src/main/res/values-it/strings.xml @@ -5,8 +5,6 @@ Clicca per installare In esecuzione Versione: %d - Applicazioni con accesso root: %d - Moduli installati: %d Non supportato KernelSU ora supporta solo i kernel GKI Kernel @@ -53,11 +51,7 @@ KernelSU è, e sempre sarà, gratuito e open source. Puoi comunque mostrarci il tuo apprezzamento facendo una donazione. Unisciti al nostro canale %2$s]]> Nome profilo - Spazio dei nomi del mount - Globale Gruppi - Ereditato - Individuale Predefinito Personalizzato Modello @@ -86,7 +80,6 @@ Identificativo modello non valido Nome Visualizza modello - Sola lettura L\'identificatore del modello è già in uso! Importa/Esporta Importa dagli appunti diff --git a/manager/app/src/main/res/values-iw/strings.xml b/manager/app/src/main/res/values-iw/strings.xml index 51ad608f..cfa7b31b 100644 --- a/manager/app/src/main/res/values-iw/strings.xml +++ b/manager/app/src/main/res/values-iw/strings.xml @@ -9,24 +9,19 @@ שלח לוג מושבת תמכו בנו - ירושה מודולים מושבתים מכיוון שהם מתנגשים עם זה של Magisk! יומן שינויים התרים הפעלה מחדש למצב הורדה טעינת מודולים כברירת מחדל הפעלת אפשרות זו תאפשר ל-KernelSU לשחזר קבצים שהשתנו על ידי המודולים עבור יישום זה. - אישי הפעלת המודל נכשלה: %s עצירה בכח הפעלה מחדש למצב EDL איתחול יכולת - משתמשי על: %d מפעיל מודל: %s - גלובלי ערך ברירת המחדל הגלובלי עבור \"טעינת מודולים\" בפרופילי אפליקציה. אם מופעל, זה יסיר את כל שינויי המודול למערכת עבור יישומים שאין להם ערכת פרופיל. - מודלים:%d אכיפה הקשר SELinux טביעת אצבע @@ -39,7 +34,6 @@ שם פרופיל KernelSU הוא, ותמיד יהיה, חינמי וקוד פתוח. עם זאת, תוכל להראות לנו שאכפת לך על ידי תרומה. הסרה - טעינת מרחב שמות התקנה לחץ להתקנה כללים diff --git a/manager/app/src/main/res/values-ja/strings.xml b/manager/app/src/main/res/values-ja/strings.xml index fde9039b..10d2acd4 100644 --- a/manager/app/src/main/res/values-ja/strings.xml +++ b/manager/app/src/main/res/values-ja/strings.xml @@ -5,8 +5,6 @@ タップでインストール 動作中 バージョン: %d - スーパーユーザー: %d - モジュール: %d 非対応 現在、 KernelSU は GKI カーネルにのみ対応しています カーネル @@ -57,10 +55,6 @@ テンプレート カスタム プロファイル名 - 名前空間のマウント - 継承 - 共通 - 分離 モジュールのアンマウント グループ SELinux コンテキスト @@ -91,7 +85,6 @@ 無効なテンプレート ID オンラインテンプレートの同期 テンプレートの作成 - 読み取り専用 インポート/エクスポート テンプレートの保存に失敗しました テンプレートの編集 diff --git a/manager/app/src/main/res/values-kn/strings.xml b/manager/app/src/main/res/values-kn/strings.xml index 51044c6e..ca82c493 100644 --- a/manager/app/src/main/res/values-kn/strings.xml +++ b/manager/app/src/main/res/values-kn/strings.xml @@ -8,22 +8,17 @@ Umount ಮಾಡ್ಯೂಲ್‌ಗಳು ಲಾಗ್ ಕಳುಹಿಸಿ ನಮ್ಮನ್ನು ಬೆಂಬಲಿಸಿ - ಪಿತ್ರಾರ್ಜಿತ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಮ್ಯಾಜಿಸ್ಕ್‌ನೊಂದಿಗೆ ಸಂಘರ್ಷವಾಗಿದೆ! ಚೇಂಜ್ಲಾಗ್ Permissive ಡೀಫಾಲ್ಟ್ ಆಗಿ Umount ಮಾಡ್ಯೂಲ್ ಈ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ ಮಾಡ್ಯೂಲ್‌ಗಳ ಮೂಲಕ ಯಾವುದೇ ಮಾರ್ಪಡಿಸಿದ ಫೈಲ್‌ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು KernelSU ಗೆ ಅನುಮತಿಸುತ್ತದೆ. - ವೈಯಕ್ತಿಕ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s ಫೋರ್ಸ್ ಸ್ಟಾಪ್ EDL ಗೆ ರೀಬೂಟ್ ಸಾಮರ್ಥ್ಯಗಳು - ಸೂಪರ್‌ಯೂಸರ್‌ಗಳು: %d ಡೌನ್‌ಲೋಡ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ: %s - ಜಾಗತಿಕ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್‌ಗಳಲ್ಲಿ \"Umount ಮಾಡ್ಯೂಲ್\" ಗಾಗಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ. ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಪ್ರೊಫೈಲ್ ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಸಿಸ್ಟಮ್‌ಗೆ ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್ ಮಾರ್ಪಾಡುಗಳನ್ನು ಇದು ತೆಗೆದುಹಾಕುತ್ತದೆ. - ಮಾಡ್ಯೂಲ್‌ಗಳು: %d SELinux ಸಂದರ್ಭ ಡೀಫಾಲ್ಟ್ ಲಾಂಚ್ @@ -33,7 +28,6 @@ ಪ್ರೊಫೈಲ್ ಹೆಸರು KernelSU ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲವಾಗಿದೆ ಮತ್ತು ಯಾವಾಗಲೂ ಇರುತ್ತದೆ. ಆದಾಗ್ಯೂ ನೀವು ದೇಣಿಗೆ ನೀಡುವ ಮೂಲಕ ನೀವು ಕಾಳಜಿ ವಹಿಸುತ್ತೀರಿ ಎಂದು ನಮಗೆ ತೋರಿಸಬಹುದು. ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ - ಮೌಂಟ್ ನೇಮ್‌ಸ್ಪೇಸ್ ನಿಯಮಗಳು ಗುಂಪುಗಳು ಓವರ್‌ಲೇಫ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ, ಮಾಡ್ಯೂಲ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ! diff --git a/manager/app/src/main/res/values-ko/strings.xml b/manager/app/src/main/res/values-ko/strings.xml index c96772c5..53e6f488 100644 --- a/manager/app/src/main/res/values-ko/strings.xml +++ b/manager/app/src/main/res/values-ko/strings.xml @@ -5,8 +5,6 @@ 이 곳을 눌러 설치하기 작동 중 버전: %d - 슈퍼유저: %d개 - 모듈: %d개 지원되지 않음 KernelSU는 현재 GKI 커널만 지원합니다. 커널 버전 @@ -62,10 +60,6 @@ 사용자 지정 템플릿 프로필 이름 - 마운트할 네임스페이스 - 상속 - 전역 - 개별 사용자 그룹 모듈 마운트 해제 SELinux 컨텍스트 @@ -107,7 +101,6 @@ 설명 저장 삭제 - 읽기 전용 템플릿 ID가 이미 존재합니다! 불러오기/내보내기 클립보드에서 불러오기 diff --git a/manager/app/src/main/res/values-lt/strings.xml b/manager/app/src/main/res/values-lt/strings.xml index 3699e4a8..51bef0a8 100644 --- a/manager/app/src/main/res/values-lt/strings.xml +++ b/manager/app/src/main/res/values-lt/strings.xml @@ -36,10 +36,6 @@ Šablonas Pasirinktinis Profilio pavadinimas - Prijungti vardų erdvę - Paveldėtas - Globalus - Individualus Grupės Galimybės SELinux kontekstas @@ -61,10 +57,8 @@ KernelSU dabar palaiko tik GKI branduolius Spustelėkite norėdami įdiegti Veikia - Supernaudotojai: %d Versija: %d Nepalaikoma - Moduliai: %d Tvarkyklės versija Branduolys SELinux statusas diff --git a/manager/app/src/main/res/values-lv/strings.xml b/manager/app/src/main/res/values-lv/strings.xml index e34a3eee..966e7b00 100644 --- a/manager/app/src/main/res/values-lv/strings.xml +++ b/manager/app/src/main/res/values-lv/strings.xml @@ -14,8 +14,6 @@ Noklikšķiniet, lai uzstādītu Darbojas Versija: %d - Superlietotāji: %d - Moduļi: %d Neatbalstīts KernelSU pagaidām atbalsta tikai GKI kodolus Kodols @@ -56,8 +54,6 @@ Veidne Pielāgots Profila vārds - Mount nosaukumvieta - Individuāls Iespējas SELinux konteksts Atvienot moduļus @@ -83,7 +79,6 @@ Saglabāt Dzēst Skatīt veidni - tikai lasīt Importēt/Eksportēt Nevar atrast vietējo eksportējamo veidni! Neizdevās saglabāt veidni @@ -99,12 +94,10 @@ Moduļi nav pieejami dēļ konflikta ar Magisk! KernelSU ir un vienmēr būs bezmaksas un atvērtā koda. Tomēr jūs varat parādīt mums, ka jums rūp, veicot ziedojumu. Grupas - Globāli Pašreizējā KernelSU versija %d ir pārāk zema, lai pārvaldnieks darbotos pareizi. Lūdzu, atjauniniet uz versiju %d vai jaunāku! Iespējot WebView atkļūdošanu Ieteicams %1$s nodalījuma attēls Nākamais - Mantots Izvēlieties failu Instalēt neaktīvajā slotā (pēc OTA) Pēc restartēšanas jūsu ierīce tiks **PIESPIESTI** palaista pašreizējā neaktīvajā slotā! diff --git a/manager/app/src/main/res/values-mr/strings.xml b/manager/app/src/main/res/values-mr/strings.xml index 15c4dba9..32ccb0c9 100644 --- a/manager/app/src/main/res/values-mr/strings.xml +++ b/manager/app/src/main/res/values-mr/strings.xml @@ -5,8 +5,6 @@ इंस्टॉल साठी क्लिक करा कार्यरत आवृत्ती: %d - मॉड्यूल्स: %d - सुपरयूझर: %d असमर्थित KernelSU आता फक्त GKI कर्नलचे समर्थन करते कर्नल @@ -52,15 +50,11 @@ KernelSU विनामूल्य आणि मुक्त स्रोत आहे, आणि नेहमीच असेल. तथापि, देणगी देऊन तुम्ही आम्हाला दाखवू शकता की तुमची काळजी आहे. आम्हाला पाठिंबा द्या कस्टम - माउंट नेमस्पेस डीफॉल्ट साचा - वैयक्तिक क्षमता %1$s वर स्रोत कोड पहा
आमच्या %2$s चॅनेलमध्ये सामील व्हा
प्रोफाइल नाव - इनहेरीटेड - जागतिक गट SELinux संदर्भ उमाउंट मॉड्यूल्स diff --git a/manager/app/src/main/res/values-ms/strings.xml b/manager/app/src/main/res/values-ms/strings.xml index 67215ee7..ed2601c1 100644 --- a/manager/app/src/main/res/values-ms/strings.xml +++ b/manager/app/src/main/res/values-ms/strings.xml @@ -6,8 +6,6 @@ Reboot ke Download Modul tidak berjaya diaktifkan: %s Reboot ke EDL - Superusers: %d - Modul: %d Enforcing Cap Jari Reboot ke Recovery diff --git a/manager/app/src/main/res/values-nl/strings.xml b/manager/app/src/main/res/values-nl/strings.xml index ad39d491..a9be8749 100644 --- a/manager/app/src/main/res/values-nl/strings.xml +++ b/manager/app/src/main/res/values-nl/strings.xml @@ -5,8 +5,6 @@ Klik om te installeren Werkend Versie: %d - Supergebruikers: %d - Modules: %d Niet ondersteund KernelSU ondersteunt alleen GKI kernels Kernel version @@ -57,10 +55,6 @@ Sjabloon Aangepast Profiel naam - Koppel naamruimte - Overgenomen - Globaal - Individuëel Groepen Mogelijkheden SELinux context @@ -92,7 +86,6 @@ Beschrijving Beheer lokale en online sjabloon van app-profiel. Verwijderen - Alleen lezen Sjabloon ID bestaat al! Synchroniseer online-sjablonen Mislukt naar opslaan sjabloon diff --git a/manager/app/src/main/res/values-pl/strings.xml b/manager/app/src/main/res/values-pl/strings.xml index 276d3f23..372c9e3e 100644 --- a/manager/app/src/main/res/values-pl/strings.xml +++ b/manager/app/src/main/res/values-pl/strings.xml @@ -6,8 +6,6 @@ Kliknij, aby zainstalować Działa Wersja: %d - Superużytkownicy: %d - Moduły: %d Nieobsługiwany KernelSU obsługuje obecnie tylko jądra GKI. Wersja jądra @@ -58,10 +56,6 @@ Szablon Własny Nazwa profilu - Przestrzeń nazw montowania - Odziedziczona - Globalna - Indywidualna Grupy Uprawnienia Kontekst SELinux @@ -99,7 +93,6 @@ Opis Zapisz Usuń - Tylko do odczytu Importuj/Eksportuj Importuj ze schowka Eksportuj do schowka diff --git a/manager/app/src/main/res/values-pt-rBR/strings.xml b/manager/app/src/main/res/values-pt-rBR/strings.xml index aa13f600..068bd62c 100644 --- a/manager/app/src/main/res/values-pt-rBR/strings.xml +++ b/manager/app/src/main/res/values-pt-rBR/strings.xml @@ -5,8 +5,6 @@ Clique para instalar Em execução Versão: %d - SuperUsuários: %d - Módulos: %d Sem suporte KernelSU suporta apenas kernels GKI agora Versão do kernel @@ -57,10 +55,6 @@ Modelo Personalizado Nome do perfil - Montar namespace - Herdado - Global - Individual Grupos Capacidades Contexto do SELinux @@ -91,7 +85,6 @@ ID do modelo inválido Sincronizar modelos online Criar modelo - Somente leitura Importar/Exportar Falha ao salvar o modelo Editar modelo diff --git a/manager/app/src/main/res/values-pt/strings.xml b/manager/app/src/main/res/values-pt/strings.xml index f5b50fde..f708ff76 100644 --- a/manager/app/src/main/res/values-pt/strings.xml +++ b/manager/app/src/main/res/values-pt/strings.xml @@ -4,8 +4,6 @@ Início Clique para instalar Funcionando - Super Usuário: %d - Módulos: %d Versão: %d Kernel Instalar @@ -46,14 +44,10 @@ Aprenda a instalar o KernelSU e usar os módulos O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação. Veja o código-fonte em %1$s
Junte-se ao nosso canal %2$s
- Individual - Global - Herdado Padrão Modelo Personalizado Nome do perfil - Montar namespace Modo de segurança Reinicie para entrar em vigor Aprender KernelSU diff --git a/manager/app/src/main/res/values-ro/strings.xml b/manager/app/src/main/res/values-ro/strings.xml index 6149f955..357a3e48 100644 --- a/manager/app/src/main/res/values-ro/strings.xml +++ b/manager/app/src/main/res/values-ro/strings.xml @@ -5,8 +5,6 @@ Click pentru a instala Funcționează Versiune: %d - Super-utilizatori: %d - Module: %d Necompatibil KernelSU suportă doar nuclee GKI acum Nucleu @@ -56,10 +54,6 @@ Șablon Personalizat Nume profil - Montare spațiu de nume - Moștenit - Global - Individual Grupuri Capabilități Context SELinux @@ -90,7 +84,6 @@ ID șablon nevalid Sincronizează șabloanele online Creează un șablon - doar citire Import/Export Nu s-a salvat șablonul Editează șablonul diff --git a/manager/app/src/main/res/values-ru/strings.xml b/manager/app/src/main/res/values-ru/strings.xml index 951b5a24..88faaad4 100644 --- a/manager/app/src/main/res/values-ru/strings.xml +++ b/manager/app/src/main/res/values-ru/strings.xml @@ -5,9 +5,7 @@ Нажмите, чтобы установить Работает Версия: %d - Суперпользователи: %d - Модули: %d Не поддерживается KernelSU поддерживает только GKI ядра. Версия ядра @@ -60,10 +58,6 @@ Шаблон Пользовательский Название профиля - Монтировать пространство имен - Унаследованный - Глобальный - Индивидуальный Группы Возможности Контекст SELinux @@ -94,7 +88,6 @@ Неверный ID шаблона Синхронизировать онлайн-шаблоны Создать шаблон - Только чтение Импорт/Экспорт Не удалось сохранить шаблон Редактирование шаблона diff --git a/manager/app/src/main/res/values-sl/strings.xml b/manager/app/src/main/res/values-sl/strings.xml index 2a0a6518..be3b7405 100644 --- a/manager/app/src/main/res/values-sl/strings.xml +++ b/manager/app/src/main/res/values-sl/strings.xml @@ -3,7 +3,6 @@ Klikni za namestitev V obdelavi Verzija: %d - Superuporabniki: %d KernelSU podpira samo GKI kernele Kernel Verzija upravitelja @@ -33,10 +32,6 @@ Glej odprto kodo na %1$s
Pridružite se našem %2$s kanalu
Privzeto Predloga - Imenski prostor vmestitve - Podedovano - Globalno - Pozameznik Zmožnosti Izvrzi module Po privzetem izvrzi module @@ -48,7 +43,6 @@ Dnevnik sprememb Predloga za aplikacijski profil Domov - Moduli: %d Ne podpira SuperUporabnik Napaka pri omogočanju modula: %s @@ -87,7 +81,6 @@ Opis Shrani Odstrani - le za branje id predloge že obstaja! Uvoz iz odložišča Izvoz v odložišče diff --git a/manager/app/src/main/res/values-sr/strings.xml b/manager/app/src/main/res/values-sr/strings.xml index 73920b6f..5ede2b29 100644 --- a/manager/app/src/main/res/values-sr/strings.xml +++ b/manager/app/src/main/res/values-sr/strings.xml @@ -1,7 +1,5 @@ - Superkorisnici - Moduli: %d Додирните да бисте инсталирали Почетна Није инсталирано diff --git a/manager/app/src/main/res/values-te/strings.xml b/manager/app/src/main/res/values-te/strings.xml index 9887318f..1263f9c5 100644 --- a/manager/app/src/main/res/values-te/strings.xml +++ b/manager/app/src/main/res/values-te/strings.xml @@ -15,7 +15,5 @@ ఇన్‌స్టాల్ చేయడానికి క్లిక్ చేయండి పని చేస్తోంది వెర్షన్: %d - సూపర్‌యూజర్‌లు: %d - మాడ్యూల్స్: %d లాగ్‌లు సేవ్ చేయండి diff --git a/manager/app/src/main/res/values-th/strings.xml b/manager/app/src/main/res/values-th/strings.xml index 13aa68ff..499d3b04 100644 --- a/manager/app/src/main/res/values-th/strings.xml +++ b/manager/app/src/main/res/values-th/strings.xml @@ -6,8 +6,6 @@ กำลังทำงาน เวอร์ชัน: %d เวอร์ชันตัวจัดการ - สิทธิ์ผู้ใช้ขั้นสูง: %d - โมดูล: %d ไม่รองรับ Enforcing รีบูตเข้าสู่โหมดกู้คืน @@ -56,10 +54,6 @@ ค่าเริ่มต้น เทมเพลต ชื่อโปรไฟล์ - Mount เนมสเปซ - ทั่วไป - สืบทอด - ส่วนบุคคล หมวดหมู่ ความสามารถของแอป การเปิดใช้งานตัวเลือกนี้จะทำให้ KernelSU สามารถกู้คืนไฟล์ที่แก้ไขโดยโมดูลสำหรับแอปนี้ได้ @@ -89,7 +83,6 @@ ไอดีเทมเพลตไม่ถูกต้อง ซิงค์เทมเพลตออนไลน์ สร้างเทมเพลต - อ่านเท่านั้น นำเข้า/ส่งออก ไม่สามารถบันทึกเทมเพลต แก้ไขเทมเพลต diff --git a/manager/app/src/main/res/values-tr/strings.xml b/manager/app/src/main/res/values-tr/strings.xml index 4f7a5bb2..439299a4 100644 --- a/manager/app/src/main/res/values-tr/strings.xml +++ b/manager/app/src/main/res/values-tr/strings.xml @@ -6,8 +6,6 @@ Kurmak için tıklayın Çalışıyor Sürüm: %d - Süper kullanıcılar: %d - Modüller: %d Desteklenmiyor KernelSU şimdilik sadece GKI çekirdeklerini destekliyor Çekirdek Versiyonu @@ -58,10 +56,6 @@ Şablon Özel Profil adı - Ad alanını bağla - Kalıtsal - Küresel - Bireysel Gruplar Yetkinlikler SELinux içeriği @@ -93,7 +87,6 @@ Kaydet Sil Şablonu görüntüle - Salt okunur Şablon kimliği zaten var! İçe aktar/Dışa aktar Panodan içe aktar diff --git a/manager/app/src/main/res/values-uk/strings.xml b/manager/app/src/main/res/values-uk/strings.xml index d603f92a..8f243f12 100644 --- a/manager/app/src/main/res/values-uk/strings.xml +++ b/manager/app/src/main/res/values-uk/strings.xml @@ -5,8 +5,6 @@ Натисніть щоб встановити Працює Версія: %d - Суперкористувачі: %d - Модулі: %d Не підтримується KernelSU зараз підтримує лише ядра GKI. Версія ядра @@ -57,10 +55,6 @@ Шаблон Власний Назва профілю - Змонтувати простір імен - Наслідуваний - Глобальний - Індивідуальний Групи Можливості Контекст SELinux @@ -91,7 +85,6 @@ Недійсний ідентифікатор шаблону Синхронізувати мережеві шаблони Створити шаблон - Тільки для читання Імпорт/Експорт Помилка при збереженні шаблону Редагувати шаблон diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml index bd8da6ee..f9f97d32 100644 --- a/manager/app/src/main/res/values-vi/strings.xml +++ b/manager/app/src/main/res/values-vi/strings.xml @@ -64,19 +64,13 @@ Chế độ an toàn Khởi động lại để có hiệu lực https://kernelsu.org/guide/what-is-kernelsu.html - Superusers: %d - Modules: %d Tên miền Quy tắc Khởi chạy Khởi động lại - Không gian tên Tính tương thích Cập nhật quy tắc SELinux cho %s thất bại Buộc dừng - Thừa hưởng - Toàn cục - Riêng biệt Bối cảnh SELinux Umount modules Phiên bản KernelSU hiện tại %d quá thấp để trình quản lý hoạt động bình thường. Vui lòng cập nhật lên phiên bản %d hoặc cao hơn! @@ -101,7 +95,6 @@ Xóa Bộ nhớ tạm đang trống! Xem mẫu - Chỉ đọc ID Gỡ lỗi WebView Có thể sử dụng để gỡ lỗi WebUI. Vui lòng chỉ bật khi cần thiết. diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index 3497f323..43aabebb 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -5,7 +5,6 @@ 点击安装 工作中 版本:%d - 超级用户数:%d 不支持 内核上未检测到 KernelSU 驱动程序,内核错误? 内核版本 @@ -48,7 +47,6 @@ 安全模式 重启生效 因与 Magisk 有冲突,所有模块不可用! - 模块数:%d 了解 KernelSU https://kernelsu.org/zh_CN/guide/what-is-kernelsu.html 了解如何安装 KernelSU 以及如何开发模块 @@ -59,10 +57,6 @@ 模版 自定义 名称 - 命名空间 - 继承 - 全局 - 私有 权能 SELinux @@ -95,7 +89,6 @@ 保存 删除 查看模版 - 只读 模版 ID 已存在! 导入/导出 从剪切板导入 @@ -194,7 +187,6 @@ 搜索 清空日志 确定要清空选中的日志文件吗?此操作无法撤销。 - 日志清空成功 按类型筛选 所有类型 显示 %1$d / %2$d 条记录 @@ -203,7 +195,6 @@ 刷新 原始日志 按 UID、命令或详情搜索… - 清除搜索 查看 KernelSU 超级用户访问日志 排除子类型 当前应用 @@ -221,7 +212,6 @@ 启用动态管理器 动态管理器签名大小 动态管理器签名哈希 - 哈希必须是 64 个 16 进制字符 动态管理器配置设置成功 设置动态管理器配置失败 无效的管理器配置 @@ -239,14 +229,12 @@ 运行环境清理失败 Umount 路径管理 - 管理内核卸载路径 添加或删除路径后需要重启设备才能生效。系统会在下次启动时应用新的配置。 添加 Umount 路径 挂载路径 卸载标志 0=正常卸载, 8=MNT_DETACH, -1=自动 标志 - 默认条目 确认删除 确定要删除路径 %s 吗? 路径已添加,重启后生效 @@ -261,9 +249,17 @@ 个性化 自定义应用外观和主题 - 主题设置 - 主题模式 - 选择应用的显示主题 + 自定义壁纸 + 选择一张图片作为应用背景。 + 已应用壁纸 + 更换 + 移除 + 壁纸透明度:%1$d%% + 壁纸缩放 + 选择壁纸如何适配背景 + 填充 + 拉伸 + 适应 刷入完成 准备中… @@ -285,20 +281,14 @@ 复制失败 未知错误 刷入失败 - LKM 修复/安装 - 刷入 AnyKernel3 内核版本:%1$s 使用的修补工具:%1$s - 配置 - 应用程序设置 工具 需要root权限 KPM 补丁 用于添加额外的KPM功能 KPM 补丁 - 在刷入前对内核镜像应用KPM补丁 KPM 撤销补丁 - 撤销之前应用的KPM补丁 KPM 补丁已启用 KPM 撤销补丁已启用 KPM 补丁模式 @@ -316,7 +306,6 @@ KPM 撤销补丁失败 KPM 补丁操作失败: %s 跟随内核 - 原样使用内核,不进行任何KPM修改 内核刷入 AnyKernel3 内核 刷入AnyKernel3格式的内核zip包 @@ -332,18 +321,11 @@ kpm 模块加载失败 参数 执行 - KPM 版本 关闭 以下内核模块功能由 KernelPatch 开发,并经过修改后加入了 SukiSU Ultra 的内核模块功能 - SukiSU Ultra 期待 成功 失败 - SukiSU Ultra 在未来将是 KSU 的相对独立分支,但我们仍然感谢官方 KernelSU 和 MKSU 等的贡献! 不支持 - 支持 - 内核未修补 - 内核未配置 - 自定义设置 KPM 安装 加载 嵌入 diff --git a/manager/app/src/main/res/values-zh-rHK/strings.xml b/manager/app/src/main/res/values-zh-rHK/strings.xml index 6ac997ff..b691e2ea 100644 --- a/manager/app/src/main/res/values-zh-rHK/strings.xml +++ b/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -5,8 +5,6 @@ 按一下以安裝 運作中 KernelSU 版本:%d - 超級使用者:%d 個 - 已安裝模組:%d 個 不支援 KernelSU 現在僅支援 GKI 核心 核心 @@ -55,8 +53,6 @@ 預設 設定檔名稱 範本 - 繼承 - 全域 功能 卸載模組 無法更新 %s 應用程式設定檔 @@ -67,8 +63,6 @@ 網域 更新 自訂 - 掛載命名空間 - 個人 群組 SELinux 環境 預設解除安裝模組 @@ -90,7 +84,6 @@ 模板 ID 無效 同步在線規則 創建模板 - 只讀 匯出 / 匯入 模板儲存失敗 編輯模板 diff --git a/manager/app/src/main/res/values-zh-rTW/strings.xml b/manager/app/src/main/res/values-zh-rTW/strings.xml index facfa684..015cedc0 100644 --- a/manager/app/src/main/res/values-zh-rTW/strings.xml +++ b/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -5,7 +5,6 @@ 點選開始安裝 已開始運作 版本:%d - 授權:%d 個應用程式 未受支援 KernelSU 目前僅支援 GKI 核心 核心版本 @@ -45,7 +44,6 @@ 安全模式 將在重新啟動時生效 與 Magisk 發生衝突,無法使用模組功能! - 掛載:%d 個模組 深入瞭解 KernelSU https://kernelsu.org/zh_TW/guide/what-is-kernelsu.html 知曉安裝、使用 KernelSU 本體與其模組功能的方法 @@ -66,10 +64,6 @@ 重新執行 範本 Profile 名稱 - 命名空間掛載 - 繼承 - 全域 - 個體 群組 SELinux 上下文 定域 @@ -94,7 +88,6 @@ 無法取得更新說明:%s 名稱 同步線上範本 - 唯讀 匯入/匯出 無法儲存範本 說明 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 63150345..8774d10f 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -6,8 +6,6 @@ Click to install Working Version: %d - Superusers: %d - Modules: %d Unsupported No KernelSU driver detected on your kernel, wrong kernel? Kernel version @@ -63,10 +61,6 @@ Template Custom Profile name - Mount namespace - Inherited - Global - Individual Groups Capabilities SELinux context @@ -99,7 +93,6 @@ Save Delete View template - Read only Template ID already exists! Import/Export Import from clipboard @@ -199,7 +192,6 @@ Search Clear Logs Are you sure you want to clear the selected log file? This action cannot be undone. - Logs cleared successfully Filter by Type All Types Showing %1$d of %2$d entries @@ -208,7 +200,6 @@ Refresh Raw Log Search by UID, command, or details… - Clear search View KernelSU superuser access logs Exclude sub-types Current App @@ -226,7 +217,6 @@ Enable Dynamic Manager Dynamic Manager Signature Size Dynamic Manager Signature Hash - Hash must be 64 hexadecimal characters Dynamic Manager configuration set successfully Failed to set dynamic Manager configuration Invalid Manager configuration @@ -245,14 +235,12 @@ Failed to clean runtime environment Umount Path Management - Manage kernel unmount paths A reboot is required for changes to take effect. The system will apply the new configuration on the next boot. Add Umount Path Mount Path Unmount Flags 0=Normal unmount, 8=MNT_DETACH, -1=Auto Flags - Default Entry Confirm Delete Are you sure you want to delete the path %s? Path added, will take effect after reboot @@ -268,9 +256,17 @@ Personalization Customize the app\'s appearance and theme - Theme Settings - Theme Mode - Select the app\'s display theme + Custom wallpaper + Choose an image as the app background. + Wallpaper applied + Replace + Remove + Wallpaper transparency: %1$d%% + Wallpaper scaling + Choose how the wallpaper should fit the background. + Fill + Stretch + Fit Flash Complete Preparing… @@ -292,20 +288,14 @@ Copy failed Unknown error Flash failed - LKM repair/installation - Flashing AnyKernel3 Kernel version:%1$s Using the patching tool:%1$s - Configure - Application Settings Tools Requires root privileges KPM Patch For adding additional KPM features KPM Patch - Apply KPM patch to kernel image before flashing KPM Undo Patch - Undo previously applied KPM patch KPM patch enabled KPM undo patch enabled KPM Patch Mode @@ -323,7 +313,6 @@ KPM undo patch failed KPM patch operation failed: %s Follow Kernel - Use kernel as-is without any KPM modifications Kernel Flashing AnyKernel3 Kernel Flash AnyKernel3 format kernel zip @@ -340,18 +329,11 @@ Load of kpm module failed Parameters Execute - KPM Version Close The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra - SukiSU Ultra Look forward to Success Failed - SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions! Unsupported - Supported - Kernel not patched - Kernel not configured - Custom settings KPM Install Load Embed