Skip to content

Commit f4a5e57

Browse files
committed
feat(android): brand onboarding welcome screen
1 parent 1098063 commit f4a5e57

2 files changed

Lines changed: 110 additions & 2 deletions

File tree

apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ai.openclaw.app.ui
33
import ai.openclaw.app.GatewayConnectionProblem
44
import ai.openclaw.app.LocationMode
55
import ai.openclaw.app.MainViewModel
6+
import ai.openclaw.app.R
67
import ai.openclaw.app.SensitiveFeatureConfig
78
import ai.openclaw.app.node.DeviceNotificationListenerService
89
import ai.openclaw.app.ui.design.ClawDesignTheme
@@ -31,20 +32,25 @@ import androidx.activity.compose.rememberLauncherForActivityResult
3132
import androidx.activity.result.contract.ActivityResultContracts
3233
import androidx.compose.foundation.BorderStroke
3334
import androidx.compose.foundation.Canvas
35+
import androidx.compose.foundation.Image
36+
import androidx.compose.foundation.background
3437
import androidx.compose.foundation.layout.Arrangement
3538
import androidx.compose.foundation.layout.Box
3639
import androidx.compose.foundation.layout.Column
3740
import androidx.compose.foundation.layout.PaddingValues
3841
import androidx.compose.foundation.layout.Row
3942
import androidx.compose.foundation.layout.Spacer
43+
import androidx.compose.foundation.layout.WindowInsets
4044
import androidx.compose.foundation.layout.fillMaxSize
4145
import androidx.compose.foundation.layout.fillMaxWidth
4246
import androidx.compose.foundation.layout.height
4347
import androidx.compose.foundation.layout.heightIn
4448
import androidx.compose.foundation.layout.imePadding
4549
import androidx.compose.foundation.layout.padding
50+
import androidx.compose.foundation.layout.safeDrawing
4651
import androidx.compose.foundation.layout.size
4752
import androidx.compose.foundation.layout.width
53+
import androidx.compose.foundation.layout.windowInsetsPadding
4854
import androidx.compose.foundation.lazy.LazyColumn
4955
import androidx.compose.foundation.lazy.items
5056
import androidx.compose.foundation.shape.CircleShape
@@ -89,10 +95,12 @@ import androidx.compose.runtime.saveable.rememberSaveable
8995
import androidx.compose.runtime.setValue
9096
import androidx.compose.ui.Alignment
9197
import androidx.compose.ui.Modifier
98+
import androidx.compose.ui.graphics.Brush
9299
import androidx.compose.ui.graphics.Color
93100
import androidx.compose.ui.graphics.drawscope.Stroke
94101
import androidx.compose.ui.graphics.vector.ImageVector
95102
import androidx.compose.ui.platform.LocalContext
103+
import androidx.compose.ui.res.painterResource
96104
import androidx.compose.ui.text.font.FontFamily
97105
import androidx.compose.ui.text.font.FontWeight
98106
import androidx.compose.ui.text.style.TextAlign
@@ -359,20 +367,39 @@ private fun WelcomeScreen(
359367
onConnect: () -> Unit,
360368
modifier: Modifier = Modifier,
361369
) {
362-
ClawScaffold(modifier = modifier, contentPadding = PaddingValues(horizontal = 24.dp, vertical = 18.dp)) {
370+
val welcomeBackground =
371+
Brush.verticalGradient(
372+
colors =
373+
listOf(
374+
Color(0xFFFF4D4D),
375+
Color(0xFFD73332),
376+
Color(0xFF991B1B),
377+
Color(0xFF260707),
378+
),
379+
)
380+
381+
Box(
382+
modifier =
383+
modifier
384+
.fillMaxSize()
385+
.background(welcomeBackground)
386+
.windowInsetsPadding(WindowInsets.safeDrawing)
387+
.padding(horizontal = 24.dp, vertical = 18.dp),
388+
) {
363389
Column(
364390
modifier = Modifier.fillMaxSize(),
365391
horizontalAlignment = Alignment.CenterHorizontally,
366392
) {
367393
Spacer(modifier = Modifier.height(96.dp))
368394
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(18.dp)) {
395+
WelcomeLogo()
369396
Text(
370397
text = "OPENCLAW",
371398
style = ClawTheme.type.display.copy(fontSize = 34.sp, lineHeight = 38.sp, fontWeight = FontWeight.Black),
372399
color = ClawTheme.colors.text,
373400
)
374401
Text(
375-
text = "Your AI command center.\nPrivate. Local. Under your control.",
402+
text = "Your personal AI assistant.\nExfoliate! Exfoliate!",
376403
style = ClawTheme.type.section,
377404
color = ClawTheme.colors.text,
378405
textAlign = TextAlign.Center,
@@ -389,6 +416,20 @@ private fun WelcomeScreen(
389416
}
390417
}
391418

419+
@Composable
420+
private fun WelcomeLogo() {
421+
Surface(
422+
modifier = Modifier.size(82.dp),
423+
shape = CircleShape,
424+
color = Color.White.copy(alpha = 0.92f),
425+
contentColor = Color.Unspecified,
426+
) {
427+
Box(modifier = Modifier.fillMaxSize().padding(12.dp), contentAlignment = Alignment.Center) {
428+
Image(painter = painterResource(id = R.drawable.openclaw_logo), contentDescription = "OpenClaw logo", modifier = Modifier.fillMaxSize())
429+
}
430+
}
431+
}
432+
392433
@Composable
393434
private fun WelcomeHorizon() {
394435
Canvas(modifier = Modifier.fillMaxWidth().height(120.dp)) {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:aapt="http://schemas.android.com/aapt"
3+
android:width="120dp"
4+
android:height="120dp"
5+
android:viewportWidth="120"
6+
android:viewportHeight="120">
7+
<path android:pathData="M60,10 C30,10 15,35 15,55 C15,75 30,95 45,100 L45,110 L55,110 L55,100 C55,100 60,102 65,100 L65,110 L75,110 L75,100 C90,95 105,75 105,55 C105,35 90,10 60,10Z">
8+
<aapt:attr name="android:fillColor">
9+
<gradient
10+
android:endX="120"
11+
android:endY="120"
12+
android:startColor="#ff4d4d"
13+
android:startX="0"
14+
android:startY="0"
15+
android:type="linear"
16+
android:endColor="#991b1b" />
17+
</aapt:attr>
18+
</path>
19+
<path android:pathData="M20,45 C5,40 0,50 5,60 C10,70 20,65 25,55 C28,48 25,45 20,45Z">
20+
<aapt:attr name="android:fillColor">
21+
<gradient
22+
android:endX="120"
23+
android:endY="120"
24+
android:startColor="#ff4d4d"
25+
android:startX="0"
26+
android:startY="0"
27+
android:type="linear"
28+
android:endColor="#991b1b" />
29+
</aapt:attr>
30+
</path>
31+
<path android:pathData="M100,45 C115,40 120,50 115,60 C110,70 100,65 95,55 C92,48 95,45 100,45Z">
32+
<aapt:attr name="android:fillColor">
33+
<gradient
34+
android:endX="120"
35+
android:endY="120"
36+
android:startColor="#ff4d4d"
37+
android:startX="0"
38+
android:startY="0"
39+
android:type="linear"
40+
android:endColor="#991b1b" />
41+
</aapt:attr>
42+
</path>
43+
<path
44+
android:fillColor="@android:color/transparent"
45+
android:pathData="M45,15 Q35,5 30,8"
46+
android:strokeColor="#ff4d4d"
47+
android:strokeLineCap="round"
48+
android:strokeWidth="3" />
49+
<path
50+
android:fillColor="@android:color/transparent"
51+
android:pathData="M75,15 Q85,5 90,8"
52+
android:strokeColor="#ff4d4d"
53+
android:strokeLineCap="round"
54+
android:strokeWidth="3" />
55+
<path
56+
android:fillColor="#050810"
57+
android:pathData="M45,35 m-6,0 a6,6 0,1 0,12 0 a6,6 0,1 0,-12 0" />
58+
<path
59+
android:fillColor="#050810"
60+
android:pathData="M75,35 m-6,0 a6,6 0,1 0,12 0 a6,6 0,1 0,-12 0" />
61+
<path
62+
android:fillColor="#00e5cc"
63+
android:pathData="M46,34 m-2.5,0 a2.5,2.5 0,1 0,5 0 a2.5,2.5 0,1 0,-5 0" />
64+
<path
65+
android:fillColor="#00e5cc"
66+
android:pathData="M76,34 m-2.5,0 a2.5,2.5 0,1 0,5 0 a2.5,2.5 0,1 0,-5 0" />
67+
</vector>

0 commit comments

Comments
 (0)