mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-09 15:59:30 +00:00
fix(android): tune screenshot mode visual sizing (#100895)
* fix(android): tune screenshot mode visual sizing * chore(android): refresh screenshot i18n inventory * refactor(android): simplify screenshot mode sizing --------- Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
parent
775ef966c3
commit
4b3941c7f2
3 changed files with 65 additions and 51 deletions
|
|
@ -443,7 +443,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 67,
|
||||
"line": 75,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "OpenClaw",
|
||||
"surface": "android",
|
||||
|
|
@ -451,7 +451,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 74,
|
||||
"line": 82,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Connected",
|
||||
"surface": "android",
|
||||
|
|
@ -459,7 +459,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 99,
|
||||
"line": 107,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Gateway paired",
|
||||
"surface": "android",
|
||||
|
|
@ -467,7 +467,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 99,
|
||||
"line": 107,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Mac Studio - Tailnet",
|
||||
"surface": "android",
|
||||
|
|
@ -475,7 +475,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 100,
|
||||
"line": 108,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Node",
|
||||
"surface": "android",
|
||||
|
|
@ -483,7 +483,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 101,
|
||||
"line": 109,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Transport",
|
||||
"surface": "android",
|
||||
|
|
@ -491,7 +491,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 102,
|
||||
"line": 110,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Capabilities",
|
||||
"surface": "android",
|
||||
|
|
@ -499,7 +499,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 105,
|
||||
"line": 113,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Ready",
|
||||
"surface": "android",
|
||||
|
|
@ -507,7 +507,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 117,
|
||||
"line": 125,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Hi Molty, are you there?",
|
||||
"surface": "android",
|
||||
|
|
@ -515,7 +515,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 117,
|
||||
"line": 125,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "You",
|
||||
"surface": "android",
|
||||
|
|
@ -523,7 +523,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 119,
|
||||
"line": 127,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Molty",
|
||||
"surface": "android",
|
||||
|
|
@ -531,7 +531,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 120,
|
||||
"line": 128,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Always. Lurking in the shadows, exfoliating.",
|
||||
"surface": "android",
|
||||
|
|
@ -539,7 +539,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 144,
|
||||
"line": 156,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Listening on device",
|
||||
"surface": "android",
|
||||
|
|
@ -547,7 +547,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 144,
|
||||
"line": 156,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Talk mode",
|
||||
"surface": "android",
|
||||
|
|
@ -555,7 +555,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 145,
|
||||
"line": 157,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Wake phrase",
|
||||
"surface": "android",
|
||||
|
|
@ -563,7 +563,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 146,
|
||||
"line": 158,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Latency",
|
||||
"surface": "android",
|
||||
|
|
@ -571,7 +571,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 152,
|
||||
"line": 164,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Screen tools",
|
||||
"surface": "android",
|
||||
|
|
@ -579,7 +579,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 152,
|
||||
"line": 164,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Shared with your gateway",
|
||||
"surface": "android",
|
||||
|
|
@ -587,7 +587,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 153,
|
||||
"line": 165,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Canvas",
|
||||
"surface": "android",
|
||||
|
|
@ -595,7 +595,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 164,
|
||||
"line": 176,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Live context",
|
||||
"surface": "android",
|
||||
|
|
@ -603,7 +603,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 165,
|
||||
"line": 177,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Camera",
|
||||
"surface": "android",
|
||||
|
|
@ -611,7 +611,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 166,
|
||||
"line": 178,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Screen",
|
||||
"surface": "android",
|
||||
|
|
@ -619,7 +619,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 167,
|
||||
"line": 179,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Location",
|
||||
"surface": "android",
|
||||
|
|
@ -627,7 +627,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 175,
|
||||
"line": 187,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Security",
|
||||
"surface": "android",
|
||||
|
|
@ -635,7 +635,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "ui-named-argument",
|
||||
"line": 179,
|
||||
"line": 191,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Notifications",
|
||||
"surface": "android",
|
||||
|
|
@ -643,7 +643,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "conditional-branch",
|
||||
"line": 385,
|
||||
"line": 397,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Connect",
|
||||
"surface": "android",
|
||||
|
|
@ -651,7 +651,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "conditional-branch",
|
||||
"line": 386,
|
||||
"line": 398,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Chat",
|
||||
"surface": "android",
|
||||
|
|
@ -659,7 +659,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "conditional-branch",
|
||||
"line": 387,
|
||||
"line": 399,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Talk",
|
||||
"surface": "android",
|
||||
|
|
@ -667,7 +667,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "conditional-branch",
|
||||
"line": 388,
|
||||
"line": 400,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Device tools",
|
||||
"surface": "android",
|
||||
|
|
@ -675,7 +675,7 @@
|
|||
},
|
||||
{
|
||||
"kind": "conditional-branch",
|
||||
"line": 389,
|
||||
"line": 401,
|
||||
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/AndroidScreenshotModeScreen.kt",
|
||||
"source": "Settings",
|
||||
"surface": "android",
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ Assistant messages now offer a long-press Listen action with gateway TTS playbac
|
|||
|
||||
Android command-palette rows now align icon and navigation affordances consistently and truncate long session details cleanly. Thanks @IWhatsskill.
|
||||
|
||||
Android screenshot-mode voice and screen proof scenes now scale cleanly on compact capture widths. 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.
|
||||
|
|
|
|||
|
|
@ -10,12 +10,15 @@ import androidx.compose.foundation.layout.Box
|
|||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.aspectRatio
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
|
|
@ -38,6 +41,8 @@ import androidx.compose.ui.text.font.FontWeight
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
private val ScreenshotIconBoxSize = 44.dp
|
||||
|
||||
@Composable
|
||||
fun AndroidScreenshotModeScreen(scene: AndroidScreenshotScene) {
|
||||
ClawDesignTheme(dark = true) {
|
||||
|
|
@ -46,7 +51,10 @@ fun AndroidScreenshotModeScreen(scene: AndroidScreenshotScene) {
|
|||
Modifier
|
||||
.fillMaxSize()
|
||||
.background(ClawTheme.colors.canvas)
|
||||
.padding(horizontal = 20.dp, vertical = 26.dp),
|
||||
.padding(
|
||||
horizontal = ClawTheme.spacing.md,
|
||||
vertical = 26.dp,
|
||||
),
|
||||
verticalArrangement = Arrangement.SpaceBetween,
|
||||
) {
|
||||
ScreenshotHeader(scene)
|
||||
|
|
@ -81,7 +89,7 @@ private fun ScreenshotSceneBody(
|
|||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier.fillMaxWidth().padding(vertical = 20.dp),
|
||||
modifier = modifier.fillMaxWidth().padding(vertical = ClawTheme.spacing.md),
|
||||
verticalArrangement = Arrangement.spacedBy(14.dp),
|
||||
) {
|
||||
when (scene) {
|
||||
|
|
@ -124,9 +132,13 @@ private fun ChatScene() {
|
|||
|
||||
@Composable
|
||||
private fun VoiceScene() {
|
||||
Box(modifier = Modifier.fillMaxWidth().padding(vertical = 20.dp), contentAlignment = Alignment.Center) {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxWidth().padding(vertical = ClawTheme.spacing.md),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
// Scale the proof orb with compact capture widths while preserving its 196dp design cap.
|
||||
Surface(
|
||||
modifier = Modifier.size(196.dp),
|
||||
modifier = Modifier.widthIn(max = 196.dp).fillMaxWidth().aspectRatio(1f),
|
||||
shape = CircleShape,
|
||||
color = ClawTheme.colors.surfaceRaised,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.borderStrong),
|
||||
|
|
@ -136,7 +148,7 @@ private fun VoiceScene() {
|
|||
imageVector = Icons.Default.Mic,
|
||||
contentDescription = null,
|
||||
tint = ClawTheme.colors.primary,
|
||||
modifier = Modifier.size(72.dp),
|
||||
modifier = Modifier.fillMaxSize(0.37f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -155,12 +167,12 @@ private fun ScreenScene() {
|
|||
MetricRow(label = "Location", value = "On request")
|
||||
}
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth().height(168.dp),
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
modifier = Modifier.fillMaxWidth().heightIn(min = 160.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = ClawTheme.colors.surfaceRaised,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.border),
|
||||
) {
|
||||
Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(10.dp)) {
|
||||
Column(modifier = Modifier.padding(ClawTheme.spacing.sm), verticalArrangement = Arrangement.spacedBy(10.dp)) {
|
||||
Text(text = "Live context", style = ClawTheme.type.section, color = ClawTheme.colors.text)
|
||||
ContextBar(label = "Camera", fraction = 0.74f)
|
||||
ContextBar(label = "Screen", fraction = 0.58f)
|
||||
|
|
@ -190,11 +202,11 @@ private fun FeaturePanel(
|
|||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = ClawTheme.colors.surface,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.border),
|
||||
) {
|
||||
Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(14.dp)) {
|
||||
Column(modifier = Modifier.padding(ClawTheme.spacing.sm), verticalArrangement = Arrangement.spacedBy(14.dp)) {
|
||||
Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
IconBox(icon = icon)
|
||||
Column {
|
||||
|
|
@ -214,11 +226,11 @@ private fun CompactList(
|
|||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = ClawTheme.colors.surfaceRaised,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.border),
|
||||
) {
|
||||
Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
Column(modifier = Modifier.padding(ClawTheme.spacing.sm), verticalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
Text(text = title, style = ClawTheme.type.section, color = ClawTheme.colors.text)
|
||||
rows.forEach { row ->
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
|
|
@ -239,11 +251,11 @@ private fun ChatBubble(
|
|||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = if (raised) ClawTheme.colors.surfaceRaised else ClawTheme.colors.surface,
|
||||
border = BorderStroke(1.dp, if (raised) ClawTheme.colors.borderStrong else ClawTheme.colors.border),
|
||||
) {
|
||||
Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
Column(modifier = Modifier.padding(ClawTheme.spacing.sm), verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
Text(text = label, style = ClawTheme.type.caption, color = ClawTheme.colors.textSubtle)
|
||||
Text(text = text, style = ClawTheme.type.body, color = ClawTheme.colors.text)
|
||||
}
|
||||
|
|
@ -279,7 +291,7 @@ private fun ContextBar(
|
|||
Modifier
|
||||
.fillMaxWidth()
|
||||
.height(7.dp)
|
||||
.clip(RoundedCornerShape(4.dp))
|
||||
.clip(RoundedCornerShape(ClawTheme.radii.row))
|
||||
.background(ClawTheme.colors.surfacePressed),
|
||||
) {
|
||||
Box(
|
||||
|
|
@ -297,7 +309,7 @@ private fun ContextBar(
|
|||
private fun ScreenshotTabBar(activeScene: AndroidScreenshotScene) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = ClawTheme.colors.surface,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.border),
|
||||
) {
|
||||
|
|
@ -322,8 +334,8 @@ private fun TabIcon(
|
|||
Box(
|
||||
modifier =
|
||||
Modifier
|
||||
.size(42.dp)
|
||||
.clip(RoundedCornerShape(6.dp))
|
||||
.size(ScreenshotIconBoxSize)
|
||||
.clip(RoundedCornerShape(ClawTheme.radii.control))
|
||||
.background(if (active) ClawTheme.colors.surfacePressed else Color.Transparent),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
|
|
@ -341,8 +353,8 @@ private fun IconBox(icon: ImageVector) {
|
|||
Box(
|
||||
modifier =
|
||||
Modifier
|
||||
.size(42.dp)
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
.size(ScreenshotIconBoxSize)
|
||||
.clip(RoundedCornerShape(ClawTheme.radii.button))
|
||||
.background(ClawTheme.colors.surfacePressed),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
|
|
@ -361,7 +373,7 @@ private fun StatusPill(
|
|||
color: Color,
|
||||
) {
|
||||
Surface(
|
||||
shape = RoundedCornerShape(8.dp),
|
||||
shape = RoundedCornerShape(ClawTheme.radii.button),
|
||||
color = ClawTheme.colors.surfaceRaised,
|
||||
border = BorderStroke(1.dp, ClawTheme.colors.border),
|
||||
) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue