Skip to content

Commit a75378c

Browse files
Add android_wear_tile_version_fallback (#614)
1 parent 7a69216 commit a75378c

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

wear/src/main/AndroidManifest.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,21 @@
181181
android:resource="@drawable/tile_preview" />
182182
</service>
183183

184+
<service
185+
android:name=".snippets.tile.FeatureFallback"
186+
android:label="@string/tile_label"
187+
android:description="@string/tile_description"
188+
android:icon="@mipmap/ic_launcher"
189+
android:exported="true"
190+
android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER">
191+
<intent-filter>
192+
<action android:name="androidx.wear.tiles.action.BIND_TILE_PROVIDER" />
193+
</intent-filter>
194+
195+
<meta-data android:name="androidx.wear.tiles.PREVIEW"
196+
android:resource="@drawable/tile_preview" />
197+
</service>
198+
184199
<activity
185200
android:name=".snippets.alwayson.AlwaysOnActivity"
186201
android:label="0 Stopwatch"

wear/src/main/java/com/example/wear/snippets/tile/Tile.kt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ import android.content.Context
2121
import androidx.annotation.RequiresPermission
2222
import androidx.wear.protolayout.ColorBuilders.argb
2323
import androidx.wear.protolayout.DimensionBuilders
24+
import androidx.wear.protolayout.DimensionBuilders.degrees
25+
import androidx.wear.protolayout.DimensionBuilders.dp
2426
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
2530
import androidx.wear.protolayout.ResourceBuilders.Resources
2631
import androidx.wear.protolayout.TimelineBuilders
2732
import androidx.wear.protolayout.TimelineBuilders.Timeline
@@ -30,6 +35,8 @@ import androidx.wear.protolayout.expression.DynamicBuilders
3035
import androidx.wear.protolayout.expression.PlatformHealthSources
3136
import androidx.wear.protolayout.material.Text
3237
import androidx.wear.protolayout.material.Typography
38+
import androidx.wear.protolayout.material3.materialScope
39+
import androidx.wear.protolayout.material3.primaryLayout
3340
import androidx.wear.tiles.RequestBuilders
3441
import androidx.wear.tiles.RequestBuilders.ResourcesRequest
3542
import androidx.wear.tiles.TileBuilders.Tile
@@ -200,3 +207,44 @@ 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+
// [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

Comments
 (0)