Merge "Add overloads for protolayout types to TileRenderer" into androidx-main
diff --git a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt b/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
index 6ed80ec..00d0f71 100644
--- a/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
+++ b/glance/glance-wear-tiles-preview/src/androidMain/kotlin/androidx/glance/wear/tiles/preview/GlanceTileServiceViewAdapter.kt
@@ -87,6 +87,7 @@
.build()
val layout = tile.timeline?.timelineEntries?.get(0)?.layout
+ @Suppress("DEPRECATION")
if (layout != null) {
val renderer = TileRenderer(
context,
diff --git a/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt b/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
index 13e0b39..8f4be28 100644
--- a/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
+++ b/glance/glance-wear-tiles/src/androidAndroidTest/kotlin/androidx/glance/wear/tiles/ScreenshotTests.kt
@@ -399,6 +399,7 @@
CompositionResult(errorUiLayout(), ResourceBuilders.Resources.Builder())
}
+ @Suppress("DEPRECATION")
val renderer = TileRenderer(
context,
LayoutElementBuilders.Layout.Builder().setRoot(translatedComposition.layout).build(),
@@ -407,6 +408,7 @@
) {}
val frame = FrameLayout(getApplicationContext())
+ @Suppress("DEPRECATION")
val firstChild = renderer.inflate(frame)
requireNotNull(firstChild) {
diff --git a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
index 3fd63b3..ecab954 100644
--- a/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
+++ b/wear/tiles/tiles-material/src/androidTest/java/androidx/wear/tiles/material/testapp/GoldenTestActivity.java
@@ -33,11 +33,11 @@
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
-import androidx.wear.tiles.LayoutElementBuilders;
-import androidx.wear.tiles.LayoutElementBuilders.Layout;
-import androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId;
-import androidx.wear.tiles.ResourceBuilders.ImageResource;
-import androidx.wear.tiles.ResourceBuilders.Resources;
+import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.LayoutElementBuilders.Layout;
+import androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId;
+import androidx.wear.protolayout.ResourceBuilders.ImageResource;
+import androidx.wear.protolayout.ResourceBuilders.Resources;
import androidx.wear.tiles.material.R;
import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
import androidx.wear.tiles.renderer.TileRenderer;
@@ -62,7 +62,7 @@
}
LayoutElementBuilders.LayoutElement rootLayoutElement =
- LayoutElementBuilders.LayoutElement.fromLayoutElementProto(layoutElementProto);
+ LayoutElementBuilders.layoutElementFromProto(layoutElementProto);
Context appContext = getApplicationContext();
FrameLayout root = new FrameLayout(appContext);
@@ -75,9 +75,9 @@
Resources resources = generateResources();
TileRenderer renderer =
- new TileRenderer(appContext, layout, resources, mainExecutor, i -> {});
+ new TileRenderer(appContext, mainExecutor, i -> {});
- View firstChild = renderer.inflate(root);
+ View firstChild = renderer.inflate(layout, resources, root);
// Simulate what the thing outside the renderer should do. Center the contents.
LayoutParams layoutParams = (LayoutParams) firstChild.getLayoutParams();
diff --git a/wear/tiles/tiles-renderer/api/current.txt b/wear/tiles/tiles-renderer/api/current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/current.txt
+++ b/wear/tiles/tiles-renderer/api/current.txt
@@ -42,13 +42,15 @@
package androidx.wear.tiles.renderer {
public final class TileRenderer {
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- method public android.view.View? inflate(android.view.ViewGroup);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+ method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+ method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
}
- public static interface TileRenderer.LoadActionListener {
- method public void onClick(androidx.wear.tiles.StateBuilders.State);
+ @Deprecated public static interface TileRenderer.LoadActionListener {
+ method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
}
}
diff --git a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
+++ b/wear/tiles/tiles-renderer/api/public_plus_experimental_current.txt
@@ -42,13 +42,15 @@
package androidx.wear.tiles.renderer {
public final class TileRenderer {
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- method public android.view.View? inflate(android.view.ViewGroup);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+ method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+ method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
}
- public static interface TileRenderer.LoadActionListener {
- method public void onClick(androidx.wear.tiles.StateBuilders.State);
+ @Deprecated public static interface TileRenderer.LoadActionListener {
+ method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
}
}
diff --git a/wear/tiles/tiles-renderer/api/restricted_current.txt b/wear/tiles/tiles-renderer/api/restricted_current.txt
index a162ceb..670ef3a 100644
--- a/wear/tiles/tiles-renderer/api/restricted_current.txt
+++ b/wear/tiles/tiles-renderer/api/restricted_current.txt
@@ -42,13 +42,15 @@
package androidx.wear.tiles.renderer {
public final class TileRenderer {
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- ctor public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
- method public android.view.View? inflate(android.view.ViewGroup);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
+ ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
+ method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
+ method public android.view.View? inflate(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
}
- public static interface TileRenderer.LoadActionListener {
- method public void onClick(androidx.wear.tiles.StateBuilders.State);
+ @Deprecated public static interface TileRenderer.LoadActionListener {
+ method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
}
}
diff --git a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
index 8b6ef65..8d16cea 100644
--- a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
+++ b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
@@ -30,8 +30,8 @@
import androidx.test.filters.LargeTest;
import androidx.test.screenshot.AndroidXScreenshotTestRule;
import androidx.test.screenshot.matchers.MSSIMMatcher;
-import androidx.wear.tiles.LayoutElementBuilders;
-import androidx.wear.tiles.ResourceBuilders;
+import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.ResourceBuilders;
import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
import androidx.wear.protolayout.proto.ResourceProto.AndroidImageResourceByResId;
@@ -236,13 +236,12 @@
TileRenderer renderer =
new TileRenderer(
appContext,
- LayoutElementBuilders.Layout.fromProto(
- Layout.newBuilder().setRoot(rootElement).build()),
- ResourceBuilders.Resources.fromProto(generateResources()),
ContextCompat.getMainExecutor(getApplicationContext()),
i -> {});
- View firstChild = renderer.inflate(mainFrame);
+ View firstChild = renderer.inflate(LayoutElementBuilders.Layout.fromProto(
+ Layout.newBuilder().setRoot(rootElement).build()),
+ ResourceBuilders.Resources.fromProto(generateResources()), mainFrame);
if (firstChild == null) {
throw new RuntimeException("Failed to inflate " + expectedKey);
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
index f814499..525dfcf6 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/manager/TileUiClient.kt
@@ -31,10 +31,10 @@
import androidx.concurrent.futures.await
import androidx.core.content.ContextCompat
import androidx.wear.tiles.DeviceParametersBuilders
-import androidx.wear.tiles.LayoutElementBuilders
+import androidx.wear.protolayout.LayoutElementBuilders
+import androidx.wear.protolayout.ResourceBuilders
+import androidx.wear.protolayout.StateBuilders
import androidx.wear.tiles.RequestBuilders
-import androidx.wear.tiles.ResourceBuilders
-import androidx.wear.tiles.StateBuilders
import androidx.wear.tiles.TimelineBuilders
import androidx.wear.tiles.checkers.TimelineChecker
import androidx.wear.tiles.connection.DefaultTileClient
@@ -140,7 +140,7 @@
withContext(Dispatchers.Main) {
val tileRequest = RequestBuilders.TileRequest
.Builder()
- .setState(state)
+ .setState(androidx.wear.tiles.StateBuilders.State.fromProto(state.toProto()))
.setDeviceParameters(buildDeviceParameters())
.build()
@@ -155,7 +155,9 @@
.setDeviceParameters(buildDeviceParameters())
.build()
- tileResources = tilesConnection.requestResources(resourcesRequest).await()
+ tileResources = ResourceBuilders.Resources.fromProto(
+ tilesConnection.requestResources(resourcesRequest).await().toProto()
+ )
}
timelineManager?.apply {
@@ -189,17 +191,19 @@
}
}
- private fun updateContents(layout: LayoutElementBuilders.Layout) {
+ private fun updateContents(layout: androidx.wear.tiles.LayoutElementBuilders.Layout) {
parentView.removeAllViews()
val renderer = TileRenderer(
context,
- layout,
- tileResources!!,
ContextCompat.getMainExecutor(context),
{ state -> coroutineScope.launch { requestTile(state) } }
)
- renderer.inflate(parentView)?.apply {
+ renderer.inflate(
+ LayoutElementBuilders.Layout.fromProto(layout.toProto()),
+ tileResources!!,
+ parentView
+ )?.apply {
(layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
}
}
diff --git a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
index 0cc77dc..dec1ce9 100644
--- a/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
+++ b/wear/tiles/tiles-renderer/src/main/java/androidx/wear/tiles/renderer/TileRenderer.java
@@ -26,13 +26,12 @@
import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.wear.protolayout.LayoutElementBuilders;
+import androidx.wear.protolayout.ResourceBuilders;
+import androidx.wear.protolayout.StateBuilders;
import androidx.wear.protolayout.expression.pipeline.ObservableStateStore;
import androidx.wear.protolayout.proto.LayoutElementProto;
import androidx.wear.protolayout.proto.ResourceProto;
-import androidx.wear.protolayout.proto.StateProto;
import androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance;
-import androidx.wear.tiles.ResourceBuilders;
-import androidx.wear.tiles.StateBuilders;
import androidx.wear.tiles.TileService;
import com.google.common.collect.ImmutableMap;
@@ -41,6 +40,7 @@
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
/**
* Renderer for Wear Tiles.
@@ -51,7 +51,11 @@
/**
* Listener for clicks on Clickable objects that have an Action to (re)load the contents of a
* tile.
+ *
+ * @deprecated Use {@link Consumer<StateBuilders.State>} with {@link #TileRenderer(Context,
+ * Executor, Consumer)}.
*/
+ @Deprecated
public interface LoadActionListener {
/**
@@ -59,12 +63,12 @@
*
* @param nextState The state that the next tile should be in.
*/
- void onClick(@NonNull StateBuilders.State nextState);
+ void onClick(@NonNull androidx.wear.tiles.StateBuilders.State nextState);
}
@NonNull private final ProtoLayoutViewInstance mInstance;
- @NonNull private final LayoutElementProto.Layout mLayout;
- @NonNull private final ResourceProto.Resources mResources;
+ @Nullable private final LayoutElementProto.Layout mLayout;
+ @Nullable private final ResourceProto.Resources mResources;
@NonNull private final ListeningExecutorService mUiExecutor;
/**
@@ -73,8 +77,13 @@
* @param uiContext A {@link Context} suitable for interacting with the UI.
* @param layout The portion of the Tile to render.
* @param resources The resources for the Tile.
+ * @param loadActionExecutor Executor for {@code loadActionListener}.
* @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+ * @deprecated Use {@link #TileRenderer(Context, Executor, Consumer)} which accepts Layout and
+ * Resources in {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+ * ViewGroup)} method.
*/
+ @Deprecated
public TileRenderer(
@NonNull Context uiContext,
@NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
@@ -83,11 +92,10 @@
@NonNull LoadActionListener loadActionListener) {
this(
uiContext,
- layout,
- /* tilesTheme= */ 0,
- resources,
loadActionExecutor,
- loadActionListener);
+ toStateConsumer(loadActionListener),
+ layout.toProto(),
+ resources.toProto());
}
/**
@@ -98,8 +106,13 @@
* @param tilesTheme The theme to use for this Tile instance. This can be used to customise
* things like the default font family. Pass 0 to use the default theme.
* @param resources The resources for the Tile.
+ * @param loadActionExecutor Executor for {@code loadActionListener}.
* @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+ * @deprecated Use {@link #TileRenderer(Context, Executor, Consumer)} which accepts Layout and
+ * Resources in {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+ * ViewGroup)} method.
*/
+ @Deprecated
public TileRenderer(
@NonNull Context uiContext,
@NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout,
@@ -107,16 +120,51 @@
@NonNull androidx.wear.tiles.ResourceBuilders.Resources resources,
@NonNull Executor loadActionExecutor,
@NonNull LoadActionListener loadActionListener) {
- this.mLayout = fromTileLayout(layout);
- this.mResources = fromTileResources(resources);
+ // TODO(b/272527869): Enable setting theme.
+ this(
+ uiContext,
+ loadActionExecutor,
+ toStateConsumer(loadActionListener),
+ layout.toProto(),
+ resources.toProto());
+ }
+
+ /**
+ * @param uiContext A {@link Context} suitable for interacting with the UI.
+ * @param loadActionExecutor Executor for {@code loadActionListener}.
+ * @param loadActionListener Listener for clicks that will cause the contents to be reloaded.
+ */
+ public TileRenderer(
+ @NonNull Context uiContext,
+ @NonNull Executor loadActionExecutor,
+ @NonNull Consumer<StateBuilders.State> loadActionListener) {
+ this(
+ uiContext,
+ loadActionExecutor,
+ loadActionListener,
+ /* layout= */ null,
+ /* resources= */ null);
+ }
+
+ private TileRenderer(
+ @NonNull Context uiContext,
+ @NonNull Executor loadActionExecutor,
+ @NonNull Consumer<StateBuilders.State> loadActionListener,
+ @Nullable LayoutElementProto.Layout layout,
+ @Nullable ResourceProto.Resources resources) {
+ this.mLayout = layout;
+ this.mResources = resources;
this.mUiExecutor = MoreExecutors.newDirectExecutorService();
ProtoLayoutViewInstance.LoadActionListener instanceListener =
- nextState -> loadActionExecutor.execute(
- () -> loadActionListener.onClick(fromProtoLayoutState(nextState)));
+ nextState ->
+ loadActionExecutor.execute(
+ () ->
+ loadActionListener.accept(
+ StateBuilders.State.fromProto(nextState)));
ProtoLayoutViewInstance.Config.Builder config =
- new ProtoLayoutViewInstance.Config.Builder(uiContext, mUiExecutor, mUiExecutor,
- TileService.EXTRA_CLICKABLE_ID)
+ new ProtoLayoutViewInstance.Config.Builder(
+ uiContext, mUiExecutor, mUiExecutor, TileService.EXTRA_CLICKABLE_ID)
.setAnimationEnabled(true)
.setIsViewFullyVisible(true)
.setStateStore(new ObservableStateStore(ImmutableMap.of()))
@@ -124,35 +172,61 @@
this.mInstance = new ProtoLayoutViewInstance(config.build());
}
- @NonNull private ResourceProto.Resources fromTileResources(
- @NonNull androidx.wear.tiles.ResourceBuilders.Resources resources) {
- return checkNotNull(
- ResourceBuilders.Resources
- .fromByteArray(resources.toByteArray())).toProto();
- }
-
- @NonNull private LayoutElementProto.Layout fromTileLayout(
- @NonNull androidx.wear.tiles.LayoutElementBuilders.Layout layout) {
- return checkNotNull(
- LayoutElementBuilders.Layout
- .fromByteArray(layout.toByteArray())).toProto();
- }
-
- @NonNull StateBuilders.State fromProtoLayoutState(@NonNull StateProto.State state) {
- return StateBuilders.State.fromProto(state);
+ @NonNull
+ private static Consumer<StateBuilders.State> toStateConsumer(
+ @NonNull LoadActionListener loadActionListener) {
+ return nextState ->
+ loadActionListener.onClick(
+ androidx.wear.tiles.StateBuilders.State.fromProto(nextState.toProto()));
}
/**
* Inflates a Tile into {@code parent}.
*
* @param parent The view to attach the tile into.
- * @return The first child that was inflated. This may be null if the proto is empty the
+ * @return The first child that was inflated. This may be null if the Layout is empty or the
+ * top-level LayoutElement has no inner set, or the top-level LayoutElement contains an
+ * unsupported inner type.
+ * @deprecated Use {@link #inflate(LayoutElementBuilders.Layout, ResourceBuilders.Resources,
+ * ViewGroup)} instead. Note: This method only works with the deprecated constructors that
+ * accept Layout and Resources.
+ */
+ @Deprecated
+ @Nullable
+ public View inflate(@NonNull ViewGroup parent) {
+ String errorMessage =
+ "This method only works with the deprecated constructors that accept Layout and"
+ + " Resources.";
+ return inflateLayout(
+ checkNotNull(mLayout, errorMessage),
+ checkNotNull(mResources, errorMessage),
+ parent);
+ }
+
+ /**
+ * Inflates a Tile into {@code parent}.
+ *
+ * @param layout The portion of the Tile to render.
+ * @param resources The resources for the Tile.
+ * @param parent The view to attach the tile into.
+ * @return The first child that was inflated. This may be null if the Layout is empty or the
* top-level LayoutElement has no inner set, or the top-level LayoutElement contains an
* unsupported inner type.
*/
@Nullable
- public View inflate(@NonNull ViewGroup parent) {
- mInstance.renderAndAttach(mLayout, mResources, parent);
+ public View inflate(
+ @NonNull LayoutElementBuilders.Layout layout,
+ @NonNull ResourceBuilders.Resources resources,
+ @NonNull ViewGroup parent) {
+ return inflateLayout(layout.toProto(), resources.toProto(), parent);
+ }
+
+ @Nullable
+ private View inflateLayout(
+ @NonNull LayoutElementProto.Layout layout,
+ @NonNull ResourceProto.Resources resources,
+ @NonNull ViewGroup parent) {
+ mInstance.renderAndAttach(layout, resources, parent);
boolean finished;
try {
mUiExecutor.shutdown();
diff --git a/wear/tiles/tiles-tooling/build.gradle b/wear/tiles/tiles-tooling/build.gradle
index 90cf6f0..85252f5 100644
--- a/wear/tiles/tiles-tooling/build.gradle
+++ b/wear/tiles/tiles-tooling/build.gradle
@@ -8,6 +8,7 @@
}
dependencies {
+ implementation(project(":wear:protolayout:protolayout-proto"))
implementation(project(":wear:tiles:tiles"))
implementation(project(":wear:tiles:tiles-renderer"))
diff --git a/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt b/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
index 9ec2000..20202d9 100644
--- a/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
+++ b/wear/tiles/tiles-tooling/src/main/java/androidx/wear/tiles/tooling/TileServiceViewAdapter.kt
@@ -22,10 +22,10 @@
import android.view.Gravity
import android.widget.FrameLayout
import androidx.core.content.ContextCompat
+import androidx.wear.protolayout.LayoutElementBuilders
+import androidx.wear.protolayout.ResourceBuilders
import androidx.wear.tiles.DeviceParametersBuilders
-import androidx.wear.tiles.LayoutElementBuilders
import androidx.wear.tiles.RequestBuilders
-import androidx.wear.tiles.ResourceBuilders
import androidx.wear.tiles.StateBuilders
import androidx.wear.tiles.TileBuilders
import androidx.wear.tiles.TileService
@@ -118,18 +118,19 @@
.findMethod("onResourcesRequest", RequestBuilders.ResourcesRequest::class.java)
.apply { isAccessible = true }
val resources =
- (onResourcesRequestMethod.invoke(tileService, resourceRequest) as
- ListenableFuture<ResourceBuilders.Resources>).get(1, TimeUnit.SECONDS)
+ ResourceBuilders.Resources.fromProto(
+ (onResourcesRequestMethod.invoke(tileService, resourceRequest) as
+ ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources>)
+ .get(1, TimeUnit.SECONDS).toProto()
+ )
val layout = tile.timeline?.getCurrentLayout()
if (layout != null) {
val renderer = TileRenderer(
context,
- layout,
- resources,
ContextCompat.getMainExecutor(context)
) { }
- renderer.inflate(this)?.apply {
+ renderer.inflate(layout, resources, this)?.apply {
(layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER
}
}
@@ -141,7 +142,9 @@
return this?.let {
val cache = TilesTimelineCache(it)
cache.findTimelineEntryForTime(now) ?: cache.findClosestTimelineEntry(now)
- }?.layout
+ }?.layout?.let {
+ LayoutElementBuilders.Layout.fromProto(it.toProto())
+ }
}
/**