16
16
17
17
package com.example.wear.snippets.m3.tile
18
18
19
+ import android.content.Context
19
20
import androidx.wear.protolayout.ResourceBuilders.Resources
20
21
import androidx.wear.protolayout.TimelineBuilders.Timeline
21
22
import androidx.wear.protolayout.material3.Typography.BODY_LARGE
23
+ import androidx.wear.protolayout.material3.button
24
+ import androidx.wear.protolayout.material3.buttonGroup
22
25
import androidx.wear.protolayout.material3.materialScope
23
26
import androidx.wear.protolayout.material3.primaryLayout
24
27
import androidx.wear.protolayout.material3.text
28
+ import androidx.wear.protolayout.modifiers.clickable
25
29
import androidx.wear.protolayout.types.layoutString
26
30
import androidx.wear.tiles.RequestBuilders
27
31
import androidx.wear.tiles.RequestBuilders.ResourcesRequest
28
32
import androidx.wear.tiles.TileBuilders.Tile
29
33
import androidx.wear.tiles.TileService
34
+ import androidx.wear.tiles.tooling.preview.Preview
35
+ import androidx.wear.tiles.tooling.preview.TilePreviewData
36
+ import androidx.wear.tiles.tooling.preview.TilePreviewHelper
37
+ import androidx.wear.tooling.preview.devices.WearDevices
30
38
import com.google.common.util.concurrent.Futures
31
39
32
40
private const val RESOURCES_VERSION = " 1"
@@ -53,8 +61,77 @@ class MyTileService : TileService() {
53
61
)
54
62
55
63
override fun onTileResourcesRequest (requestParams : ResourcesRequest ) =
64
+ Futures .immediateFuture(Resources .Builder ().setVersion(RESOURCES_VERSION ).build())
65
+ }
66
+
67
+ // [END android_wear_m3_tile_mytileservice]
68
+
69
+ class TileBreakpoints : TileService () {
70
+
71
+ override fun onTileRequest (requestParams : RequestBuilders .TileRequest ) =
56
72
Futures .immediateFuture(
57
- Resources .Builder ().setVersion(RESOURCES_VERSION ).build()
73
+ Tile .Builder ()
74
+ .setTileTimeline(
75
+ Timeline .fromLayoutElement(
76
+ // [START android_wear_tile_breakpoints]
77
+ materialScope(this , requestParams.deviceConfiguration) {
78
+ // [START_EXCLUDE]
79
+ val button1 =
80
+ button(
81
+ onClick = clickable(),
82
+ labelContent = { text(" button1" .layoutString) },
83
+ )
84
+ val button2 =
85
+ button(
86
+ onClick = clickable(),
87
+ labelContent = { text(" button2" .layoutString) },
88
+ )
89
+ val button3 =
90
+ button(
91
+ onClick = clickable(),
92
+ labelContent = { text(" button3" .layoutString) },
93
+ )
94
+ val button4 =
95
+ button(
96
+ onClick = clickable(),
97
+ labelContent = { text(" button4" .layoutString) },
98
+ )
99
+ val button5 =
100
+ button(
101
+ onClick = clickable(),
102
+ labelContent = { text(" button5" .layoutString) },
103
+ )
104
+ // [END_EXCLUDE]
105
+ val isLargeScreen = deviceConfiguration.screenWidthDp >= 225
106
+ primaryLayout(
107
+ mainSlot = {
108
+ buttonGroup {
109
+ buttonGroupItem { button1 }
110
+ buttonGroupItem { button2 }
111
+ buttonGroupItem { button3 }
112
+ if (isLargeScreen) {
113
+ buttonGroupItem { button4 }
114
+ buttonGroupItem { button5 }
115
+ }
116
+ }
117
+ }
118
+ )
119
+ }
120
+ // [END android_wear_tile_breakpoints]
121
+ )
122
+ )
123
+ .build()
58
124
)
59
125
}
60
- // [END android_wear_m3_tile_mytileservice]
126
+
127
+ // [START android_wear_tile_preview]
128
+ @Preview(device = WearDevices .LARGE_ROUND )
129
+ fun smallPreview (context : Context ) = TilePreviewData {
130
+ TilePreviewHelper .singleTimelineEntryTileBuilder(
131
+ materialScope(context, it.deviceConfiguration) {
132
+ primaryLayout(mainSlot = { text(" Hello, World" .layoutString) })
133
+ }
134
+ )
135
+ .build()
136
+ }
137
+ // [END android_wear_tile_preview]
0 commit comments