@@ -17,6 +17,8 @@ import com.droidspaces.app.R
1717import com.droidspaces.app.util.ContainerInfo
1818import com.droidspaces.app.util.Constants
1919
20+ import androidx.compose.ui.res.stringResource
21+
2022@OptIn(ExperimentalMaterial3Api ::class )
2123@Composable
2224fun InstallationSummaryScreen (
@@ -28,10 +30,10 @@ fun InstallationSummaryScreen(
2830 Scaffold (
2931 topBar = {
3032 TopAppBar (
31- title = { Text (" Installation Summary " ) },
33+ title = { Text (stringResource( R .string.installation_setup_summary) ) },
3234 navigationIcon = {
3335 IconButton (onClick = onBack) {
34- Icon (Icons .AutoMirrored .Filled .ArrowBack , contentDescription = " Back " )
36+ Icon (Icons .AutoMirrored .Filled .ArrowBack , contentDescription = stringResource( R .string.back) )
3537 }
3638 }
3739 )
@@ -54,7 +56,7 @@ fun InstallationSummaryScreen(
5456 ) {
5557 Icon (Icons .Default .InstallMobile , contentDescription = null )
5658 Spacer (modifier = Modifier .width(8 .dp))
57- Text (" Install Container " , style = MaterialTheme .typography.labelLarge)
59+ Text (stringResource( R .string.install_container) , style = MaterialTheme .typography.labelLarge)
5860 }
5961 }
6062 }
@@ -68,7 +70,7 @@ fun InstallationSummaryScreen(
6870 verticalArrangement = Arrangement .spacedBy(16 .dp)
6971 ) {
7072 Text (
71- text = " Review Configuration " ,
73+ text = stringResource( R .string.review_configuration) ,
7274 style = MaterialTheme .typography.headlineSmall,
7375 fontWeight = FontWeight .Bold
7476 )
@@ -85,31 +87,34 @@ fun InstallationSummaryScreen(
8587 .padding(20 .dp),
8688 verticalArrangement = Arrangement .spacedBy(8 .dp)
8789 ) {
88- SummaryItem (" Tarball " , tarballName, Icons .Default .Archive )
89- SummaryItem (" Container Name " , config.name, Icons .Default .Storage )
90- SummaryItem (" Hostname " , config.hostname, Icons .Default .Computer )
90+ SummaryItem (stringResource( R .string.tarball_label) , tarballName, Icons .Default .Archive )
91+ SummaryItem (stringResource( R .string.container_singular) , config.name, Icons .Default .Storage )
92+ SummaryItem (stringResource( R .string.hostname) , config.hostname, Icons .Default .Computer )
9193 if (config.useSparseImage && config.sparseImageSizeGB != null ) {
92- SummaryItem (" Storage Type " , " Sparse Image (${config.sparseImageSizeGB} GB)" , Icons .Default .Storage )
94+ SummaryItem (stringResource( R .string.storage_configuration) , " ${stringResource( R .string.sparse_image_configuration)} (${config.sparseImageSizeGB} GB)" , Icons .Default .Storage )
9395 } else {
94- SummaryItem (" Storage Type " , " Directory " , Icons .Default .Folder )
96+ SummaryItem (stringResource( R .string.storage_configuration), stringResource( R .string.directory_label) , Icons .Default .Folder )
9597 }
96- SummaryItem (" Installation Path " , " ${Constants .CONTAINERS_BASE_PATH } /${com.droidspaces.app.util.ContainerManager .sanitizeContainerName(config.name)} " , Icons .Default .Folder )
98+ SummaryItem (stringResource( R .string.installation_path_label) , " ${Constants .CONTAINERS_BASE_PATH } /${com.droidspaces.app.util.ContainerManager .sanitizeContainerName(config.name)} " , Icons .Default .Folder )
9799
98100 HorizontalDivider (modifier = Modifier .padding(vertical = 8 .dp))
99101
100102 Text (
101- text = " Options " ,
103+ text = stringResource( R .string.container_options) ,
102104 style = MaterialTheme .typography.titleMedium,
103105 fontWeight = FontWeight .SemiBold
104106 )
105107
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 )
108+ if (config.disableIPv6) SummaryItem (stringResource(R .string.disable_ipv6), stringResource(R .string.enabled_legend), Icons .Default .NetworkCheck )
109+ if (config.enableAndroidStorage) SummaryItem (stringResource(R .string.storage_option), stringResource(R .string.enabled_legend), Icons .Default .Storage )
110+ if (config.enableHwAccess) SummaryItem (stringResource(R .string.hardware_access), stringResource(R .string.enabled_legend), Icons .Default .Devices )
111+ if (config.enableTermuxX11) SummaryItem (stringResource(R .string.x11_option), stringResource(R .string.enabled_legend), painterResource(id = R .drawable.ic_x11))
112+ if (config.selinuxPermissive) SummaryItem (stringResource(R .string.selinux_option), stringResource(R .string.enabled_legend), Icons .Default .Security )
113+ if (config.volatileMode) SummaryItem (stringResource(R .string.volatile_mode), stringResource(R .string.enabled_legend), Icons .Default .AutoDelete )
114+ if (config.runAtBoot) SummaryItem (stringResource(R .string.run_at_boot), stringResource(R .string.enabled_legend), Icons .Default .PowerSettingsNew )
115+ if (config.allowUserNs) SummaryItem (stringResource(R .string.allow_user_ns), stringResource(R .string.enabled_legend), Icons .Default .Person )
116+ if (config.forceCgroupv1) SummaryItem (stringResource(R .string.force_cgroupv1), stringResource(R .string.enabled_legend), Icons .Default .Layers )
117+ if (config.blockNestedNs) SummaryItem (stringResource(R .string.manual_deadlock_shield), stringResource(R .string.enabled_legend), Icons .Default .GppBad )
113118
114119 fun countEnvVars (content : String? ): Int {
115120 if (content.isNullOrBlank()) return 0
@@ -120,21 +125,23 @@ fun InstallationSummaryScreen(
120125
121126 val envCount = countEnvVars(config.envFileContent)
122127 if (envCount > 0 ) {
123- SummaryItem (" Environment Variables " , " $ envCount configured " , Icons .Default .Code )
128+ SummaryItem (stringResource( R .string.environment_variables), stringResource( R .string.environment_variables_configured, envCount) , Icons .Default .Code )
124129 }
125130
126131 if (config.bindMounts.isNotEmpty()) {
127132 config.bindMounts.forEach { mount ->
128- SummaryItem (" Bind Mount " , " ${mount.src} → ${mount.dest} " , Icons .Default .Link )
133+ SummaryItem (stringResource( R .string.bind_mounts) , " ${mount.src} → ${mount.dest} " , Icons .Default .Link )
129134 }
130135 }
131136
132137 if (! config.enableAndroidStorage &&
133138 ! config.enableHwAccess && ! config.selinuxPermissive &&
134139 ! config.volatileMode && config.bindMounts.isEmpty() &&
135- ! config.runAtBoot && config.envFileContent.isNullOrBlank()) {
140+ ! config.runAtBoot && ! config.disableIPv6 &&
141+ ! config.allowUserNs && ! config.forceCgroupv1 &&
142+ ! config.blockNestedNs && config.envFileContent.isNullOrBlank()) {
136143 Text (
137- text = " No additional options enabled " ,
144+ text = stringResource( R .string.no_options_enabled) ,
138145 style = MaterialTheme .typography.bodySmall,
139146 color = MaterialTheme .colorScheme.onSurfaceVariant.copy(alpha = 0.7f )
140147 )
0 commit comments