1616
1717package com.example.wear.snippets.m3.tile
1818
19+ import android.content.Context
1920import androidx.wear.protolayout.ResourceBuilders.Resources
2021import androidx.wear.protolayout.TimelineBuilders.Timeline
2122import androidx.wear.protolayout.material3.Typography.BODY_LARGE
23+ import androidx.wear.protolayout.material3.button
24+ import androidx.wear.protolayout.material3.buttonGroup
2225import androidx.wear.protolayout.material3.materialScope
2326import androidx.wear.protolayout.material3.primaryLayout
2427import androidx.wear.protolayout.material3.text
28+ import androidx.wear.protolayout.modifiers.clickable
2529import androidx.wear.protolayout.types.layoutString
2630import androidx.wear.tiles.RequestBuilders
2731import androidx.wear.tiles.RequestBuilders.ResourcesRequest
2832import androidx.wear.tiles.TileBuilders.Tile
2933import 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
3038import com.google.common.util.concurrent.Futures
3139
3240private const val RESOURCES_VERSION = " 1"
@@ -53,8 +61,77 @@ class MyTileService : TileService() {
5361 )
5462
5563 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 ) =
5672 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()
58124 )
59125}
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