Skip to content

Commit e53fdf4

Browse files
committed
Wear: enhance responsive padding
1 parent 95097d0 commit e53fdf4

File tree

7 files changed

+50
-7
lines changed

7 files changed

+50
-7
lines changed

gradle/libs.versions.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ androidxDocumentFile = "1.1.0"
4141
# This dependency is for the Wear UI Library,
4242
# which has classes that exemplify best practices
4343
androidxWear = "1.3.0"
44-
androidxWearCompose = "1.5.0-rc01"
44+
androidxWearCompose = "1.5.0-rc02"
45+
googleHorologist = "0.7.15"
4546

4647
googleTruth = "1.1.3"
4748
googleMaterialComponents = "1.13.0-alpha13"
@@ -175,6 +176,8 @@ androidxWearComposeMaterial3 = { module = "androidx.wear.compose:compose-materia
175176
androidxWearComposeFundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "androidxWearCompose" }
176177
# Wear OS preview annotations
177178
androidxWearComposeUiTooling = { module = "androidx.wear.compose:compose-ui-tooling", version.ref = "androidxWearCompose" }
179+
google-horologist-layout = { module = "com.google.android.horologist:horologist-compose-layout", version.ref = "googleHorologist" }
180+
google-horologist-material = { module = "com.google.android.horologist:horologist-compose-material", version.ref = "googleHorologist" }
178181
# Ambient mode support is provided by this dependency
179182
googleWearable = { module = "com.google.android.wearable:wearable", version.ref = "googleWearable" }
180183

wearable/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ dependencies {
136136
libs.androidxWearComposeUiTooling,
137137
libs.androidxWearComposeFundation,
138138
libs.androidxWearComposeMaterial3,
139+
libs.google.horologist.layout,
139140
).forEach { implementation(it) }
140141

141142
debugImplementation(libs.androidxComposeUiTooling)

wearable/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020

2121
<uses-feature android:name="android.hardware.type.watch" />
2222

23+
<!-- use rememberResponsiveColumnPadding() with API 25 -->
24+
<uses-sdk tools:overrideLibrary="com.google.android.horologist.compose.layout" />
25+
2326
<application
2427
android:name=".MainApplication"
2528
android:allowBackup="true"

wearable/src/main/kotlin/io/cliuff/boundo/wear/ui/list/AppList.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
2828
import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
2929
import androidx.wear.compose.material3.CircularProgressIndicator
3030
import androidx.wear.compose.material3.ScreenScaffold
31+
import com.google.android.horologist.compose.layout.ColumnItemType
32+
import com.google.android.horologist.compose.layout.rememberResponsiveColumnPadding
3133

3234
@Composable
3335
fun AppList() {
@@ -39,10 +41,15 @@ fun AppList() {
3941

4042
val appList by viewModel.appListState.collectAsStateWithLifecycle()
4143
val columnState = rememberTransformingLazyColumnState()
44+
val contentPadding = rememberResponsiveColumnPadding(
45+
first = ColumnItemType.ListHeader,
46+
last = ColumnItemType.Card,
47+
)
4248

4349
ScreenScaffold(
4450
modifier = Modifier.fillMaxSize(),
4551
scrollState = columnState,
52+
contentPadding = contentPadding,
4653
) { innerPadding ->
4754

4855
LazyAppGrid(

wearable/src/main/kotlin/io/cliuff/boundo/wear/ui/list/ArtItems.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package io.cliuff.boundo.wear.ui.list
1818

1919
import androidx.compose.foundation.background
20+
import androidx.compose.foundation.layout.Arrangement
2021
import androidx.compose.foundation.layout.Box
2122
import androidx.compose.foundation.layout.Column
2223
import androidx.compose.foundation.layout.PaddingValues
@@ -91,10 +92,11 @@ private fun ArtItemContainer(
9192
transformation: SurfaceTransformation? = null,
9293
content: @Composable () -> Unit,
9394
) {
95+
// todo replace Card with M3E Chip
96+
Box(modifier = modifier.heightIn(max = 50.dp)) {
9497
Card(
95-
modifier = modifier,
9698
onClick = onClick,
97-
shape = MaterialTheme.shapes.medium,
99+
shape = CircleShape,
98100
contentPadding = PaddingValues.Zero,
99101
transformation = transformation,
100102
) {
@@ -104,6 +106,7 @@ private fun ArtItemContainer(
104106
content = { content() }
105107
)
106108
}
109+
}
107110
}
108111

109112
@Composable
@@ -133,7 +136,7 @@ private fun ArtItemContent(
133136
lineHeight = 14.sp,
134137
fontWeight = FontWeight.Medium,
135138
overflow = TextOverflow.Ellipsis,
136-
maxLines = 2,
139+
maxLines = 1,
137140
)
138141
if (time != null) {
139142
Text(
@@ -182,8 +185,20 @@ fun AppIcon(modifier: Modifier = Modifier, iconInfo: PackageInfo?) {
182185
@Composable
183186
private fun ArtItemPreview() {
184187
PreviewAppTheme {
185-
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.CenterStart) {
186-
ArtItemContainer(modifier = Modifier.padding(horizontal = 12.dp), onClick = {}) {
188+
Column(
189+
modifier = Modifier.fillMaxSize().padding(horizontal = 12.dp),
190+
verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically)
191+
) {
192+
ArtItemContainer(onClick = {}) {
193+
ArtItemContent(
194+
name = "Meta App",
195+
time = "0 minutes ago",
196+
apiText = "16",
197+
apiColor = MaterialTheme.colorScheme.onSurface,
198+
iconInfo = null,
199+
)
200+
}
201+
ArtItemContainer(onClick = {}) {
187202
ArtItemContent(
188203
name = "Boundo Meta App",
189204
time = "3 hours ago",

wearable/src/main/kotlin/io/cliuff/boundo/wear/ui/list/LazyAppGrid.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@ package io.cliuff.boundo.wear.ui.list
1919
import androidx.compose.foundation.layout.PaddingValues
2020
import androidx.compose.runtime.Composable
2121
import androidx.compose.ui.Modifier
22+
import androidx.compose.ui.res.stringResource
2223
import androidx.wear.compose.foundation.lazy.TransformingLazyColumn
2324
import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState
2425
import androidx.wear.compose.foundation.lazy.items
2526
import androidx.wear.compose.foundation.lazy.rememberTransformingLazyColumnState
27+
import androidx.wear.compose.material3.ListHeader
2628
import androidx.wear.compose.material3.SurfaceTransformation
29+
import androidx.wear.compose.material3.Text
2730
import androidx.wear.compose.material3.lazy.rememberTransformationSpec
2831
import androidx.wear.compose.material3.lazy.transformedHeight
32+
import io.cliuff.boundo.wear.R
2933
import io.cliuff.boundo.wear.model.ApiViewingApp
3034

3135
@Composable
@@ -34,10 +38,19 @@ internal fun LazyAppGrid(
3438
columnState: TransformingLazyColumnState = rememberTransformingLazyColumnState(),
3539
contentPadding: PaddingValues = PaddingValues.Zero,
3640
) {
37-
// val contentPadding = rememberResponsiveColumnPadding()
3841
val transSpec = rememberTransformationSpec()
3942

4043
TransformingLazyColumn(state = columnState, contentPadding = contentPadding) {
44+
45+
item(key = "@list.header", contentType = "Header") {
46+
ListHeader(
47+
modifier = Modifier.transformedHeight(this, transSpec),
48+
transformation = SurfaceTransformation(transSpec),
49+
) {
50+
Text(stringResource(R.string.art_list_hrader))
51+
}
52+
}
53+
4154
items(apps, key = { app -> app.packageName }, contentType = { "App" }) { app ->
4255
ArtItem(
4356
modifier = Modifier

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
<string name="apiViewing">App API</string>
44
<string name="avPrefIncludeDisabled">Include disabled apps</string>
55
<string name="avPrefSweet">Show desserts</string>
6+
<string name="art_list_hrader">Installed Apps</string>
67
</resources>

0 commit comments

Comments
 (0)