improve(android): align command palette row affordances (#101072)

* android: tidy command palette row affordances

* docs(android): credit command palette polish

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
WhatsSkiLL
2026-07-07 02:14:46 +02:00
committed by GitHub
parent 4c97aa1311
commit bce414d8b8
3 changed files with 41 additions and 32 deletions

View File

@@ -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",

View File

@@ -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.

View File

@@ -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(