manager: Clean code & bump AGP version

This commit is contained in:
ShirkNeko
2025-08-25 17:28:51 +08:00
parent 1af8a87876
commit 8c8f344161
56 changed files with 27 additions and 279 deletions

View File

@@ -54,8 +54,8 @@ android {
prefab = true
}
kotlinOptions {
jvmTarget = "21"
kotlin {
jvmToolchain(21)
}
packaging {

View File

@@ -40,7 +40,6 @@
# MMRL:webui reflection
-keep class com.dergoogler.mmrl.webui.model.ModId { *; }
-keep class com.dergoogler.mmrl.webui.interfaces.** { *; }
-keep class com.sukisu.ultra.ui.webui.WebViewInterface { *; }

View File

@@ -54,7 +54,6 @@ struct susfs_feature_status {
bool status_spoof_cmdline;
bool status_open_redirect;
bool status_magic_mount;
bool status_overlayfs_auto_kstat;
bool status_sus_su;
};

View File

@@ -24,7 +24,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
@@ -48,8 +47,6 @@ import com.sukisu.ultra.R
import com.sukisu.ultra.profile.Capabilities
import com.sukisu.ultra.profile.Groups
import com.sukisu.ultra.ui.component.rememberCustomDialog
import com.sukisu.ultra.ui.theme.CardConfig
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
import com.sukisu.ultra.ui.util.isSepolicyValid
@OptIn(ExperimentalMaterial3Api::class)
@@ -501,5 +498,5 @@ private fun RootProfileConfigPreview() {
}
private fun isTextValidUid(text: String): Boolean {
return text.isNotEmpty() && text.isDigitsOnly() && text.toInt() >= 0 && text.toInt() <= Int.MAX_VALUE
return text.isNotEmpty() && text.isDigitsOnly() && text.toInt() >= 0
}

View File

@@ -84,7 +84,6 @@ import com.sukisu.ultra.ui.component.profile.AppProfileConfig
import com.sukisu.ultra.ui.component.profile.RootProfileConfig
import com.sukisu.ultra.ui.component.profile.TemplateConfig
import com.sukisu.ultra.ui.theme.CardConfig
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
import com.sukisu.ultra.ui.theme.getCardColors
import com.sukisu.ultra.ui.theme.getCardElevation
import com.sukisu.ultra.ui.util.LocalSnackbarHost

View File

@@ -8,10 +8,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.only
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Save

View File

@@ -338,7 +338,7 @@ private fun RebootDialog(
sealed class InstallMethod {
data class SelectFile(
val uri: Uri? = null,
@StringRes override val label: Int = R.string.select_file,
@param:StringRes override val label: Int = R.string.select_file,
override val summary: String?
) : InstallMethod()
@@ -355,7 +355,7 @@ sealed class InstallMethod {
data class HorizonKernel(
val uri: Uri? = null,
val slot: String? = null,
@StringRes override val label: Int = R.string.horizon_kernel,
@param:StringRes override val label: Int = R.string.horizon_kernel,
override val summary: String? = null
) : InstallMethod()
@@ -413,7 +413,7 @@ private fun SelectInstallMethod(
else -> null
}
option?.let {
option?.let { it ->
selectedOption = it
onSelected(it)
}
@@ -682,7 +682,7 @@ private fun SelectInstallMethod(
@Composable
fun rememberSelectKmiDialog(onSelected: (String?) -> Unit): DialogHandle {
return rememberCustomDialog { dismiss ->
val supportedKmi by produceState(initialValue = emptyList<String>()) {
val supportedKmi by produceState(initialValue = emptyList()) {
value = getSupportedKmis()
}
val options = supportedKmi.map { value ->

View File

@@ -221,7 +221,7 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
}
// 所有模块签名验证通过,直接安装
if (verificationResults.all { it.value }) {
if (verificationResults.all { it -> it.value }) {
try {
navigator.navigate(FlashScreenDestination(FlashIt.FlashModules(selectedModules)))
viewModel.markNeedRefresh()

View File

@@ -33,7 +33,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarColors
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
@@ -94,9 +93,6 @@ fun AppProfileTemplateScreen(
}
}
val cardColorUse = MaterialTheme.colorScheme.surfaceVariant
val cardAlpha = CardConfig.cardAlpha
Scaffold(
topBar = {
val context = LocalContext.current
@@ -108,10 +104,6 @@ fun AppProfileTemplateScreen(
}
TopBar(
onBack = dropUnlessResumed { navigator.popBackStack() },
colors = TopAppBarDefaults.topAppBarColors(
containerColor = cardColorUse.copy(alpha = cardAlpha),
scrolledContainerColor = cardColorUse.copy(alpha = cardAlpha)
),
onSync = {
scope.launch { viewModel.fetchTemplates(true) }
},
@@ -209,7 +201,7 @@ private fun TemplateItem(
FlowRow {
LabelText(label = "UID: ${template.uid}")
LabelText(label = "GID: ${template.gid}")
LabelText(label = template.context,)
LabelText(label = template.context)
if (template.local) {
LabelText(label = "local")
} else {
@@ -228,7 +220,6 @@ private fun TopBar(
onSync: () -> Unit = {},
onImport: () -> Unit = {},
onExport: () -> Unit = {},
colors: TopAppBarColors,
scrollBehavior: TopAppBarScrollBehavior? = null
) {
val colorScheme = MaterialTheme.colorScheme

View File

@@ -64,9 +64,9 @@ fun LinkifyText(
}
private val urlPattern: Pattern = Pattern.compile(
"(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)"
+ "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*"
+ "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)",
"(?:^|\\W)((ht|f)tp(s?)://|www\\.)"
+ "(([\\w\\-]+\\.)+([\\w\\-.~]+/?)*"
+ "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]*$~@!:/{};']*)",
Pattern.CASE_INSENSITIVE or Pattern.MULTILINE or Pattern.DOTALL
)

View File

@@ -314,7 +314,6 @@ object ModuleModify {
): androidx.activity.result.ActivityResultLauncher<Intent> {
var showRestoreDialog by remember { mutableStateOf(false) }
var restoreConfirmResult by remember { mutableStateOf<CompletableDeferred<Boolean>?>(null) }
var pendingUri by remember { mutableStateOf<Uri?>(null) }
// 显示恢复确认对话框
RestoreConfirmationDialog(
@@ -334,7 +333,6 @@ object ModuleModify {
) { result ->
if (result.resultCode == android.app.Activity.RESULT_OK) {
result.data?.data?.let { uri ->
pendingUri = uri
scope.launch {
val confirmResult = CompletableDeferred<Boolean>()
restoreConfirmResult = confirmResult
@@ -377,7 +375,6 @@ object ModuleModify {
): androidx.activity.result.ActivityResultLauncher<Intent> {
var showAllowlistRestoreDialog by remember { mutableStateOf(false) }
var allowlistRestoreConfirmResult by remember { mutableStateOf<CompletableDeferred<Boolean>?>(null) }
var pendingUri by remember { mutableStateOf<Uri?>(null) }
// 显示允许列表恢复确认对话框
AllowlistRestoreConfirmationDialog(
@@ -397,7 +394,6 @@ object ModuleModify {
) { result ->
if (result.resultCode == android.app.Activity.RESULT_OK) {
result.data?.data?.let { uri ->
pendingUri = uri
scope.launch {
val confirmResult = CompletableDeferred<Boolean>()
allowlistRestoreConfirmResult = confirmResult

View File

@@ -49,7 +49,7 @@ suspend fun initPlatform() = withContext(Dispatchers.IO) {
delay(1000)
}
return@withContext active
return@withContext true
} catch (e: Exception) {
Log.e("KsuLibSu", "Failed to initialize platform", e)
return@withContext false

View File

@@ -76,15 +76,14 @@ public final class SuFilePathHandler implements WebViewAssetLoader.PathHandler {
* The application should typically use a dedicated subdirectory for the files it intends to
* expose and keep them separate from other files.
*
* @param context {@link Context} that is used to access app's internal storage.
* @param directory the absolute path of the exposed app internal storage directory from
* which files can be loaded.
* @throws IllegalArgumentException if the directory is not allowed.
*/
public SuFilePathHandler(@NonNull Context context, @NonNull File directory, Shell rootShell) {
public SuFilePathHandler(@NonNull File directory, Shell rootShell) {
try {
mDirectory = new File(getCanonicalDirPath(directory));
if (!isAllowedInternalStorageDir(context)) {
if (!isAllowedInternalStorageDir()) {
throw new IllegalArgumentException("The given directory \"" + directory
+ "\" doesn't exist under an allowed app internal storage directory");
}
@@ -96,7 +95,7 @@ public final class SuFilePathHandler implements WebViewAssetLoader.PathHandler {
}
}
private boolean isAllowedInternalStorageDir(@NonNull Context context) throws IOException {
private boolean isAllowedInternalStorageDir() throws IOException {
String dir = getCanonicalDirPath(mDirectory);
for (String forbiddenPath : FORBIDDEN_DATA_DIRS) {

View File

@@ -58,7 +58,7 @@ class WebUIActivity : ComponentActivity() {
.setDomain("mui.kernelsu.org")
.addPathHandler(
"/",
SuFilePathHandler(this, webRoot, rootShell)
SuFilePathHandler(webRoot, rootShell)
)
.build()

View File

@@ -23,8 +23,7 @@ public class UltraShellHelper {
return result.contains("exists");
}
public static boolean CopyFileTo(String path, String target) {
String result = runCmd("cp -f '" + path + "' '" + target + "' 2>&1");
return !result.contains("cp: ");
public static void CopyFileTo(String path, String target) {
runCmd("cp -f '" + path + "' '" + target + "' 2>&1");
}
}

View File

@@ -6,11 +6,9 @@ import com.sukisu.ultra.ui.util.getKpmVersion
import com.sukisu.ultra.ui.util.getModuleCount
import com.sukisu.ultra.ui.util.getSuperuserCount
import com.sukisu.ultra.ui.util.rootAvailable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.withContext
object AppData {
object DataRefreshManager {
@@ -33,12 +31,6 @@ object AppData {
_kpmModuleCount.value = getKpmModuleCountUse()
}
/**
* 异步刷新所有数据
*/
suspend fun refreshDataAsync() = withContext(Dispatchers.IO) {
refreshData()
}
}
/**
@@ -86,7 +78,7 @@ object AppData {
return try {
if (!rootAvailable()) return ""
val version = getKpmVersion()
if (version.isEmpty()) "" else version
version.ifEmpty { "" }
} catch (e: Exception) {
"Error: ${e.message}"
}

View File

@@ -1,19 +0,0 @@
package zako.zako.zako.zakoui.activity.util
import androidx.compose.animation.AnimatedContentTransitionScope
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.navigation.NavBackStackEntry
import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle
object NavigationUtils {
fun defaultTransitions() = object : NavHostAnimatedDestinationStyle() {
override val enterTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition
get() = { fadeIn(animationSpec = tween(340)) }
override val exitTransition: AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition
get() = { fadeOut(animationSpec = tween(340)) }
}
}

View File

@@ -1,21 +1,9 @@
package zako.zako.zako.zakoui.flash
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.net.Uri
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Error
import androidx.compose.material3.*
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.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.documentfile.provider.DocumentFile
import com.sukisu.ultra.R
import com.sukisu.ultra.utils.AssetsUtil
@@ -207,6 +195,7 @@ class HorizonKernelWorker(
}
}
@SuppressLint("StringFormatInvalid")
private fun patch() {
val kernelVersion = runCommandGetOutput(true, "cat /proc/version")
val versionRegex = """\d+\.\d+\.\d+""".toRegex()
@@ -322,118 +311,3 @@ class HorizonKernelWorker(
}
}
}
@Composable
fun HorizonKernelFlashProgress(state: FlashState) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surfaceVariant
)
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = stringResource(id = R.string.horizon_flash_title),
style = MaterialTheme.typography.titleMedium,
modifier = Modifier.padding(bottom = 8.dp)
)
LinearProgressIndicator(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
progress = { state.progress },
)
Text(
text = state.currentStep,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(vertical = 4.dp)
)
if (state.logs.isNotEmpty()) {
Text(
text = stringResource(id = R.string.horizon_logs_label),
style = MaterialTheme.typography.labelMedium,
modifier = Modifier
.align(Alignment.Start)
.padding(top = 8.dp, bottom = 4.dp)
)
Surface(
modifier = Modifier
.fillMaxWidth()
.heightIn(max = 230.dp)
.padding(vertical = 4.dp),
color = MaterialTheme.colorScheme.surface,
tonalElevation = 1.dp,
shape = MaterialTheme.shapes.small
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
.verticalScroll(rememberScrollState())
) {
state.logs.forEach { log ->
Text(
text = log,
style = MaterialTheme.typography.bodySmall,
modifier = Modifier.padding(vertical = 2.dp),
overflow = TextOverflow.Ellipsis,
maxLines = 1
)
}
}
}
}
if (state.error.isNotEmpty()) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp)
) {
Icon(
imageVector = Icons.Default.Error,
contentDescription = null,
tint = MaterialTheme.colorScheme.error,
modifier = Modifier.padding(end = 8.dp)
)
Text(
text = state.error,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.error
)
}
} else if (state.isCompleted) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp)
) {
Icon(
imageVector = Icons.Default.CheckCircle,
contentDescription = null,
tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.padding(end = 8.dp)
)
Text(
text = stringResource(id = R.string.horizon_flash_complete),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.primary
)
}
}
}
}
}

View File

@@ -113,7 +113,7 @@ fun KernelFlashScreen(
worker.start()
// 监听日志更新
while (!flashState.isCompleted && flashState.error.isEmpty()) {
while (flashState.error.isEmpty()) {
if (flashState.logs.isNotEmpty()) {
logText = flashState.logs.joinToString("\n")
logContent.clear()
@@ -126,9 +126,6 @@ fun KernelFlashScreen(
logText += "\n${flashState.error}\n"
logContent.append("\n${flashState.error}\n")
KernelFlashStateHolder.isFlashing = false
} else if (flashState.isCompleted) {
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
logContent.append("\n${context.getString(R.string.horizon_flash_complete)}\n\n\n")
}
}
} else {

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">استخدم إصبعين لتكبير الصورة، وأصبع واحد لسحبها لضبط الموضع</string>
<string name="reprovision">إعادة</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">ضرب النواة</string>
<string name="horizon_logs_label">السجلات:</string>
<string name="horizon_flash_complete">الفلاش اكتمل</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">جار التحضير</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Verwende zwei Finger um das Bild zu vergrößern und einen Finger um die Position anzupassen</string>
<string name="reprovision">Rückzahlung</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel-Flashen</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Blitz abgeschlossen</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Vorbereiten…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Usa dos dedos para acercar la imagen, y un dedo para arrastrarla para ajustar la posición</string>
<string name="reprovision">Reaprovisionamiento</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Parpadeo Kernel</string>
<string name="horizon_logs_label">Registros:</string>
<string name="horizon_flash_complete">Flashear completo</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparando…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Utilisez deux doigts pour zoomer l\'image, et un doigt pour le faire glisser pour ajuster la position</string>
<string name="reprovision">Remise à disposition</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Clignotement du noyau</string>
<string name="horizon_logs_label">Journaux:</string>
<string name="horizon_flash_complete">Flash terminé</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Préparation de…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -244,8 +244,6 @@
<string name="image_editor_hint">Gunakan dua jari untuk memperbesar gambar, dan satu jari untuk menggeser mengatur posisi</string>
<string name="reprovision">Reprovisi</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Memasang Kernel</string>
<string name="horizon_logs_label">Log:</string>
<string name="horizon_flash_complete">Flash Selesai</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Mempersiapkan…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -244,8 +244,6 @@
<string name="image_editor_hint">2 本の指で画像を拡大、1 本の指でドラッグで位置を調整します。</string>
<string name="reprovision">再プロビジョニング</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">カーネルをフラッシュ</string>
<string name="horizon_logs_label">ログ:</string>
<string name="horizon_flash_complete">フラッシュが完了しました</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">準備中…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use dois dedos para ampliar a imagem e um dedo para arrastá-la para ajustar a posição</string>
<string name="reprovision">Restituição</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash concluído</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparando…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -244,8 +244,6 @@
<string name="image_editor_hint">Используйте два пальца для увеличения изображения, и один палец для изменения положения</string>
<string name="reprovision">Реализация</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Мигание ядра</string>
<string name="horizon_logs_label">Логи:</string>
<string name="horizon_flash_complete">Прошивка завершена</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Подготовка…</string>

View File

@@ -237,8 +237,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -242,8 +242,6 @@
<string name="image_editor_hint">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</string>
<string name="reprovision">Yeniden sağla</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Çekirdek Flash\'lama</string>
<string name="horizon_logs_label">Günlükler:</string>
<string name="horizon_flash_complete">Flash\'lama Tamamlandı</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Hazırlanıyor…</string>

View File

@@ -242,8 +242,6 @@
<string name="image_editor_hint">Використовуйте два пальці для масштабування зображення та один палець для перетягування, щоб налаштувати положення</string>
<string name="reprovision">Переналаштувати</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Прошивка ядра</string>
<string name="horizon_logs_label">Логи:</string>
<string name="horizon_flash_complete">Прошивка завершена</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Підготовка…</string>

View File

@@ -242,8 +242,6 @@
<string name="image_editor_hint">Sử dụng hai ngón tay để phóng to hình ảnh và một ngón tay kéo thả để điều chỉnh vị trí</string>
<string name="reprovision">Chọn lại</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash hoàn tất</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Chuẩn bị…</string>

View File

@@ -242,8 +242,6 @@
<string name="image_editor_hint">使用双指缩放图片,单指拖动调整位置</string>
<string name="reprovision">重置</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">刷写 Kernel</string>
<string name="horizon_logs_label">日志:</string>
<string name="horizon_flash_complete">刷写完成</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">准备中…</string>

View File

@@ -239,8 +239,6 @@
<string name="image_editor_hint">使用雙指縮放圖片,單指拖動調整位置</string>
<string name="reprovision">重置</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">刷寫 Kernel</string>
<string name="horizon_logs_label">日誌:</string>
<string name="horizon_flash_complete">刷寫完成</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">準備中…</string>

View File

@@ -242,8 +242,6 @@
<string name="image_editor_hint">使用雙指縮放圖片,單指拖曳調整位置</string>
<string name="reprovision">重置</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">刷寫內核</string>
<string name="horizon_logs_label">日誌:</string>
<string name="horizon_flash_complete">刷寫完成</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">準備中…</string>

View File

@@ -244,8 +244,6 @@
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
<string name="reprovision">Reprovision</string>
<!-- Kernel Flash Progress Related -->
<string name="horizon_flash_title">Kernel Flashing</string>
<string name="horizon_logs_label">Logs:</string>
<string name="horizon_flash_complete">Flash Complete</string>
<!-- Flash Status Related -->
<string name="horizon_preparing">Preparing…</string>

View File

@@ -1,10 +1,10 @@
[versions]
accompanist-drawablepainter = "0.37.3"
agp = "8.12.0"
agp = "8.12.1"
gson = "2.13.1"
kotlin = "2.1.21"
ksp = "2.1.21-2.0.1"
compose-bom = "2025.07.00"
compose-bom = "2025.08.00"
lifecycle = "2.9.2"
navigation = "2.9.3"
activity-compose = "1.10.1"
@@ -19,9 +19,9 @@ parcelablelist = "2.0.1"
libsu = "6.0.0"
apksign = "1.4"
cmaker = "1.2"
compose-material = "1.8.3"
compose-material = "1.9.0"
compose-material3 = "1.3.2"
compose-ui = "1.8.3"
compose-ui = "1.9.0"
documentfile = "1.1.0"
mmrl = "2bb00b3c2b"