From 561c82de0ae09b3d73b8aab8369c67432949480d Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Sun, 22 Jun 2025 18:31:11 +0800 Subject: [PATCH] manager: Refactoring the SuSFS configuration layout and simplifying functions --- .../ultra/ui/component/SuSFSConfigDialogs.kt | 517 ++++++ .../ultra/ui/component/SuSFSConfigTabs.kt | 579 +++++++ .../com/sukisu/ultra/ui/screen/SuSFSConfig.kt | 1526 +++++------------ .../extensions/SuSFSConfigExtensions.kt | 405 ----- .../com/sukisu/ultra/ui/util/SuSFSManager.kt | 4 +- .../app/src/main/res/values-ar/strings.xml | 45 - .../app/src/main/res/values-az/strings.xml | 45 - .../src/main/res/values-bn-rBD/strings.xml | 7 - .../app/src/main/res/values-bn/strings.xml | 6 - .../app/src/main/res/values-bs/strings.xml | 45 - .../app/src/main/res/values-da/strings.xml | 45 - .../app/src/main/res/values-de/strings.xml | 45 - .../app/src/main/res/values-es/strings.xml | 45 - .../app/src/main/res/values-et/strings.xml | 45 - .../app/src/main/res/values-fa/strings.xml | 45 - .../app/src/main/res/values-fil/strings.xml | 45 - .../app/src/main/res/values-fr/strings.xml | 45 - .../app/src/main/res/values-hi/strings.xml | 45 - .../app/src/main/res/values-hr/strings.xml | 45 - .../app/src/main/res/values-hu/strings.xml | 45 - .../app/src/main/res/values-in/strings.xml | 8 - .../app/src/main/res/values-it/strings.xml | 45 - .../app/src/main/res/values-iw/strings.xml | 7 - .../app/src/main/res/values-ja/strings.xml | 6 - .../app/src/main/res/values-kn/strings.xml | 45 - .../app/src/main/res/values-ko/strings.xml | 45 - .../app/src/main/res/values-lt/strings.xml | 45 - .../app/src/main/res/values-lv/strings.xml | 45 - .../app/src/main/res/values-mr/strings.xml | 45 - .../app/src/main/res/values-ms/strings.xml | 45 - .../app/src/main/res/values-nl/strings.xml | 45 - .../app/src/main/res/values-pl/strings.xml | 45 - .../src/main/res/values-pt-rBR/strings.xml | 8 - .../app/src/main/res/values-pt/strings.xml | 45 - .../app/src/main/res/values-ro/strings.xml | 45 - .../app/src/main/res/values-sl/strings.xml | 45 - .../app/src/main/res/values-sr/strings.xml | 2 - .../app/src/main/res/values-te/strings.xml | 2 - .../app/src/main/res/values-th/strings.xml | 45 - .../app/src/main/res/values-tr/strings.xml | 64 - .../app/src/main/res/values-uk/strings.xml | 45 - .../app/src/main/res/values-vi/strings.xml | 6 - .../src/main/res/values-zh-rCN/strings.xml | 9 +- .../src/main/res/values-zh-rHK/strings.xml | 6 - .../src/main/res/values-zh-rTW/strings.xml | 6 - manager/app/src/main/res/values/strings.xml | 7 +- 46 files changed, 1491 insertions(+), 2899 deletions(-) create mode 100644 manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigDialogs.kt create mode 100644 manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigDialogs.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigDialogs.kt new file mode 100644 index 00000000..9dc0d300 --- /dev/null +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigDialogs.kt @@ -0,0 +1,517 @@ +package com.sukisu.ultra.ui.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.ExposedDropdownMenuDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.MenuAnchorType +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.sukisu.ultra.R + +/** + * 添加路径对话框 + */ +@Composable +fun AddPathDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + onConfirm: (String) -> Unit, + isLoading: Boolean, + titleRes: Int, + labelRes: Int, + placeholderRes: Int +) { + var newPath by remember { mutableStateOf("") } + + if (showDialog) { + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text( + stringResource(titleRes), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + }, + text = { + OutlinedTextField( + value = newPath, + onValueChange = { newPath = it }, + label = { Text(stringResource(labelRes)) }, + placeholder = { Text(stringResource(placeholderRes)) }, + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(8.dp) + ) + }, + confirmButton = { + Button( + onClick = { + if (newPath.isNotBlank()) { + onConfirm(newPath.trim()) + newPath = "" + } + }, + enabled = newPath.isNotBlank() && !isLoading, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.susfs_add)) + } + }, + dismissButton = { + TextButton( + onClick = { + onDismiss() + newPath = "" + }, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.cancel)) + } + }, + shape = RoundedCornerShape(12.dp) + ) + } +} + +/** + * 添加尝试卸载对话框 + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AddTryUmountDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + onConfirm: (String, Int) -> Unit, + isLoading: Boolean +) { + var newUmountPath by remember { mutableStateOf("") } + var newUmountMode by remember { mutableIntStateOf(0) } + var umountModeExpanded by remember { mutableStateOf(false) } + + if (showDialog) { + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text( + stringResource(R.string.susfs_add_try_umount), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + }, + text = { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + OutlinedTextField( + value = newUmountPath, + onValueChange = { newUmountPath = it }, + label = { Text(stringResource(R.string.susfs_path_label)) }, + placeholder = { Text(stringResource(R.string.susfs_path_placeholder)) }, + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(8.dp) + ) + + ExposedDropdownMenuBox( + expanded = umountModeExpanded, + onExpandedChange = { umountModeExpanded = !umountModeExpanded } + ) { + OutlinedTextField( + value = if (newUmountMode == 0) + stringResource(R.string.susfs_umount_mode_normal) + else + stringResource(R.string.susfs_umount_mode_detach), + onValueChange = { }, + readOnly = true, + label = { Text(stringResource(R.string.susfs_umount_mode_label)) }, + trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = umountModeExpanded) }, + modifier = Modifier + .fillMaxWidth() + .menuAnchor(MenuAnchorType.PrimaryEditable, true), + shape = RoundedCornerShape(8.dp) + ) + ExposedDropdownMenu( + expanded = umountModeExpanded, + onDismissRequest = { umountModeExpanded = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.susfs_umount_mode_normal)) }, + onClick = { + newUmountMode = 0 + umountModeExpanded = false + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.susfs_umount_mode_detach)) }, + onClick = { + newUmountMode = 1 + umountModeExpanded = false + } + ) + } + } + } + }, + confirmButton = { + Button( + onClick = { + if (newUmountPath.isNotBlank()) { + onConfirm(newUmountPath.trim(), newUmountMode) + newUmountPath = "" + newUmountMode = 0 + } + }, + enabled = newUmountPath.isNotBlank() && !isLoading, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.susfs_add)) + } + }, + dismissButton = { + TextButton( + onClick = { + onDismiss() + newUmountPath = "" + newUmountMode = 0 + }, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.cancel)) + } + }, + shape = RoundedCornerShape(12.dp) + ) + } +} + +/** + * 添加Kstat静态配置对话框 + */ +@Composable +fun AddKstatStaticallyDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + onConfirm: (String, String, String, String, String, String, String, String, String, String, String, String, String) -> Unit, + isLoading: Boolean +) { + var newKstatPath by remember { mutableStateOf("") } + var newKstatIno by remember { mutableStateOf("") } + var newKstatDev by remember { mutableStateOf("") } + var newKstatNlink by remember { mutableStateOf("") } + var newKstatSize by remember { mutableStateOf("") } + var newKstatAtime by remember { mutableStateOf("") } + var newKstatAtimeNsec by remember { mutableStateOf("") } + var newKstatMtime by remember { mutableStateOf("") } + var newKstatMtimeNsec by remember { mutableStateOf("") } + var newKstatCtime by remember { mutableStateOf("") } + var newKstatCtimeNsec by remember { mutableStateOf("") } + var newKstatBlocks by remember { mutableStateOf("") } + var newKstatBlksize by remember { mutableStateOf("") } + + if (showDialog) { + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text( + stringResource(R.string.add_kstat_statically_title), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + }, + text = { + Column( + modifier = Modifier.verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatPath, + onValueChange = { newKstatPath = it }, + label = { Text(stringResource(R.string.file_or_directory_path_label)) }, + placeholder = { Text("/path/to/file_or_directory") }, + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(8.dp) + ) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatIno, + onValueChange = { newKstatIno = it }, + label = { Text("ino") }, + placeholder = { Text("1234") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatDev, + onValueChange = { newKstatDev = it }, + label = { Text("dev") }, + placeholder = { Text("1234") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatNlink, + onValueChange = { newKstatNlink = it }, + label = { Text("nlink") }, + placeholder = { Text("2") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatSize, + onValueChange = { newKstatSize = it }, + label = { Text("size") }, + placeholder = { Text("223344") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatAtime, + onValueChange = { newKstatAtime = it }, + label = { Text("atime") }, + placeholder = { Text("1712592355") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatAtimeNsec, + onValueChange = { newKstatAtimeNsec = it }, + label = { Text("atime_nsec") }, + placeholder = { Text("0") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatMtime, + onValueChange = { newKstatMtime = it }, + label = { Text("mtime") }, + placeholder = { Text("1712592355") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatMtimeNsec, + onValueChange = { newKstatMtimeNsec = it }, + label = { Text("mtime_nsec") }, + placeholder = { Text("0") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatCtime, + onValueChange = { newKstatCtime = it }, + label = { Text("ctime") }, + placeholder = { Text("1712592355") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatCtimeNsec, + onValueChange = { newKstatCtimeNsec = it }, + label = { Text("ctime_nsec") }, + placeholder = { Text("0") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + OutlinedTextField( + value = newKstatBlocks, + onValueChange = { newKstatBlocks = it }, + label = { Text("blocks") }, + placeholder = { Text("16") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + OutlinedTextField( + value = newKstatBlksize, + onValueChange = { newKstatBlksize = it }, + label = { Text("blksize") }, + placeholder = { Text("512") }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(8.dp) + ) + } + + Text( + text = stringResource(R.string.hint_use_default_value), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + }, + confirmButton = { + Button( + onClick = { + if (newKstatPath.isNotBlank()) { + onConfirm( + newKstatPath.trim(), + newKstatIno.trim().ifBlank { "default" }, + newKstatDev.trim().ifBlank { "default" }, + newKstatNlink.trim().ifBlank { "default" }, + newKstatSize.trim().ifBlank { "default" }, + newKstatAtime.trim().ifBlank { "default" }, + newKstatAtimeNsec.trim().ifBlank { "default" }, + newKstatMtime.trim().ifBlank { "default" }, + newKstatMtimeNsec.trim().ifBlank { "default" }, + newKstatCtime.trim().ifBlank { "default" }, + newKstatCtimeNsec.trim().ifBlank { "default" }, + newKstatBlocks.trim().ifBlank { "default" }, + newKstatBlksize.trim().ifBlank { "default" } + ) + // 清空所有字段 + newKstatPath = "" + newKstatIno = "" + newKstatDev = "" + newKstatNlink = "" + newKstatSize = "" + newKstatAtime = "" + newKstatAtimeNsec = "" + newKstatMtime = "" + newKstatMtimeNsec = "" + newKstatCtime = "" + newKstatCtimeNsec = "" + newKstatBlocks = "" + newKstatBlksize = "" + } + }, + enabled = newKstatPath.isNotBlank() && !isLoading, + shape = RoundedCornerShape(8.dp) + ) { + Text("添加") + } + }, + dismissButton = { + TextButton( + onClick = { + onDismiss() + // 清空所有字段 + newKstatPath = "" + newKstatIno = "" + newKstatDev = "" + newKstatNlink = "" + newKstatSize = "" + newKstatAtime = "" + newKstatAtimeNsec = "" + newKstatMtime = "" + newKstatMtimeNsec = "" + newKstatCtime = "" + newKstatCtimeNsec = "" + newKstatBlocks = "" + newKstatBlksize = "" + }, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.cancel)) + } + }, + shape = RoundedCornerShape(12.dp) + ) + } +} + +/** + * 确认对话框 + */ +@Composable +fun ConfirmDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + onConfirm: () -> Unit, + titleRes: Int, + messageRes: Int, + isLoading: Boolean = false, + isDestructive: Boolean = false +) { + if (showDialog) { + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text( + text = stringResource(titleRes), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + }, + text = { Text(stringResource(messageRes)) }, + confirmButton = { + Button( + onClick = onConfirm, + enabled = !isLoading, + colors = if (isDestructive) { + ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.error + ) + } else { + ButtonDefaults.buttonColors() + }, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.confirm)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.cancel)) + } + }, + shape = RoundedCornerShape(12.dp) + ) + } +} \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt new file mode 100644 index 00000000..33982c24 --- /dev/null +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt @@ -0,0 +1,579 @@ +package com.sukisu.ultra.ui.component + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.Folder +import androidx.compose.material.icons.filled.PlayArrow +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.Storage +import androidx.compose.material3.Button +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.sukisu.ultra.R +import com.sukisu.ultra.ui.screen.extensions.AddKstatPathItemCard +import com.sukisu.ultra.ui.screen.extensions.EmptyStateCard +import com.sukisu.ultra.ui.screen.extensions.FeatureStatusCard +import com.sukisu.ultra.ui.screen.extensions.KstatConfigItemCard +import com.sukisu.ultra.ui.screen.extensions.PathItemCard +import com.sukisu.ultra.ui.screen.extensions.SusMountHidingControlCard +import com.sukisu.ultra.ui.util.SuSFSManager + +/** + * SUS路径内容组件 + */ +@Composable +fun SusPathsContent( + susPaths: Set, + isLoading: Boolean, + onAddPath: () -> Unit, + onRemovePath: (String) -> Unit +) { + Box(modifier = Modifier.fillMaxSize()) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + if (susPaths.isEmpty()) { + item { + EmptyStateCard( + message = stringResource(R.string.susfs_no_paths_configured) + ) + } + } else { + items(susPaths.toList()) { path -> + PathItemCard( + path = path, + icon = Icons.Default.Folder, + onDelete = { onRemovePath(path) }, + isLoading = isLoading + ) + } + } + + // 添加普通长按钮 + item { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Button( + onClick = onAddPath, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.Add, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_add)) + } + } + } + } + } +} + +/** + * SUS挂载内容组件 + */ +@Composable +fun SusMountsContent( + susMounts: Set, + hideSusMountsForAllProcs: Boolean, + isSusVersion_1_5_8: Boolean, + isLoading: Boolean, + onAddMount: () -> Unit, + onRemoveMount: (String) -> Unit, + onToggleHideSusMountsForAllProcs: (Boolean) -> Unit +) { + Box(modifier = Modifier.fillMaxSize()) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + if (isSusVersion_1_5_8) { + item { + SusMountHidingControlCard( + hideSusMountsForAllProcs = hideSusMountsForAllProcs, + isLoading = isLoading, + onToggleHiding = onToggleHideSusMountsForAllProcs + ) + } + } + + if (susMounts.isEmpty()) { + item { + EmptyStateCard( + message = stringResource(R.string.susfs_no_mounts_configured) + ) + } + } else { + items(susMounts.toList()) { mount -> + PathItemCard( + path = mount, + icon = Icons.Default.Storage, + onDelete = { onRemoveMount(mount) }, + isLoading = isLoading + ) + } + } + + // 添加普通长按钮 + item { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Button( + onClick = onAddMount, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.Add, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_add)) + } + } + } + } + } +} + +/** + * 尝试卸载内容组件 + */ +@Composable +fun TryUmountContent( + tryUmounts: Set, + isLoading: Boolean, + onAddUmount: () -> Unit, + onRunUmount: () -> Unit, + onRemoveUmount: (String) -> Unit +) { + Box(modifier = Modifier.fillMaxSize()) { + LazyColumn( + modifier = Modifier + .fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + if (tryUmounts.isEmpty()) { + item { + EmptyStateCard( + message = stringResource(R.string.susfs_no_umounts_configured) + ) + } + } else { + items(tryUmounts.toList()) { umountEntry -> + val parts = umountEntry.split("|") + val path = if (parts.isNotEmpty()) parts[0] else umountEntry + val mode = if (parts.size > 1) parts[1] else "0" + val modeText = if (mode == "0") + stringResource(R.string.susfs_umount_mode_normal_short) + else + stringResource(R.string.susfs_umount_mode_detach_short) + + PathItemCard( + path = path, + icon = Icons.Default.Storage, + additionalInfo = stringResource(R.string.susfs_umount_mode_display, modeText, mode), + onDelete = { onRemoveUmount(umountEntry) }, + isLoading = isLoading + ) + } + } + + // 添加普通长按钮 + item { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Button( + onClick = onAddUmount, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.Add, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_add)) + } + + if (tryUmounts.isNotEmpty()) { + Button( + onClick = onRunUmount, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.PlayArrow, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_run)) + } + } + } + } + } + } +} + +/** + * Kstat配置内容组件 + */ +@Composable +fun KstatConfigContent( + kstatConfigs: Set, + addKstatPaths: Set, + isLoading: Boolean, + onAddKstatStatically: () -> Unit, + onAddKstat: () -> Unit, + onRemoveKstatConfig: (String) -> Unit, + onRemoveAddKstat: (String) -> Unit, + onUpdateKstat: (String) -> Unit, + onUpdateKstatFullClone: (String) -> Unit +) { + Box(modifier = Modifier.fillMaxSize()) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + // 说明卡片 + item { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f) + ), + shape = RoundedCornerShape(12.dp) + ) { + Column( + modifier = Modifier.padding(12.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = stringResource(R.string.kstat_config_description_title), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.primary + ) + Text( + text = stringResource(R.string.kstat_config_description_add_statically), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(R.string.kstat_config_description_add), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(R.string.kstat_config_description_update), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(R.string.kstat_config_description_update_full_clone), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + + // 静态Kstat配置列表 + if (kstatConfigs.isNotEmpty()) { + item { + Text( + text = stringResource(R.string.static_kstat_config), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold + ) + } + items(kstatConfigs.toList()) { config -> + KstatConfigItemCard( + config = config, + onDelete = { onRemoveKstatConfig(config) }, + isLoading = isLoading + ) + } + } + + // Add Kstat路径列表 + if (addKstatPaths.isNotEmpty()) { + item { + Text( + text = stringResource(R.string.kstat_path_management), + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold + ) + } + items(addKstatPaths.toList()) { path -> + AddKstatPathItemCard( + path = path, + onDelete = { onRemoveAddKstat(path) }, + onUpdate = { onUpdateKstat(path) }, + onUpdateFullClone = { onUpdateKstatFullClone(path) }, + isLoading = isLoading + ) + } + } + + // 空状态显示 + if (kstatConfigs.isEmpty() && addKstatPaths.isEmpty()) { + item { + EmptyStateCard( + message = stringResource(R.string.no_kstat_config_message) + ) + } + } + + // 添加普通长按钮 + item { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Button( + onClick = onAddKstat, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.Add, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_add)) + } + + Button( + onClick = onAddKstatStatically, + modifier = Modifier + .weight(1f) + .height(48.dp), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + imageVector = Icons.Default.Settings, + contentDescription = null, + modifier = Modifier.size(24.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = stringResource(R.string.susfs_add)) + } + } + } + } + } +} + +/** + * 路径设置内容组件 + */ +@SuppressLint("SdCardPath") +@Composable +fun PathSettingsContent( + androidDataPath: String, + onAndroidDataPathChange: (String) -> Unit, + sdcardPath: String, + onSdcardPathChange: (String) -> Unit, + isLoading: Boolean, + onSetAndroidDataPath: () -> Unit, + onSetSdcardPath: () -> Unit +) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Android Data路径设置 + item { + Card( + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(12.dp) + ) { + Column( + modifier = Modifier.padding(12.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + OutlinedTextField( + value = androidDataPath, + onValueChange = onAndroidDataPathChange, + label = { Text(stringResource(R.string.susfs_android_data_path_label)) }, + placeholder = { Text("/sdcard/Android/data") }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading, + singleLine = true, + shape = RoundedCornerShape(8.dp) + ) + + Button( + onClick = onSetAndroidDataPath, + enabled = !isLoading && androidDataPath.isNotBlank(), + modifier = Modifier + .fillMaxWidth() + .height(40.dp), + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.susfs_set_android_data_path)) + } + } + } + } + + // SD卡路径设置 + item { + Card( + modifier = Modifier.fillMaxWidth(), + shape = RoundedCornerShape(12.dp) + ) { + Column( + modifier = Modifier.padding(12.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + OutlinedTextField( + value = sdcardPath, + onValueChange = onSdcardPathChange, + label = { Text(stringResource(R.string.susfs_sdcard_path_label)) }, + placeholder = { Text("/sdcard") }, + modifier = Modifier.fillMaxWidth(), + enabled = !isLoading, + singleLine = true, + shape = RoundedCornerShape(8.dp) + ) + + Button( + onClick = onSetSdcardPath, + enabled = !isLoading && sdcardPath.isNotBlank(), + modifier = Modifier + .fillMaxWidth() + .height(40.dp), + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.susfs_set_sdcard_path)) + } + } + } + } + } +} + +/** + * 启用功能状态内容组件 + */ +@Composable +fun EnabledFeaturesContent( + enabledFeatures: List, + onRefresh: () -> Unit +) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + // 说明卡片 + item { + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f) + ), + shape = RoundedCornerShape(12.dp) + ) { + Column( + modifier = Modifier.padding(12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = Icons.Default.Settings, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.susfs_enabled_features_description), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + + if (enabledFeatures.isEmpty()) { + item { + EmptyStateCard( + message = stringResource(R.string.susfs_no_features_found) + ) + } + } else { + items(enabledFeatures) { feature -> + FeatureStatusCard( + feature = feature, + onRefresh = onRefresh + ) + } + } + } +} \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt index ebd2e8df..229caf6d 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt @@ -16,22 +16,14 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items 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.filled.AutoMode -import androidx.compose.material.icons.filled.Info -import androidx.compose.material.icons.filled.Refresh -import androidx.compose.material.icons.filled.RestoreFromTrash -import androidx.compose.material.icons.filled.Settings -import androidx.compose.material.icons.filled.Storage +import androidx.compose.material.icons.filled.* import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.CenterAlignedTopAppBar @@ -57,7 +49,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -75,14 +66,19 @@ import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.RootGraph import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.sukisu.ultra.R +import com.sukisu.ultra.ui.component.AddKstatStaticallyDialog +import com.sukisu.ultra.ui.component.AddPathDialog +import com.sukisu.ultra.ui.component.AddTryUmountDialog +import com.sukisu.ultra.ui.component.ConfirmDialog +import com.sukisu.ultra.ui.component.EnabledFeaturesContent +import com.sukisu.ultra.ui.component.KstatConfigContent +import com.sukisu.ultra.ui.component.PathSettingsContent +import com.sukisu.ultra.ui.component.SusMountsContent +import com.sukisu.ultra.ui.component.SusPathsContent +import com.sukisu.ultra.ui.component.TryUmountContent import com.sukisu.ultra.ui.theme.CardConfig import com.sukisu.ultra.ui.util.SuSFSManager -import com.sukisu.ultra.ui.screen.extensions.EmptyStateCard -import com.sukisu.ultra.ui.screen.extensions.FeatureStatusCard -import com.sukisu.ultra.ui.screen.extensions.SusPathsContent -import com.sukisu.ultra.ui.screen.extensions.SusMountsContent -import com.sukisu.ultra.ui.screen.extensions.TryUmountContent -import com.sukisu.ultra.ui.screen.extensions.KstatConfigContent +import com.sukisu.ultra.ui.util.SuSFSManager.isSusVersion_1_5_8 import kotlinx.coroutines.launch /** @@ -98,7 +94,13 @@ enum class SuSFSTab(val displayNameRes: Int) { ENABLED_FEATURES(R.string.susfs_tab_enabled_features); companion object { - fun getAllTabs(): List = entries + fun getAllTabs(isSusVersion_1_5_8: Boolean): List { + return if (isSusVersion_1_5_8) { + entries.toList() + } else { + entries.filter { it != PATH_SETTINGS } + } + } } } @@ -123,7 +125,7 @@ fun SuSFSConfigScreen( var autoStartEnabled by remember { mutableStateOf(false) } var lastAppliedValue by remember { mutableStateOf("") } var lastAppliedBuildTime by remember { mutableStateOf("") } - var executeInPostFsData by remember { mutableStateOf(false) } // 是否在post-fs-data中执行 + var executeInPostFsData by remember { mutableStateOf(false) } // 槽位信息相关状态 var slotInfoList by remember { mutableStateOf(emptyList()) } @@ -149,33 +151,13 @@ fun SuSFSConfigScreen( var enabledFeatures by remember { mutableStateOf(emptyList()) } var isLoadingFeatures by remember { mutableStateOf(false) } - // 添加路径对话框状态 + // 对话框状态 var showAddPathDialog by remember { mutableStateOf(false) } var showAddMountDialog by remember { mutableStateOf(false) } var showAddUmountDialog by remember { mutableStateOf(false) } var showRunUmountDialog by remember { mutableStateOf(false) } - var newPath by remember { mutableStateOf("") } - var newMount by remember { mutableStateOf("") } - var newUmountPath by remember { mutableStateOf("") } - var newUmountMode by remember { mutableIntStateOf(0) } - var umountModeExpanded by remember { mutableStateOf(false) } - - // Kstat配置对话框状态 var showAddKstatStaticallyDialog by remember { mutableStateOf(false) } var showAddKstatDialog by remember { mutableStateOf(false) } - var newKstatPath by remember { mutableStateOf("") } - var newKstatIno by remember { mutableStateOf("") } - var newKstatDev by remember { mutableStateOf("") } - var newKstatNlink by remember { mutableStateOf("") } - var newKstatSize by remember { mutableStateOf("") } - var newKstatAtime by remember { mutableStateOf("") } - var newKstatAtimeNsec by remember { mutableStateOf("") } - var newKstatMtime by remember { mutableStateOf("") } - var newKstatMtimeNsec by remember { mutableStateOf("") } - var newKstatCtime by remember { mutableStateOf("") } - var newKstatCtimeNsec by remember { mutableStateOf("") } - var newKstatBlocks by remember { mutableStateOf("") } - var newKstatBlksize by remember { mutableStateOf("") } // 重置确认对话框状态 var showResetPathsDialog by remember { mutableStateOf(false) } @@ -183,7 +165,7 @@ fun SuSFSConfigScreen( var showResetUmountsDialog by remember { mutableStateOf(false) } var showResetKstatDialog by remember { mutableStateOf(false) } - val allTabs = SuSFSTab.getAllTabs() + val allTabs = SuSFSTab.getAllTabs(isSusVersion_1_5_8()) // 实时判断是否可以启用开机自启动 val canEnableAutoStart by remember { @@ -218,7 +200,7 @@ fun SuSFSConfigScreen( autoStartEnabled = SuSFSManager.isAutoStartEnabled(context) lastAppliedValue = SuSFSManager.getLastAppliedValue(context) lastAppliedBuildTime = SuSFSManager.getLastAppliedBuildTime(context) - executeInPostFsData = SuSFSManager.getExecuteInPostFsData(context) // 加载执行位置设置 + executeInPostFsData = SuSFSManager.getExecuteInPostFsData(context) susPaths = SuSFSManager.getSusPaths(context) susMounts = SuSFSManager.getSusMounts(context) tryUmounts = SuSFSManager.getTryUmounts(context) @@ -228,7 +210,6 @@ fun SuSFSConfigScreen( addKstatPaths = SuSFSManager.getAddKstatPaths(context) hideSusMountsForAllProcs = SuSFSManager.getHideSusMountsForAllProcs(context) - // 加载槽位信息 loadSlotInfo() } @@ -248,952 +229,242 @@ fun SuSFSConfigScreen( } // 槽位信息对话框 - if (showSlotInfoDialog) { - AlertDialog( - onDismissRequest = { showSlotInfoDialog = false }, - title = { - Text( - text = stringResource(R.string.susfs_slot_info_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - Column( - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - Text( - text = stringResource(R.string.susfs_current_active_slot, currentActiveSlot), - style = MaterialTheme.typography.bodyLarge, - fontWeight = FontWeight.Medium, - color = MaterialTheme.colorScheme.primary - ) + SlotInfoDialog( + showDialog = showSlotInfoDialog, + onDismiss = { showSlotInfoDialog = false }, + slotInfoList = slotInfoList, + currentActiveSlot = currentActiveSlot, + isLoadingSlotInfo = isLoadingSlotInfo, + onRefresh = { loadSlotInfo() }, + onUseUname = { uname -> + unameValue = uname + showSlotInfoDialog = false + }, + onUseBuildTime = { buildTime -> + buildTimeValue = buildTime + showSlotInfoDialog = false + } + ) - if (slotInfoList.isNotEmpty()) { - slotInfoList.forEach { slotInfo -> - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.cardColors( - containerColor = if (slotInfo.slotName == currentActiveSlot) { - MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.3f) - } else { - MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) - } - ), - shape = RoundedCornerShape(8.dp) - ) { - Column( - modifier = Modifier.padding(12.dp), - verticalArrangement = Arrangement.spacedBy(4.dp) - ) { - Row( - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = Icons.Default.Storage, - contentDescription = null, - tint = if (slotInfo.slotName == currentActiveSlot) { - MaterialTheme.colorScheme.primary - } else { - MaterialTheme.colorScheme.onSurfaceVariant - }, - modifier = Modifier.size(16.dp) - ) - Spacer(modifier = Modifier.width(6.dp)) - Text( - text = slotInfo.slotName, - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold, - color = if (slotInfo.slotName == currentActiveSlot) { - MaterialTheme.colorScheme.primary - } else { - MaterialTheme.colorScheme.onSurface - } - ) - if (slotInfo.slotName == currentActiveSlot) { - Spacer(modifier = Modifier.width(6.dp)) - Surface( - shape = RoundedCornerShape(4.dp), - color = MaterialTheme.colorScheme.primary - ) { - Text( - text = stringResource(R.string.susfs_slot_current_badge), - style = MaterialTheme.typography.labelSmall, - color = MaterialTheme.colorScheme.onPrimary, - modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp) - ) - } - } - } - Text( - text = stringResource(R.string.susfs_slot_uname, slotInfo.uname), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - Text( - text = stringResource(R.string.susfs_slot_build_time, slotInfo.buildTime), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) + // 各种对话框 + AddPathDialog( + showDialog = showAddPathDialog, + onDismiss = { showAddPathDialog = false }, + onConfirm = { path -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.addSusPath(context, path)) { + susPaths = SuSFSManager.getSusPaths(context) + } + isLoading = false + showAddPathDialog = false + } + }, + isLoading = isLoading, + titleRes = R.string.susfs_add_sus_path, + labelRes = R.string.susfs_path_label, + placeholderRes = R.string.susfs_path_placeholder + ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - Button( - onClick = { - unameValue = slotInfo.uname - showSlotInfoDialog = false - }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(6.dp) - ) { - Text(stringResource(R.string.susfs_slot_use_uname), fontSize = 12.sp) - } - Button( - onClick = { - buildTimeValue = slotInfo.buildTime - showSlotInfoDialog = false - }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(6.dp) - ) { - Text(stringResource(R.string.susfs_slot_use_build_time), fontSize = 12.sp) - } - } - } - } - } - } else { - Text( - text = stringResource(R.string.susfs_slot_info_unavailable), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.error - ) - } + AddPathDialog( + showDialog = showAddMountDialog, + onDismiss = { showAddMountDialog = false }, + onConfirm = { mount -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.addSusMount(context, mount)) { + susMounts = SuSFSManager.getSusMounts(context) } - }, - confirmButton = { - Button( - onClick = { loadSlotInfo() }, - enabled = !isLoadingSlotInfo, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.refresh)) - } - }, - dismissButton = { - TextButton( - onClick = { showSlotInfoDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.close)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } + isLoading = false + showAddMountDialog = false + } + }, + isLoading = isLoading, + titleRes = R.string.susfs_add_sus_mount, + labelRes = R.string.susfs_mount_path_label, + placeholderRes = R.string.susfs_path_placeholder + ) - // 各种对话框的定义保持不变 - // 添加路径对话框 - if (showAddPathDialog) { - AlertDialog( - onDismissRequest = { showAddPathDialog = false }, - title = { - Text( - stringResource(R.string.susfs_add_sus_path), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - OutlinedTextField( - value = newPath, - onValueChange = { newPath = it }, - label = { Text(stringResource(R.string.susfs_path_label)) }, - placeholder = { Text(stringResource(R.string.susfs_path_placeholder)) }, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(8.dp) - ) - }, - confirmButton = { - Button( - onClick = { - if (newPath.isNotBlank()) { - coroutineScope.launch { - isLoading = true - if (SuSFSManager.addSusPath(context, newPath.trim())) { - susPaths = SuSFSManager.getSusPaths(context) - } - isLoading = false - newPath = "" - showAddPathDialog = false - } - } - }, - enabled = newPath.isNotBlank() && !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_add)) + AddTryUmountDialog( + showDialog = showAddUmountDialog, + onDismiss = { showAddUmountDialog = false }, + onConfirm = { path, mode -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.addTryUmount(context, path, mode)) { + tryUmounts = SuSFSManager.getTryUmounts(context) } - }, - dismissButton = { - TextButton( - onClick = { - showAddPathDialog = false - newPath = "" - }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } + isLoading = false + showAddUmountDialog = false + } + }, + isLoading = isLoading + ) - // 添加挂载对话框 - if (showAddMountDialog) { - AlertDialog( - onDismissRequest = { showAddMountDialog = false }, - title = { - Text( - stringResource(R.string.susfs_add_sus_mount), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - OutlinedTextField( - value = newMount, - onValueChange = { newMount = it }, - label = { Text(stringResource(R.string.susfs_mount_path_label)) }, - placeholder = { Text(stringResource(R.string.susfs_path_placeholder)) }, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(8.dp) - ) - }, - confirmButton = { - Button( - onClick = { - if (newMount.isNotBlank()) { - coroutineScope.launch { - isLoading = true - if (SuSFSManager.addSusMount(context, newMount.trim())) { - susMounts = SuSFSManager.getSusMounts(context) - } - isLoading = false - newMount = "" - showAddMountDialog = false - } - } - }, - enabled = newMount.isNotBlank() && !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_add)) + AddKstatStaticallyDialog( + showDialog = showAddKstatStaticallyDialog, + onDismiss = { showAddKstatStaticallyDialog = false }, + onConfirm = { path, ino, dev, nlink, size, atime, atimeNsec, mtime, mtimeNsec, ctime, ctimeNsec, blocks, blksize -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.addKstatStatically( + context, path, ino, dev, nlink, size, atime, atimeNsec, + mtime, mtimeNsec, ctime, ctimeNsec, blocks, blksize + )) { + kstatConfigs = SuSFSManager.getKstatConfigs(context) } - }, - dismissButton = { - TextButton( - onClick = { - showAddMountDialog = false - newMount = "" - }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } + isLoading = false + showAddKstatStaticallyDialog = false + } + }, + isLoading = isLoading + ) - // 添加尝试卸载对话框 - if (showAddUmountDialog) { - AlertDialog( - onDismissRequest = { showAddUmountDialog = false }, - title = { - Text( - stringResource(R.string.susfs_add_try_umount), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - Column( - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - OutlinedTextField( - value = newUmountPath, - onValueChange = { newUmountPath = it }, - label = { Text(stringResource(R.string.susfs_path_label)) }, - placeholder = { Text(stringResource(R.string.susfs_path_placeholder)) }, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(8.dp) - ) + AddPathDialog( + showDialog = showAddKstatDialog, + onDismiss = { showAddKstatDialog = false }, + onConfirm = { path -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.addKstat(context, path)) { + addKstatPaths = SuSFSManager.getAddKstatPaths(context) + } + isLoading = false + showAddKstatDialog = false + } + }, + isLoading = isLoading, + titleRes = R.string.add_kstat_path_title, + labelRes = R.string.file_or_directory_path_label, + placeholderRes = R.string.susfs_path_placeholder + ) - ExposedDropdownMenuBox( - expanded = umountModeExpanded, - onExpandedChange = { umountModeExpanded = !umountModeExpanded } - ) { - OutlinedTextField( - value = if (newUmountMode == 0) - stringResource(R.string.susfs_umount_mode_normal) - else - stringResource(R.string.susfs_umount_mode_detach), - onValueChange = { }, - readOnly = true, - label = { Text(stringResource(R.string.susfs_umount_mode_label)) }, - trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = umountModeExpanded) }, - modifier = Modifier - .fillMaxWidth() - .menuAnchor(MenuAnchorType.PrimaryEditable, true), - shape = RoundedCornerShape(8.dp) - ) - ExposedDropdownMenu( - expanded = umountModeExpanded, - onDismissRequest = { umountModeExpanded = false } - ) { - DropdownMenuItem( - text = { Text(stringResource(R.string.susfs_umount_mode_normal)) }, - onClick = { - newUmountMode = 0 - umountModeExpanded = false - } - ) - DropdownMenuItem( - text = { Text(stringResource(R.string.susfs_umount_mode_detach)) }, - onClick = { - newUmountMode = 1 - umountModeExpanded = false - } - ) - } - } - } - }, - confirmButton = { - Button( - onClick = { - if (newUmountPath.isNotBlank()) { - coroutineScope.launch { - isLoading = true - if (SuSFSManager.addTryUmount(context, newUmountPath.trim(), newUmountMode)) { - tryUmounts = SuSFSManager.getTryUmounts(context) - } - isLoading = false - newUmountPath = "" - newUmountMode = 0 - showAddUmountDialog = false - } - } - }, - enabled = newUmountPath.isNotBlank() && !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_add)) - } - }, - dismissButton = { - TextButton( - onClick = { - showAddUmountDialog = false - newUmountPath = "" - newUmountMode = 0 - }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } + // 确认对话框 + ConfirmDialog( + showDialog = showRunUmountDialog, + onDismiss = { showRunUmountDialog = false }, + onConfirm = { + coroutineScope.launch { + isLoading = true + SuSFSManager.runTryUmount(context) + isLoading = false + showRunUmountDialog = false + } + }, + titleRes = R.string.susfs_run_umount_confirm_title, + messageRes = R.string.susfs_run_umount_confirm_message, + isLoading = isLoading + ) - // 添加Kstat静态配置对话框 - if (showAddKstatStaticallyDialog) { - AlertDialog( - onDismissRequest = { showAddKstatStaticallyDialog = false }, - title = { - Text( - stringResource(R.string.add_kstat_statically_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - Column( - modifier = Modifier.verticalScroll(rememberScrollState()), - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatPath, - onValueChange = { newKstatPath = it }, - label = { Text(stringResource(R.string.file_or_directory_path_label)) }, - placeholder = { Text("/path/to/file_or_directory") }, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(8.dp) - ) + ConfirmDialog( + showDialog = showConfirmReset, + onDismiss = { showConfirmReset = false }, + onConfirm = { + showConfirmReset = false + coroutineScope.launch { + isLoading = true + if (SuSFSManager.resetToDefault(context)) { + unameValue = "default" + buildTimeValue = "default" + lastAppliedValue = "default" + lastAppliedBuildTime = "default" + autoStartEnabled = false + } + isLoading = false + } + }, + titleRes = R.string.susfs_reset_confirm_title, + messageRes = R.string.susfs_reset_confirm_title, + isLoading = isLoading, + isDestructive = true + ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatIno, - onValueChange = { newKstatIno = it }, - label = { Text("ino") }, - placeholder = { Text("1234") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatDev, - onValueChange = { newKstatDev = it }, - label = { Text("dev") }, - placeholder = { Text("1234") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } + // 重置对话框 + ConfirmDialog( + showDialog = showResetPathsDialog, + onDismiss = { showResetPathsDialog = false }, + onConfirm = { + coroutineScope.launch { + isLoading = true + SuSFSManager.saveSusPaths(context, emptySet()) + susPaths = emptySet() + if (SuSFSManager.isAutoStartEnabled(context)) { + SuSFSManager.configureAutoStart(context, true) + } + isLoading = false + showResetPathsDialog = false + } + }, + titleRes = R.string.susfs_reset_paths_title, + messageRes = R.string.susfs_reset_paths_message, + isLoading = isLoading, + isDestructive = true + ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatNlink, - onValueChange = { newKstatNlink = it }, - label = { Text("nlink") }, - placeholder = { Text("2") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatSize, - onValueChange = { newKstatSize = it }, - label = { Text("size") }, - placeholder = { Text("223344") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } + ConfirmDialog( + showDialog = showResetMountsDialog, + onDismiss = { showResetMountsDialog = false }, + onConfirm = { + coroutineScope.launch { + isLoading = true + SuSFSManager.saveSusMounts(context, emptySet()) + susMounts = emptySet() + if (SuSFSManager.isAutoStartEnabled(context)) { + SuSFSManager.configureAutoStart(context, true) + } + isLoading = false + showResetMountsDialog = false + } + }, + titleRes = R.string.susfs_reset_mounts_title, + messageRes = R.string.susfs_reset_mounts_message, + isLoading = isLoading, + isDestructive = true + ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatAtime, - onValueChange = { newKstatAtime = it }, - label = { Text("atime") }, - placeholder = { Text("1712592355") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatAtimeNsec, - onValueChange = { newKstatAtimeNsec = it }, - label = { Text("atime_nsec") }, - placeholder = { Text("0") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } + ConfirmDialog( + showDialog = showResetUmountsDialog, + onDismiss = { showResetUmountsDialog = false }, + onConfirm = { + coroutineScope.launch { + isLoading = true + SuSFSManager.saveTryUmounts(context, emptySet()) + tryUmounts = emptySet() + if (SuSFSManager.isAutoStartEnabled(context)) { + SuSFSManager.configureAutoStart(context, true) + } + isLoading = false + showResetUmountsDialog = false + } + }, + titleRes = R.string.susfs_reset_umounts_title, + messageRes = R.string.susfs_reset_umounts_message, + isLoading = isLoading, + isDestructive = true + ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatMtime, - onValueChange = { newKstatMtime = it }, - label = { Text("mtime") }, - placeholder = { Text("1712592355") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatMtimeNsec, - onValueChange = { newKstatMtimeNsec = it }, - label = { Text("mtime_nsec") }, - placeholder = { Text("0") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } - - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatCtime, - onValueChange = { newKstatCtime = it }, - label = { Text("ctime") }, - placeholder = { Text("1712592355") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatCtimeNsec, - onValueChange = { newKstatCtimeNsec = it }, - label = { Text("ctime_nsec") }, - placeholder = { Text("0") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } - - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - OutlinedTextField( - value = newKstatBlocks, - onValueChange = { newKstatBlocks = it }, - label = { Text("blocks") }, - placeholder = { Text("16") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - OutlinedTextField( - value = newKstatBlksize, - onValueChange = { newKstatBlksize = it }, - label = { Text("blksize") }, - placeholder = { Text("512") }, - modifier = Modifier.weight(1f), - shape = RoundedCornerShape(8.dp) - ) - } - - Text( - text = stringResource(R.string.hint_use_default_value), - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) + ConfirmDialog( + showDialog = showResetKstatDialog, + onDismiss = { showResetKstatDialog = false }, + onConfirm = { + coroutineScope.launch { + isLoading = true + SuSFSManager.saveKstatConfigs(context, emptySet()) + SuSFSManager.saveAddKstatPaths(context, emptySet()) + kstatConfigs = emptySet() + addKstatPaths = emptySet() + if (SuSFSManager.isAutoStartEnabled(context)) { + SuSFSManager.configureAutoStart(context, true) } - }, - confirmButton = { - Button( - onClick = { - if (newKstatPath.isNotBlank()) { - coroutineScope.launch { - isLoading = true - if (SuSFSManager.addKstatStatically( - context, newKstatPath.trim(), - newKstatIno.trim().ifBlank { "default" }, - newKstatDev.trim().ifBlank { "default" }, - newKstatNlink.trim().ifBlank { "default" }, - newKstatSize.trim().ifBlank { "default" }, - newKstatAtime.trim().ifBlank { "default" }, - newKstatAtimeNsec.trim().ifBlank { "default" }, - newKstatMtime.trim().ifBlank { "default" }, - newKstatMtimeNsec.trim().ifBlank { "default" }, - newKstatCtime.trim().ifBlank { "default" }, - newKstatCtimeNsec.trim().ifBlank { "default" }, - newKstatBlocks.trim().ifBlank { "default" }, - newKstatBlksize.trim().ifBlank { "default" } - )) { - kstatConfigs = SuSFSManager.getKstatConfigs(context) - } - isLoading = false - // 清空所有字段 - newKstatPath = "" - newKstatIno = "" - newKstatDev = "" - newKstatNlink = "" - newKstatSize = "" - newKstatAtime = "" - newKstatAtimeNsec = "" - newKstatMtime = "" - newKstatMtimeNsec = "" - newKstatCtime = "" - newKstatCtimeNsec = "" - newKstatBlocks = "" - newKstatBlksize = "" - showAddKstatStaticallyDialog = false - } - } - }, - enabled = newKstatPath.isNotBlank() && !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text("添加") - } - }, - dismissButton = { - TextButton( - onClick = { - showAddKstatStaticallyDialog = false - // 清空所有字段 - newKstatPath = "" - newKstatIno = "" - newKstatDev = "" - newKstatNlink = "" - newKstatSize = "" - newKstatAtime = "" - newKstatAtimeNsec = "" - newKstatMtime = "" - newKstatMtimeNsec = "" - newKstatCtime = "" - newKstatCtimeNsec = "" - newKstatBlocks = "" - newKstatBlksize = "" - }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 添加Kstat路径对话框 - if (showAddKstatDialog) { - AlertDialog( - onDismissRequest = { showAddKstatDialog = false }, - title = { - Text( - stringResource(R.string.add_kstat_path_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { - Column( - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - OutlinedTextField( - value = newKstatPath, - onValueChange = { newKstatPath = it }, - label = { Text(stringResource(R.string.file_or_directory_path_label)) }, - placeholder = { Text("/path/to/file_or_directory") }, - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(8.dp) - ) - - Text( - text = stringResource(R.string.kstat_command_description), - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - } - }, - confirmButton = { - Button( - onClick = { - if (newKstatPath.isNotBlank()) { - coroutineScope.launch { - isLoading = true - if (SuSFSManager.addKstat(context, newKstatPath.trim())) { - addKstatPaths = SuSFSManager.getAddKstatPaths(context) - } - isLoading = false - newKstatPath = "" - showAddKstatDialog = false - } - } - }, - enabled = newKstatPath.isNotBlank() && !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.add)) - } - }, - dismissButton = { - TextButton( - onClick = { - showAddKstatDialog = false - newKstatPath = "" - }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 运行尝试卸载确认对话框 - if (showRunUmountDialog) { - AlertDialog( - onDismissRequest = { showRunUmountDialog = false }, - title = { - Text( - stringResource(R.string.susfs_run_umount_confirm_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { Text(stringResource(R.string.susfs_run_umount_confirm_message)) }, - confirmButton = { - Button( - onClick = { - coroutineScope.launch { - isLoading = true - SuSFSManager.runTryUmount(context) - isLoading = false - showRunUmountDialog = false - } - }, - enabled = !isLoading, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.confirm)) - } - }, - dismissButton = { - TextButton( - onClick = { showRunUmountDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 重置SUS路径确认对话框 - if (showResetPathsDialog) { - AlertDialog( - onDismissRequest = { showResetPathsDialog = false }, - title = { - Text( - stringResource(R.string.susfs_reset_paths_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { Text(stringResource(R.string.susfs_reset_paths_message)) }, - confirmButton = { - Button( - onClick = { - coroutineScope.launch { - isLoading = true - SuSFSManager.saveSusPaths(context, emptySet()) - susPaths = emptySet() - if (SuSFSManager.isAutoStartEnabled(context)) { - SuSFSManager.configureAutoStart(context, true) - } - isLoading = false - showResetPathsDialog = false - } - }, - enabled = !isLoading, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.error - ), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_reset_confirm)) - } - }, - dismissButton = { - TextButton( - onClick = { showResetPathsDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 重置SUS挂载确认对话框 - if (showResetMountsDialog) { - AlertDialog( - onDismissRequest = { showResetMountsDialog = false }, - title = { - Text( - stringResource(R.string.susfs_reset_mounts_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { Text(stringResource(R.string.susfs_reset_mounts_message)) }, - confirmButton = { - Button( - onClick = { - coroutineScope.launch { - isLoading = true - SuSFSManager.saveSusMounts(context, emptySet()) - susMounts = emptySet() - if (SuSFSManager.isAutoStartEnabled(context)) { - SuSFSManager.configureAutoStart(context, true) - } - isLoading = false - showResetMountsDialog = false - } - }, - enabled = !isLoading, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.error - ), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_reset_confirm)) - } - }, - dismissButton = { - TextButton( - onClick = { showResetMountsDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 重置尝试卸载确认对话框 - if (showResetUmountsDialog) { - AlertDialog( - onDismissRequest = { showResetUmountsDialog = false }, - title = { - Text( - stringResource(R.string.susfs_reset_umounts_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { Text(stringResource(R.string.susfs_reset_umounts_message)) }, - confirmButton = { - Button( - onClick = { - coroutineScope.launch { - isLoading = true - SuSFSManager.saveTryUmounts(context, emptySet()) - tryUmounts = emptySet() - if (SuSFSManager.isAutoStartEnabled(context)) { - SuSFSManager.configureAutoStart(context, true) - } - isLoading = false - showResetUmountsDialog = false - } - }, - enabled = !isLoading, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.error - ), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_reset_confirm)) - } - }, - dismissButton = { - TextButton( - onClick = { showResetUmountsDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 重置Kstat配置确认对话框 - if (showResetKstatDialog) { - AlertDialog( - onDismissRequest = { showResetKstatDialog = false }, - title = { - Text( - stringResource(R.string.reset_kstat_config_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - text = { Text(stringResource(R.string.reset_kstat_config_message)) }, - confirmButton = { - Button( - onClick = { - coroutineScope.launch { - isLoading = true - SuSFSManager.saveKstatConfigs(context, emptySet()) - SuSFSManager.saveAddKstatPaths(context, emptySet()) - kstatConfigs = emptySet() - addKstatPaths = emptySet() - if (SuSFSManager.isAutoStartEnabled(context)) { - SuSFSManager.configureAutoStart(context, true) - } - isLoading = false - showResetKstatDialog = false - } - }, - enabled = !isLoading, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.error - ), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.confirm_reset)) - } - }, - dismissButton = { - TextButton( - onClick = { showResetKstatDialog = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } - - // 重置确认对话框 - if (showConfirmReset) { - AlertDialog( - onDismissRequest = { showConfirmReset = false }, - title = { - Text( - text = stringResource(R.string.susfs_reset_confirm_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - }, - confirmButton = { - Button( - onClick = { - showConfirmReset = false - coroutineScope.launch { - isLoading = true - if (SuSFSManager.resetToDefault(context)) { - unameValue = "default" - buildTimeValue = "default" - lastAppliedValue = "default" - lastAppliedBuildTime = "default" - autoStartEnabled = false - } - isLoading = false - } - }, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.error - ), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_reset_confirm)) - } - }, - dismissButton = { - TextButton( - onClick = { showConfirmReset = false }, - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.cancel)) - } - }, - shape = RoundedCornerShape(12.dp) - ) - } + isLoading = false + showResetKstatDialog = false + } + }, + titleRes = R.string.reset_kstat_config_title, + messageRes = R.string.reset_kstat_config_message, + isLoading = isLoading, + isDestructive = true + ) // 主界面布局 Scaffold( @@ -1261,7 +532,6 @@ fun SuSFSConfigScreen( if (success) { lastAppliedValue = finalUnameValue lastAppliedBuildTime = finalBuildTimeValue - // 保存执行位置设置 SuSFSManager.saveExecuteInPostFsData(context, executeInPostFsData) } isLoading = false @@ -1303,7 +573,6 @@ fun SuSFSConfigScreen( } SuSFSTab.SUS_PATHS -> { - // 重置按钮 OutlinedButton( onClick = { showResetPathsDialog = true }, enabled = !isLoading && susPaths.isNotEmpty(), @@ -1326,7 +595,6 @@ fun SuSFSConfigScreen( } SuSFSTab.SUS_MOUNTS -> { - // 重置按钮 OutlinedButton( onClick = { showResetMountsDialog = true }, enabled = !isLoading && susMounts.isNotEmpty(), @@ -1349,7 +617,6 @@ fun SuSFSConfigScreen( } SuSFSTab.TRY_UMOUNT -> { - // 重置按钮 OutlinedButton( onClick = { showResetUmountsDialog = true }, enabled = !isLoading && tryUmounts.isNotEmpty(), @@ -1372,7 +639,6 @@ fun SuSFSConfigScreen( } SuSFSTab.KSTAT_CONFIG -> { - // 重置按钮 OutlinedButton( onClick = { showResetKstatDialog = true }, enabled = !isLoading && (kstatConfigs.isNotEmpty() || addKstatPaths.isNotEmpty()), @@ -1395,7 +661,6 @@ fun SuSFSConfigScreen( } SuSFSTab.PATH_SETTINGS -> { - // 重置按钮 OutlinedButton( onClick = { androidDataPath = "/sdcard/Android/data" @@ -1427,7 +692,6 @@ fun SuSFSConfigScreen( } SuSFSTab.ENABLED_FEATURES -> { - // 刷新按钮 Button( onClick = { loadEnabledFeatures() }, enabled = !isLoadingFeatures, @@ -1490,8 +754,7 @@ fun SuSFSConfigScreen( // 标签页内容 Box( - modifier = Modifier - .fillMaxSize() + modifier = Modifier.fillMaxSize() ) { when (selectedTab) { SuSFSTab.BASIC_SETTINGS -> { @@ -1537,13 +800,12 @@ fun SuSFSConfigScreen( ) } SuSFSTab.SUS_MOUNTS -> { - // 检查版本支持 - val isSusMountHidingSupported = remember { SuSFSManager.isSusMountHidingSupported() } + val isSusVersion_1_5_8 = remember { isSusVersion_1_5_8() } SusMountsContent( susMounts = susMounts, hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isSusMountHidingSupported = isSusMountHidingSupported, + isSusVersion_1_5_8 = isSusVersion_1_5_8, isLoading = isLoading, onAddMount = { showAddMountDialog = true }, onRemoveMount = { mount -> @@ -1946,164 +1208,156 @@ private fun BasicSettingsContent( } /** - * 路径设置内容组件 - */ -@SuppressLint("SdCardPath") -@Composable -private fun PathSettingsContent( - androidDataPath: String, - onAndroidDataPathChange: (String) -> Unit, - sdcardPath: String, - onSdcardPathChange: (String) -> Unit, - isLoading: Boolean, - onSetAndroidDataPath: () -> Unit, - onSetSdcardPath: () -> Unit -) { - Column( - modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()), - verticalArrangement = Arrangement.spacedBy(16.dp) - ) { - Text( - text = stringResource(R.string.susfs_path_settings), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - - // Android Data路径设置 - Card( - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(12.dp) - ) { - Column( - modifier = Modifier.padding(12.dp), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - OutlinedTextField( - value = androidDataPath, - onValueChange = onAndroidDataPathChange, - label = { Text(stringResource(R.string.susfs_android_data_path_label)) }, - placeholder = { Text("/sdcard/Android/data") }, - modifier = Modifier.fillMaxWidth(), - enabled = !isLoading, - singleLine = true, - shape = RoundedCornerShape(8.dp) - ) - - Button( - onClick = onSetAndroidDataPath, - enabled = !isLoading && androidDataPath.isNotBlank(), - modifier = Modifier - .fillMaxWidth() - .height(40.dp), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_set_android_data_path)) - } - } - } - - // SD卡路径设置 - Card( - modifier = Modifier.fillMaxWidth(), - shape = RoundedCornerShape(12.dp) - ) { - Column( - modifier = Modifier.padding(12.dp), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - OutlinedTextField( - value = sdcardPath, - onValueChange = onSdcardPathChange, - label = { Text(stringResource(R.string.susfs_sdcard_path_label)) }, - placeholder = { Text("/sdcard") }, - modifier = Modifier.fillMaxWidth(), - enabled = !isLoading, - singleLine = true, - shape = RoundedCornerShape(8.dp) - ) - - Button( - onClick = onSetSdcardPath, - enabled = !isLoading && sdcardPath.isNotBlank(), - modifier = Modifier - .fillMaxWidth() - .height(40.dp), - shape = RoundedCornerShape(8.dp) - ) { - Text(stringResource(R.string.susfs_set_sdcard_path)) - } - } - } - } -} - -/** - * 启用功能状态内容组件 + * 槽位信息对话框 */ @Composable -private fun EnabledFeaturesContent( - enabledFeatures: List, - onRefresh: () -> Unit +private fun SlotInfoDialog( + showDialog: Boolean, + onDismiss: () -> Unit, + slotInfoList: List, + currentActiveSlot: String, + isLoadingSlotInfo: Boolean, + onRefresh: () -> Unit, + onUseUname: (String) -> Unit, + onUseBuildTime: (String) -> Unit ) { - Column( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - Text( - text = stringResource(R.string.susfs_enabled_features_title), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - - // 说明卡片 - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f) - ), - shape = RoundedCornerShape(12.dp) - ) { - Column( - modifier = Modifier.padding(12.dp) - ) { - Row( - verticalAlignment = Alignment.CenterVertically + if (showDialog) { + AlertDialog( + onDismissRequest = onDismiss, + title = { + Text( + text = stringResource(R.string.susfs_slot_info_title), + style = MaterialTheme.typography.titleLarge, + fontWeight = FontWeight.Bold + ) + }, + text = { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp) ) { - Icon( - imageVector = Icons.Default.Info, - contentDescription = null, - tint = MaterialTheme.colorScheme.primary, - modifier = Modifier.size(18.dp) - ) - Spacer(modifier = Modifier.width(8.dp)) Text( - text = stringResource(R.string.susfs_enabled_features_description), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, - lineHeight = 16.sp + text = stringResource(R.string.susfs_current_active_slot, currentActiveSlot), + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.primary ) - } - } - } - if (enabledFeatures.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.susfs_no_features_found) - ) - } else { - LazyColumn( - modifier = Modifier.weight(1f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(enabledFeatures) { feature -> - FeatureStatusCard( - feature = feature, - onRefresh = onRefresh - ) + if (slotInfoList.isNotEmpty()) { + slotInfoList.forEach { slotInfo -> + Card( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.cardColors( + containerColor = if (slotInfo.slotName == currentActiveSlot) { + MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.3f) + } else { + MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) + } + ), + shape = RoundedCornerShape(8.dp) + ) { + Column( + modifier = Modifier.padding(12.dp), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + imageVector = Icons.Default.Storage, + contentDescription = null, + tint = if (slotInfo.slotName == currentActiveSlot) { + MaterialTheme.colorScheme.primary + } else { + MaterialTheme.colorScheme.onSurfaceVariant + }, + modifier = Modifier.size(16.dp) + ) + Spacer(modifier = Modifier.width(6.dp)) + Text( + text = slotInfo.slotName, + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = if (slotInfo.slotName == currentActiveSlot) { + MaterialTheme.colorScheme.primary + } else { + MaterialTheme.colorScheme.onSurface + } + ) + if (slotInfo.slotName == currentActiveSlot) { + Spacer(modifier = Modifier.width(6.dp)) + Surface( + shape = RoundedCornerShape(4.dp), + color = MaterialTheme.colorScheme.primary + ) { + Text( + text = stringResource(R.string.susfs_slot_current_badge), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onPrimary, + modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp) + ) + } + } + } + Text( + text = stringResource(R.string.susfs_slot_uname, slotInfo.uname), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = stringResource(R.string.susfs_slot_build_time, slotInfo.buildTime), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Button( + onClick = { onUseUname(slotInfo.uname) }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(6.dp) + ) { + Text(stringResource(R.string.susfs_slot_use_uname), fontSize = 12.sp) + } + Button( + onClick = { onUseBuildTime(slotInfo.buildTime) }, + modifier = Modifier.weight(1f), + shape = RoundedCornerShape(6.dp) + ) { + Text(stringResource(R.string.susfs_slot_use_build_time), fontSize = 12.sp) + } + } + } + } + } + } else { + Text( + text = stringResource(R.string.susfs_slot_info_unavailable), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.error + ) + } } - } - } + }, + confirmButton = { + Button( + onClick = onRefresh, + enabled = !isLoadingSlotInfo, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.refresh)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss, + shape = RoundedCornerShape(8.dp) + ) { + Text(stringResource(R.string.close)) + } + }, + shape = RoundedCornerShape(12.dp) + ) } } \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/extensions/SuSFSConfigExtensions.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/extensions/SuSFSConfigExtensions.kt index 39133271..40b6605d 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/extensions/SuSFSConfigExtensions.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/extensions/SuSFSConfigExtensions.kt @@ -11,15 +11,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Folder import androidx.compose.material.icons.filled.PlayArrow -import androidx.compose.material.icons.filled.Storage import androidx.compose.material.icons.filled.Update import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.filled.Visibility @@ -28,7 +24,6 @@ import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults -import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -56,31 +51,6 @@ import com.sukisu.ultra.R import com.sukisu.ultra.ui.util.SuSFSManager import kotlinx.coroutines.launch -/** - * 统一的按钮布局组件 - */ -@Composable -fun UnifiedButtonRow( - primaryButton: @Composable () -> Unit, - secondaryButtons: @Composable () -> Unit = {}, - @SuppressLint("ModifierParameter") modifier: Modifier = Modifier -) { - Row( - modifier = modifier - .fillMaxWidth() - .padding(vertical = 6.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Row( - horizontalArrangement = Arrangement.spacedBy(6.dp), - verticalAlignment = Alignment.CenterVertically - ) { - secondaryButtons() - } - primaryButton() - } -} /** * 空状态显示组件 @@ -494,66 +464,6 @@ fun FeatureStatusCard( } } -/** - * SUS路径内容组件 - */ -@Composable -fun SusPathsContent( - susPaths: Set, - isLoading: Boolean, - onAddPath: () -> Unit, - onRemovePath: (String) -> Unit -) { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - UnifiedButtonRow( - primaryButton = { - FloatingActionButton( - onClick = onAddPath, - modifier = Modifier.size(48.dp), - containerColor = MaterialTheme.colorScheme.primary, - contentColor = MaterialTheme.colorScheme.onPrimary - ) { - Icon( - imageVector = Icons.Default.Add, - contentDescription = null, - modifier = Modifier.size(20.dp) - ) - } - }, - secondaryButtons = { - Text( - text = stringResource(R.string.susfs_sus_paths_management), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - } - ) - - if (susPaths.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.susfs_no_paths_configured) - ) - } else { - LazyColumn( - modifier = Modifier.weight(1f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(susPaths.toList()) { path -> - PathItemCard( - path = path, - icon = Icons.Default.Folder, - onDelete = { onRemovePath(path) }, - isLoading = isLoading - ) - } - } - } - } -} - /** * SUS挂载隐藏控制卡片组件 */ @@ -668,319 +578,4 @@ fun SusMountHidingControlCard( } } } -} - -/** - * SUS挂载内容组件 - */ -@Composable -fun SusMountsContent( - susMounts: Set, - hideSusMountsForAllProcs: Boolean, - isSusMountHidingSupported: Boolean, - isLoading: Boolean, - onAddMount: () -> Unit, - onRemoveMount: (String) -> Unit, - onToggleHideSusMountsForAllProcs: (Boolean) -> Unit -) { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - UnifiedButtonRow( - primaryButton = { - FloatingActionButton( - onClick = onAddMount, - modifier = Modifier.size(48.dp), - containerColor = MaterialTheme.colorScheme.primary, - contentColor = MaterialTheme.colorScheme.onPrimary - ) { - Icon( - imageVector = Icons.Default.Add, - contentDescription = null, - modifier = Modifier.size(20.dp) - ) - } - }, - secondaryButtons = { - Text( - text = stringResource(R.string.susfs_sus_mounts_management), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - } - ) - - // SUS挂载隐藏控制卡片 - 仅在支持的版本显示 - if (isSusMountHidingSupported) { - SusMountHidingControlCard( - hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isLoading = isLoading, - onToggleHiding = onToggleHideSusMountsForAllProcs - ) - } - if (susMounts.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.susfs_no_mounts_configured) - ) - } else { - LazyColumn( - modifier = Modifier.weight(1f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(susMounts.toList()) { mount -> - PathItemCard( - path = mount, - icon = Icons.Default.Storage, - onDelete = { onRemoveMount(mount) }, - isLoading = isLoading - ) - } - } - } - } -} - - -/** - * 尝试卸载内容组件 - */ -@Composable -fun TryUmountContent( - tryUmounts: Set, - isLoading: Boolean, - onAddUmount: () -> Unit, - onRunUmount: () -> Unit, - onRemoveUmount: (String) -> Unit -) { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - UnifiedButtonRow( - primaryButton = { - FloatingActionButton( - onClick = onAddUmount, - modifier = Modifier.size(48.dp), - containerColor = MaterialTheme.colorScheme.primary, - contentColor = MaterialTheme.colorScheme.onPrimary - ) { - Icon( - imageVector = Icons.Default.Add, - contentDescription = null, - modifier = Modifier.size(20.dp) - ) - } - }, - secondaryButtons = { - Row( - horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = stringResource(R.string.susfs_try_umount_management), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - if (tryUmounts.isNotEmpty()) { - FloatingActionButton( - onClick = onRunUmount, - modifier = Modifier.size(40.dp), - containerColor = MaterialTheme.colorScheme.secondary, - contentColor = MaterialTheme.colorScheme.onSecondary - ) { - Icon( - imageVector = Icons.Default.PlayArrow, - contentDescription = null, - modifier = Modifier.size(18.dp) - ) - } - } - } - } - ) - - if (tryUmounts.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.susfs_no_umounts_configured) - ) - } else { - LazyColumn( - modifier = Modifier.weight(1f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(tryUmounts.toList()) { umountEntry -> - val parts = umountEntry.split("|") - val path = if (parts.isNotEmpty()) parts[0] else umountEntry - val mode = if (parts.size > 1) parts[1] else "0" - val modeText = if (mode == "0") - stringResource(R.string.susfs_umount_mode_normal_short) - else - stringResource(R.string.susfs_umount_mode_detach_short) - - PathItemCard( - path = path, - icon = Icons.Default.Storage, - additionalInfo = stringResource(R.string.susfs_umount_mode_display, modeText, mode), - onDelete = { onRemoveUmount(umountEntry) }, - isLoading = isLoading - ) - } - } - } - } -} - -/** - * Kstat配置内容组件 - */ -@Composable -fun KstatConfigContent( - kstatConfigs: Set, - addKstatPaths: Set, - isLoading: Boolean, - onAddKstatStatically: () -> Unit, - onAddKstat: () -> Unit, - onRemoveKstatConfig: (String) -> Unit, - onRemoveAddKstat: (String) -> Unit, - onUpdateKstat: (String) -> Unit, - onUpdateKstatFullClone: (String) -> Unit -) { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - // 标题和添加按钮 - UnifiedButtonRow( - primaryButton = { - Row( - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { - FloatingActionButton( - onClick = onAddKstatStatically, - modifier = Modifier.size(48.dp), - containerColor = MaterialTheme.colorScheme.primary, - contentColor = MaterialTheme.colorScheme.onPrimary - ) { - Icon( - imageVector = Icons.Default.Settings, - contentDescription = null, - modifier = Modifier.size(20.dp) - ) - } - FloatingActionButton( - onClick = onAddKstat, - modifier = Modifier.size(48.dp), - containerColor = MaterialTheme.colorScheme.secondary, - contentColor = MaterialTheme.colorScheme.onSecondary - ) { - Icon( - imageVector = Icons.Default.Add, - contentDescription = null, - modifier = Modifier.size(20.dp) - ) - } - } - }, - secondaryButtons = { - Text( - text = stringResource(R.string.kstat_config_management), - style = MaterialTheme.typography.titleLarge, - fontWeight = FontWeight.Bold - ) - } - ) - - // 说明卡片 - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f) - ), - shape = RoundedCornerShape(12.dp) - ) { - Column( - modifier = Modifier.padding(12.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - Text( - text = stringResource(R.string.kstat_config_description_title), - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Medium, - color = MaterialTheme.colorScheme.primary - ) - Text( - text = stringResource(R.string.kstat_config_description_add_statically), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - Text( - text = stringResource(R.string.kstat_config_description_add), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - Text( - text = stringResource(R.string.kstat_config_description_update), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - Text( - text = stringResource(R.string.kstat_config_description_update_full_clone), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - } - } - - // 静态Kstat配置列表 - if (kstatConfigs.isNotEmpty()) { - Text( - text = stringResource(R.string.static_kstat_config), - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold - ) - LazyColumn( - modifier = Modifier.weight(0.5f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(kstatConfigs.toList()) { config -> - KstatConfigItemCard( - config = config, - onDelete = { onRemoveKstatConfig(config) }, - isLoading = isLoading - ) - } - } - } - - // Add Kstat路径列表 - if (addKstatPaths.isNotEmpty()) { - Text( - text = stringResource(R.string.kstat_path_management), - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold - ) - LazyColumn( - modifier = Modifier.weight(0.5f), - verticalArrangement = Arrangement.spacedBy(6.dp) - ) { - items(addKstatPaths.toList()) { path -> - AddKstatPathItemCard( - path = path, - onDelete = { onRemoveAddKstat(path) }, - onUpdate = { onUpdateKstat(path) }, - onUpdateFullClone = { onUpdateKstatFullClone(path) }, - isLoading = isLoading - ) - } - } - } - - // 空状态显示 - if (kstatConfigs.isEmpty() && addKstatPaths.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.no_kstat_config_message) - ) - } - } } \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt index c779c4cd..7e26f4f4 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt @@ -98,7 +98,7 @@ object SuSFSManager { } // 检查当前SuSFS版本是否支持SUS挂载隐藏控制功能 - fun isSusMountHidingSupported(): Boolean { + fun isSusVersion_1_5_8(): Boolean { return try { val currentVersion = getSuSFSVersion() compareVersions(currentVersion, "1.5.8") >= 0 @@ -437,7 +437,7 @@ object SuSFSManager { // SUS挂载隐藏控制 suspend fun setHideSusMountsForAllProcs(context: Context, hideForAll: Boolean): Boolean { - if (!isSusMountHidingSupported()) { + if (!isSusVersion_1_5_8()) { return false } diff --git a/manager/app/src/main/res/values-ar/strings.xml b/manager/app/src/main/res/values-ar/strings.xml index 5039dd24..d7df511c 100644 --- a/manager/app/src/main/res/values-ar/strings.xml +++ b/manager/app/src/main/res/values-ar/strings.xml @@ -5,16 +5,11 @@ إضغط للتثبيت يعمل الإصدار: %d - مستخدمين الجذر: %d - الإضافات: %d غير مدعوم KernelSU يدعم GKI kernels فقط إصدار النواة - SuSFS: %s إصدار SuSFS - SuS SU إصدار المدير - البصمة وضع SELinux معطل مفروض @@ -28,7 +23,6 @@ فرز (الإجراء أولاً) فرز (الممكن أولاً) إلغاء التثبيت - إسترجاع تثبيت الوحدة تثبيت إعادة تشغيل @@ -61,10 +55,6 @@ نموذج مُخصّص اسم الملف الشخصي - تركيب مساحة الاسم - موروث - عالمي - فردي مجموعات القدرات سياق SELinux @@ -112,7 +102,6 @@ التحقق تلقائيًا من وجود تحديثات عند فتح التطبيق فشل في منح صلاحية الجذر! إجراء - فتح إغلاق تمكين تصحيح أخطاء WebView يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة. @@ -138,9 +127,6 @@ LKM المحددة: %s حفظ السجلات السجلات محفوظة - إدعمنا - غير مدعوم - غير معروف وضع SuS SU تأكيد وحدة التثبيت %1$s؟ @@ -174,14 +160,11 @@ خلفية التطبيق المخصصة حدد صورة كخلفية شفافية شريط التنقل - استعادة الإعدادات الافتراضية ‏إصدار Android نوع الجهاز لا يسمح بمنح المستخدم المتميز ل %s تعطيل توافق su تعطيل أي تطبيقات مؤقتًا من الحصول على امتيازات الجذر عن طريق الأمر <unk> su (لن تتأثر عمليات الجذر الحالية). - أنت تستخدم مدير Beta SukiSU - هل أنت متأكد من أنك تريد تثبيت وحدات %d المحددة؟ هل أنت متأكد من أنك تريد تثبيت وحدات %1$d التالية؟ \n\n%2$s المزيد من الإعدادات SELinux @@ -212,20 +195,14 @@ وردي رمادي الأصفر - خيارات الفرشاة - حدد الملف المراد إلفاؤه Anykernel3 yükle فلاش AnyKernel3 ملف kernel يتطلب امتيازات الجذر - فشل نسخ الملف اكتمل التشويش هل تريد إعادة التشغيل فوراً؟ نعم لايوجد فشل إعادة التشغيل - التمكين - السحب - النسخ الاحتياطية KPM لا توجد وحدات نواة مثبتة في هذا الوقت الإصدار @@ -233,7 +210,6 @@ إلغاء التثبيت تم إلغاء التثبيت بنجاح فشل في إلغاء التثبيت - تثبيت تم تحميل وحدة كيلو جزء بنجاح فشل تحميل وحدة كيلو بايم العوامل المتغيرة @@ -247,8 +223,6 @@ وستشكل سوكيسو أولترا في المستقبل فرعا مستقلا نسبيا من فروع الوحدة، ولكننا لا نزال نقدر كيرنيل سو وموكسو الرسميين وما إلى ذلك. لإسهاماتهم! غير مدعوم إدعمنا - "عدد وحدات KPM: %d " - ملف KPM غير صحيح النواة غير مصحوبة لم يتم تكوين النواة الإعدادات المُخصصة @@ -256,19 +230,13 @@ التحميل فسيفساء الرجاء التحديد: %1\$s وضع تثبيت الوحدة \n\nالتحميل: قم بتحميل الوحدة \nمؤقتا: تثبيت دائم في النظام - فشل التحقق من وجود ملف الوحدة غير قادر على التحقق من وجود ملف الوحدة - تأكيد إلغاء التثبيت - إلغاء التثبيت - إلغاء ألوان المظهر نوع الملف غير صحيح! الرجاء تحديد ملف .kpm. إلغاء التثبيت سيتم إلغاء تثبيت KPM التالية: %s تعطيل روابط kprobe التي أنشأتها KernelSU، باستخدام الروابط الواردة بدلاً من ذلك، والتي تشبه طريقة الربط غير GKI غير GKI. - ضبط صورة الخلفية استخدم إصبعين لتكبير الصورة، وأصبع واحد لسحبها لضبط الموضع - تعذر تحميل الصورة إعادة ضرب النواة @@ -305,7 +273,6 @@ إعدادات التطبيق ادوات - إزالة التطبيق غير موجود تم تمكين SELinux تم تعطيل SELinux @@ -313,8 +280,6 @@ إعدادات متقدمة تخصيص شريط الأدوات عد مرة أخرى - كن في طريقه كامل - وضع بعيدا تم تمكين SuSFS تم تعطيل SuSFS تم تعيين الخلفية بنجاح @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - يتطلب امتيازات الجذر عرض وظيفة KPM إخفاء معلومات KPM ووظيفتها في الشريط المنزلي والأسفل @@ -334,7 +298,6 @@ حقن Eruda في WebUI X حقن وحدة التصحيح في WebUI X لجعل تصحيح الأخطاء أسهل. يتطلب تصحيح أخطاء الويب لتكون قيد التشغيل. - إعداد DPI تم تطبيق DPI ضبط كثافة عرض الشاشة للتطبيق الحالي فقط صغير @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu في الأعلى أسفل - التمرير لأعلى - التمرير إلى الأسفل - مصرح - غير مصرح محدد خيار - تعطيل وحدة إلغاء التثبيت المخصصة Menu Options Sort by diff --git a/manager/app/src/main/res/values-az/strings.xml b/manager/app/src/main/res/values-az/strings.xml index fe836add..dbc155a4 100644 --- a/manager/app/src/main/res/values-az/strings.xml +++ b/manager/app/src/main/res/values-az/strings.xml @@ -5,16 +5,11 @@ Yükləmək üçün toxunun İşləyir Versiya: %d - Super istifadəçilər: %d - Modullar: %d Dəstəklənmir Hal-hazırda KernelSU yalnız GKI nüvələrini dəstəkləyir Nüvə - SuSFS: %s SuSFS Version - SuS SU Menecer versiyası - Barmaq izi SELinux vəziyyəti Qeyri-aktiv Məcburi @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Sil - Restore Yüklə Yüklə Yenidən başlat @@ -61,10 +55,6 @@ Şablon Özəl Profil adı - Bölmənin ad sahəsi - Miras qalmış - Qlobal - Fərdi Qruplar Bacarıqlar SELinux konteksi @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Girişləri Saxla Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by 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..6dee3759 100644 --- a/manager/app/src/main/res/values-bn-rBD/strings.xml +++ b/manager/app/src/main/res/values-bn-rBD/strings.xml @@ -6,11 +6,9 @@ মোডিউল ইনেবল করা যায়নি: %s ইন্সটল করটে চাপুন কাজ করছে - মোডিউল: %d অমূলক কর্নেল ম্যানেজার ভারসন - ফিঙ্গারপ্রিন্ট ডিসেবল এনফোর্সিং সুপার ইউজার @@ -21,7 +19,6 @@ রিবুট সেটিংস সফট রিবুট - গ্লোবাল গ্রুপস এসইলিনাক্স কন্টেক্সট %s এর জন্য অ্যাপ প্রফাইল আপডেট করা যায়নি @@ -32,10 +29,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 0fa6426c..339d94bb 100644 --- a/manager/app/src/main/res/values-bn/strings.xml +++ b/manager/app/src/main/res/values-bn/strings.xml @@ -5,13 +5,10 @@ ইনস্টল করার জন্য ক্লিক করুন ওয়ার্কিং ওয়ার্কিং সংস্করণ: %d - সুপার ইউজার: %d - মডিউল: %d অসমর্থিত KernelSU শুধুমাত্র GKI কার্নেল সমর্থন করে কার্নেল ম্যানেজার সংস্করণ - ফিঙ্গারপ্রিন্ট SELinux স্টেটাস ডিজেবল কার্যকর @@ -51,15 +48,12 @@ সাপোর্ট টাইটেল কার্নেলএসইউ বিনামূল্যে এবং ওপেন সোর্স, এবং সবসময় থাকবে। আপনি সবসময় একটি অনুদান দিয়ে আপনার কৃতজ্ঞতা প্রদর্শন করতে পারেন. প্রফাইলের নাম - নেমস্পেস মাউন্ট গ্রুপস যোগ্যতা এসই লিনাক্স কনটেক্সট ডিফল্ট টেমপ্লেট কাস্টম - গ্লোবাল - আলাদাভাবে আনমাউন্ট মোডিউল লগ সংরক্ষণ করুন diff --git a/manager/app/src/main/res/values-bs/strings.xml b/manager/app/src/main/res/values-bs/strings.xml index d7c3fa3b..cab9ddb2 100644 --- a/manager/app/src/main/res/values-bs/strings.xml +++ b/manager/app/src/main/res/values-bs/strings.xml @@ -5,16 +5,11 @@ Kliknite da instalirate Radi Verzija: %d - Superkorisnici: %d - Module: %d Nepodržano KernelSU samo podržava GKI kernele sad Kernel - SuSFS: %s SuSFS Version - SuS SU Verzija Upravitelja - Otisak prsta SELinux stanje Isključeno U Provođenju @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Deinstalirajte - Restore Instalirajte Instalirajte Ponovo pokrenite @@ -61,10 +55,6 @@ Šablon Prilagođeno Naziv profila - Imenski prostor nosača - Naslijeđen - Globalan - Pojedinačan Grupe Sposobnosti SELinux kontekst @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Sačuvaj Dnevnike Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-da/strings.xml b/manager/app/src/main/res/values-da/strings.xml index 3d089794..75ae6261 100644 --- a/manager/app/src/main/res/values-da/strings.xml +++ b/manager/app/src/main/res/values-da/strings.xml @@ -5,16 +5,11 @@ Klik for at installere Arbejder Version: %d - Superbrugere: %d - Moduler: %d Ikke understøttet KernelSU understøtter kun GKI kernels Kernel - SuSFS: %s SuSFS Version - SuS SU Manager Version - Fingeraftryk SELinux-status Deaktiveret Håndhævende @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Afinstaller - Restore Installer Installer Genstart @@ -61,10 +55,6 @@ Skabelon Brugerdefineret Profilnavn - Monter navnerum - Arvet - Global - Individuel Grupper Evner SELinux-kontext @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Gem Logfiler Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-de/strings.xml b/manager/app/src/main/res/values-de/strings.xml index 9cbc4109..2d758dc0 100644 --- a/manager/app/src/main/res/values-de/strings.xml +++ b/manager/app/src/main/res/values-de/strings.xml @@ -5,16 +5,11 @@ Tippe zum Installieren Funktioniert Version: %d - Superuser: %d - Module: %d Nicht unterstützt KernelSU unterstützt derzeit nur GKI-Kernel Kernel - SuSFS: %s SuSFS version - SuS SU Manager-Version - Fingerabdruck SELinux Status Deaktiviert Erzwingen @@ -28,7 +23,6 @@ Sortiere zuerst (Aktion) Sortieren (zuerst aktiviert) Deinstallieren - Wiederherstellen Installieren Installieren Neustarten @@ -61,10 +55,6 @@ Vorlage Benutzerdefiniert Profilname - Namespace einhängen - Geerbt - Global - Individuell Gruppen Fähigkeiten SELinux-Kontext @@ -112,7 +102,6 @@ Prüfe automatisch auf Aktualisierungen, wenn die App geöffnet wird Root-Zugriff konnte nicht gewährt werden! Aktion - Öffnen Schließen WebView-Debugging aktivieren Kann zum Fehlerbeheben der WebUI verwendet werden, bitte nur im Notfall aktivieren. @@ -138,9 +127,6 @@ Wähle LKM: %s Protokolle Speichern Protokolle gespeichert - Unterstützt: - Nicht unterstützt - Unbekannt SuS SU-Modus: das Installationsmodul %1$s bestätigen ? @@ -174,14 +160,11 @@ Eigener App-Hintergrund Wählen Sie ein Bild als Hintergrund Transparenz der Navigationsleiste - Standard wiederherstellen Androidversion Geräteausführung Superuser %s zu erlauben ist nicht erlaubt Su Kompatibilität deaktivieren Deaktivieren Sie temporär alle Anwendungen, die root-Privilegien über den Befehl <unk> su zu erhalten (bestehende root-Prozesse werden nicht beeinflusst). - Sie verwenden den SukiSU Beta-Manager - Sind Sie sicher, dass Sie die ausgewählten %d -Module installieren möchten? Möchten Sie die folgenden %1$d Module installieren? \n\n\n%2$s Weitere Einstellungen SELinux @@ -212,20 +195,14 @@ Pink Grau Gelb - Pinseloptionen - Wählen Sie die zu flashende Datei Install Anykernel3 Flash AnyKernel3 Kernel-Datei Erfordert Root-Rechte - Datei-Kopierfehler Scrubbing abgeschlossen Ob sofort neu gestartet werden soll? Ja Nein Neustart fehlgeschlagen - empowern - abheben - Sicherung KPM Keine installierten Kernelmodule Version @@ -233,7 +210,6 @@ Deinstallieren Erfolgreich deinstalliert Deinstallation fehlgeschlagen - Installieren Laden des kpm Moduls erfolgreich Laden des kpm-Moduls fehlgeschlagen Parameter @@ -247,8 +223,6 @@ SukiSU Ultra wird in Zukunft ein relativ unabhängiger Zweig der KSU sein, aber wir schätzen immer noch die offiziellen KernelSU und MKSU usw. für ihre Beiträge! Nicht unterstützt Unterstützt: - "Anzahl der KPM-Module: %d " - Ungültige KPM-Datei Kernel nicht gepatcht Kernel nicht konfiguriert Eigene Einstellungen @@ -256,19 +230,13 @@ Laden Einbetten Bitte wählen: %1\$s Modul-Installationsmodus \n\nLaden: Das Modul \ntemporär laden: Dauerhaft in das System installieren - Fehler beim Prüfen der Moduldatei-Existenz Kann nicht überprüfen, ob die Moduldatei existiert - Deinstallation bestätigen. - Deinstallieren - Abbrechen Themenfarbe Falscher Dateityp! Bitte wählen Sie eine .kpm Datei. Deinstallieren Folgende KPM wird deinstalliert: %s Deaktiviere kprobe Hooks die von KernelSU erstellt wurden und stattdessen inline Hooks verwenden, was der Nicht-GKI-Kernel-Hooking Methode ähnlich ist. - Hintergrundbild anpassen Verwende zwei Finger um das Bild zu vergrößern und einen Finger um die Position anzupassen - Bild konnte nicht geladen werden Rückzahlung Kernel-Flashen @@ -305,7 +273,6 @@ Anwendungs-Einstellungen Tools - Entfernen Anwendung nicht gefunden SELinux aktiviert SELinux deaktiviert @@ -313,8 +280,6 @@ Erweiterte Einstellungen Passt die Symbolleiste an. Comeback - Seien Sie in vollem Gange - wegziehen SuSFS aktiviert SuSFS deaktiviert Hintergrund erfolgreich gesetzt @@ -322,7 +287,6 @@ Alternatives Symbol Ändere das Launcher-Symbol auf das KernelSU Icon. Icon gewechselt - Erfordert Root-Rechte KPM-Funktion anzeigen Versteckt KPM-Informationen und Funktion in der Home- und Unterleiste @@ -334,7 +298,6 @@ Eruda in WebUI X injizieren Fügen Sie eine Debug-Konsole in WebUI X ein, um das Debuggen zu vereinfachen. Benötigt Debugging im WebUI X. - DPI-Einstellung Angewendeter DPI Bildschirmanzahl nur für die aktuelle Anwendung anpassen Klein @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Unten - Bildlauf nach oben scrollen - Scrolle zum Ende - Autorisiert - Unberechtigt Ausgewählt variieren - Eigenes Deinstallationsmodul deaktivieren Menu Options Sort by diff --git a/manager/app/src/main/res/values-es/strings.xml b/manager/app/src/main/res/values-es/strings.xml index 972ea492..52ab13f5 100644 --- a/manager/app/src/main/res/values-es/strings.xml +++ b/manager/app/src/main/res/values-es/strings.xml @@ -5,16 +5,11 @@ 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 - SuSFS: %s Versión SuSFS - SuS SU Versión del gestor - Huella del dispositivo Estado de SELinux Desactivado Estricto @@ -28,7 +23,6 @@ Ordenar (Acción primero) Ordenar (Activado primero) Desinstalar - Restaurar Instalar Instalar Reiniciar @@ -61,10 +55,6 @@ Plantilla Personalizado Nombre de perfil - Montaje del espacio de nombres - Heredado - Global - Individual Grupos Capacidades Contexto SELinux @@ -112,7 +102,6 @@ Comprobación automática de actualizaciones al abrir la aplicación ¡No se ha podido conceder el acceso root! Aktion - Abrir Cancelar Activar la depuración de WebView Puede ser usado para depurar WebUI, por favor habilítalo sólo cuando sea necesario. @@ -136,9 +125,6 @@ LKM seleccionado: %s Guardar registros Registro guardado - Apóyanos - No soportado - Desconocido Modo SuS SU: ¿confirmar la instalación del módulo %1$s? @@ -172,14 +158,11 @@ Fondo de aplicación personalizado Seleccionar una imagen como fondo Transparencia de la barra de navegación - Restaurar Versión de Android Modelo del dispositivo No se permite conceder superusuario a %s Desactivar compatibilidad su Deshabilita temporalmente cualquier aplicación para obtener privilegios de root a través del comando de \"it\" (los procesos de root existentes no se verán afectados). - Estás usando el administrador de la Beta de SukiSU - ¿Está seguro que desea instalar los módulos %d seleccionados? ¿Seguro que quieres instalar los siguientes módulos %1$d ? \n\n%2$s Opciones avanzadas SELinux @@ -210,20 +193,14 @@ Rosa Gris Amarillo - Opciones de flash - Seleccione el archivo a flashear Install Anykernel3 Flash archivo del kernel AnyKernel3 Requiere privilegios de root - Fallo al copiar archivo Desguace completo ¿Reiniciar inmediatamente? Si No Reinicio fallido - empoderar - gasto - Copia de seguridad KPM No hay módulos del núcleo instalados en este momento Versión @@ -231,7 +208,6 @@ Desinstalar Desinstalado con éxito Error al desinstalar - Instalar Carga exitosa del módulo kpm Error al cargar el módulo kpm Parámetros @@ -245,8 +221,6 @@ SukiSU Ultra será una rama relativamente independiente de KSU en el futuro, pero todavía apreciamos el KernelSU oficial y MKSU etc. ¡por sus contribuciones! Sin soporte Apoyado - "Número de módulos KPM: %d " - Archivo KPM inválido Kernel no parcheado Kernel no configurado Ajustes personalizados @@ -254,19 +228,13 @@ Cargar Insertar Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema - Error al comprobar la existencia del archivo de módulo No se puede comprobar si el archivo de módulo existe - Confirme las desinstalaciones - Desinstalar - Cancelar Color del tema ¡Tipo de archivo incorrecto! Por favor seleccione el archivo .kpm. Desinstalar El siguiente KPM será desinstalado: %s Deshabilita los ganchos kprobe creados por KernelSU, usando ganchos en línea en su lugar, que es similar al método de enganche del núcleo no GKI. - Ajustar imagen de fondo Usa dos dedos para acercar la imagen, y un dedo para arrastrarla para ajustar la posición - Imposible cargar imagen Reaprovisionamiento Parpadeo Kernel @@ -303,7 +271,6 @@ Configuración de la Aplicación Herramientas - Eliminaciones No se ha encontrado la solicitud SELinux habilitado SELinux desactivado @@ -311,8 +278,6 @@ Configuraciones avanzadas Personalizar la barra de herramientas. Retorno - Estar en pleno swing - poner SuSFS activado SuSFS desactivado Fondo establecido correctamente @@ -320,7 +285,6 @@ Icono alternativo Cambiar el icono del lanzador al icono de KernelSU. Icono cambiado - Requiere privilegios de root Mostrar función KPM Oculta la información y función del KPM en la barra de inicio e inferior @@ -332,7 +296,6 @@ Inyectar Eruda en WebUI X Inyecta una consola de depuración en WebUI X para facilitar la depuración. Requiere que la depuración web esté encendida. - Configuración DPI DPI aplicado Ajustar la densidad de pantalla para la aplicación actual Pequeño @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Arriba Abajo - Ir arriba - Desplazar hacia abajo - autorizado - Sin Autorización Seleccionados opción - Desactivar módulo personalizado de desinstalación Menu Options Sort by diff --git a/manager/app/src/main/res/values-et/strings.xml b/manager/app/src/main/res/values-et/strings.xml index 5f9da098..133919ae 100644 --- a/manager/app/src/main/res/values-et/strings.xml +++ b/manager/app/src/main/res/values-et/strings.xml @@ -5,16 +5,11 @@ Klõpsa paigaldamiseks Töötamine Versioon: %d - Superkasutajaid: %d - Mooduleid: %d Mittetoetatud KernelSU toetab hetkel vaid GSI tuumasid Tuum - SuSFS: %s SuSFS Version - SuS SU Manageri versioon - Sõrmejälg SELinuxi olek Keelatud Jõustav @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Eemalda - Restore Paigalda Paigalda Taaskäivita @@ -61,10 +55,6 @@ Mall Kohandatud Profiili nimi - Haagi nimeruum - Päritud - Globaalne - Individuaalne Grupid Võimekused SELinux kontekst @@ -112,7 +102,6 @@ Rakenduse avamisel kontrolli automaatselt uuendusi Juurkasutaja andmine ebaõnnestus! Action - Ava Close Luba WebView silumine Saab kasutada WebUI silumiseks, palun luba ainult vajadusel. @@ -136,9 +125,6 @@ Valitud LKM: %s Salvesta Logid Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-fa/strings.xml b/manager/app/src/main/res/values-fa/strings.xml index 04ae810f..2960db2b 100644 --- a/manager/app/src/main/res/values-fa/strings.xml +++ b/manager/app/src/main/res/values-fa/strings.xml @@ -5,16 +5,11 @@ برای نصب ضربه بزنید به درستی کار می‌کند نسخه: %d - برنامه های با دسترسی روت: %d - ماژول‌ها: %d پشتیبانی نشده کرنل اس یو فقط هسته های gki را پشتیبانی میکند هسته - SuSFS: %s SuSFS Version - SuS SU نسخه برنامه - اثرانگشت وضعیت SELinux غیرفعال قانونمند @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) لغو نصب - Restore نصب نصب راه اندازی دوباره @@ -61,10 +55,6 @@ قالب شخصی سازی شده اسم پروفایل - Mount namespace - اثر گرفته - گلوبال - تکی Groups Capabilities SELinux context @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s ذخیره گزارش‌ها Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-fil/strings.xml b/manager/app/src/main/res/values-fil/strings.xml index 19680bdf..c404d8cf 100644 --- a/manager/app/src/main/res/values-fil/strings.xml +++ b/manager/app/src/main/res/values-fil/strings.xml @@ -5,16 +5,11 @@ Pindutin para mag-install Gumagana Bersyon: %d - Superusers: %d - Mga Modyul: %d Hindi Suportado Sinusuportahan lang ng KernelSU ang mga kernel ng GKI ngayon Kernel version - SuSFS: %s SuSFS Version - SuS SU Bersyon ng Manager - Fingerprint Katayuan ng SELinux Hindi pinagana Enforcing @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) I-uninstall - Restore I-install I-install I-reboot @@ -61,10 +55,6 @@ Template Custom Pangalan ng profile - I-mount ang namespace - Minana - Global - Indibidwal Mga Grupo Mga Kakayanan Konteksto ng SELinux @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s I-save ang mga Log Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-fr/strings.xml b/manager/app/src/main/res/values-fr/strings.xml index 277bc1a9..55942c10 100644 --- a/manager/app/src/main/res/values-fr/strings.xml +++ b/manager/app/src/main/res/values-fr/strings.xml @@ -5,16 +5,11 @@ Appuyez ici pour installer Fonctionnel Version : %d - Super-utilisateurs : %d - Modules : %d Non pris en charge KernelSU ne prend désormais en charge que les noyaux GKI Noyau - SuSFS: %s Version SuSFS - SuS Su Version du gestionnaire - Empreinte digitale Mode SELinux Désactivé Enforcing @@ -28,7 +23,6 @@ Trier par action Trier par activé Désinstaller - Restaure Installer Installer Redémarrer @@ -61,10 +55,6 @@ Modèle Personnalisé Nom du profil - Espace de noms de montage - Hérité - Global - Individuel Groupes Capacités Contexte SELinux @@ -112,7 +102,6 @@ Vérifier automatiquement les mises à jour à l\'ouverture de l\'application Échec de l\'octroi des privilèges root ! Action - Ouvrir Fermer Activer le débogage WebView Peut être utilisé pour déboguer WebUI. Activez uniquement cette option si nécessaire. @@ -138,9 +127,6 @@ LKM sélectionné : %s Enregistrer les journaux Journaux enregistrés - Supporté - Non supporté - Inconnu Mode Sus confirmer l\'installation du module %1$s? @@ -174,14 +160,11 @@ Arrière-plan personnalisé de l\'application Image as arrière-plan Transparence de la barre de navigation - Restaurer par défaut Version Android Modèle du téléphone Donner un super-utilisateur à %s n\'est pas autorisé Désactiver la compatibilité su Désactiver temporairement l\'accès des applications aux privilèges root via la commande su (les processus root existants ne seront pas affectés). - Vous utilisez le gestionnaire SukiSU Beta - Êtes-vous sûr de vouloir installer les modules %d sélectionnés ? Êtes-vous sûr de vouloir installer les modules %1$d suivants ? \n\n%2$s Autres configurations SELinux @@ -212,20 +195,14 @@ Rose Gris Jaune - Options du flash - Sélectionnez le fichier à installer Install Anykernel3 Fichier noyau AnyKernel3 Nécessite les privilèges root - Échec de la copie du fichier Traitement terminé Redémarrer immédiatement ? Oui Non Échec du redémarrage - ePouvoir - retirer - Sauvegarder KPM Aucun module de noyau installé pour le moment Version @@ -233,7 +210,6 @@ Désinstaller Désinstallé avec succès Échec de la désinstallation : - Installer Chargement du module kpm réussi Le chargement du module kpm a échoué Paramètres @@ -247,8 +223,6 @@ SukiSU Ultra sera une branche relativement indépendante de KSU dans le futur, mais nous apprécions toujours le KernelSU officiel, MKSU etc. pour leurs contributions! Non pris en charge Pris en charge - "Nombre de modules KPM : %d " - Fichier KPM invalide Noyau non corrigé Noyau non configuré Paramètres personnalisés @@ -256,19 +230,13 @@ Charger Intégrer Veuillez sélectionner : %1\$s Mode d\'installation du module \n\nCharge : Chargez temporairement le module \nIntégré: Installez définitivement dans le système - Impossible de vérifier l\'existence du fichier du module Impossible de vérifier si le fichier du module existe - Confirmer la désinstallation. - Désinstaller - Annuler Couleur du thème Type de fichier incorrect ! Veuillez sélectionner un fichier .kpm. Désinstaller Le KPM suivant sera désinstallé : %s Désactivez les crochets kprobe créés par KernelSU, en utilisant des crochets en ligne à la place, ce qui est similaire à la méthode de crochet du noyau non-GKI. - Ajuster l\'image de fond Utilisez deux doigts pour zoomer l\'image, et un doigt pour le faire glisser pour ajuster la position - Impossible de charger l\'image Remise à disposition Clignotement du noyau @@ -305,7 +273,6 @@ Paramètres de l\'application Outils - Suppressions Application introuvable SELinux activé SELinux désactivé @@ -313,8 +280,6 @@ Paramètres avancés Choisir les boutons à afficher Reviens - Etre en plein swing - rangé SuSFS activé SuSFS désactivé Fond d\'écran défini avec succès @@ -322,7 +287,6 @@ Icône alternative Changer l\'icône du lanceur en icône de KernelSU. Icône changée - Nécessite les privilèges root Afficher la fonction KPM Masque les informations et fonctions KPM dans la barre d\'accueil et en bas @@ -334,7 +298,6 @@ Injecter Eruda dans WebUI X Injectez une console de débogage dans WebUI X pour faciliter le débogage. Nécessite que le débogage soit activé. - Réglage du DPI DPI appliqué Ajuster la densité d\'affichage de l\'écran pour l\'application actuelle uniquement Petit @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu En haut En Bas - Aller en haut - Faire défiler vers le bas - Autorisé - non autorisé Sélectionné option - Désactiver le module de désinstallation personnalisé Menu Options Sort by diff --git a/manager/app/src/main/res/values-hi/strings.xml b/manager/app/src/main/res/values-hi/strings.xml index 785ad467..4ab8f00e 100644 --- a/manager/app/src/main/res/values-hi/strings.xml +++ b/manager/app/src/main/res/values-hi/strings.xml @@ -5,16 +5,11 @@ इंस्टाल करने के लिए क्लिक करें काम कर रहा है वर्जन: %d - सुपरयूजर : %d - मॉड्यूल्स : %d सपोर्ट नहीं करता है KernelSU अभी केवल GKI कर्नल्स को सपोर्ट करता है कर्नल - SuSFS: %s SuSFS Version - SuS SU मैनेजर वर्जन - फिंगरप्रिंट SELinux स्थिति डिसेबल्ड (बंद) एनफोर्सिंग @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) अनइंस्टॉल करें - Restore इंस्टाल करें इंस्टाल करें रीबूट करें @@ -61,10 +55,6 @@ टेम्पलेट कस्टम प्रोफाइल का नाम - Namspace माउंट करें - Inherited - Global - Individual समूह क्षमताएं SELinux context @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s लॉग सहेजें Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-hr/strings.xml b/manager/app/src/main/res/values-hr/strings.xml index c776d3a9..33212601 100644 --- a/manager/app/src/main/res/values-hr/strings.xml +++ b/manager/app/src/main/res/values-hr/strings.xml @@ -5,16 +5,11 @@ Kliknite da instalirate Radi Verzija: %d - Superkorisnici: %d - Module: %d Nepodržano KernelSU samo podržava GKI kernele sad Kernel - SuSFS: %s SuSFS Version - SuS SU Verzija Voditelja - Otisak prsta SELinux stanje Isključeno U Provođenju @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Deinstalirajte - Restore Instalirajte Instalirajte Ponovno pokrenite @@ -61,10 +55,6 @@ Šablon Prilagođeno Naziv profila - Imenski prostor nosača - Naslijeđen - Globalan - Pojedinačan Grupe Sposobnosti SELinux kontekst @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Spremi Zapise Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-hu/strings.xml b/manager/app/src/main/res/values-hu/strings.xml index e6efb9b2..fcc3523d 100644 --- a/manager/app/src/main/res/values-hu/strings.xml +++ b/manager/app/src/main/res/values-hu/strings.xml @@ -5,16 +5,11 @@ Kattintson a telepítéshez Működik Verzió: %d - Engedélyezett alkalmazások: %d - Modulok: %d Nem támogatott A KernelSU jelenleg csak GKI kerneleket támogat Kernel - SuSFS: %s SuSFS Version - SuS SU Alkalmazás verziója - Ujjlenyomat SELinux állapot Letiltva Kényszerített @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Eltávolítás - Restore Telepítés Telepítés Újraindítás @@ -61,10 +55,6 @@ Sablon Egyedi Profil neve - Névtér csatlakoztatása - Örökölt - Globális - Különálló Csoportok Jogosultságok SELinux kontextus @@ -112,7 +102,6 @@ Automatikusan keressen frissítéseket az alkalmazás megnyitásakor A root jog megadása sikertelen! Művelet - Megnyitás Close WebView hibakeresés engedélyezése A WebUI hibakeresésére használható, csak szükség esetén engedélyezze. @@ -136,9 +125,6 @@ Kiválasztott LKM: %s Naplók mentése Mentett naplók - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-in/strings.xml b/manager/app/src/main/res/values-in/strings.xml index cd7f5ec4..a68ff136 100644 --- a/manager/app/src/main/res/values-in/strings.xml +++ b/manager/app/src/main/res/values-in/strings.xml @@ -5,13 +5,10 @@ Klik untuk menginstal Berfungsi Versi: %d - SuperUser: %d - Modul: %d Tidak didukung KernelSU saat ini hanya mendukung kernel GKI Kernel Versi manager - Identitas Status SELinux Nonaktif Enforcing @@ -54,10 +51,6 @@ Templat Khusus Nama profil - Mount Namespace - Diwariskan - Universal - Individual Kelompok Kemampuan Konteks SELinux @@ -111,7 +104,6 @@ Pilih berkas Instal ke slot nonaktif (setelah OTA) Gagal memberikan akses root! - Buka Tutup Cek terbaru Cek terbaru setiap membuka aplikasi diff --git a/manager/app/src/main/res/values-it/strings.xml b/manager/app/src/main/res/values-it/strings.xml index 33fe97bf..aaa5ed64 100644 --- a/manager/app/src/main/res/values-it/strings.xml +++ b/manager/app/src/main/res/values-it/strings.xml @@ -5,16 +5,11 @@ 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 - SuSFS: %s SuSFS Version - SuS SU Versione del manager - Impronta della build di Android Stato di SELinux Disabilitato Enforcing @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Disinstalla - Restore Installa Installa Riavvia @@ -61,10 +55,6 @@ Modello Personalizzato Nome profilo - Spazio dei nomi del mount - Ereditato - Globale - Individuale Gruppi Capacità Contesto SELinux @@ -112,7 +102,6 @@ Controlla automaticamente la disponibilità di aggiornamenti all\'apertura dell\'applicazione Impossibile ottenere l\'accesso root! Action - Apri Close Abilita il debug di WebView Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario. @@ -138,9 +127,6 @@ LKM selezionato: %s Salva Registri Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-iw/strings.xml b/manager/app/src/main/res/values-iw/strings.xml index fb97a716..1ef324f2 100644 --- a/manager/app/src/main/res/values-iw/strings.xml +++ b/manager/app/src/main/res/values-iw/strings.xml @@ -9,27 +9,21 @@ שלח לוג מושבת תמכו בנו - ירושה מודולים מושבתים מכיוון שהם מתנגשים עם זה של Magisk! יומן שינויים התרים הפעלה מחדש למצב הורדה טעינת מודולים כברירת מחדל הפעלת אפשרות זו תאפשר ל-KernelSU לשחזר קבצים שהשתנו על ידי המודולים עבור יישום זה. - אישי הפעלת המודל נכשלה: %s עצירה בכח הפעלה מחדש למצב EDL איתחול יכולת - משתמשי על: %d מפעיל מודל: %s - גלובלי ערך ברירת המחדל הגלובלי עבור \"טעינת מודולים\" בפרופילי אפליקציה. אם מופעל, זה יסיר את כל שינויי המודול למערכת עבור יישומים שאין להם ערכת פרופיל. - מודלים:%d אכיפה הקשר SELinux - טביעת אצבע ברירת מחדל להשיק מצב בטוח @@ -38,7 +32,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 16b4acc4..1463632d 100644 --- a/manager/app/src/main/res/values-ja/strings.xml +++ b/manager/app/src/main/res/values-ja/strings.xml @@ -394,9 +394,6 @@ パス マウントのパス 例 : /system/addon.d - SUS パスの管理 - SUS マウントの管理 - アンマウントの管理を試す SUS パスが未構成です SUS マウントが未構成です アンマウントを試すが未構成です @@ -420,13 +417,11 @@ リセットしてアンマウントを試す すべてのアンマウント構成がリセットされます。続行してもよろしいですか? - パスの設定 Android データパス SD カードのパス Android データパスを設定 SD カードのパスを設定 - 有効な機能のステータス SuSFS で有効な機能のステータスを表示します。 機能のステータス情報が見つかりません 有効 @@ -444,7 +439,6 @@ 自動でバインドマウントのアンマウントを試す KSU SUSFS シンボルを非表示 Magic Mount の対応 - OverlayFS 自動カーネル状態の対応 SUS Kstat の対応 SUS SU モード切り替え機能 diff --git a/manager/app/src/main/res/values-kn/strings.xml b/manager/app/src/main/res/values-kn/strings.xml index 7c8db9a0..42aa39e0 100644 --- a/manager/app/src/main/res/values-kn/strings.xml +++ b/manager/app/src/main/res/values-kn/strings.xml @@ -5,16 +5,11 @@ Click to install ಕೆಲಸ ಮಾಡುತ್ತಿದೆ ವರ್ಷನ್: %d - ಸೂಪರ್‌ಯೂಸರ್‌ಗಳು: %d - ಮಾಡ್ಯೂಲ್‌ಗಳು: %d ಬೆಂಬಲಿತವಾಗಿಲ್ಲ KernelSU ಈಗ GKI ಕರ್ನಲ್‌ಗಳನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸುತ್ತದೆ ಕರ್ನಲ್ - SuSFS: %s SuSFS Version - SuS SU ಮ್ಯಾನೇಜರ್ ವರ್ಷನ್ - Fingerprint SELinux ಸ್ಥಿತಿ Disabled Enforcing @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ - Restore Install Install ರೀಬೂಟ್ @@ -61,10 +55,6 @@ ಟೆಂಪ್ಲೇಟ್ ಕಸ್ಟಮ್ ಪ್ರೊಫೈಲ್ ಹೆಸರು - ಮೌಂಟ್ ನೇಮ್‌ಸ್ಪೇಸ್ - ಪಿತ್ರಾರ್ಜಿತ - ಜಾಗತಿಕ - ವೈಯಕ್ತಿಕ ಗುಂಪುಗಳು ಸಾಮರ್ಥ್ಯಗಳು SELinux ಸಂದರ್ಭ @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s ಲಾಗ್ಗಳನ್ನು ಉಳಿಸಿ Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-ko/strings.xml b/manager/app/src/main/res/values-ko/strings.xml index 9af8e91b..473822fc 100644 --- a/manager/app/src/main/res/values-ko/strings.xml +++ b/manager/app/src/main/res/values-ko/strings.xml @@ -5,16 +5,11 @@ 이 곳을 눌러 설치하기 정상 작동 중 버전: %d - 루트 권한: %d개 - 설치된 모듈: %d개 지원되지 않음 KernelSU는 현재 GKI 커널만 지원합니다 커널 - SuSFS: %s SuSFS Version - SuS SU 매니저 버전 - 빌드 정보 SELinux 상태 비활성화됨 적용 @@ -28,7 +23,6 @@ 정렬 (동작이 있는 것 우선) 정렬 (활성화됨 우선) 삭제 - Restore 설치 설치 다시 시작 @@ -61,10 +55,6 @@ 템플릿 사용자 지정 프로필 이름 - 이름 공간 마운트 - 상속 - 전역 - 개별 사용자 그룹 권한 SELinux 컨텍스트 @@ -112,7 +102,6 @@ 앱 실행시 자동으로 업데이트 확인 루트 부여 실패! 동작 - 열기 Close WebView 디버깅 활성화 WebUI 디버깅에 사용 가능, 필요할 때만 활성화해주세요. @@ -136,9 +125,6 @@ 선택된 LKM: %s 로그 저장 로그 저장됨 - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-lt/strings.xml b/manager/app/src/main/res/values-lt/strings.xml index 56450f82..566cd399 100644 --- a/manager/app/src/main/res/values-lt/strings.xml +++ b/manager/app/src/main/res/values-lt/strings.xml @@ -5,16 +5,11 @@ Spustelėkite norėdami įdiegti Veikia Versija: %d - Supernaudotojai: %d - Moduliai: %d Nepalaikoma KernelSU dabar palaiko tik GKI branduolius Branduolys - SuSFS: %s SuSFS Version - SuS SU Tvarkyklės versija - Pirštų atspaudas SELinux statusas Išjungta Priverstinas @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Išdiegti - Restore Įdiegti Įdiegti Paleisti iš naujo @@ -61,10 +55,6 @@ Šablonas Pasirinktinis Profilio pavadinimas - Prijungti vardų erdvę - Paveldėtas - Globalus - Individualus Grupės Galimybės SELinux kontekstas @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Saglabāt Žurnālus Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-lv/strings.xml b/manager/app/src/main/res/values-lv/strings.xml index 46d5e614..709b5dec 100644 --- a/manager/app/src/main/res/values-lv/strings.xml +++ b/manager/app/src/main/res/values-lv/strings.xml @@ -5,16 +5,11 @@ Noklikšķiniet, lai instalētu Darbojas Versija: %d - Superlietotāji: %d - Moduļi: %d Neatbalstīts KernelSU atbalsta tikai GKI kodolus Kodols - SuSFS: %s SuSFS Version - SuS SU Pārvaldnieka versija - Pirkstu nospiedums SELinux statuss Atspējots Izpildīšana @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Atinstalēt - Restore Instalēt Instalēt Restartēt @@ -61,10 +55,6 @@ Veidne Pielāgots Profila vārds - Mount nosaukumvieta - Mantots - Globāli - Individuāls Grupas Iespējas SELinux konteksts @@ -112,7 +102,6 @@ Automātiski pārbaudīt atjauninājumus atverot aplikāciju Neizdevās piešķirt sakni! Action - Atvērt Close Iespējot WebView atkļūdošanu Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams. @@ -138,9 +127,6 @@ Izvēlētais lkm: %s Išsaugoti Žurnalus Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-mr/strings.xml b/manager/app/src/main/res/values-mr/strings.xml index d4268a41..8f0b06e6 100644 --- a/manager/app/src/main/res/values-mr/strings.xml +++ b/manager/app/src/main/res/values-mr/strings.xml @@ -5,16 +5,11 @@ इंस्टॉल साठी क्लिक करा कार्यरत आवृत्ती: %d - सुपरयूझर: %d - मॉड्यूल्स: %d असमर्थित KernelSU आता फक्त GKI कर्नलचे समर्थन करते कर्नल - SuSFS: %s SuSFS Version - SuS SU व्यवस्थापक आवृत्ती - फिंगरप्रिंट SELinux स्थिती अक्षम एनफोर्सिंग @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) विस्थापित करा - Restore स्थापित करा स्थापित करा रीबूट करा @@ -61,10 +55,6 @@ साचा कस्टम प्रोफाइल नाव - माउंट नेमस्पेस - इनहेरीटेड - जागतिक - वैयक्तिक गट क्षमता SELinux संदर्भ @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s लॉग जतन करा Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-ms/strings.xml b/manager/app/src/main/res/values-ms/strings.xml index b563c78e..db365fbc 100644 --- a/manager/app/src/main/res/values-ms/strings.xml +++ b/manager/app/src/main/res/values-ms/strings.xml @@ -5,16 +5,11 @@ Tekan untuk memasang Berjalan Versi: %d - Superusers: %d - Modul: %d Tidak Disokong KernelSU ketika ini hanya menyokong kernel GKI Kernel - SuSFS: %s SuSFS Version - SuS SU Versi manager - Cap Jari Status SELinux Lumpuhkan Enforcing @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Padam - Restore Pasang Pasang Reboot @@ -61,10 +55,6 @@ Template Custom Profile name - Mount namespace - Inherited - Global - Individual Groups Capabilities SELinux context @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Simpan Log Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-nl/strings.xml b/manager/app/src/main/res/values-nl/strings.xml index c4c1a557..7bf5d3ab 100644 --- a/manager/app/src/main/res/values-nl/strings.xml +++ b/manager/app/src/main/res/values-nl/strings.xml @@ -5,16 +5,11 @@ Klik om te installeren Werkend Versie: %d - Supergebruikers: %d - Modules: %d Niet ondersteund KernelSU ondersteunt alleen GKI kernels Kernel - SuSFS: %s SuSFS Version - SuS SU Manager versie - Fingerprint SELinux status Uitgeschakeld Afgedwongen @@ -28,7 +23,6 @@ Sorteren (actie eerst) Sorteren (eerst ingeschakeld) Verwijderen - Restore Installeren Installeren Herstart @@ -61,10 +55,6 @@ Sjabloon Aangepast Profiel naam - Koppel naamruimte - Overgenomen - Globaal - Individuëel Groepen Mogelijkheden SELinux context @@ -112,7 +102,6 @@ Controleer automatisch op updates bij het openen van de app Kan geen root verlenen! Actie - Open Close Schakel WebView-foutopsporing Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is. @@ -138,9 +127,6 @@ Geselecteerde LKM: %s Logboeken Opslaan Logs opgeslagen - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-pl/strings.xml b/manager/app/src/main/res/values-pl/strings.xml index 0f729c07..69dc393d 100644 --- a/manager/app/src/main/res/values-pl/strings.xml +++ b/manager/app/src/main/res/values-pl/strings.xml @@ -5,16 +5,11 @@ Kliknij, aby zainstalować Działa Wersja: %d - Superużytkownicy: %d - Moduły: %d Nieobsługiwany KernelSU obsługuje obecnie tylko jądra GKI Jądro - SuSFS: %s SuSFS Version - SuS SU Wersja menedżera - Odcisk Status SELinux Wyłączony Enforcing @@ -28,7 +23,6 @@ Sortuj (najpierw działania) Sortuj (najpierw włączone) Odinstaluj - Restore Instaluj Instaluj Uruchom ponownie @@ -61,10 +55,6 @@ Szablon Własny Nazwa profilu - Przestrzeń nazw montowania - Odziedziczona - Globalna - Indywidualna Grupy Uprawnienia Kontekst SELinux @@ -112,7 +102,6 @@ Wyszukuj aktualizacje automatycznie przy otwieraniu aplikacji Nie udało się przyznać roota! Akcja - Otwórz Close Włącz debugowanie WebView Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby. @@ -138,9 +127,6 @@ Wybrano LKM: %s Zapisz dzienniki Dzienniki zapisane - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by 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 9d716025..f4360d50 100644 --- a/manager/app/src/main/res/values-pt-rBR/strings.xml +++ b/manager/app/src/main/res/values-pt-rBR/strings.xml @@ -5,13 +5,10 @@ Clique para instalar Em execução Versão: %d - SuperUsuários: %d - Módulos: %d Sem suporte KernelSU suporta apenas kernels GKI agora Kernel Versão do gerenciador - Impressão digital Status do SELinux Desativado Impondo @@ -54,10 +51,6 @@ Modelo Personalizado Nome do perfil - Montar namespace - Herdado - Global - Individual Grupos Capacidades Contexto do SELinux @@ -102,7 +95,6 @@ Verificar por atualização Verifique automaticamente se há atualizações ao abrir o app Falha ao conceder acesso root! - Abrir Ativar depuração do WebView Pode ser usado para depurar o WebUI. Por favor, ative somente quando necessário. Selecione um arquivo diff --git a/manager/app/src/main/res/values-pt/strings.xml b/manager/app/src/main/res/values-pt/strings.xml index dae32524..b69617de 100644 --- a/manager/app/src/main/res/values-pt/strings.xml +++ b/manager/app/src/main/res/values-pt/strings.xml @@ -5,16 +5,11 @@ Clique para instalar Funcionando Versão: %d - Super Usuário: %d - Módulos: %d Sem suporte KernelSU suporta apenas kernels GKI agora Kernel - SuSFS: %s Versão SuSFS - SuS SU Versão do aplicativo - Impressão digital Status do SELinux Desabilitado Impondo @@ -28,7 +23,6 @@ Ordenar (exceto primeiro) Ordenar (Habilitado primeiro) Desinstalar - Restaurar Instalar Instalar Reiniciar @@ -61,10 +55,6 @@ Modelo Personalizado Nome do perfil - Montar namespace - Herdado - Global - Individual Grupos Capacidades contexto SELinux @@ -112,7 +102,6 @@ Verifique automaticamente se há atualizações ao abrir o app Falha ao conceder acesso root! Ações - Abrir Fechar Ativar depuração do WebView Pode ser usado para depurar o WebUI. Por favor, ative somente quando necessário. @@ -136,9 +125,6 @@ LKM selecionado: %s Salvar Registros Registros salvos - Apoie-nos - Não Suportado - Desconhecido Modo SU SuSU: ¿confirmar la instalación del módulo %1$s? @@ -172,14 +158,11 @@ Fundo personalizado do App Selecione uma imagem como plano de fundo Transparência da barra de navegação - Restaurar padrões Android Version: Modelo do aparelho Conceder superusuário à %s não é permitido Desativar compatibilidade com su Temporariamente desativar qualquer aplicativo de obter privilégios de superusuário através do comando Wait su (os processos raiz existentes não serão afetados). - Você está usando o gerenciador do SukiSU Beta - Você tem certeza que deseja instalar os módulos %d selecionados? Tem certeza que deseja instalar os seguintes módulos %1$d ? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Rosa Cinza Amarelo - Opções do pincel - Selecione o arquivo a ser instalado Install Anykernel3 Instalar o arquivo kernel AnyKernel3 Requer privilégios de superusuário - Falha ao copiar arquivo Esboço completo Reiniciar imediatamente? Sim Não Reinicialização falhou - empoderar - retirar - Backup KPM Não há módulos do kernel instalados neste momento Versão @@ -231,7 +208,6 @@ Desinstalar Desinstalado com sucesso Falha ao desinstalar - Instalar Carregamento do módulo kpm com sucesso Falha ao carregar o módulo kpm Parâmetros @@ -245,8 +221,6 @@ SukiSU Ultra será uma ramificação relativamente independente da KSU no futuro, mas ainda apreciamos o KernelSU e o MKSU, etc. para suas contribuições! Sem suporte Apoie-nos - "Número de módulos KPM: %d " - Arquivo KPM inválido Kernel não corrigido Kernel não configurado Configurações personalizadas @@ -254,19 +228,13 @@ Carga Embutir Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema - Falha ao verificar a existência do arquivo do módulo Não foi possível verificar se o arquivo do módulo existe - Confirmar Desinstalação - Desinstalar - Cancelar Cor do tema Tipo de arquivo incorreto! Selecione o arquivo .kpm. Desinstalar O seguinte KPM será desinstalado: %s Desative os hooks kprobe criados pelo KernelSU, usando ganchos embutidos em vez disso, o que é semelhante ao método de gancho do kernel GKI. - Ajustar imagem de fundo Use dois dedos para ampliar a imagem e um dedo para arrastá-la para ajustar a posição - Não foi possível carregar a imagem Restituição Kernel Flashing @@ -303,7 +271,6 @@ Configurações Do Aplicativo Ferramentas - Remoções Aplicativo não encontrado SELinux habilitado SELinux Desativado @@ -311,8 +278,6 @@ Configurações Avançadas Personaliza a barra de ferramentas. Retorno - Esteja em pleno balanço - jogou fora SuSFS habilitado SuSFS desativado Fundo definido com sucesso @@ -320,7 +285,6 @@ Ícone alternativo Alterar o ícone do launcher para o ícone do KernelSU. Ícone alterado - Requer privilégios de superusuário Exibir função KPM Oculta as informações e funções do KPM na barra inicial e inferior @@ -332,7 +296,6 @@ Injetar Eruda na WebUI X Injetar um console de depuração na WebUI X para facilitar a depuração. Requer depuração da web para estar ligada. - Configuração de DPI DPI aplicado Ajustar a densidade de exibição da tela apenas para o aplicativo atual Pequeno @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Mais votados Parte Inferior - Rolar para o topo - Role até o final - autorizado - Não autorizado Selecionado opção - Desativar o módulo personalizado de desinstalação Menu Options Sort by diff --git a/manager/app/src/main/res/values-ro/strings.xml b/manager/app/src/main/res/values-ro/strings.xml index 126a59e2..44f4dbd7 100644 --- a/manager/app/src/main/res/values-ro/strings.xml +++ b/manager/app/src/main/res/values-ro/strings.xml @@ -5,16 +5,11 @@ Click pentru a instala Funcționează Versiune: %d - Super-utilizatori: %d - Module: %d Necompatibil KernelSU suportă doar nuclee GKI acum Nucleu - SuSFS: %s SuSFS Version - SuS SU Versiune Manager - Amprentă Stare SELinux Dezactivat Obligatoriu @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Dezinstalează - Restore Instalează Instalează Repornește @@ -61,10 +55,6 @@ Șablon Personalizat Nume profil - Montare spațiu de nume - Moștenit - Global - Individual Grupuri Capabilități Context SELinux @@ -112,7 +102,6 @@ Se verifică automat actualizările când deschizi aplicația Nu s-a acordat acces root! Action - Deschide Close Activează depanarea WebView Poate fi folosit pentru a depana WebUI, activează numai când este necesar. @@ -138,9 +127,6 @@ Lkm selectat: %s Salvează Jurnale Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-sl/strings.xml b/manager/app/src/main/res/values-sl/strings.xml index 31e0f619..ce032310 100644 --- a/manager/app/src/main/res/values-sl/strings.xml +++ b/manager/app/src/main/res/values-sl/strings.xml @@ -5,16 +5,11 @@ Klikni za namestitev V obdelavi Verzija: %d - Superuporabniki: %d - Moduli: %d Ne podpira KernelSU podpira samo GKI kernele Kernel - SuSFS: %s SuSFS Version - SuS SU Verzija upravitelja - Prstni odtis SELinux status Onemogočeno Enforcing @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Odmesti - Restore Namesti Namesti Znova zaženi @@ -61,10 +55,6 @@ Predloga Po meri Ime profila - Imenski prostor vmestitve - Podedovano - Globalno - Pozameznik Skupine Zmožnosti SELinux kontekst @@ -112,7 +102,6 @@ Automatically check for updates when opening the app Failed to grant root! Action - Open Close Enable WebView debugging Can be used to debug WebUI. Please enable only when needed. @@ -136,9 +125,6 @@ Selected LKM: %s Shrani Dnevnike Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -172,14 +158,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -210,20 +193,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -231,7 +208,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -245,8 +221,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -254,19 +228,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -303,7 +271,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -311,8 +278,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -320,7 +285,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -332,7 +296,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -373,9 +336,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -385,13 +345,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by 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 cf1b4151..42e87bb4 100644 --- a/manager/app/src/main/res/values-th/strings.xml +++ b/manager/app/src/main/res/values-th/strings.xml @@ -5,16 +5,11 @@ กดเพื่อติดตั้ง กำลังทำงาน เวอร์ชัน: %d - สิทธิ์ผู้ใช้ขั้นสูง: %d - โมดูล: %d ไม่รองรับ ตอนนี้ KernelSU รองรับเคอร์เนลประเภท GKI เท่านั้น เคอร์เนล - SuSFS: %s SuSFS Version - SuS SU เวอร์ชันตัวจัดการ - ลายนิ้วมือ สถานะ SELinux ปิดใช้งาน Enforcing @@ -28,7 +23,6 @@ เรียงลำดับ (แบบรันคำสั่งก่อน) เรียงลำดับ (แบบเปิดใช้งานก่อน) ถอนการติดตั้ง - Restore ติดตั้ง ติดตั้ง รีบูต @@ -61,10 +55,6 @@ เทมเพลต กำหนดเอง ชื่อโปรไฟล์ - Mount เนมสเปซ - สืบทอด - ทั่วไป - ส่วนบุคคล หมวดหมู่ ความสามารถของแอป บริบท SELinux @@ -112,7 +102,6 @@ ตรวจสอบการอัปเดตโดยอัตโนมัติเมื่อเปิดแอป ไม่สามารถให้สิทธิ์รูทได้! คำสั่ง - เปิด Close เปิดใช้งานการแก้ไขข้อบกพร่อง WebView ใช้เพื่อดีบัก WebUI เท่านั้น โปรดเปิดใช้งานเมื่อจำเป็น @@ -138,9 +127,6 @@ เลือก LKM: %s บันทึกบันทึก บันทึก Log แล้ว - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-tr/strings.xml b/manager/app/src/main/res/values-tr/strings.xml index 7cc3ee84..65ea63df 100644 --- a/manager/app/src/main/res/values-tr/strings.xml +++ b/manager/app/src/main/res/values-tr/strings.xml @@ -5,16 +5,11 @@ Yüklemek için tıklayın Çalışıyor Sürüm: %d - SüperKullanıcılar: %d - Modüller: %d Desteklenmiyor Kernel\'inizde KernelSU sürücüsü algılanmadı, yanlış çekirdek mi? Kernel sürümü - SuSFS: %s SuSFS Sürümü - SuS SU Yönetici sürümü - Parmak izi SELinux durumu Devre dışı Enfocing(Etkin) @@ -28,7 +23,6 @@ Sırala (Action önce) Sırala (Etkin önce) Kaldır - Geri yükle Yükle Yükle Yeniden başlat @@ -61,10 +55,6 @@ Şablon Özel Profil adı - Bağlama adı alanı - Miras alınan - Global - Bireysel Gruplar Yetenekler SELinux bağlamı @@ -112,7 +102,6 @@ Uygulama açıldığında otomatik olarak güncellemeleri kontrol et Root yetkisi verilemedi! Action - Kapat WebView hata ayıklama etkinleştir WebUI\'yi hata ayıklamak için kullanılabilir. Sadece ihtiyaç duyulduğunda etkinleştirin. @@ -136,9 +125,6 @@ Seçilen LKM: %s Günlükleri kaydet Günlükler kaydedildi - Destekleniyor - Desteklenmiyor - Bilinmiyor SuS SU modu: %1$s modülünü yüklemek istediğinizden emin misiniz? @@ -172,14 +158,11 @@ Özel Uygulama Arka Planı Bir görüntü seçin ve arka plan olarak ayarlayın Geçiş çubuğu şeffaflığı - Varsayılana geri dön Android sürümü Cihaz modeli %s için süper kullanıcı yetkisi verilemiyor Su uyumluluğunu devre dışı bırak Geçici olarak herhangi bir uygulamanın su komutu aracılığıyla root ayrıcalıkları elde etmesini devre dışı bırakır (mevcut root işlemleri etkilenmez). - SukiSU Beta yöneticisini kullanıyorsunuz - Seçilen %d modülü yüklemek istediğinizden emin misiniz? Aşağıdaki %1$d modülü yüklemek istediğinizden emin misiniz? \n\n%2$s Daha fazla ayar SELinux @@ -212,20 +195,14 @@ Pembe Gri Sarı - Fırça Seçenekleri - Yazılacak dosyayı seçin Anykernel3 yükle AnyKernel3 çekirdek dosyasını yaz Root ayrıcalıkları gerektirir - Dosya Kopyalama Başarısız Temizleme tamamlandı Hemen yeniden başlatmak istiyor musunuz? Evet Hayır Yeniden başlatma başarısız - yetkilendir - geri al - Yedekle KPM Şu anda yüklü çekirdek modülü yok Sürüm @@ -233,7 +210,6 @@ Kaldır Başarıyla kaldırıldı Kaldırılamadı - Yükle Kpm modülü yükleme başarılı Kpm modülü yükleme başarısız Parametreler @@ -247,8 +223,6 @@ SukiSU Ultra, gelecekte KSU\'nun nispeten bağımsız bir dalı olacak, ancak yine de resmi KernelSU ve MKSU gibi katkılarından dolayı teşekkür ederiz! Desteklenmiyor Destekleniyor - "KPM modül sayısı: %d " - Geçersiz KPM dosyası Çekirdek yamalanmadı Çekirdek yapılandırılmadı Özel ayarlar @@ -256,19 +230,13 @@ Yükle Göm Lütfen seçin: %1$s Modül Yükleme Modu \n\nYükle: Modülü geçici olarak yükle \nGömülü: Kalıcı olarak sisteme yükle - Modül dosyasının varlığını kontrol etme başarısız Modül dosyasının varlığını kontrol edilemiyor - Kaldırmayı onayla - Kaldır - İptal Tema Rengi Yanlış dosya türü! Lütfen .kpm dosyasını seçin. Kaldır Aşağıdaki KPM kaldırılacak: %s KernelSU tarafından oluşturulan kprobe kancalarını devre dışı bırakın, bunun yerine inline kancalar kullanın, bu da Non-GKI çekirdek kanca yöntemine benzer. - Arka plan görüntüsünü ayarla Görüntüyü yaklaştırmak için iki parmağınızı kullanın ve bir parmağınızla sürükleyerek konumu ayarlayın - Görüntü yüklenemedi Yeniden sağla Çekirdek Flash\'lama @@ -305,7 +273,6 @@ Uygulama Ayarları Araçlar - Kaldır Uygulama bulunamadı SELinux Etkin SELinux Devre Dışı @@ -313,8 +280,6 @@ Gelişmiş Ayarlar Araç çubuğunu özelleştir Geri - Tamamen aç - Kaldır SuSFS etkin SuSFS devre dışı Arka plan başarıyla ayarlandı @@ -322,7 +287,6 @@ Alternatif simge Başlatıcı simgesini KernelSU simgesiyle değiştir. Simge değiştirildi - Root ayrıcalıkları gerektirir KPM İşlevini Gizle Ana sayfa ve alt çubuktaki KPM bilgilerini ve işlevini gizler @@ -334,7 +298,6 @@ WebUI X\'e Eruda enjekte et WebUI X\'e bir hata ayıklama konsolu enjekte edin, böylece hata ayıklama daha kolay olur. Web hata ayıklamanın açık olması gerekir. - DPI ayarı Uygulanan DPI Sadece geçerli uygulama için ekran görüntüleme yoğunluğunu ayarlayın Küçük @@ -375,9 +338,6 @@ Bu kategoride uygulama yok - Root - Çıkart - Özel Yetkilendirme reddedildi Yetki verildi @@ -387,13 +347,8 @@ Menüyü gizle Üst Alt - En üste kaydır - En alta kaydır - yetkilendirildi - yetkilendirilmedi Seçildi seçenek - Özel kaldırma modülünü devre dışı bırak Menü Seçenekleri Sıralama Seçenekleri @@ -410,7 +365,6 @@ Mevcut build time: %s Varsayılana Sıfırla Uygula - Tamam Sıfırlamayı Onayla Sıfırlamayı Onayla @@ -421,18 +375,14 @@ SuSFS uname ve build time başarıyla ayarlandı: %s, %s SuSFS Yapılandırması - SuSFS için Uname ve Build Time Artifact\'larını ve daha fazlasını yapılandırma (Mevcut: %s) Otomatik Başlat Yeniden başlatma sırasında tüm varsayılan olmayan yapılandırmaları otomatik olarak uygula Etkinleştirmek için yapılandırma eklenmesi gerekiyor - Otomatik Başlat etkin - Otomatik Başlat devre dışı Otomatik başlatma etkinleştirilemedi Otomatik başlatma devre dışı bırakılamadı Otomatik başlatma yapılandırma hatası: %s Otomatik başlatma için kullanılabilir yapılandırma yok - Otomatik başlatmayı etkinleştirmek için varsayılan olmayan bir değer girmeniz gerekiyor Temel Ayarlar SUS Yolları @@ -442,10 +392,6 @@ Etkinleştirilen Özellikler Durumu Ekle - Sil - Sıfırla - Çalıştır - Yenile SUS Yolu Ekle SUS Bağlama Noktası Ekle @@ -453,9 +399,6 @@ Yol Bağlama Yolu örn.: /system/addon.d - SUS Yolları Yönetimi - SUS Bağlama Noktaları Yönetimi - Bağlamayı Kaldırmayı Dene Yönetimi Yapılandırılmış SUS yolu yok Yapılandırılmış SUS bağlama noktası yok Yapılandırılmış bağlamayı kaldırmayı dene yok @@ -479,13 +422,11 @@ Bağlamayı Kaldırmayı Dene Sıfırla Bu, tüm bağlamayı kaldırmayı dene yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz? - Yol Ayarları Android Veri Yolu SD Kart Yolu Android Veri Yolunu Ayarlayın SD Kart Yolunu Ayarlayın - Etkinleştirilen Özellikler Durumu Mevcut SuSFS etkinleştirilen özellikler durumunu göster Özellik durumu bilgisi bulunamadı Etkinleştirildi @@ -503,11 +444,9 @@ Otomatik Bağlamayı Kaldırmayı Dene Bağlama KSU SUSFS Sembollerini Gizle Magic Mount Desteği - OverlayFS Otomatik Kernel İstatistik Desteği SUS Kstat Desteği SUS SU mod değiştirme işlevi - SuSFS Yapılandırması Yapılandırılabilir SuSFS Özellikleri SuSFS Günlük Kaydını Etkinleştir SuSFS için günlük kaydını etkinleştir veya devre dışı bırak @@ -516,10 +455,7 @@ SuSFS günlük kaydını kapat Güncelleme JSON Güncelleme JSON URL\'si panoya kopyalandı - Güncelleme JSON mevcut değil - Modül Güncelleme JSON\'ını Göster - Modül ayrıntılarında güncelleme JSON URL\'sini göster Daha Fazla Modül Bilgisi Göster Güncelleme JSON URL\'leri gibi ek modül bilgilerini göster diff --git a/manager/app/src/main/res/values-uk/strings.xml b/manager/app/src/main/res/values-uk/strings.xml index 564d045a..840ee31d 100644 --- a/manager/app/src/main/res/values-uk/strings.xml +++ b/manager/app/src/main/res/values-uk/strings.xml @@ -5,16 +5,11 @@ Натисніть щоб встановити Працює Версія: %d - Суперкористувачі: %d - Модулі: %d Не підтримується KernelSU підтримує лише GKI ядра на данний момент Ядро - SuSFS: %s SuSFS Version - SuS SU Версія менеджера - Відбиток Статус SELinux Вимкнено Примусовий @@ -28,7 +23,6 @@ Sort (Action first) Sort (Enabled first) Видалити - Restore Встановити Встановити Перезавантажити @@ -61,10 +55,6 @@ Шаблон Власний Назва профілю - Змонтувати простір імен - Наслідуваний - Глобальний - Індивідуальний Групи Можливості Контекст SELinux @@ -112,7 +102,6 @@ Автоматична перевірка оновлень під час відкриття програми Не вдалося отримати root! Action - Відкрити Close Увімкнути налагодження WebView Використовується для налагодження WebUI. Будь ласка, вмикайте тільки за потреби. @@ -138,9 +127,6 @@ Обрано lkm: %s Зберегти Журнали Logs saved - Supported - Not Supported - Unknown SuS SU mode: confirm install module %1$s? @@ -174,14 +160,11 @@ Custom App Background Select an image as background Navigation bar transparency - Restore default Android version Device model Granting superuser to %s is not allowed Disable su compatibility Temporarily disable any applications from obtaining root privileges via the ⁠su command (existing root processes will not be affected). - You are using the SukiSU Beta manager - Are you sure you want to install the selected %d modules? Sure you want to install the following %1$d modules? \n\n%2$s More settings SELinux @@ -212,20 +195,14 @@ Pink Gray Yellow - Brush Options - Select the file to be flashed Install Anykernel3 Flash AnyKernel3 kernel file Requires root privileges - File Copy Failure Scrubbing complete Whether to reboot immediately? Yes No Reboot Failed - empower - withdraw - Backup KPM No installed kernel modules at this time Version @@ -233,7 +210,6 @@ Uninstall Uninstalled successfully Failed to uninstall - Install Load of kpm module successful Load of kpm module failed Parameters @@ -247,8 +223,6 @@ 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 - "Number of KPMs: %d " - Invalid KPM file Kernel not patched Kernel not configured Custom settings @@ -256,19 +230,13 @@ Load Embed Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system - Failed to check module file existence Unable to check if module file exists - Confirm uninstallation - Uninstall - Cancel Theme Color Incorrect file type! Please select .kpm file. Uninstall The following KPM will be uninstalled: %s Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method. - Adjust background image Use two fingers to zoom the image, and one finger to drag it to adjust the position - Could not load image Reprovision Kernel Flashing @@ -305,7 +273,6 @@ Application Settings Tools - Removals Application not found SELinux Enabled SELinux Disabled @@ -313,8 +280,6 @@ Advanced Settings Customize the toolbar Comeback - Be in full swing - put away SuSFS enabled SuSFS disabled Background set successfully @@ -322,7 +287,6 @@ Alternate icon Change the launcher icon to KernelSU\'s icon. Icon switched - Requires root privileges Display KPM Function Display KPM information and Function in home and bottom bar (Need to reopen the app) @@ -334,7 +298,6 @@ Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on. - DPI setting Applied DPI Adjust the screen display density for the current application only Small @@ -375,9 +338,6 @@ No application in this category - Root - Unmount - Custom Delegation of authority Authorizations @@ -387,13 +347,8 @@ Put away the menu Top Bottom - Scroll to top - Scroll to the bottom - authorized - unauthorized Selected option - Disable custom uninstallation module Menu Options Sort by diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml index 4902d0ed..a29fc8ed 100644 --- a/manager/app/src/main/res/values-vi/strings.xml +++ b/manager/app/src/main/res/values-vi/strings.xml @@ -400,9 +400,6 @@ Đường dẫn Đường dẫn Mount Ví dụ: /system/addon.d - Quản lý Đường dẫn SuS - Quản lý SuS Mounts - Quản lý SuS Umount Không có Đường dẫn SuS nào được cấu hình Không có SuS Mounts nào được cấu hình Không có SuS Umount nào được cấu hình @@ -427,13 +424,11 @@ Thao tác này sẽ xóa tất cả các cấu hình SuS Umount. Bạn có chắc chắn muốn tiếp tục không? Reset Cài đặt Đường dẫn - Cài đặt Đường dẫn Đường dẫn Dữ liệu Android Đường dẫn Thẻ SD Đặt Đường dẫn Dữ liệu Android Đặt Đường dẫn Thẻ SD - Trạng thái tính năng Hiển thị trạng thái tính năng hiện tại của SuSFS Không tìm thấy thông tin trạng thái tính năng Đã bật @@ -500,7 +495,6 @@ Khôi phục Cấu hình Kstat Bạn có chắc chắn muốn xóa tất cả cấu hình Kstat không? Không thể hoàn tác hành động này Xác nhận khôi phục - Quản lý cấu hình Kstat Mô tả cấu hình Kstat • add_sus_kstat_statically: Thông tin thống kê cấu hình tĩnh của các File/Folder • add_sus_kstat: Thêm đường dẫn trước khi mount để lưu trữ thông tin trạng thái ban đầu 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 9460feac..eef07446 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -400,9 +400,6 @@ 路径 挂载路径 例如: /system/addon.d - SUS 路径管理 - SUS 挂载管理 - 尝试卸载管理 暂无 SUS 路径配置 暂无 SUS 挂载配置 暂无尝试卸载配置 @@ -427,13 +424,11 @@ 这将清除所有尝试卸载配置,确定要继续吗? 重置路径设置 - 路径设置 Android Data 路径 SD 卡路径 设置 Android Data 路径 设置 SD 卡路径 - 启用功能状态 显示当前 SuSFS 启用的功能状态 未找到功能状态信息 已启用 @@ -500,7 +495,6 @@ 重置 Kstat 配置 确定要清除所有 Kstat 配置吗?此操作不可撤销 确认重置 - Kstat 配置管理 Kstat 配置说明 • add_sus_kstat_statically: 静态配置文件/目录的 stat 信息 • add_sus_kstat: 在绑定挂载前添加路径,存储原始 stat 信息 @@ -508,7 +502,7 @@ • update_sus_kstat_full_clone: 仅更新 ino,其他保持原始值 静态 Kstat 配置 Kstat 路径管理 - 暂无 Kstat 配置,点击上方按钮添加配置 + 暂无 Kstat 配置,点击下方按钮添加配置 SUS挂载隐藏控制 控制SUS挂载对进程的隐藏行为 @@ -521,4 +515,5 @@ 当前设置: %s 对所有进程隐藏 仅对非KSU进程隐藏 + 运行 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 61c396c2..1501cc8f 100644 --- a/manager/app/src/main/res/values-zh-rHK/strings.xml +++ b/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -400,9 +400,6 @@ 路徑 掛載路徑 例如: /system/addon.d - SUS 路徑管理 - SUS 掛載管理 - 嘗試卸載管理 暫冇 SUS 路徑配置 暫冇 SUS 掛載配置 暫冇嘗試卸載配置 @@ -427,13 +424,11 @@ 這將清除所有嘗試卸載配置,確定要繼續嗎? 重置路徑設定 - 路徑設定 Android Data 路徑 SD 卡路徑 設置 Android Data 路徑 設置 SD 卡路徑 - 啟用功能狀態 顯示當前 SuSFS 啟用嘅功能狀態 未找到功能狀態信息 已啟用 @@ -500,7 +495,6 @@ 重置 Kstat 配置 確定要清除所有 Kstat 配置嗎?此操作不可撤銷 確認重置 - Kstat 配置管理 Kstat 配置說明 • add_sus_kstat_statically: 靜態配置文件/目錄嘅 stat 信息 • add_sus_kstat: 在綁定掛載前添加路徑,存儲原始 stat 信息 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 bebe31ec..bb9b9b4c 100644 --- a/manager/app/src/main/res/values-zh-rTW/strings.xml +++ b/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -400,9 +400,6 @@ 路徑 掛載路徑 例如:/system/addon.d - SUS 路徑管理 - SUS 掛載管理 - 嘗試卸載管理 暫無 SUS 路徑設定 暫無 SUS 掛載設定 暫無嘗試卸載設定 @@ -427,13 +424,11 @@ 這將清除所有嘗試卸載設定,確定要繼續嗎? 重置路徑設定 - 路徑設定 Android Data 路徑 SD 卡路徑 設定 Android Data 路徑 設定 SD 卡路徑 - 啟用功能狀態 顯示目前 SuSFS 啟用的功能狀態 未找到功能狀態資訊 已啟用 @@ -500,7 +495,6 @@ 重置 Kstat 設定 確定要清除所有 Kstat 設定嗎?此操作不可撤銷 確認重置 - Kstat 設定管理 Kstat 設定說明 • add_sus_kstat_statically:靜態設定檔案/目錄的 stat 資訊 • add_sus_kstat:在綁定掛載前新增路徑,儲存原始 stat 資訊 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 0683b57c..5dcdabfc 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -402,9 +402,6 @@ Path Mount Path e.g.: /system/addon.d - SUS Paths Management - SUS Mounts Management - Try Umount Management No SUS paths configured No SUS mounts configured No try umount configured @@ -429,13 +426,11 @@ This will clear all try umount configurations. Are you sure you want to continue? Reset Path Settings - Path Settings Android Data Path SD Card Path Set Android Data Path Set SD Card Path - Enabled Features Status Display current SuSFS enabled features status No feature status information found Enabled @@ -502,7 +497,6 @@ Reset Kstat Configuration Are you sure you want to clear all Kstat configurations? This action cannot be undone. Confirm Reset - Kstat Configuration Management Kstat Configuration Description • add_sus_kstat_statically: Static stat info of files/directories • add_sus_kstat: Add path before bind mount, storing original stat info @@ -523,4 +517,5 @@ Current setting: %s Hide for all processes Hide only for non-KSU processes + Run \ No newline at end of file