Skip to content

Commit c0a42b7

Browse files
committed
refactor: localize strings in InstallationSummaryScreen for better maintainability
1 parent 44ffe43 commit c0a42b7

2 files changed

Lines changed: 33 additions & 22 deletions

File tree

Android/app/src/main/java/com/droidspaces/app/ui/screen/InstallationSummaryScreen.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import androidx.compose.ui.res.painterResource
1616
import com.droidspaces.app.R
1717
import com.droidspaces.app.util.ContainerInfo
1818
import com.droidspaces.app.util.Constants
19+
import androidx.compose.ui.res.stringResource
1920

2021
@OptIn(ExperimentalMaterial3Api::class)
2122
@Composable
@@ -28,10 +29,10 @@ fun InstallationSummaryScreen(
2829
Scaffold(
2930
topBar = {
3031
TopAppBar(
31-
title = { Text("Installation Summary") },
32+
title = { Text(stringResource(R.string.installation_setup_summary)) },
3233
navigationIcon = {
3334
IconButton(onClick = onBack) {
34-
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
35+
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(R.string.back))
3536
}
3637
}
3738
)
@@ -54,7 +55,7 @@ fun InstallationSummaryScreen(
5455
) {
5556
Icon(Icons.Default.InstallMobile, contentDescription = null)
5657
Spacer(modifier = Modifier.width(8.dp))
57-
Text("Install Container", style = MaterialTheme.typography.labelLarge)
58+
Text(stringResource(R.string.install_container), style = MaterialTheme.typography.labelLarge)
5859
}
5960
}
6061
}
@@ -68,7 +69,7 @@ fun InstallationSummaryScreen(
6869
verticalArrangement = Arrangement.spacedBy(16.dp)
6970
) {
7071
Text(
71-
text = "Review Configuration",
72+
text = stringResource(R.string.review_configuration),
7273
style = MaterialTheme.typography.headlineSmall,
7374
fontWeight = FontWeight.Bold
7475
)
@@ -85,31 +86,33 @@ fun InstallationSummaryScreen(
8586
.padding(20.dp),
8687
verticalArrangement = Arrangement.spacedBy(8.dp)
8788
) {
88-
SummaryItem("Tarball", tarballName, Icons.Default.Archive)
89-
SummaryItem("Container Name", config.name, Icons.Default.Storage)
90-
SummaryItem("Hostname", config.hostname, Icons.Default.Computer)
89+
SummaryItem(stringResource(R.string.tarball_label), tarballName, Icons.Default.Archive)
90+
SummaryItem(stringResource(R.string.container_singular), config.name, Icons.Default.Storage)
91+
SummaryItem(stringResource(R.string.hostname), config.hostname, Icons.Default.Computer)
9192
if (config.useSparseImage && config.sparseImageSizeGB != null) {
92-
SummaryItem("Storage Type", "Sparse Image (${config.sparseImageSizeGB}GB)", Icons.Default.Storage)
93+
SummaryItem(stringResource(R.string.storage_configuration), "${stringResource(R.string.sparse_image_configuration)} (${config.sparseImageSizeGB}GB)", Icons.Default.Storage)
9394
} else {
94-
SummaryItem("Storage Type", "Directory", Icons.Default.Folder)
95+
SummaryItem(stringResource(R.string.storage_configuration), stringResource(R.string.directory_label), Icons.Default.Folder)
9596
}
96-
SummaryItem("Installation Path", "${Constants.CONTAINERS_BASE_PATH}/${com.droidspaces.app.util.ContainerManager.sanitizeContainerName(config.name)}", Icons.Default.Folder)
97+
SummaryItem(stringResource(R.string.installation_path_label), "${Constants.CONTAINERS_BASE_PATH}/${com.droidspaces.app.util.ContainerManager.sanitizeContainerName(config.name)}", Icons.Default.Folder)
9798

9899
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp))
99100

100101
Text(
101-
text = "Options",
102+
text = stringResource(R.string.options),
102103
style = MaterialTheme.typography.titleMedium,
103104
fontWeight = FontWeight.SemiBold
104105
)
105106

106-
if (config.disableIPv6) SummaryItem("IPv6", "Disabled", Icons.Default.NetworkCheck)
107-
if (config.enableAndroidStorage) SummaryItem("Android Storage", "Enabled", Icons.Default.Storage)
108-
if (config.enableHwAccess) SummaryItem("Hardware Access", "Enabled", Icons.Default.Devices)
109-
if (config.enableTermuxX11) SummaryItem("Termux X11", "Enabled", painterResource(id = R.drawable.ic_x11))
110-
if (config.selinuxPermissive) SummaryItem("SELinux", "Permissive", Icons.Default.Security)
111-
if (config.volatileMode) SummaryItem("Volatile Mode", "Enabled", Icons.Default.AutoDelete)
112-
if (config.runAtBoot) SummaryItem("Run at Boot", "Enabled", Icons.Default.PowerSettingsNew)
107+
if (config.disableIPv6) SummaryItem(stringResource(R.string.disable_ipv6), stringResource(R.string.enabled_legend), Icons.Default.NetworkCheck)
108+
if (config.enableAndroidStorage) SummaryItem(stringResource(R.string.android_storage), stringResource(R.string.enabled_legend), Icons.Default.Storage)
109+
if (config.enableHwAccess) SummaryItem(stringResource(R.string.hardware_access), stringResource(R.string.enabled_legend), Icons.Default.Devices)
110+
if (config.enableTermuxX11) SummaryItem(stringResource(R.string.termux_x11), stringResource(R.string.enabled_legend), painterResource(id = R.drawable.ic_x11))
111+
if (config.selinuxPermissive) SummaryItem(stringResource(R.string.selinux_permissive), stringResource(R.string.enabled_legend), Icons.Default.Security)
112+
if (config.volatileMode) SummaryItem(stringResource(R.string.volatile_mode), stringResource(R.string.enabled_legend), Icons.Default.AutoDelete)
113+
if (config.runAtBoot) SummaryItem(stringResource(R.string.run_at_boot), stringResource(R.string.enabled_legend), Icons.Default.PowerSettingsNew)
114+
if (config.forceCgroupv1) SummaryItem(stringResource(R.string.force_cgroupv1), stringResource(R.string.enabled_legend), Icons.Default.Layers)
115+
if (config.blockNestedNs) SummaryItem(stringResource(R.string.manual_deadlock_shield), stringResource(R.string.enabled_legend), Icons.Default.GppBad)
113116

114117
fun countEnvVars(content: String?): Int {
115118
if (content.isNullOrBlank()) return 0
@@ -120,21 +123,23 @@ fun InstallationSummaryScreen(
120123

121124
val envCount = countEnvVars(config.envFileContent)
122125
if (envCount > 0) {
123-
SummaryItem("Environment Variables", "$envCount configured", Icons.Default.Code)
126+
SummaryItem(stringResource(R.string.environment_variables), stringResource(R.string.environment_variables_configured, envCount), Icons.Default.Code)
124127
}
125128

126129
if (config.bindMounts.isNotEmpty()) {
127130
config.bindMounts.forEach { mount ->
128-
SummaryItem("Bind Mount", "${mount.src}${mount.dest}", Icons.Default.Link)
131+
SummaryItem(stringResource(R.string.bind_mounts), "${mount.src}${mount.dest}", Icons.Default.Link)
129132
}
130133
}
131134

132135
if (!config.enableAndroidStorage &&
133136
!config.enableHwAccess && !config.selinuxPermissive &&
134137
!config.volatileMode && config.bindMounts.isEmpty() &&
135-
!config.runAtBoot && config.envFileContent.isNullOrBlank()) {
138+
!config.runAtBoot && !config.disableIPv6 &&
139+
!config.forceCgroupv1 && !config.blockNestedNs &&
140+
config.envFileContent.isNullOrBlank()) {
136141
Text(
137-
text = "No additional options enabled",
142+
text = stringResource(R.string.no_options_enabled),
138143
style = MaterialTheme.typography.bodySmall,
139144
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f)
140145
)

Android/app/src/main/res/values/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@
135135
<string name="volatile_option">Volatile</string>
136136
<string name="cgroupv1_option">Cgroup V1</string>
137137
<string name="deadlock_shield_option">Deadlock Shield</string>
138+
<string name="installation_setup_summary">Installation Summary</string>
139+
<string name="review_configuration">Review Configuration</string>
140+
<string name="tarball_label">Tarball</string>
141+
<string name="directory_label">Directory</string>
142+
<string name="installation_path_label">Installation Path</string>
143+
<string name="no_options_enabled">No additional options enabled</string>
138144

139145
<!-- Container Details Screen -->
140146
<string name="container_info">Container Info</string>

0 commit comments

Comments
 (0)