@@ -21,7 +21,12 @@ import android.content.Context
21
21
import androidx.annotation.RequiresPermission
22
22
import androidx.wear.protolayout.ColorBuilders.argb
23
23
import androidx.wear.protolayout.DimensionBuilders
24
+ import androidx.wear.protolayout.DimensionBuilders.degrees
25
+ import androidx.wear.protolayout.DimensionBuilders.dp
24
26
import androidx.wear.protolayout.LayoutElementBuilders
27
+ import androidx.wear.protolayout.LayoutElementBuilders.Arc
28
+ import androidx.wear.protolayout.LayoutElementBuilders.ArcLine
29
+ import androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine
25
30
import androidx.wear.protolayout.ResourceBuilders.Resources
26
31
import androidx.wear.protolayout.TimelineBuilders
27
32
import androidx.wear.protolayout.TimelineBuilders.Timeline
@@ -30,6 +35,8 @@ import androidx.wear.protolayout.expression.DynamicBuilders
30
35
import androidx.wear.protolayout.expression.PlatformHealthSources
31
36
import androidx.wear.protolayout.material.Text
32
37
import androidx.wear.protolayout.material.Typography
38
+ import androidx.wear.protolayout.material3.materialScope
39
+ import androidx.wear.protolayout.material3.primaryLayout
33
40
import androidx.wear.tiles.RequestBuilders
34
41
import androidx.wear.tiles.RequestBuilders.ResourcesRequest
35
42
import androidx.wear.tiles.TileBuilders.Tile
@@ -200,3 +207,44 @@ class DynamicHeartRate : TileService() {
200
207
)
201
208
// [END android_wear_tile_dynamic_heart_rate]
202
209
}
210
+
211
+ class FeatureFallback : TileService () {
212
+ override fun onTileRequest (requestParams : RequestBuilders .TileRequest ): ListenableFuture <Tile > {
213
+
214
+ // [START android_wear_tile_version_fallback]
215
+ val rendererVersion = requestParams.deviceConfiguration.rendererSchemaVersion
216
+
217
+ val arcElement =
218
+ // DashedArcLine has the annotation @RequiresSchemaVersion(major = 1, minor = 500)
219
+ // and so is supported by renderer versions 1.500 and greater
220
+ if (
221
+ rendererVersion.major > 1 ||
222
+ (rendererVersion.major == 1 && rendererVersion.minor >= 500 )
223
+ ) {
224
+ // Use DashedArcLine if the renderer supports it …
225
+ DashedArcLine .Builder ()
226
+ .setLength(degrees(270f ))
227
+ .setThickness(8f )
228
+ .setLinePattern(
229
+ LayoutElementBuilders .DashedLinePattern .Builder ()
230
+ .setGapSize(8f )
231
+ .setGapInterval(10f )
232
+ .build()
233
+ )
234
+ .build()
235
+ } else {
236
+ // … otherwise use ArcLine.
237
+ ArcLine .Builder ().setLength(degrees(270f )).setThickness(dp(8f )).build()
238
+ }
239
+ // [END android_wear_tile_version_fallback]
240
+
241
+ val layout =
242
+ materialScope(this , requestParams.deviceConfiguration) {
243
+ primaryLayout(mainSlot = { Arc .Builder ().addContent(arcElement).build() })
244
+ }
245
+
246
+ return Futures .immediateFuture(
247
+ Tile .Builder ().setTileTimeline(Timeline .fromLayoutElement(layout)).build()
248
+ )
249
+ }
250
+ }
0 commit comments