Skip to content

Commit cf07878

Browse files
committed
setup: add tiny FAB; recommend tiny/small/medium based on screen size; shrink setup welcome banner; move DataPad quick-setup; add QR hint to device name strings; fix DataPad dialog syntax
1 parent 624565e commit cf07878

5 files changed

Lines changed: 96 additions & 74 deletions

File tree

app/src/main/java/com/example/checklist_interactive/ui/datapad/DataPadSettingsDialog.kt

Lines changed: 63 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,67 @@ fun DataPadSettingsDialog(
188188
Text(stringResource(R.string.datapad_device_name_support))
189189
}
190190
)
191-
192-
val clipboard = LocalClipboardManager.current
193-
var copiedDeviceId by remember { mutableStateOf(false) }
194-
var copiedPublicKey by remember { mutableStateOf(false) }
195-
var copiedBoth by remember { mutableStateOf(false) }
196-
val publicKey = try { manager.getPublicKey() } catch (_: Throwable) { "" }
191+
192+
// Quick Setup - moved here to be directly under Device Name for visibility
193+
var showQrScannerDialog by remember { mutableStateOf(false) }
194+
var registrationMessage by remember { mutableStateOf<String?>(null) }
195+
196+
Card(
197+
modifier = Modifier
198+
.fillMaxWidth()
199+
.padding(vertical = 8.dp),
200+
colors = CardDefaults.cardColors(
201+
containerColor = MaterialTheme.colorScheme.primaryContainer
202+
)
203+
) {
204+
Column(
205+
modifier = Modifier.padding(16.dp)
206+
) {
207+
Text(
208+
text = "Quick Setup",
209+
style = MaterialTheme.typography.titleMedium,
210+
color = MaterialTheme.colorScheme.onPrimaryContainer
211+
)
212+
Spacer(modifier = Modifier.height(8.dp))
213+
Text(
214+
text = "Scan QR code from server to auto-configure",
215+
style = MaterialTheme.typography.bodySmall,
216+
color = MaterialTheme.colorScheme.onPrimaryContainer
217+
)
218+
Spacer(modifier = Modifier.height(12.dp))
219+
220+
Button(
221+
onClick = { showQrScannerDialog = true },
222+
modifier = Modifier.fillMaxWidth()
223+
) {
224+
Icon(
225+
imageVector = Icons.Default.CameraAlt,
226+
contentDescription = "Scan QR Code"
227+
)
228+
Spacer(modifier = Modifier.width(8.dp))
229+
Text("Scan QR Code")
230+
}
231+
232+
registrationMessage?.let { msg ->
233+
Spacer(modifier = Modifier.height(8.dp))
234+
Text(
235+
text = msg,
236+
style = MaterialTheme.typography.bodySmall,
237+
color = if (msg.contains("success", ignoreCase = true)) {
238+
MaterialTheme.colorScheme.primary
239+
} else {
240+
MaterialTheme.colorScheme.error
241+
}
242+
)
243+
}
244+
}
245+
}
246+
247+
val clipboard = LocalClipboardManager.current
248+
var copiedDeviceId by remember { mutableStateOf(false) }
249+
var copiedPublicKey by remember { mutableStateOf(false) }
250+
var copiedBoth by remember { mutableStateOf(false) }
251+
val publicKey = try { manager.getPublicKey() } catch (_: Throwable) { "" }
197252

198253
// Show Device ID (copyable)
199254
Card(
@@ -375,60 +430,8 @@ fun DataPadSettingsDialog(
375430

376431
HorizontalDivider()
377432

378-
// QR Code Registration Section
379-
var showQrScannerDialog by remember { mutableStateOf(false) }
380-
var registrationMessage by remember { mutableStateOf<String?>(null) }
381-
382-
Card(
383-
modifier = Modifier
384-
.fillMaxWidth()
385-
.padding(vertical = 8.dp),
386-
colors = CardDefaults.cardColors(
387-
containerColor = MaterialTheme.colorScheme.primaryContainer
388-
)
389-
) {
390-
Column(
391-
modifier = Modifier.padding(16.dp)
392-
) {
393-
Text(
394-
text = "Quick Setup",
395-
style = MaterialTheme.typography.titleMedium,
396-
color = MaterialTheme.colorScheme.onPrimaryContainer
397-
)
398-
Spacer(modifier = Modifier.height(8.dp))
399-
Text(
400-
text = "Scan QR code from server to auto-configure",
401-
style = MaterialTheme.typography.bodySmall,
402-
color = MaterialTheme.colorScheme.onPrimaryContainer
403-
)
404-
Spacer(modifier = Modifier.height(12.dp))
405-
406-
Button(
407-
onClick = { showQrScannerDialog = true },
408-
modifier = Modifier.fillMaxWidth()
409-
) {
410-
Icon(
411-
imageVector = Icons.Default.CameraAlt,
412-
contentDescription = "Scan QR Code"
413-
)
414-
Spacer(modifier = Modifier.width(8.dp))
415-
Text("Scan QR Code")
416-
}
417-
418-
registrationMessage?.let { msg ->
419-
Spacer(modifier = Modifier.height(8.dp))
420-
Text(
421-
text = msg,
422-
style = MaterialTheme.typography.bodySmall,
423-
color = if (msg.contains("success", ignoreCase = true)) {
424-
MaterialTheme.colorScheme.primary
425-
} else {
426-
MaterialTheme.colorScheme.error
427-
}
428-
)
429-
}
430-
}
431-
}
433+
// QR Code Registration Section (handled near Device Name)
434+
// (moved earlier for visibility)
432435

433436
if (showQrScannerDialog) {
434437
// Full-screen camera QR scanner

app/src/main/java/com/example/checklist_interactive/ui/setup/SetupWizardScreen.kt

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -126,42 +126,50 @@ fun SetupWizardScreen(
126126
.padding(16.dp),
127127
verticalArrangement = Arrangement.spacedBy(16.dp)
128128
) {
129-
// Welcome message
129+
// Welcome message (smaller banner with app name)
130130
Card(
131131
modifier = Modifier.fillMaxWidth(),
132132
colors = CardDefaults.cardColors(
133133
containerColor = MaterialTheme.colorScheme.primaryContainer
134134
)
135135
) {
136136
Column(
137-
modifier = Modifier.padding(16.dp),
138-
verticalArrangement = Arrangement.spacedBy(8.dp)
137+
modifier = Modifier.padding(12.dp),
138+
verticalArrangement = Arrangement.spacedBy(6.dp)
139139
) {
140140
Icon(
141141
imageVector = Icons.Default.RocketLaunch,
142142
contentDescription = null,
143143
modifier = Modifier
144-
.size(48.dp)
144+
.size(36.dp)
145145
.align(Alignment.CenterHorizontally),
146146
tint = MaterialTheme.colorScheme.primary
147147
)
148148
Text(
149149
text = stringResource(R.string.setup_wizard_welcome),
150-
style = MaterialTheme.typography.titleLarge,
151-
fontWeight = FontWeight.Bold,
150+
style = MaterialTheme.typography.titleMedium,
151+
fontWeight = FontWeight.SemiBold,
152+
textAlign = TextAlign.Center,
153+
modifier = Modifier.fillMaxWidth()
154+
)
155+
// App name line (smaller)
156+
Text(
157+
text = stringResource(R.string.app_name),
158+
style = MaterialTheme.typography.bodySmall,
159+
color = MaterialTheme.colorScheme.onSurfaceVariant,
152160
textAlign = TextAlign.Center,
153161
modifier = Modifier.fillMaxWidth()
154162
)
155163
Text(
156164
text = stringResource(R.string.setup_wizard_description),
157-
style = MaterialTheme.typography.bodyMedium,
165+
style = MaterialTheme.typography.bodySmall,
158166
textAlign = TextAlign.Center,
159167
modifier = Modifier.fillMaxWidth()
160168
)
161-
Spacer(modifier = Modifier.height(8.dp))
169+
Spacer(modifier = Modifier.height(6.dp))
162170
Text(
163171
text = stringResource(R.string.settings_version, softwareVersion),
164-
style = MaterialTheme.typography.bodySmall,
172+
style = MaterialTheme.typography.labelSmall,
165173
color = MaterialTheme.colorScheme.onSurfaceVariant,
166174
textAlign = TextAlign.Center,
167175
modifier = Modifier.fillMaxWidth()
@@ -277,10 +285,20 @@ fun SetupWizardScreen(
277285
// Compute recommended size based on screen width
278286
val configuration = LocalConfiguration.current
279287
val screenWidthDp = configuration.screenWidthDp
280-
val recommended = if (screenWidthDp >= 600) "medium" else "small"
288+
// Recommend tiny for small screens, small for medium, medium for larger screens
289+
val recommended = when {
290+
screenWidthDp >= 900 -> "medium"
291+
screenWidthDp >= 600 -> "small"
292+
else -> "tiny"
293+
}
294+
val recommendedLabel = when (recommended) {
295+
"tiny" -> stringResource(R.string.settings_fab_size_tiny)
296+
"small" -> stringResource(R.string.settings_fab_size_small)
297+
else -> stringResource(R.string.settings_fab_size_medium)
298+
}
281299

282300
Text(
283-
text = stringResource(R.string.setup_fab_size_recommendation, if (recommended == "medium") stringResource(R.string.settings_fab_size_medium) else stringResource(R.string.settings_fab_size_small)),
301+
text = stringResource(R.string.setup_fab_size_recommendation, recommendedLabel),
284302
style = MaterialTheme.typography.bodySmall,
285303
color = MaterialTheme.colorScheme.onSurfaceVariant
286304
)
@@ -289,6 +307,7 @@ fun SetupWizardScreen(
289307

290308
var currentFabSize by remember { mutableStateOf(prefsManager.getFabSize()) }
291309
val fabSizes = listOf(
310+
"tiny" to stringResource(R.string.settings_fab_size_tiny),
292311
"small" to stringResource(R.string.settings_fab_size_small),
293312
"medium" to stringResource(R.string.settings_fab_size_medium),
294313
"large" to stringResource(R.string.settings_fab_size_large)

app/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@
500500
<string name="datapad_ecdh_description_secure">Sichere, sitzungsbasierte Verschlüsselung (empfohlen)</string>
501501
<string name="datapad_device_name_label">Gerätename</string>
502502
<string name="datapad_device_name_placeholder">Android-Tablet</string>
503-
<string name="datapad_device_name_support">Wird zur Identifikation dieses Geräts während des Handshakes verwendet</string>
503+
<string name="datapad_device_name_support">Wird zur Identifikation dieses Geräts während des Handshakes verwendet. Beim Scannen eines QR-Codes wird dieser Name auf dem Server in der Liste der authentifizierten Geräte übernommen.</string>
504504
<string name="datapad_device_id_label">Geräte-ID (vom Schlüssel abgeleitet)</string>
505505
<string name="datapad_server_ip_label">Server-IP (Unicast)</string>
506506
<string name="datapad_server_ip_placeholder">192.168.178.100</string>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@
479479
<string name="datapad_ecdh_description_secure">基于会话的安全加密现已始终启用。</string>
480480
<string name="datapad_device_name_label">设备名称</string>
481481
<string name="datapad_device_name_placeholder">Android 平板</string>
482-
<string name="datapad_device_name_support">用于在握手过程识别此设备</string>
482+
<string name="datapad_device_name_support">用于在握手过程识别此设备。扫描二维码时,该名称将记录到服务器并显示在已认证的设备列表中。</string>
483483
<string name="datapad_device_id_label">设备 ID(从密钥派生)</string>
484484
<string name="datapad_server_ip_label">服务器 IP(单播)</string>
485485
<string name="datapad_server_ip_placeholder">192.168.178.100</string>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@
483483
<string name="datapad_ecdh_description_secure">Secure session-based encryption is now always on.</string>
484484
<string name="datapad_device_name_label">Device Name</string>
485485
<string name="datapad_device_name_placeholder">Android Tablet</string>
486-
<string name="datapad_device_name_support">Used to identify this device during handshake</string>
486+
<string name="datapad_device_name_support">Used to identify this device during handshake. When you scan a QR code, this name will be recorded on the server and shown in the authenticated devices list.</string>
487487
<string name="datapad_device_id_label">Device ID (derived from key)</string>
488488
<string name="datapad_server_ip_label">Server IP (Unicast)</string>
489489
<string name="datapad_server_ip_placeholder">192.168.178.100</string>

0 commit comments

Comments
 (0)