diff --git a/apps/.i18n/native-source.json b/apps/.i18n/native-source.json index f399fe55741a..5b1c93d42b71 100644 --- a/apps/.i18n/native-source.json +++ b/apps/.i18n/native-source.json @@ -963,7 +963,7 @@ }, { "kind": "ui-named-argument", - "line": 208, + "line": 206, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "Open ${row.title}", "surface": "android", @@ -971,7 +971,7 @@ }, { "kind": "ui-named-argument", - "line": 262, + "line": 246, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "Open session", "surface": "android", @@ -979,7 +979,7 @@ }, { "kind": "conditional-branch", - "line": 297, + "line": 304, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "Connect Gateway to view providers", "surface": "android", @@ -987,7 +987,7 @@ }, { "kind": "conditional-branch", - "line": 299, + "line": 306, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "$readyProviderCount providers ready", "surface": "android", @@ -995,7 +995,7 @@ }, { "kind": "conditional-branch", - "line": 300, + "line": 307, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "No ready providers", "surface": "android", @@ -1003,7 +1003,7 @@ }, { "kind": "conditional-branch", - "line": 304, + "line": 311, "path": "apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt", "source": "Main session", "surface": "android", diff --git a/apps/android/CHANGELOG.md b/apps/android/CHANGELOG.md index fa760f03da29..0ae6c200f41a 100644 --- a/apps/android/CHANGELOG.md +++ b/apps/android/CHANGELOG.md @@ -10,6 +10,8 @@ Android notification forwarding now excludes native WhatsApp, Telegram, Telegram Assistant messages now offer a long-press Listen action with gateway TTS playback, on-device fallback, and tap-to-stop status. +Android command-palette rows now align icon and navigation affordances consistently and truncate long session details cleanly. Thanks @IWhatsskill. + The Settings About screen now shows the animated mascot with the app tagline plus Website, Docs, GitHub, and Discord links. Adds a read-only Files browser for agent workspaces with directory navigation, text and image previews, and system share export. diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt index a8cd04c6ede9..1efca26b24e6 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt @@ -198,17 +198,12 @@ private fun CommandActionRow(row: CommandItem) { verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(9.dp), ) { - Icon(imageVector = row.icon, contentDescription = null, modifier = Modifier.size(19.dp), tint = ClawTheme.colors.text) + CommandRowIcon(icon = row.icon) Column(modifier = Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(1.dp)) { Text(text = row.title, style = ClawTheme.type.body, color = ClawTheme.colors.text, maxLines = 1, overflow = TextOverflow.Ellipsis) Text(text = row.subtitle, style = ClawTheme.type.caption, color = ClawTheme.colors.textMuted, maxLines = 1, overflow = TextOverflow.Ellipsis) } - Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, - contentDescription = "Open ${row.title}", - modifier = Modifier.size(17.dp), - tint = ClawTheme.colors.textMuted, - ) + CommandRowChevron(contentDescription = "Open ${row.title}") } } } @@ -242,31 +237,43 @@ private fun CommandSessionListRow( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp), ) { - Surface( - modifier = Modifier.size(30.dp), - shape = CircleShape, - color = ClawTheme.colors.canvas, - border = BorderStroke(1.dp, ClawTheme.colors.borderStrong), - ) { - Box(contentAlignment = Alignment.Center) { - Icon(imageVector = Icons.Outlined.ChatBubbleOutline, contentDescription = null, modifier = Modifier.size(15.dp), tint = ClawTheme.colors.text) - } - } + CommandRowIcon(icon = Icons.Outlined.ChatBubbleOutline) Column(modifier = Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(1.dp)) { - Text(text = row.title, style = ClawTheme.type.body, color = ClawTheme.colors.text, maxLines = 1) - Text(text = row.subtitle, style = ClawTheme.type.caption, color = ClawTheme.colors.textSubtle, maxLines = 1) + Text(text = row.title, style = ClawTheme.type.body, color = ClawTheme.colors.text, maxLines = 1, overflow = TextOverflow.Ellipsis) + Text(text = row.subtitle, style = ClawTheme.type.caption, color = ClawTheme.colors.textSubtle, maxLines = 1, overflow = TextOverflow.Ellipsis) } - Text(text = row.metadata, style = ClawTheme.type.caption, color = ClawTheme.colors.textMuted) - Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, - contentDescription = "Open session", - modifier = Modifier.size(17.dp), - tint = ClawTheme.colors.textMuted, - ) + Text(text = row.metadata, style = ClawTheme.type.caption, color = ClawTheme.colors.textMuted, maxLines = 1, overflow = TextOverflow.Ellipsis) + CommandRowChevron(contentDescription = "Open session") } } } +@Composable +private fun CommandRowIcon(icon: ImageVector) { + Surface( + modifier = Modifier.size(30.dp), + shape = CircleShape, + color = ClawTheme.colors.canvas, + border = BorderStroke(1.dp, ClawTheme.colors.borderStrong), + ) { + Box(contentAlignment = Alignment.Center) { + Icon(imageVector = icon, contentDescription = null, modifier = Modifier.size(15.dp), tint = ClawTheme.colors.text) + } + } +} + +@Composable +private fun CommandRowChevron(contentDescription: String) { + Box(modifier = Modifier.size(24.dp), contentAlignment = Alignment.Center) { + Icon( + imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, + contentDescription = contentDescription, + modifier = Modifier.size(17.dp), + tint = ClawTheme.colors.textMuted, + ) + } +} + @Composable private fun CommandAvatar(text: String) { Surface(