Skip to content

Commit 8af6f8e

Browse files
Add android_wear_tile_version_fallback
1 parent e4396f6 commit 8af6f8e

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-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: 46 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,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

Comments
 (0)