@@ -21,7 +21,12 @@ import android.content.Context
2121import androidx.annotation.RequiresPermission
2222import androidx.wear.protolayout.ColorBuilders.argb
2323import androidx.wear.protolayout.DimensionBuilders
24+ import androidx.wear.protolayout.DimensionBuilders.degrees
25+ import androidx.wear.protolayout.DimensionBuilders.dp
2426import 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
2530import androidx.wear.protolayout.ResourceBuilders.Resources
2631import androidx.wear.protolayout.TimelineBuilders
2732import androidx.wear.protolayout.TimelineBuilders.Timeline
@@ -30,6 +35,8 @@ import androidx.wear.protolayout.expression.DynamicBuilders
3035import androidx.wear.protolayout.expression.PlatformHealthSources
3136import androidx.wear.protolayout.material.Text
3237import androidx.wear.protolayout.material.Typography
38+ import androidx.wear.protolayout.material3.materialScope
39+ import androidx.wear.protolayout.material3.primaryLayout
3340import androidx.wear.tiles.RequestBuilders
3441import androidx.wear.tiles.RequestBuilders.ResourcesRequest
3542import androidx.wear.tiles.TileBuilders.Tile
@@ -200,3 +207,42 @@ class DynamicHeartRate : TileService() {
200207 )
201208 // [END android_wear_tile_dynamic_heart_rate]
202209}
210+
211+ class FeatureFallback : TileService () {
212+ override fun onTileRequest (requestParams : RequestBuilders .TileRequest ): ListenableFuture <Tile > {
213+
214+ // [BEGIN android_wear_tile_version_fallback]
215+ val rendererVersion = requestParams.deviceConfiguration.rendererSchemaVersion
216+
217+ val arcElement =
218+ if (
219+ rendererVersion.major > 1 ||
220+ (rendererVersion.major == 1 && rendererVersion.minor >= 500 )
221+ ) {
222+ // Use DashedArcLine if the renderer supports it …
223+ DashedArcLine .Builder () // Has @RequiresSchemaVersion(major = 1, minor = 500)
224+ .setLength(degrees(270f ))
225+ .setThickness(8f )
226+ .setLinePattern(
227+ LayoutElementBuilders .DashedLinePattern .Builder ()
228+ .setGapSize(8f )
229+ .setGapInterval(10f )
230+ .build()
231+ )
232+ .build()
233+ } else {
234+ // … otherwise use ArcLine.
235+ ArcLine .Builder ().setLength(degrees(270f )).setThickness(dp(8f )).build()
236+ }
237+ // [END android_wear_tile_version_fallback]
238+
239+ val layout =
240+ materialScope(this , requestParams.deviceConfiguration) {
241+ primaryLayout(mainSlot = { Arc .Builder ().addContent(arcElement).build() })
242+ }
243+
244+ return Futures .immediateFuture(
245+ Tile .Builder ().setTileTimeline(Timeline .fromLayoutElement(layout)).build()
246+ )
247+ }
248+ }
0 commit comments