manager: Refactoring kernel flash features and styles

This commit is contained in:
ShirkNeko
2025-05-29 18:15:48 +08:00
parent 31111e68eb
commit 96dc53977f
37 changed files with 464 additions and 108 deletions

View File

@@ -51,7 +51,6 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.rememberTopAppBarState import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState
@@ -75,12 +74,10 @@ import com.maxkeppeler.sheets.list.models.ListSelection
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootGraph import com.ramcosta.composedestinations.annotation.RootGraph
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
import com.ramcosta.composedestinations.generated.destinations.KernelFlashScreenDestination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
import com.sukisu.ultra.R import com.sukisu.ultra.R
import com.sukisu.ultra.flash.HorizonKernelFlashProgress
import com.sukisu.ultra.flash.HorizonKernelState
import com.sukisu.ultra.flash.HorizonKernelWorker
import com.sukisu.ultra.ui.component.DialogHandle import com.sukisu.ultra.ui.component.DialogHandle
import com.sukisu.ultra.ui.component.SlotSelectionDialog import com.sukisu.ultra.ui.component.SlotSelectionDialog
import com.sukisu.ultra.ui.component.rememberConfirmDialog import com.sukisu.ultra.ui.component.rememberConfirmDialog
@@ -110,16 +107,10 @@ fun InstallScreen(navigator: DestinationsNavigator) {
var showRebootDialog by remember { mutableStateOf(false) } var showRebootDialog by remember { mutableStateOf(false) }
var showSlotSelectionDialog by remember { mutableStateOf(false) } var showSlotSelectionDialog by remember { mutableStateOf(false) }
var tempKernelUri by remember { mutableStateOf<Uri?>(null) } var tempKernelUri by remember { mutableStateOf<Uri?>(null) }
val horizonKernelState = remember { HorizonKernelState() }
val flashState by horizonKernelState.state.collectAsState()
val summary = stringResource(R.string.horizon_kernel_summary)
val kernelVersion = getKernelVersion() val kernelVersion = getKernelVersion()
val isGKI = kernelVersion.isGKI() val isGKI = kernelVersion.isGKI()
val isAbDevice = isAbDevice() val isAbDevice = isAbDevice()
val summary = stringResource(R.string.horizon_kernel_summary)
val onFlashComplete = {
showRebootDialog = true
}
if (showRebootDialog) { if (showRebootDialog) {
RebootDialog( RebootDialog(
@@ -145,14 +136,12 @@ fun InstallScreen(navigator: DestinationsNavigator) {
when (method) { when (method) {
is InstallMethod.HorizonKernel -> { is InstallMethod.HorizonKernel -> {
method.uri?.let { uri -> method.uri?.let { uri ->
val worker = HorizonKernelWorker( navigator.navigate(
context = context, KernelFlashScreenDestination(
state = horizonKernelState, kernelUri = uri,
slot = method.slot selectedSlot = method.slot
)
) )
worker.uri = uri
worker.setOnFlashCompleteListener(onFlashComplete)
worker.start()
} }
} }
else -> { else -> {
@@ -253,18 +242,9 @@ fun InstallScreen(navigator: DestinationsNavigator) {
} else { } else {
installMethod = method installMethod = method
} }
horizonKernelState.reset()
} }
) )
AnimatedVisibility(
visible = flashState.isFlashing && installMethod is InstallMethod.HorizonKernel,
enter = fadeIn() + expandVertically(),
exit = fadeOut() + shrinkVertically()
) {
HorizonKernelFlashProgress(flashState)
}
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
@@ -325,7 +305,7 @@ fun InstallScreen(navigator: DestinationsNavigator) {
Button( Button(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
enabled = installMethod != null && !flashState.isFlashing, enabled = installMethod != null,
onClick = onClickNext, onClick = onClickNext,
shape = MaterialTheme.shapes.medium, shape = MaterialTheme.shapes.medium,
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
@@ -647,60 +627,60 @@ private fun SelectInstallMethod(
) )
) { ) {
radioOptions.filterIsInstance<InstallMethod.HorizonKernel>().forEach { option -> radioOptions.filterIsInstance<InstallMethod.HorizonKernel>().forEach { option ->
val interactionSource = remember { MutableInteractionSource() } val interactionSource = remember { MutableInteractionSource() }
Surface( Surface(
color = if (option.javaClass == selectedOption?.javaClass) color = if (option.javaClass == selectedOption?.javaClass)
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha) MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha)
else else
MaterialTheme.colorScheme.surfaceContainerHighest.copy(alpha = cardAlpha), MaterialTheme.colorScheme.surfaceContainerHighest.copy(alpha = cardAlpha),
shape = MaterialTheme.shapes.medium, shape = MaterialTheme.shapes.medium,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp)
.clip(MaterialTheme.shapes.medium)
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 4.dp) .toggleable(
.clip(MaterialTheme.shapes.medium) value = option.javaClass == selectedOption?.javaClass,
) { onValueChange = { onClick(option) },
Row( role = Role.RadioButton,
verticalAlignment = Alignment.CenterVertically, indication = LocalIndication.current,
modifier = Modifier interactionSource = interactionSource
.fillMaxWidth()
.toggleable(
value = option.javaClass == selectedOption?.javaClass,
onValueChange = { onClick(option) },
role = Role.RadioButton,
indication = LocalIndication.current,
interactionSource = interactionSource
)
.padding(vertical = 8.dp, horizontal = 12.dp)
) {
RadioButton(
selected = option.javaClass == selectedOption?.javaClass,
onClick = null,
interactionSource = interactionSource,
colors = RadioButtonDefaults.colors(
selectedColor = MaterialTheme.colorScheme.primary,
unselectedColor = MaterialTheme.colorScheme.onSurfaceVariant
)
) )
Column( .padding(vertical = 8.dp, horizontal = 12.dp)
modifier = Modifier ) {
.padding(start = 10.dp) RadioButton(
.weight(1f) selected = option.javaClass == selectedOption?.javaClass,
) { onClick = null,
interactionSource = interactionSource,
colors = RadioButtonDefaults.colors(
selectedColor = MaterialTheme.colorScheme.primary,
unselectedColor = MaterialTheme.colorScheme.onSurfaceVariant
)
)
Column(
modifier = Modifier
.padding(start = 10.dp)
.weight(1f)
) {
Text(
text = stringResource(id = option.label),
style = MaterialTheme.typography.bodyLarge
)
option.summary?.let {
Text( Text(
text = stringResource(id = option.label), text = it,
style = MaterialTheme.typography.bodyLarge style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant
) )
option.summary?.let {
Text(
text = it,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
}
} }
} }
} }
} }
}
} }
} }
} }

View File

@@ -0,0 +1,407 @@
package com.sukisu.ultra.ui.screen
import android.net.Uri
import android.os.Environment
import androidx.activity.compose.BackHandler
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.background
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.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.Error
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Save
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
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.flash.HorizonKernelState
import com.sukisu.ultra.flash.HorizonKernelWorker
import com.sukisu.ultra.ui.component.KeyEventBlocker
import com.sukisu.ultra.ui.util.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.key
import com.sukisu.ultra.ui.theme.CardConfig
private object KernelFlashStateHolder {
var currentState: HorizonKernelState? = null
var currentUri: Uri? = null
var currentSlot: String? = null
var isFlashing = false
}
/**
* Kernel刷写界面
*/
@OptIn(ExperimentalMaterial3Api::class)
@Destination<RootGraph>
@Composable
fun KernelFlashScreen(
navigator: DestinationsNavigator,
kernelUri: Uri,
selectedSlot: String? = null
) {
val context = LocalContext.current
val scrollState = rememberScrollState()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val snackBarHost = LocalSnackbarHost.current
val scope = rememberCoroutineScope()
var logText by rememberSaveable { mutableStateOf("") }
var showFloatAction by rememberSaveable { mutableStateOf(false) }
val logContent = rememberSaveable { StringBuilder() }
val horizonKernelState = remember {
if (KernelFlashStateHolder.currentState != null &&
KernelFlashStateHolder.currentUri == kernelUri &&
KernelFlashStateHolder.currentSlot == selectedSlot) {
KernelFlashStateHolder.currentState!!
} else {
HorizonKernelState().also {
KernelFlashStateHolder.currentState = it
KernelFlashStateHolder.currentUri = kernelUri
KernelFlashStateHolder.currentSlot = selectedSlot
KernelFlashStateHolder.isFlashing = false
}
}
}
val flashState by horizonKernelState.state.collectAsState()
val logSavedString = stringResource(R.string.log_saved)
val onFlashComplete = {
showFloatAction = true
KernelFlashStateHolder.isFlashing = false
}
// 开始刷写
LaunchedEffect(Unit) {
if (!KernelFlashStateHolder.isFlashing && !flashState.isCompleted && flashState.error.isEmpty()) {
withContext(Dispatchers.IO) {
KernelFlashStateHolder.isFlashing = true
val worker = HorizonKernelWorker(
context = context,
state = horizonKernelState,
slot = selectedSlot
)
worker.uri = kernelUri
worker.setOnFlashCompleteListener(onFlashComplete)
worker.start()
// 监听日志更新
while (!flashState.isCompleted && flashState.error.isEmpty()) {
if (flashState.logs.isNotEmpty()) {
logText = flashState.logs.joinToString("\n")
logContent.clear()
logContent.append(logText)
}
kotlinx.coroutines.delay(100)
}
if (flashState.error.isNotEmpty()) {
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 {
logText = flashState.logs.joinToString("\n")
if (flashState.error.isNotEmpty()) {
logText += "\n${flashState.error}\n"
} else if (flashState.isCompleted) {
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
showFloatAction = true
}
}
}
val onBack: () -> Unit = {
if (!flashState.isFlashing || flashState.isCompleted || flashState.error.isNotEmpty()) {
// 清理全局状态
if (flashState.isCompleted || flashState.error.isNotEmpty()) {
KernelFlashStateHolder.currentState = null
KernelFlashStateHolder.currentUri = null
KernelFlashStateHolder.currentSlot = null
KernelFlashStateHolder.isFlashing = false
}
navigator.popBackStack()
}
}
BackHandler(enabled = true) {
onBack()
}
Scaffold(
topBar = {
TopBar(
flashState = flashState,
onBack = onBack,
onSave = {
scope.launch {
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
val date = format.format(Date())
val file = File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
"KernelSU_kernel_flash_log_${date}.log"
)
file.writeText(logContent.toString())
snackBarHost.showSnackbar(logSavedString.format(file.absolutePath))
}
},
scrollBehavior = scrollBehavior
)
},
floatingActionButton = {
if (showFloatAction) {
ExtendedFloatingActionButton(
onClick = {
scope.launch {
withContext(Dispatchers.IO) {
reboot()
}
}
},
icon = {
Icon(
Icons.Filled.Refresh,
contentDescription = stringResource(id = R.string.reboot)
)
},
text = {
Text(text = stringResource(id = R.string.reboot))
},
containerColor = MaterialTheme.colorScheme.secondaryContainer,
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
expanded = true
)
}
},
snackbarHost = { SnackbarHost(hostState = snackBarHost) },
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
containerColor = MaterialTheme.colorScheme.background
) { innerPadding ->
KeyEventBlocker {
it.key == Key.VolumeDown || it.key == Key.VolumeUp
}
Column(
modifier = Modifier
.fillMaxSize()
.padding(innerPadding)
.nestedScroll(scrollBehavior.nestedScrollConnection),
) {
FlashProgressIndicator(flashState)
Box(
modifier = Modifier
.fillMaxWidth()
.weight(1f)
.verticalScroll(scrollState)
) {
LaunchedEffect(logText) {
scrollState.animateScrollTo(scrollState.maxValue)
}
Text(
modifier = Modifier.padding(16.dp),
text = logText,
style = MaterialTheme.typography.bodyMedium,
fontFamily = FontFamily.Monospace,
color = MaterialTheme.colorScheme.onSurface
)
}
}
}
}
@Composable
private fun FlashProgressIndicator(flashState: com.sukisu.ultra.flash.FlashState) {
val progressColor = when {
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
else -> MaterialTheme.colorScheme.primary
}
val progress = animateFloatAsState(
targetValue = flashState.progress,
label = "FlashProgress"
)
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surfaceVariant
)
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
text = when {
flashState.error.isNotEmpty() -> stringResource(R.string.flash_failed)
flashState.isCompleted -> stringResource(R.string.flash_success)
else -> stringResource(R.string.flashing)
},
style = MaterialTheme.typography.titleMedium,
fontWeight = FontWeight.Bold,
color = progressColor
)
when {
flashState.error.isNotEmpty() -> {
Icon(
imageVector = Icons.Default.Error,
contentDescription = null,
tint = MaterialTheme.colorScheme.error
)
}
flashState.isCompleted -> {
Icon(
imageVector = Icons.Default.CheckCircle,
contentDescription = null,
tint = MaterialTheme.colorScheme.tertiary
)
}
}
}
Spacer(modifier = Modifier.height(8.dp))
if (flashState.currentStep.isNotEmpty()) {
Text(
text = flashState.currentStep,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.height(8.dp))
}
LinearProgressIndicator(
progress = { progress.value },
modifier = Modifier
.fillMaxWidth()
.height(8.dp),
color = progressColor,
trackColor = MaterialTheme.colorScheme.surfaceVariant
)
if (flashState.error.isNotEmpty()) {
Spacer(modifier = Modifier.height(8.dp))
Row(
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = Icons.Default.Error,
contentDescription = null,
tint = MaterialTheme.colorScheme.error,
modifier = Modifier.size(16.dp)
)
}
Spacer(modifier = Modifier.height(4.dp))
Text(
text = flashState.error,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.error,
modifier = Modifier
.fillMaxWidth()
.background(
MaterialTheme.colorScheme.errorContainer.copy(alpha = 0.3f),
shape = MaterialTheme.shapes.small
)
.padding(8.dp)
)
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun TopBar(
flashState: com.sukisu.ultra.flash.FlashState,
onBack: () -> Unit,
onSave: () -> Unit = {},
scrollBehavior: TopAppBarScrollBehavior? = null
) {
val statusColor = when {
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
else -> MaterialTheme.colorScheme.primary
}
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
val cardAlpha = CardConfig.cardAlpha
TopAppBar(
title = {
Text(
text = stringResource(
when {
flashState.error.isNotEmpty() -> R.string.flash_failed
flashState.isCompleted -> R.string.flash_success
else -> R.string.kernel_flashing
}
),
style = MaterialTheme.typography.titleLarge,
color = statusColor
)
},
navigationIcon = {
IconButton(onClick = onBack) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface
)
}
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = cardColor.copy(alpha = cardAlpha),
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
),
actions = {
IconButton(onClick = onSave) {
Icon(
imageVector = Icons.Filled.Save,
contentDescription = stringResource(id = R.string.save_log),
tint = MaterialTheme.colorScheme.onSurfaceVariant
)
}
},
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
scrollBehavior = scrollBehavior
)
}

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">فشل التركيب</string> <string name="flash_failed_message">فشل التركيب</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">إصلاح/تثبيت LKM</string> <string name="Lkm_install_methods">إصلاح/تثبيت LKM</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">إصدار النواة:%1$s</string> <string name="kernel_version_log">إصدار النواة:%1$s</string>
<string name="tool_version_log">استخدام أداة التصحيح:%1$s</string> <string name="tool_version_log">استخدام أداة التصحيح:%1$s</string>
<string name="configuration">تعيين</string> <string name="configuration">تعيين</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Schreiben fehlgeschlagen</string> <string name="flash_failed_message">Schreiben fehlgeschlagen</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM Reparatur/Installation</string> <string name="Lkm_install_methods">LKM Reparatur/Installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel</string> <string name="kernel_version_log">Kernel</string>
<string name="tool_version_log">Benutze das Patchwerkzeug%1$s</string> <string name="tool_version_log">Benutze das Patchwerkzeug%1$s</string>
<string name="configuration">Konfigurieren</string> <string name="configuration">Konfigurieren</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash falló</string> <string name="flash_failed_message">Flash falló</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">Reparación/instalación de LKM</string> <string name="Lkm_install_methods">Reparación/instalación de LKM</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Versión del kernel</string> <string name="kernel_version_log">Versión del kernel</string>
<string name="tool_version_log">Usando la herramienta de parches%1$s</string> <string name="tool_version_log">Usando la herramienta de parches%1$s</string>
<string name="configuration">Configurar</string> <string name="configuration">Configurar</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Échec du flash</string> <string name="flash_failed_message">Échec du flash</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">Réparation/installation LKM</string> <string name="Lkm_install_methods">Réparation/installation LKM</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Version du noyau%1$s</string> <string name="kernel_version_log">Version du noyau%1$s</string>
<string name="tool_version_log">Utilisation de l\'outil de correctifs%1$s</string> <string name="tool_version_log">Utilisation de l\'outil de correctifs%1$s</string>
<string name="configuration">Configurer</string> <string name="configuration">Configurer</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">フラッシュに失敗しました</string> <string name="flash_failed_message">フラッシュに失敗しました</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM の修復またはインストール</string> <string name="Lkm_install_methods">LKM の修復またはインストール</string>
<string name="GKI_install_methods">GKI または 非 GKI のインストール</string>
<string name="kernel_version_log">カーネルのバージョン: %1$s</string> <string name="kernel_version_log">カーネルのバージョン: %1$s</string>
<string name="tool_version_log">パッチ適用ツールの使用: %1$s</string> <string name="tool_version_log">パッチ適用ツールの使用: %1$s</string>
<string name="configuration">設定</string> <string name="configuration">設定</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash falhou</string> <string name="flash_failed_message">Flash falhou</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM reparo/instalação</string> <string name="Lkm_install_methods">LKM reparo/instalação</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel</string> <string name="kernel_version_log">Kernel</string>
<string name="tool_version_log">Usando a ferramenta de correção%1$s</string> <string name="tool_version_log">Usando a ferramenta de correção%1$s</string>
<string name="configuration">Configurar</string> <string name="configuration">Configurar</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Установка не выполнена</string> <string name="flash_failed_message">Установка не выполнена</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">Ремонт/установка LKM</string> <string name="Lkm_install_methods">Ремонт/установка LKM</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Ядро</string> <string name="kernel_version_log">Ядро</string>
<string name="tool_version_log">С помощью инструмента патрулирования:%1$s</string> <string name="tool_version_log">С помощью инструмента патрулирования:%1$s</string>
<string name="configuration">Настройка</string> <string name="configuration">Настройка</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash\'lama başarısız</string> <string name="flash_failed_message">Flash\'lama başarısız</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM onarımı/yükle</string> <string name="Lkm_install_methods">LKM onarımı/yükle</string>
<string name="GKI_install_methods">GKI/Non-GKI yükle</string>
<string name="kernel_version_log">Çekirdek sürümü%1$s</string> <string name="kernel_version_log">Çekirdek sürümü%1$s</string>
<string name="tool_version_log">Kullanılan yama aracı%1$s</string> <string name="tool_version_log">Kullanılan yama aracı%1$s</string>
<string name="configuration">Yapılandır</string> <string name="configuration">Yapılandır</string>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash thất bại</string> <string name="flash_failed_message">Flash thất bại</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM cài đặt</string> <string name="Lkm_install_methods">LKM cài đặt</string>
<string name="GKI_install_methods">GKI/non-GKI cài đặt</string>
<string name="kernel_version_log">Phiên bản Kernel%1$s</string> <string name="kernel_version_log">Phiên bản Kernel%1$s</string>
<string name="tool_version_log">Sử dụng công cụ vá lỗi%1$s</string> <string name="tool_version_log">Sử dụng công cụ vá lỗi%1$s</string>
<string name="configuration">Cấu hình</string> <string name="configuration">Cấu hình</string>

View File

@@ -296,7 +296,7 @@
<string name="flash_failed_message">刷写失败</string> <string name="flash_failed_message">刷写失败</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM修补/安装</string> <string name="Lkm_install_methods">LKM修补/安装</string>
<string name="GKI_install_methods">GKI/non-GKI安装</string> <string name="GKI_install_methods">刷写 AnyKernel3</string>
<string name="kernel_version_log">内核版本:%1$s</string> <string name="kernel_version_log">内核版本:%1$s</string>
<string name="tool_version_log">使用修补工具:%1$s</string> <string name="tool_version_log">使用修补工具:%1$s</string>
<string name="configuration">配置</string> <string name="configuration">配置</string>
@@ -365,4 +365,5 @@
<string name="installing_module">正在安装模块 %1$d/%2$d</string> <string name="installing_module">正在安装模块 %1$d/%2$d</string>
<string name="module_failed_count">%d 个模块安装失败</string> <string name="module_failed_count">%d 个模块安装失败</string>
<string name="module_download_error">模块下载失败</string> <string name="module_download_error">模块下载失败</string>
<string name="kernel_flashing">内核刷写</string>
</resources> </resources>

View File

@@ -298,7 +298,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -296,7 +296,6 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>

View File

@@ -298,7 +298,7 @@
<string name="flash_failed_message">Flash failed</string> <string name="flash_failed_message">Flash failed</string>
<!-- lkm/gki install --> <!-- lkm/gki install -->
<string name="Lkm_install_methods">LKM repair/installation</string> <string name="Lkm_install_methods">LKM repair/installation</string>
<string name="GKI_install_methods">GKI/non-GKI installation</string> <string name="GKI_install_methods">Flashing AnyKernel3</string>
<string name="kernel_version_log">Kernel version%1$s</string> <string name="kernel_version_log">Kernel version%1$s</string>
<string name="tool_version_log">Using the patching tool%1$s</string> <string name="tool_version_log">Using the patching tool%1$s</string>
<string name="configuration">Configure</string> <string name="configuration">Configure</string>
@@ -367,4 +367,5 @@
<string name="installing_module">Module being installed %1$d/%2$d</string> <string name="installing_module">Module being installed %1$d/%2$d</string>
<string name="module_failed_count">%d Failed to install a new module</string> <string name="module_failed_count">%d Failed to install a new module</string>
<string name="module_download_error">Module download failed</string> <string name="module_download_error">Module download failed</string>
<string name="kernel_flashing">Kernel Flashing</string>
</resources> </resources>