Merge "Bump window version to alpha03" into androidx-main
diff --git a/appactions/interaction/interaction-service-wear/api/current.txt b/appactions/interaction/interaction-service-wear/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/appactions/interaction/interaction-service-wear/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/appactions/interaction/interaction-service-wear/api/res-current.txt b/appactions/interaction/interaction-service-wear/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appactions/interaction/interaction-service-wear/api/res-current.txt
diff --git a/appactions/interaction/interaction-service-wear/api/restricted_current.txt b/appactions/interaction/interaction-service-wear/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/appactions/interaction/interaction-service-wear/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/appactions/interaction/interaction-service-wear/build.gradle b/appactions/interaction/interaction-service-wear/build.gradle
new file mode 100644
index 0000000..31e4e3b
--- /dev/null
+++ b/appactions/interaction/interaction-service-wear/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    api(libs.kotlinStdlib)
+    // Add dependencies here
+}
+
+android {
+    namespace "androidx.appactions.interaction.service.wear"
+}
+
+androidx {
+    name = "App Actions Interaction Service Wear"
+    type = LibraryType.PUBLISHED_LIBRARY
+    inceptionYear = "2023"
+    description = "Support App Actions Interactions with apps on Wear."
+}
diff --git a/appactions/interaction/interaction-service/build.gradle b/appactions/interaction/interaction-service/build.gradle
index ba0be12..53ae6c2 100644
--- a/appactions/interaction/interaction-service/build.gradle
+++ b/appactions/interaction/interaction-service/build.gradle
@@ -40,7 +40,6 @@
     implementation(project(":appactions:interaction:interaction-capabilities-core"))
     implementation("androidx.annotation:annotation:1.1.0")
     implementation("androidx.concurrent:concurrent-futures:1.1.0")
-    implementation("androidx.wear.tiles:tiles:1.1.0")
     implementation(libs.grpcAndroid)
     implementation(libs.grpcBinder)
     implementation(libs.grpcStub)
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
index 1f3559c..70279ad 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/TileLayoutInternal.kt
@@ -23,17 +23,12 @@
 /**
  * Holder for TileLayout response.
  */
-@Suppress("deprecation", "UnsafeOptInUsageError") // for backward compatibility
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-data class TileLayoutInternal(
-    val layout: androidx.wear.tiles.LayoutElementBuilders.Layout,
-    val resources: androidx.wear.tiles.ResourceBuilders.Resources
-) {
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class TileLayoutInternal(val byteArray: ByteArray) {
 
     fun toProto(): AppInteractionServiceProto.TileLayout {
         return AppInteractionServiceProto.TileLayout.newBuilder()
-            .setLayout(ByteString.copyFrom(layout.toByteArray()))
-            .setResources(ByteString.copyFrom(resources.toByteArray()))
+            .setLayout(ByteString.copyFrom(byteArray))
             .build()
     }
 }
diff --git a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
index bedc8de..89290d3 100644
--- a/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
+++ b/appactions/interaction/interaction-service/src/main/java/androidx/appactions/interaction/service/UiResponse.kt
@@ -15,18 +15,21 @@
  * limitations under the License.
  */
 package androidx.appactions.interaction.service
+
 import android.annotation.SuppressLint
 import android.util.SizeF
 import android.widget.RemoteViews
 import android.widget.RemoteViewsService.RemoteViewsFactory
 import androidx.annotation.IdRes
+import androidx.annotation.RestrictTo
 
 /**
  * A class representing the UI response being returned to the host. A `UiResponse` cannot be built
  * directly, it must be built from a [UiResponse] Builder.
  */
 // TODO(b/284056880): Open up UI related APIs.
-internal class UiResponse {
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class UiResponse {
 
     internal val remoteViewsInternal: RemoteViewsInternal?
     internal val tileLayoutInternal: TileLayoutInternal?
@@ -35,38 +38,12 @@
         this.remoteViewsInternal = remoteViewsInternal
         this.tileLayoutInternal = null
     }
-    internal constructor(tileLayout: TileLayoutInternal) {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    constructor(tileLayout: TileLayoutInternal) {
         this.remoteViewsInternal = null
         this.tileLayoutInternal = tileLayout
     }
-    /** Builder for TileLayouts, used in Wear OS. */
-    @Suppress("deprecation") // for backward compatibility
-    class TileLayoutBuilder {
-        private var layout: androidx.wear.tiles.LayoutElementBuilders.Layout? = null
-        private var resources: androidx.wear.tiles.ResourceBuilders.Resources? = null
 
-        /**
-         * Sets the [androidx.wear.tiles.LayoutElementBuilders.Layout] and the associated
-         * [androidx.wear.tiles.ResourceBuilders.Resources] to be displayed. [RemoteViews] should
-         * not be used together with [androidx.wear.tiles.LayoutElementBuilders.Layout] in the same
-         * session.
-         *
-         * @param layout the wear-tile [androidx.wear.tiles.LayoutElementBuilders.Layout] to be
-         * displayed.
-         * @param resources the resources associated with the layout.
-         */
-        @SuppressLint("MissingGetterMatchingBuilder")
-        fun setTileLayout(
-            layout: androidx.wear.tiles.LayoutElementBuilders.Layout,
-            resources: androidx.wear.tiles.ResourceBuilders.Resources
-        ): TileLayoutBuilder {
-            this.layout = layout
-            this.resources = resources
-            return this
-        }
-        /** Builds the UiResponse. */
-        fun build() = UiResponse(TileLayoutInternal(layout!!, resources!!))
-    }
     /** Builder for RemoteViews UI response. */
     class RemoteViewsUiBuilder {
         private var remoteViews: RemoteViews? = null
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
index 5f3826d..a6c6a05 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/AppInteractionServiceGrpcImplTest.kt
@@ -291,52 +291,6 @@
     }
 
     @Test
-    @Suppress("deprecation")
-    fun requestUi_respondWithTileLayout(): Unit = runBlocking {
-
-        val layout = androidx.wear.tiles.LayoutElementBuilders.Layout.Builder()
-            .setRoot(androidx.wear.tiles.LayoutElementBuilders.Row.Builder().build())
-            .build()
-        val resource = androidx.wear.tiles.ResourceBuilders.Resources.Builder()
-            .setVersion("123").build()
-        val tileLayout = UiResponse.TileLayoutBuilder().setTileLayout(layout, resource).build()
-
-        appInteractionService.registeredCapabilities = listOf(
-            createFakeCapability(tileLayout)
-        )
-        val server =
-            createInProcessServer(
-                AppInteractionServiceGrpcImpl(appInteractionService),
-                remoteViewsInterceptor
-            )
-        val channel = createInProcessChannel()
-        val stub = AppInteractionServiceGrpc.newStub(channel)
-        val futureStub = AppInteractionServiceGrpc.newFutureStub(channel)
-
-        assertStartupSession(stub)
-
-        // Send fulfillment request
-        val request =
-            Request.newBuilder()
-                .setSessionIdentifier(sessionId)
-                .setFulfillmentRequest(testFulfillmentRequestUi)
-                .build()
-
-        val responseFuture = futureStub.sendRequestFulfillment(request)
-        responseFuture.await()
-
-        val uiResponse = futureStub.requestUi(AppInteractionServiceProto.UiRequest.newBuilder()
-            .setSessionIdentifier(sessionId).build()).await()
-
-        assertThat(uiResponse.uiTypeCase).isEqualTo(AppInteractionServiceProto
-            .UiResponse.UiTypeCase.TILE_LAYOUT)
-        assertThat(uiResponse.tileLayout.layout).isNotEmpty()
-        assertThat(uiResponse.tileLayout.resources).isNotEmpty()
-
-        server.shutdownNow()
-    }
-
-    @Test
     fun requestUi_noUi_failWithStatusRuntimeException(): Unit = runBlocking {
 
         appInteractionService.registeredCapabilities = listOf(
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiResponseTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiResponseTest.kt
index 9639b01..66cdafd 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiResponseTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiResponseTest.kt
@@ -73,41 +73,4 @@
                 .build()
         }
     }
-
-    @Test
-    @Suppress("deprecation") // For backwards compatibility.
-    fun uiResponse_tileLayoutBuilder_success() {
-        val layout =
-            androidx.wear.tiles.LayoutElementBuilders.Layout.Builder()
-                .setRoot(
-                    androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
-                        .addContent(
-                            androidx.wear.tiles.LayoutElementBuilders.Column.Builder()
-                                .addContent(
-                                    androidx.wear.tiles.LayoutElementBuilders.Text.Builder()
-                                        .setText("LA8JE92")
-                                        .build()
-                                )
-                                .build()
-                        )
-                        .build()
-                )
-                .build()
-        val resources = androidx.wear.tiles.ResourceBuilders.Resources.Builder()
-            .setVersion("1234")
-            .build()
-        val uiResponse: UiResponse =
-            UiResponse.TileLayoutBuilder().setTileLayout(layout, resources).build()
-
-        assertThat(uiResponse.remoteViewsInternal).isNull()
-        assertThat(uiResponse.tileLayoutInternal?.layout).isNotNull()
-        assertThat(uiResponse.tileLayoutInternal?.resources).isNotNull()
-        assertThat(uiResponse.tileLayoutInternal?.toProto()?.layout).isNotEmpty()
-        assertThat(uiResponse.tileLayoutInternal?.toProto()?.resources).isNotEmpty()
-    }
-
-    @Test
-    fun uiResponse_tileLayoutBuilder_failure() {
-        assertThrows(NullPointerException::class.java) { UiResponse.TileLayoutBuilder().build() }
-    }
 }
diff --git a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
index 1f27a7a..dbdbcab 100644
--- a/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
+++ b/appactions/interaction/interaction-service/src/test/java/androidx/appactions/interaction/service/UiSessionsTest.kt
@@ -74,27 +74,6 @@
             .setRemoteViews(remoteViews, SizeF(10f, 15f))
             .addRemoteViewsFactory(remoteViewsFactoryId, FakeRemoteViewsFactory())
             .build()
-    private val layout =
-        androidx.wear.tiles.LayoutElementBuilders.Layout.Builder()
-            .setRoot(
-                androidx.wear.tiles.LayoutElementBuilders.Box.Builder()
-                    .addContent(
-                        androidx.wear.tiles.LayoutElementBuilders.Column.Builder()
-                            .addContent(
-                                androidx.wear.tiles.LayoutElementBuilders.Text.Builder()
-                                    .setText("LA8JE92")
-                                    .build(),
-                            )
-                            .build(),
-                    )
-                    .build(),
-            )
-            .build()
-    private val resources = androidx.wear.tiles.ResourceBuilders.Resources.Builder()
-        .setVersion("1234")
-        .build()
-    private val tileLayoutUiResponse: UiResponse =
-        UiResponse.TileLayoutBuilder().setTileLayout(layout, resources).build()
 
     @After
     fun cleanup() {
@@ -152,7 +131,6 @@
                 arguments: Arguments,
             ): ExecutionResult<Output> {
                 this.updateUi(remoteViewsUiResponse)
-                this.updateUi(tileLayoutUiResponse)
 
                 return ExecutionResult.Builder<Output>().build()
             }
@@ -173,7 +151,6 @@
         assertThat(uiCache?.hasUnreadUiResponse).isTrue()
         assertThat(uiCache?.cachedRemoteViewsInternal?.size).isEqualTo(SizeF(10f, 15f))
         assertThat(uiCache?.cachedRemoteViewsInternal?.remoteViews).isEqualTo(remoteViews)
-        assertThat(uiCache?.cachedTileLayoutInternal).isNotNull()
     }
 
     @Test
@@ -193,7 +170,7 @@
                 override suspend fun onExecute(
                     arguments: Arguments,
                 ): ExecutionResult<Output> {
-                    this.updateUi(tileLayoutUiResponse)
+                    this.updateUi(remoteViewsUiResponse)
                     return ExecutionResult.Builder<Output>().build()
                 }
             },
@@ -227,13 +204,11 @@
         assertThat(uiCache1).isNotNull()
         assertThat(uiCache1?.hasUnreadUiResponse).isTrue()
         assertThat(uiCache1?.cachedRemoteViewsInternal?.remoteViews).isEqualTo(remoteViews)
-        assertThat(uiCache1?.cachedTileLayoutInternal).isNull()
 
         val uiCache2 = UiSessions.getUiCacheOrNull(sessionId2)
         assertThat(uiCache2).isNotNull()
         assertThat(uiCache2?.hasUnreadUiResponse).isTrue()
-        assertThat(uiCache2?.cachedTileLayoutInternal).isNotNull()
-        assertThat(uiCache2?.cachedRemoteViewsInternal).isNull()
+        assertThat(uiCache2?.cachedRemoteViewsInternal?.remoteViews).isEqualTo(remoteViews)
 
         // Assert that UiCache2 response still marked unread.
         uiCache1?.resetUnreadUiResponse()
diff --git a/browser/browser/api/1.6.0-beta01.txt b/browser/browser/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..81804aa
--- /dev/null
+++ b/browser/browser/api/1.6.0-beta01.txt
@@ -0,0 +1,482 @@
+// Signature format: 4.0
+package androidx.browser.browseractions {
+
+  @Deprecated public class BrowserActionItem {
+    ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+    ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
+    method @Deprecated public android.app.PendingIntent getAction();
+    method @Deprecated public int getIconId();
+    method @Deprecated public String getTitle();
+  }
+
+  @Deprecated public class BrowserActionsIntent {
+    method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
+    method @Deprecated public android.content.Intent getIntent();
+    method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
+    method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
+    method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
+    method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
+    method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
+    field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+    field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+    field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+    field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+    field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+    field @Deprecated public static final int ITEM_COPY = 3; // 0x3
+    field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
+    field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+    field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+    field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+    field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
+    field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+    field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+    field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+    field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+    field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
+    field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
+    field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
+    field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
+    field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
+  }
+
+  @Deprecated public static final class BrowserActionsIntent.Builder {
+    ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(int);
+  }
+
+}
+
+package androidx.browser.customtabs {
+
+  public final class CustomTabColorSchemeParams {
+    field @ColorInt public final Integer? navigationBarColor;
+    field @ColorInt public final Integer? navigationBarDividerColor;
+    field @ColorInt public final Integer? secondaryToolbarColor;
+    field @ColorInt public final Integer? toolbarColor;
+  }
+
+  public static final class CustomTabColorSchemeParams.Builder {
+    ctor public CustomTabColorSchemeParams.Builder();
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
+  }
+
+  public class CustomTabsCallback {
+    ctor public CustomTabsCallback();
+    method public void extraCallback(String, android.os.Bundle?);
+    method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
+    method public void onActivityResized(@Dimension(unit=androidx.annotation.Dimension.PX) int, @Dimension(unit=androidx.annotation.Dimension.PX) int, android.os.Bundle);
+    method public void onMessageChannelReady(android.os.Bundle?);
+    method public void onNavigationEvent(int, android.os.Bundle?);
+    method public void onPostMessage(String, android.os.Bundle?);
+    method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
+    field public static final int NAVIGATION_ABORTED = 4; // 0x4
+    field public static final int NAVIGATION_FAILED = 3; // 0x3
+    field public static final int NAVIGATION_FINISHED = 2; // 0x2
+    field public static final int NAVIGATION_STARTED = 1; // 0x1
+    field public static final int TAB_HIDDEN = 6; // 0x6
+    field public static final int TAB_SHOWN = 5; // 0x5
+  }
+
+  public class CustomTabsClient {
+    method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+    method public static boolean bindCustomTabsServicePreservePriority(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+    method public static boolean connectAndInitialize(android.content.Context, String);
+    method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
+    method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
+    method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
+    method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
+    method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
+    method public boolean warmup(long);
+  }
+
+  public final class CustomTabsIntent {
+    method public static int getActivityResizeBehavior(android.content.Intent);
+    method public static int getCloseButtonPosition(android.content.Intent);
+    method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, int);
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public static int getInitialActivityHeightPx(android.content.Intent);
+    method public static int getMaxToolbarItems();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public static int getToolbarCornerRadiusDp(android.content.Intent);
+    method public void launchUrl(android.content.Context, android.net.Uri);
+    method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
+    method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+    field public static final int ACTIVITY_HEIGHT_ADJUSTABLE = 1; // 0x1
+    field public static final int ACTIVITY_HEIGHT_DEFAULT = 0; // 0x0
+    field public static final int ACTIVITY_HEIGHT_FIXED = 2; // 0x2
+    field public static final int CLOSE_BUTTON_POSITION_DEFAULT = 0; // 0x0
+    field public static final int CLOSE_BUTTON_POSITION_END = 2; // 0x2
+    field public static final int CLOSE_BUTTON_POSITION_START = 1; // 0x1
+    field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+    field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+    field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
+    field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+    field public static final String EXTRA_ACTIVITY_HEIGHT_RESIZE_BEHAVIOR = "androidx.browser.customtabs.extra.ACTIVITY_HEIGHT_RESIZE_BEHAVIOR";
+    field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+    field public static final String EXTRA_CLOSE_BUTTON_POSITION = "androidx.browser.customtabs.extra.CLOSE_BUTTON_POSITION";
+    field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
+    field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
+    field @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+    field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+    field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+    field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+    field public static final String EXTRA_INITIAL_ACTIVITY_HEIGHT_PX = "androidx.browser.customtabs.extra.INITIAL_ACTIVITY_HEIGHT_PX";
+    field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+    field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
+    field public static final String EXTRA_NAVIGATION_BAR_DIVIDER_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_DIVIDER_COLOR";
+    field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+    field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+    field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+    field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+    field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+    field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+    field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
+    field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+    field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+    field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+    field public static final String EXTRA_TOOLBAR_CORNER_RADIUS_DP = "androidx.browser.customtabs.extra.TOOLBAR_CORNER_RADIUS_DP";
+    field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+    field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+    field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
+    field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
+    field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+    field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+    field public static final int NO_TITLE = 0; // 0x0
+    field public static final int SHARE_STATE_DEFAULT = 0; // 0x0
+    field public static final int SHARE_STATE_OFF = 2; // 0x2
+    field public static final int SHARE_STATE_ON = 1; // 0x1
+    field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+    field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+    field public final android.content.Intent intent;
+    field public final android.os.Bundle? startAnimationBundle;
+  }
+
+  public static final class CustomTabsIntent.Builder {
+    ctor public CustomTabsIntent.Builder();
+    ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+    method public androidx.browser.customtabs.CustomTabsIntent build();
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarCornerRadiusDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setUrlBarHidingEnabled(boolean);
+  }
+
+  public abstract class CustomTabsService extends android.app.Service {
+    ctor public CustomTabsService();
+    method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
+    method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
+    method protected boolean isEngagementSignalsApiAvailable(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle);
+    method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+    method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
+    method public android.os.IBinder onBind(android.content.Intent?);
+    method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
+    method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
+    method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+    method protected boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.net.Uri?, android.os.Bundle);
+    method protected boolean setEngagementSignalsCallback(androidx.browser.customtabs.CustomTabsSessionToken, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle);
+    method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
+    method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+    method protected abstract boolean warmup(long);
+    field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+    field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
+    field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
+    field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
+    field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
+    field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
+    field public static final String KEY_SUCCESS = "androidx.browser.customtabs.SUCCESS";
+    field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
+    field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+    field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+    field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+    field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+    field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
+  }
+
+  @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Relation {
+  }
+
+  @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Result {
+  }
+
+  public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+    ctor public CustomTabsServiceConnection();
+    method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+  }
+
+  public final class CustomTabsSession {
+    method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+    method public boolean isEngagementSignalsApiAvailable(android.os.Bundle) throws android.os.RemoteException;
+    method public boolean mayLaunchUrl(android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+    method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
+    method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
+    method public boolean requestPostMessageChannel(android.net.Uri);
+    method public boolean requestPostMessageChannel(android.net.Uri, android.net.Uri?, android.os.Bundle);
+    method public boolean setActionButton(android.graphics.Bitmap, String);
+    method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
+    method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(java.util.concurrent.Executor, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
+    method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
+    method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
+    method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+  }
+
+  public class CustomTabsSessionToken {
+    method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+    method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
+    method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
+    method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
+  }
+
+  public interface EngagementSignalsCallback {
+    method public default void onGreatestScrollPercentageIncreased(@IntRange(from=1, to=100) int, android.os.Bundle);
+    method public default void onSessionEnded(boolean, android.os.Bundle);
+    method public default void onVerticalScrollEvent(boolean, android.os.Bundle);
+  }
+
+  public class PostMessageService extends android.app.Service {
+    ctor public PostMessageService();
+    method public android.os.IBinder onBind(android.content.Intent?);
+  }
+
+  public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+    ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
+    method public boolean bindSessionToPostMessageService(android.content.Context, String);
+    method public final boolean notifyMessageChannelReady(android.os.Bundle?);
+    method public void onPostMessageServiceConnected();
+    method public void onPostMessageServiceDisconnected();
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public final void onServiceDisconnected(android.content.ComponentName);
+    method public final boolean postMessage(String, android.os.Bundle?);
+    method public void unbindFromContext(android.content.Context);
+  }
+
+  public class TrustedWebUtils {
+    method public static boolean areSplashScreensSupported(android.content.Context, String, String);
+    method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
+    method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
+    field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+  }
+
+}
+
+package androidx.browser.trusted {
+
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
+  public final class Token {
+    method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
+    method public static androidx.browser.trusted.Token deserialize(byte[]);
+    method public boolean matches(String, android.content.pm.PackageManager);
+    method public byte[] serialize();
+  }
+
+  public interface TokenStore {
+    method @BinderThread public androidx.browser.trusted.Token? load();
+    method @WorkerThread public void store(androidx.browser.trusted.Token?);
+  }
+
+  public abstract class TrustedWebActivityCallback {
+    ctor public TrustedWebActivityCallback();
+    method public abstract void onExtraCallback(String, android.os.Bundle?);
+  }
+
+  public class TrustedWebActivityCallbackRemote {
+    method public void runExtraCallback(String, android.os.Bundle) throws android.os.RemoteException;
+  }
+
+  public interface TrustedWebActivityDisplayMode {
+    method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
+  }
+
+  public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+    ctor public TrustedWebActivityDisplayMode.DefaultMode();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+    ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
+    method public boolean isSticky();
+    method public int layoutInDisplayCutoutMode();
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
+    field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
+  }
+
+  public final class TrustedWebActivityIntent {
+    method public android.content.Intent getIntent();
+    method public void launchTrustedWebActivity(android.content.Context);
+  }
+
+  public class TrustedWebActivityIntentBuilder {
+    ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
+    method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
+    method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
+    method public android.net.Uri getUri();
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
+    field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
+    field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
+    field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
+    field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
+    field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
+  }
+
+  public abstract class TrustedWebActivityService extends android.app.Service {
+    ctor public TrustedWebActivityService();
+    method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
+    method @BinderThread public boolean onAreNotificationsEnabled(String);
+    method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
+    method @BinderThread public void onCancelNotification(String, int);
+    method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
+    method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
+    method @BinderThread public int onGetSmallIconId();
+    method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+    method @MainThread public final boolean onUnbind(android.content.Intent?);
+    field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
+    field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
+    field public static final String KEY_SUCCESS = "androidx.browser.trusted.SUCCESS";
+    field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
+    field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
+  }
+
+  public final class TrustedWebActivityServiceConnection {
+    method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
+    method public void cancel(String, int) throws android.os.RemoteException;
+    method public android.content.ComponentName getComponentName();
+    method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
+    method public int getSmallIconId() throws android.os.RemoteException;
+    method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
+    method public android.os.Bundle? sendExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallback?) throws android.os.RemoteException;
+  }
+
+  public final class TrustedWebActivityServiceConnectionPool {
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
+    method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
+    method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
+  }
+
+}
+
+package androidx.browser.trusted.sharing {
+
+  public final class ShareData {
+    ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
+    method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+    field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+    field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
+    field public final String? text;
+    field public final String? title;
+    field public final java.util.List<android.net.Uri!>? uris;
+  }
+
+  public final class ShareTarget {
+    ctor public ShareTarget(String, String?, String?, androidx.browser.trusted.sharing.ShareTarget.Params);
+    method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
+    field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
+    field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
+    field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
+    field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
+    field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
+    field public static final String METHOD_GET = "GET";
+    field public static final String METHOD_POST = "POST";
+    field public final String action;
+    field public final String? encodingType;
+    field public final String? method;
+    field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
+  }
+
+  public static final class ShareTarget.FileFormField {
+    ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
+    field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
+    field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
+    field public final java.util.List<java.lang.String!> acceptedTypes;
+    field public final String name;
+  }
+
+  public static class ShareTarget.Params {
+    ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
+    field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
+    field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+    field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+    field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
+    field public final String? text;
+    field public final String? title;
+  }
+
+}
+
+package androidx.browser.trusted.splashscreens {
+
+  public final class SplashScreenParamKey {
+    field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
+    field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
+    field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
+    field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
+    field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
+  }
+
+  public final class SplashScreenVersion {
+    field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
+  }
+
+}
+
diff --git a/browser/browser/api/res-1.6.0-beta01.txt b/browser/browser/api/res-1.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/browser/browser/api/res-1.6.0-beta01.txt
diff --git a/browser/browser/api/restricted_1.6.0-beta01.txt b/browser/browser/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..30e1d8e
--- /dev/null
+++ b/browser/browser/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,493 @@
+// Signature format: 4.0
+package androidx.browser.browseractions {
+
+  @Deprecated public class BrowserActionItem {
+    ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent);
+    ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public BrowserActionItem(String, android.app.PendingIntent, android.net.Uri);
+    ctor @Deprecated public BrowserActionItem(String, android.app.PendingIntent, @DrawableRes int);
+    method @Deprecated public android.app.PendingIntent getAction();
+    method @Deprecated public int getIconId();
+    method @Deprecated public String getTitle();
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class BrowserActionsFallbackMenuView extends android.widget.LinearLayout {
+    ctor @Deprecated public BrowserActionsFallbackMenuView(android.content.Context, android.util.AttributeSet);
+  }
+
+  @Deprecated public class BrowserActionsIntent {
+    method @Deprecated public static String? getCreatorPackageName(android.content.Intent);
+    method @Deprecated public android.content.Intent getIntent();
+    method @Deprecated public static String? getUntrustedCreatorPackageName(android.content.Intent);
+    method @Deprecated public static void launchIntent(android.content.Context, android.content.Intent);
+    method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri);
+    method @Deprecated public static void openBrowserAction(android.content.Context, android.net.Uri, int, java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>, android.app.PendingIntent);
+    method @Deprecated public static java.util.List<androidx.browser.browseractions.BrowserActionItem!> parseBrowserActionItems(java.util.ArrayList<android.os.Bundle!>);
+    field @Deprecated public static final String ACTION_BROWSER_ACTIONS_OPEN = "androidx.browser.browseractions.browser_action_open";
+    field @Deprecated public static final String EXTRA_APP_ID = "androidx.browser.browseractions.APP_ID";
+    field @Deprecated public static final String EXTRA_MENU_ITEMS = "androidx.browser.browseractions.extra.MENU_ITEMS";
+    field @Deprecated public static final String EXTRA_SELECTED_ACTION_PENDING_INTENT = "androidx.browser.browseractions.extra.SELECTED_ACTION_PENDING_INTENT";
+    field @Deprecated public static final String EXTRA_TYPE = "androidx.browser.browseractions.extra.TYPE";
+    field @Deprecated public static final int ITEM_COPY = 3; // 0x3
+    field @Deprecated public static final int ITEM_DOWNLOAD = 2; // 0x2
+    field @Deprecated public static final int ITEM_INVALID_ITEM = -1; // 0xffffffff
+    field @Deprecated public static final int ITEM_OPEN_IN_INCOGNITO = 1; // 0x1
+    field @Deprecated public static final int ITEM_OPEN_IN_NEW_TAB = 0; // 0x0
+    field @Deprecated public static final int ITEM_SHARE = 4; // 0x4
+    field @Deprecated public static final String KEY_ACTION = "androidx.browser.browseractions.ACTION";
+    field @Deprecated public static final String KEY_ICON_ID = "androidx.browser.browseractions.ICON_ID";
+    field @Deprecated public static final String KEY_TITLE = "androidx.browser.browseractions.TITLE";
+    field @Deprecated public static final int MAX_CUSTOM_ITEMS = 5; // 0x5
+    field @Deprecated public static final int URL_TYPE_AUDIO = 3; // 0x3
+    field @Deprecated public static final int URL_TYPE_FILE = 4; // 0x4
+    field @Deprecated public static final int URL_TYPE_IMAGE = 1; // 0x1
+    field @Deprecated public static final int URL_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int URL_TYPE_PLUGIN = 5; // 0x5
+    field @Deprecated public static final int URL_TYPE_VIDEO = 2; // 0x2
+  }
+
+  @Deprecated @IntDef({androidx.browser.browseractions.BrowserActionsIntent.ITEM_INVALID_ITEM, androidx.browser.browseractions.BrowserActionsIntent.ITEM_OPEN_IN_NEW_TAB, androidx.browser.browseractions.BrowserActionsIntent.ITEM_OPEN_IN_INCOGNITO, androidx.browser.browseractions.BrowserActionsIntent.ITEM_DOWNLOAD, androidx.browser.browseractions.BrowserActionsIntent.ITEM_COPY, androidx.browser.browseractions.BrowserActionsIntent.ITEM_SHARE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface BrowserActionsIntent.BrowserActionsItemId {
+  }
+
+  @Deprecated @IntDef({androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_NONE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_IMAGE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_VIDEO, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_AUDIO, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_FILE, androidx.browser.browseractions.BrowserActionsIntent.URL_TYPE_PLUGIN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface BrowserActionsIntent.BrowserActionsUrlType {
+  }
+
+  @Deprecated public static final class BrowserActionsIntent.Builder {
+    ctor @Deprecated public BrowserActionsIntent.Builder(android.content.Context, android.net.Uri);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent build();
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(androidx.browser.browseractions.BrowserActionItem!...);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setCustomItems(java.util.ArrayList<androidx.browser.browseractions.BrowserActionItem!>);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setOnItemSelectedAction(android.app.PendingIntent);
+    method @Deprecated public androidx.browser.browseractions.BrowserActionsIntent.Builder setUrlType(@androidx.browser.browseractions.BrowserActionsIntent.BrowserActionsUrlType int);
+  }
+
+}
+
+package androidx.browser.customtabs {
+
+  public final class CustomTabColorSchemeParams {
+    field @ColorInt public final Integer? navigationBarColor;
+    field @ColorInt public final Integer? navigationBarDividerColor;
+    field @ColorInt public final Integer? secondaryToolbarColor;
+    field @ColorInt public final Integer? toolbarColor;
+  }
+
+  public static final class CustomTabColorSchemeParams.Builder {
+    ctor public CustomTabColorSchemeParams.Builder();
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams build();
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setSecondaryToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabColorSchemeParams.Builder setToolbarColor(@ColorInt int);
+  }
+
+  public class CustomTabsCallback {
+    ctor public CustomTabsCallback();
+    method public void extraCallback(String, android.os.Bundle?);
+    method public android.os.Bundle? extraCallbackWithResult(String, android.os.Bundle?);
+    method public void onActivityResized(@Dimension(unit=androidx.annotation.Dimension.PX) int, @Dimension(unit=androidx.annotation.Dimension.PX) int, android.os.Bundle);
+    method public void onMessageChannelReady(android.os.Bundle?);
+    method public void onNavigationEvent(int, android.os.Bundle?);
+    method public void onPostMessage(String, android.os.Bundle?);
+    method public void onRelationshipValidationResult(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, boolean, android.os.Bundle?);
+    field public static final int NAVIGATION_ABORTED = 4; // 0x4
+    field public static final int NAVIGATION_FAILED = 3; // 0x3
+    field public static final int NAVIGATION_FINISHED = 2; // 0x2
+    field public static final int NAVIGATION_STARTED = 1; // 0x1
+    field public static final int TAB_HIDDEN = 6; // 0x6
+    field public static final int TAB_SHOWN = 5; // 0x5
+  }
+
+  public class CustomTabsClient {
+    method public static boolean bindCustomTabsService(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+    method public static boolean bindCustomTabsServicePreservePriority(android.content.Context, String?, androidx.browser.customtabs.CustomTabsServiceConnection);
+    method public static boolean connectAndInitialize(android.content.Context, String);
+    method public android.os.Bundle? extraCommand(String, android.os.Bundle?);
+    method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?);
+    method public static String? getPackageName(android.content.Context, java.util.List<java.lang.String!>?, boolean);
+    method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?);
+    method public androidx.browser.customtabs.CustomTabsSession? newSession(androidx.browser.customtabs.CustomTabsCallback?, int);
+    method public boolean warmup(long);
+  }
+
+  public final class CustomTabsIntent {
+    method public static int getActivityResizeBehavior(android.content.Intent);
+    method public static int getCloseButtonPosition(android.content.Intent);
+    method public static androidx.browser.customtabs.CustomTabColorSchemeParams getColorSchemeParams(android.content.Intent, int);
+    method @Dimension(unit=androidx.annotation.Dimension.PX) public static int getInitialActivityHeightPx(android.content.Intent);
+    method public static int getMaxToolbarItems();
+    method @Dimension(unit=androidx.annotation.Dimension.DP) public static int getToolbarCornerRadiusDp(android.content.Intent);
+    method public void launchUrl(android.content.Context, android.net.Uri);
+    method public static android.content.Intent setAlwaysUseBrowserUI(android.content.Intent?);
+    method public static boolean shouldAlwaysUseBrowserUI(android.content.Intent);
+    field public static final int ACTIVITY_HEIGHT_ADJUSTABLE = 1; // 0x1
+    field public static final int ACTIVITY_HEIGHT_DEFAULT = 0; // 0x0
+    field public static final int ACTIVITY_HEIGHT_FIXED = 2; // 0x2
+    field public static final int CLOSE_BUTTON_POSITION_DEFAULT = 0; // 0x0
+    field public static final int CLOSE_BUTTON_POSITION_END = 2; // 0x2
+    field public static final int CLOSE_BUTTON_POSITION_START = 1; // 0x1
+    field public static final int COLOR_SCHEME_DARK = 2; // 0x2
+    field public static final int COLOR_SCHEME_LIGHT = 1; // 0x1
+    field public static final int COLOR_SCHEME_SYSTEM = 0; // 0x0
+    field public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
+    field public static final String EXTRA_ACTIVITY_HEIGHT_RESIZE_BEHAVIOR = "androidx.browser.customtabs.extra.ACTIVITY_HEIGHT_RESIZE_BEHAVIOR";
+    field public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
+    field public static final String EXTRA_CLOSE_BUTTON_POSITION = "androidx.browser.customtabs.extra.CLOSE_BUTTON_POSITION";
+    field public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME";
+    field public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS";
+    field @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
+    field public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
+    field public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
+    field public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
+    field public static final String EXTRA_INITIAL_ACTIVITY_HEIGHT_PX = "androidx.browser.customtabs.extra.INITIAL_ACTIVITY_HEIGHT_PX";
+    field public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
+    field public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR";
+    field public static final String EXTRA_NAVIGATION_BAR_DIVIDER_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_DIVIDER_COLOR";
+    field public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS";
+    field public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID";
+    field public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT";
+    field public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS";
+    field public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
+    field public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
+    field public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE";
+    field public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
+    field public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
+    field public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
+    field public static final String EXTRA_TOOLBAR_CORNER_RADIUS_DP = "androidx.browser.customtabs.extra.TOOLBAR_CORNER_RADIUS_DP";
+    field public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
+    field public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
+    field public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
+    field public static final String KEY_ID = "android.support.customtabs.customaction.ID";
+    field public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
+    field public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
+    field public static final int NO_TITLE = 0; // 0x0
+    field public static final int SHARE_STATE_DEFAULT = 0; // 0x0
+    field public static final int SHARE_STATE_OFF = 2; // 0x2
+    field public static final int SHARE_STATE_ON = 1; // 0x1
+    field public static final int SHOW_PAGE_TITLE = 1; // 0x1
+    field public static final int TOOLBAR_ACTION_BUTTON_ID = 0; // 0x0
+    field public final android.content.Intent intent;
+    field public final android.os.Bundle? startAnimationBundle;
+  }
+
+  public static final class CustomTabsIntent.Builder {
+    ctor public CustomTabsIntent.Builder();
+    ctor public CustomTabsIntent.Builder(androidx.browser.customtabs.CustomTabsSession?);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addDefaultShareMenuItem();
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder addMenuItem(String, android.app.PendingIntent);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder addToolbarItem(int, android.graphics.Bitmap, String, android.app.PendingIntent) throws java.lang.IllegalStateException;
+    method public androidx.browser.customtabs.CustomTabsIntent build();
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder enableUrlBarHiding();
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setActionButton(android.graphics.Bitmap, String, android.app.PendingIntent, boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonIcon(android.graphics.Bitmap);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setCloseButtonPosition(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorScheme(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setDefaultShareMenuItemEnabled(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setExitAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInitialActivityHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int, int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setInstantAppsEnabled(boolean);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarColor(@ColorInt int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setNavigationBarDividerColor(@ColorInt int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSecondaryToolbarViews(android.widget.RemoteViews, int[]?, android.app.PendingIntent?);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setSession(androidx.browser.customtabs.CustomTabsSession);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShareState(int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setShowTitle(boolean);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setStartAnimations(android.content.Context, @AnimRes int, @AnimRes int);
+    method @Deprecated public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarColor(@ColorInt int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setToolbarCornerRadiusDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
+    method public androidx.browser.customtabs.CustomTabsIntent.Builder setUrlBarHidingEnabled(boolean);
+  }
+
+  public abstract class CustomTabsService extends android.app.Service {
+    ctor public CustomTabsService();
+    method protected boolean cleanUpSession(androidx.browser.customtabs.CustomTabsSessionToken);
+    method protected abstract android.os.Bundle? extraCommand(String, android.os.Bundle?);
+    method protected boolean isEngagementSignalsApiAvailable(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle);
+    method protected abstract boolean mayLaunchUrl(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+    method protected abstract boolean newSession(androidx.browser.customtabs.CustomTabsSessionToken);
+    method public android.os.IBinder onBind(android.content.Intent?);
+    method @androidx.browser.customtabs.CustomTabsService.Result protected abstract int postMessage(androidx.browser.customtabs.CustomTabsSessionToken, String, android.os.Bundle?);
+    method protected abstract boolean receiveFile(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, int, android.os.Bundle?);
+    method protected abstract boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri);
+    method protected boolean requestPostMessageChannel(androidx.browser.customtabs.CustomTabsSessionToken, android.net.Uri, android.net.Uri?, android.os.Bundle);
+    method protected boolean setEngagementSignalsCallback(androidx.browser.customtabs.CustomTabsSessionToken, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle);
+    method protected abstract boolean updateVisuals(androidx.browser.customtabs.CustomTabsSessionToken, android.os.Bundle?);
+    method protected abstract boolean validateRelationship(androidx.browser.customtabs.CustomTabsSessionToken, @androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+    method protected abstract boolean warmup(long);
+    field public static final String ACTION_CUSTOM_TABS_CONNECTION = "android.support.customtabs.action.CustomTabsService";
+    field public static final String CATEGORY_COLOR_SCHEME_CUSTOMIZATION = "androidx.browser.customtabs.category.ColorSchemeCustomization";
+    field public static final String CATEGORY_NAVBAR_COLOR_CUSTOMIZATION = "androidx.browser.customtabs.category.NavBarColorCustomization";
+    field public static final String CATEGORY_TRUSTED_WEB_ACTIVITY_IMMERSIVE_MODE = "androidx.browser.trusted.category.ImmersiveMode";
+    field public static final String CATEGORY_WEB_SHARE_TARGET_V2 = "androidx.browser.trusted.category.WebShareTargetV2";
+    field public static final int FILE_PURPOSE_TRUSTED_WEB_ACTIVITY_SPLASH_IMAGE = 1; // 0x1
+    field public static final String KEY_SUCCESS = "androidx.browser.customtabs.SUCCESS";
+    field public static final String KEY_URL = "android.support.customtabs.otherurls.URL";
+    field public static final int RELATION_HANDLE_ALL_URLS = 2; // 0x2
+    field public static final int RELATION_USE_AS_ORIGIN = 1; // 0x1
+    field public static final int RESULT_FAILURE_DISALLOWED = -1; // 0xffffffff
+    field public static final int RESULT_FAILURE_MESSAGING_ERROR = -3; // 0xfffffffd
+    field public static final int RESULT_FAILURE_REMOTE_ERROR = -2; // 0xfffffffe
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final String TRUSTED_WEB_ACTIVITY_CATEGORY = "androidx.browser.trusted.category.TrustedWebActivities";
+  }
+
+  @IntDef({androidx.browser.customtabs.CustomTabsService.RELATION_USE_AS_ORIGIN, androidx.browser.customtabs.CustomTabsService.RELATION_HANDLE_ALL_URLS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Relation {
+  }
+
+  @IntDef({androidx.browser.customtabs.CustomTabsService.RESULT_SUCCESS, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_DISALLOWED, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_REMOTE_ERROR, androidx.browser.customtabs.CustomTabsService.RESULT_FAILURE_MESSAGING_ERROR}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CustomTabsService.Result {
+  }
+
+  public abstract class CustomTabsServiceConnection implements android.content.ServiceConnection {
+    ctor public CustomTabsServiceConnection();
+    method public abstract void onCustomTabsServiceConnected(android.content.ComponentName, androidx.browser.customtabs.CustomTabsClient);
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+  }
+
+  public final class CustomTabsSession {
+    method @VisibleForTesting public static androidx.browser.customtabs.CustomTabsSession createMockSessionForTesting(android.content.ComponentName);
+    method public boolean isEngagementSignalsApiAvailable(android.os.Bundle) throws android.os.RemoteException;
+    method public boolean mayLaunchUrl(android.net.Uri?, android.os.Bundle?, java.util.List<android.os.Bundle!>?);
+    method @androidx.browser.customtabs.CustomTabsService.Result public int postMessage(String, android.os.Bundle?);
+    method public boolean receiveFile(android.net.Uri, int, android.os.Bundle?);
+    method public boolean requestPostMessageChannel(android.net.Uri);
+    method public boolean requestPostMessageChannel(android.net.Uri, android.net.Uri?, android.os.Bundle);
+    method public boolean setActionButton(android.graphics.Bitmap, String);
+    method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
+    method @RequiresFeature(name=androidx.browser.customtabs.CustomTabsFeatures.ENGAGEMENT_SIGNALS, enforcement="androidx.browser.customtabs.CustomTabsSession#isEngagementSignalsApiAvailable") public boolean setEngagementSignalsCallback(java.util.concurrent.Executor, androidx.browser.customtabs.EngagementSignalsCallback, android.os.Bundle) throws android.os.RemoteException;
+    method public boolean setSecondaryToolbarViews(android.widget.RemoteViews?, int[]?, android.app.PendingIntent?);
+    method @Deprecated public boolean setToolbarItem(int, android.graphics.Bitmap, String);
+    method public boolean validateRelationship(@androidx.browser.customtabs.CustomTabsService.Relation int, android.net.Uri, android.os.Bundle?);
+  }
+
+  public class CustomTabsSessionToken {
+    method public static androidx.browser.customtabs.CustomTabsSessionToken createMockSessionTokenForTesting();
+    method public androidx.browser.customtabs.CustomTabsCallback? getCallback();
+    method public static androidx.browser.customtabs.CustomTabsSessionToken? getSessionTokenFromIntent(android.content.Intent);
+    method public boolean isAssociatedWith(androidx.browser.customtabs.CustomTabsSession);
+  }
+
+  public interface EngagementSignalsCallback {
+    method public default void onGreatestScrollPercentageIncreased(@IntRange(from=1, to=100) int, android.os.Bundle);
+    method public default void onSessionEnded(boolean, android.os.Bundle);
+    method public default void onVerticalScrollEvent(boolean, android.os.Bundle);
+  }
+
+  public class PostMessageService extends android.app.Service {
+    ctor public PostMessageService();
+    method public android.os.IBinder onBind(android.content.Intent?);
+  }
+
+  public abstract class PostMessageServiceConnection implements android.content.ServiceConnection {
+    ctor public PostMessageServiceConnection(androidx.browser.customtabs.CustomTabsSessionToken);
+    method public boolean bindSessionToPostMessageService(android.content.Context, String);
+    method public final boolean notifyMessageChannelReady(android.os.Bundle?);
+    method public void onPostMessageServiceConnected();
+    method public void onPostMessageServiceDisconnected();
+    method public final void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public final void onServiceDisconnected(android.content.ComponentName);
+    method public final boolean postMessage(String, android.os.Bundle?);
+    method public void unbindFromContext(android.content.Context);
+  }
+
+  public class TrustedWebUtils {
+    method public static boolean areSplashScreensSupported(android.content.Context, String, String);
+    method @Deprecated public static void launchAsTrustedWebActivity(android.content.Context, androidx.browser.customtabs.CustomTabsIntent, android.net.Uri);
+    method @WorkerThread public static boolean transferSplashImage(android.content.Context, java.io.File, String, String, androidx.browser.customtabs.CustomTabsSession);
+    field public static final String EXTRA_LAUNCH_AS_TRUSTED_WEB_ACTIVITY = "android.support.customtabs.extra.LAUNCH_AS_TRUSTED_WEB_ACTIVITY";
+  }
+
+}
+
+package androidx.browser.trusted {
+
+  public final class ScreenOrientation {
+    field public static final int ANY = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int LANDSCAPE = 6; // 0x6
+    field public static final int LANDSCAPE_PRIMARY = 3; // 0x3
+    field public static final int LANDSCAPE_SECONDARY = 4; // 0x4
+    field public static final int NATURAL = 8; // 0x8
+    field public static final int PORTRAIT = 7; // 0x7
+    field public static final int PORTRAIT_PRIMARY = 1; // 0x1
+    field public static final int PORTRAIT_SECONDARY = 2; // 0x2
+  }
+
+  public final class Token {
+    method public static androidx.browser.trusted.Token? create(String, android.content.pm.PackageManager);
+    method public static androidx.browser.trusted.Token deserialize(byte[]);
+    method public boolean matches(String, android.content.pm.PackageManager);
+    method public byte[] serialize();
+  }
+
+  public interface TokenStore {
+    method @BinderThread public androidx.browser.trusted.Token? load();
+    method @WorkerThread public void store(androidx.browser.trusted.Token?);
+  }
+
+  public abstract class TrustedWebActivityCallback {
+    ctor public TrustedWebActivityCallback();
+    method public abstract void onExtraCallback(String, android.os.Bundle?);
+  }
+
+  public class TrustedWebActivityCallbackRemote {
+    method public void runExtraCallback(String, android.os.Bundle) throws android.os.RemoteException;
+  }
+
+  public interface TrustedWebActivityDisplayMode {
+    method public static androidx.browser.trusted.TrustedWebActivityDisplayMode fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_ID = "androidx.browser.trusted.displaymode.KEY_ID";
+  }
+
+  public static class TrustedWebActivityDisplayMode.DefaultMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+    ctor public TrustedWebActivityDisplayMode.DefaultMode();
+    method public android.os.Bundle toBundle();
+  }
+
+  public static class TrustedWebActivityDisplayMode.ImmersiveMode implements androidx.browser.trusted.TrustedWebActivityDisplayMode {
+    ctor public TrustedWebActivityDisplayMode.ImmersiveMode(boolean, int);
+    method public boolean isSticky();
+    method public int layoutInDisplayCutoutMode();
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_CUTOUT_MODE = "androidx.browser.trusted.displaymode.KEY_CUTOUT_MODE";
+    field public static final String KEY_STICKY = "androidx.browser.trusted.displaymode.KEY_STICKY";
+  }
+
+  public final class TrustedWebActivityIntent {
+    method public android.content.Intent getIntent();
+    method public void launchTrustedWebActivity(android.content.Context);
+  }
+
+  public class TrustedWebActivityIntentBuilder {
+    ctor public TrustedWebActivityIntentBuilder(android.net.Uri);
+    method public androidx.browser.trusted.TrustedWebActivityIntent build(androidx.browser.customtabs.CustomTabsSession);
+    method public androidx.browser.customtabs.CustomTabsIntent buildCustomTabsIntent();
+    method public androidx.browser.trusted.TrustedWebActivityDisplayMode getDisplayMode();
+    method public android.net.Uri getUri();
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setAdditionalTrustedOrigins(java.util.List<java.lang.String!>);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorScheme(int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setColorSchemeParams(int, androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setScreenOrientation(int);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setShareParams(androidx.browser.trusted.sharing.ShareTarget, androidx.browser.trusted.sharing.ShareData);
+    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setSplashScreenParams(android.os.Bundle);
+    method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setToolbarColor(@ColorInt int);
+    field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
+    field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
+    field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
+    field public static final String EXTRA_SHARE_TARGET = "androidx.browser.trusted.extra.SHARE_TARGET";
+    field public static final String EXTRA_SPLASH_SCREEN_PARAMS = "androidx.browser.trusted.EXTRA_SPLASH_SCREEN_PARAMS";
+  }
+
+  public abstract class TrustedWebActivityService extends android.app.Service {
+    ctor public TrustedWebActivityService();
+    method @BinderThread public abstract androidx.browser.trusted.TokenStore getTokenStore();
+    method @BinderThread public boolean onAreNotificationsEnabled(String);
+    method @MainThread public final android.os.IBinder? onBind(android.content.Intent?);
+    method @BinderThread public void onCancelNotification(String, int);
+    method @BinderThread public android.os.Bundle? onExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallbackRemote?);
+    method @BinderThread public android.os.Bundle onGetSmallIconBitmap();
+    method @BinderThread public int onGetSmallIconId();
+    method @BinderThread @RequiresPermission(android.Manifest.permission.POST_NOTIFICATIONS) public boolean onNotifyNotificationWithChannel(String, int, android.app.Notification, String);
+    method @MainThread public final boolean onUnbind(android.content.Intent?);
+    field public static final String ACTION_TRUSTED_WEB_ACTIVITY_SERVICE = "android.support.customtabs.trusted.TRUSTED_WEB_ACTIVITY_SERVICE";
+    field public static final String KEY_SMALL_ICON_BITMAP = "android.support.customtabs.trusted.SMALL_ICON_BITMAP";
+    field public static final String KEY_SUCCESS = "androidx.browser.trusted.SUCCESS";
+    field public static final String META_DATA_NAME_SMALL_ICON = "android.support.customtabs.trusted.SMALL_ICON";
+    field public static final int SMALL_ICON_NOT_SET = -1; // 0xffffffff
+  }
+
+  public final class TrustedWebActivityServiceConnection {
+    method public boolean areNotificationsEnabled(String) throws android.os.RemoteException;
+    method public void cancel(String, int) throws android.os.RemoteException;
+    method public android.content.ComponentName getComponentName();
+    method public android.graphics.Bitmap? getSmallIconBitmap() throws android.os.RemoteException;
+    method public int getSmallIconId() throws android.os.RemoteException;
+    method public boolean notify(String, int, android.app.Notification, String) throws android.os.RemoteException;
+    method public android.os.Bundle? sendExtraCommand(String, android.os.Bundle, androidx.browser.trusted.TrustedWebActivityCallback?) throws android.os.RemoteException;
+  }
+
+  public final class TrustedWebActivityServiceConnectionPool {
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.browser.trusted.TrustedWebActivityServiceConnection!> connect(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>, java.util.concurrent.Executor);
+    method public static androidx.browser.trusted.TrustedWebActivityServiceConnectionPool create(android.content.Context);
+    method @MainThread public boolean serviceExistsForScope(android.net.Uri, java.util.Set<androidx.browser.trusted.Token!>);
+  }
+
+}
+
+package androidx.browser.trusted.sharing {
+
+  public final class ShareData {
+    ctor public ShareData(String?, String?, java.util.List<android.net.Uri!>?);
+    method public static androidx.browser.trusted.sharing.ShareData fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+    field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+    field public static final String KEY_URIS = "androidx.browser.trusted.sharing.KEY_URIS";
+    field public final String? text;
+    field public final String? title;
+    field public final java.util.List<android.net.Uri!>? uris;
+  }
+
+  public final class ShareTarget {
+    ctor public ShareTarget(String, String?, String?, androidx.browser.trusted.sharing.ShareTarget.Params);
+    method public static androidx.browser.trusted.sharing.ShareTarget? fromBundle(android.os.Bundle);
+    method public android.os.Bundle toBundle();
+    field public static final String ENCODING_TYPE_MULTIPART = "multipart/form-data";
+    field public static final String ENCODING_TYPE_URL_ENCODED = "application/x-www-form-urlencoded";
+    field public static final String KEY_ACTION = "androidx.browser.trusted.sharing.KEY_ACTION";
+    field public static final String KEY_ENCTYPE = "androidx.browser.trusted.sharing.KEY_ENCTYPE";
+    field public static final String KEY_METHOD = "androidx.browser.trusted.sharing.KEY_METHOD";
+    field public static final String KEY_PARAMS = "androidx.browser.trusted.sharing.KEY_PARAMS";
+    field public static final String METHOD_GET = "GET";
+    field public static final String METHOD_POST = "POST";
+    field public final String action;
+    field public final String? encodingType;
+    field public final String? method;
+    field public final androidx.browser.trusted.sharing.ShareTarget.Params params;
+  }
+
+  public static final class ShareTarget.FileFormField {
+    ctor public ShareTarget.FileFormField(String, java.util.List<java.lang.String!>);
+    field public static final String KEY_ACCEPTED_TYPES = "androidx.browser.trusted.sharing.KEY_ACCEPTED_TYPES";
+    field public static final String KEY_NAME = "androidx.browser.trusted.sharing.KEY_FILE_NAME";
+    field public final java.util.List<java.lang.String!> acceptedTypes;
+    field public final String name;
+  }
+
+  public static class ShareTarget.Params {
+    ctor public ShareTarget.Params(String?, String?, java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>?);
+    field public static final String KEY_FILES = "androidx.browser.trusted.sharing.KEY_FILES";
+    field public static final String KEY_TEXT = "androidx.browser.trusted.sharing.KEY_TEXT";
+    field public static final String KEY_TITLE = "androidx.browser.trusted.sharing.KEY_TITLE";
+    field public final java.util.List<androidx.browser.trusted.sharing.ShareTarget.FileFormField!>? files;
+    field public final String? text;
+    field public final String? title;
+  }
+
+}
+
+package androidx.browser.trusted.splashscreens {
+
+  public final class SplashScreenParamKey {
+    field public static final String KEY_BACKGROUND_COLOR = "androidx.browser.trusted.trusted.KEY_SPLASH_SCREEN_BACKGROUND_COLOR";
+    field public static final String KEY_FADE_OUT_DURATION_MS = "androidx.browser.trusted.KEY_SPLASH_SCREEN_FADE_OUT_DURATION";
+    field public static final String KEY_IMAGE_TRANSFORMATION_MATRIX = "androidx.browser.trusted.KEY_SPLASH_SCREEN_TRANSFORMATION_MATRIX";
+    field public static final String KEY_SCALE_TYPE = "androidx.browser.trusted.KEY_SPLASH_SCREEN_SCALE_TYPE";
+    field public static final String KEY_VERSION = "androidx.browser.trusted.KEY_SPLASH_SCREEN_VERSION";
+  }
+
+  public final class SplashScreenVersion {
+    field public static final String V1 = "androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1";
+  }
+
+}
+
diff --git a/car/app/app/api/current.txt b/car/app/app/api/current.txt
index aebbb23..fd934ef 100644
--- a/car/app/app/api/current.txt
+++ b/car/app/app/api/current.txt
@@ -904,6 +904,7 @@
 
   public static final class ConversationItem.Builder {
     ctor public ConversationItem.Builder();
+    ctor public ConversationItem.Builder(androidx.car.app.messaging.model.ConversationItem);
     method public androidx.car.app.messaging.model.ConversationItem build();
     method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
     method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
diff --git a/car/app/app/api/restricted_current.txt b/car/app/app/api/restricted_current.txt
index aebbb23..fd934ef 100644
--- a/car/app/app/api/restricted_current.txt
+++ b/car/app/app/api/restricted_current.txt
@@ -904,6 +904,7 @@
 
   public static final class ConversationItem.Builder {
     ctor public ConversationItem.Builder();
+    ctor public ConversationItem.Builder(androidx.car.app.messaging.model.ConversationItem);
     method public androidx.car.app.messaging.model.ConversationItem build();
     method public androidx.car.app.messaging.model.ConversationItem.Builder setConversationCallback(androidx.car.app.messaging.model.ConversationCallback);
     method public androidx.car.app.messaging.model.ConversationItem.Builder setGroupConversation(boolean);
diff --git a/car/app/app/src/main/java/androidx/car/app/messaging/model/ConversationItem.java b/car/app/app/src/main/java/androidx/car/app/messaging/model/ConversationItem.java
index c3962ef..d83d5b0 100644
--- a/car/app/app/src/main/java/androidx/car/app/messaging/model/ConversationItem.java
+++ b/car/app/app/src/main/java/androidx/car/app/messaging/model/ConversationItem.java
@@ -86,7 +86,7 @@
                         && Objects.equals(mTitle, otherConversationItem.mTitle)
                         && Objects.equals(mIcon, otherConversationItem.mIcon)
                         && PersonsEqualityHelper
-                            .arePersonsEqual(getSelf(), otherConversationItem.getSelf())
+                        .arePersonsEqual(getSelf(), otherConversationItem.getSelf())
                         && mIsGroupConversation == otherConversationItem.mIsGroupConversation
                         && Objects.equals(mMessages, otherConversationItem.mMessages)
                 ;
@@ -100,8 +100,7 @@
         this.mIsGroupConversation = builder.mIsGroupConversation;
         this.mMessages = requireNonNull(CollectionUtils.unmodifiableCopy(builder.mMessages));
         checkState(!mMessages.isEmpty(), "Message list cannot be empty.");
-        this.mConversationCallbackDelegate = new ConversationCallbackDelegateImpl(
-                requireNonNull(builder.mConversationCallback));
+        this.mConversationCallbackDelegate = requireNonNull(builder.mConversationCallbackDelegate);
     }
 
     /** Default constructor for serialization. */
@@ -202,7 +201,7 @@
         @Nullable
         List<CarMessage> mMessages;
         @Nullable
-        ConversationCallback mConversationCallback;
+        ConversationCallbackDelegate mConversationCallbackDelegate;
 
         /**
          * Specifies a unique identifier for the conversation
@@ -273,9 +272,9 @@
         /** Sets a {@link ConversationCallback} for the conversation */
         @SuppressLint({"MissingGetterMatchingBuilder", "ExecutorRegistration"})
         @NonNull
-        public Builder setConversationCallback(
-                @NonNull ConversationCallback conversationCallback) {
-            mConversationCallback = conversationCallback;
+        public Builder setConversationCallback(@NonNull ConversationCallback conversationCallback) {
+            mConversationCallbackDelegate =
+                    new ConversationCallbackDelegateImpl(requireNonNull(conversationCallback));
             return this;
         }
 
@@ -284,5 +283,20 @@
         public ConversationItem build() {
             return new ConversationItem(this);
         }
+
+        /** Returns an empty {@link Builder} instance. */
+        public Builder() {
+        }
+
+        /** Returns a builder from the given {@link ConversationItem}. */
+        public Builder(@NonNull ConversationItem other) {
+            this.mId = other.getId();
+            this.mTitle = other.getTitle();
+            this.mSelf = other.getSelf();
+            this.mIcon = other.getIcon();
+            this.mIsGroupConversation = other.isGroupConversation();
+            this.mConversationCallbackDelegate = other.getConversationCallbackDelegate();
+            this.mMessages = other.getMessages();
+        }
     }
 }
diff --git a/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java b/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
index ebfa5fc..81835b3 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
@@ -30,10 +30,14 @@
 import androidx.car.app.annotations.ExperimentalCarApi;
 import androidx.car.app.annotations.KeepFields;
 import androidx.car.app.annotations.RequiresCarApi;
+import androidx.car.app.messaging.model.CarMessage;
+import androidx.car.app.messaging.model.ConversationItem;
 import androidx.car.app.model.constraints.ActionsConstraints;
 import androidx.car.app.model.constraints.CarTextConstraints;
 import androidx.car.app.utils.CollectionUtils;
 
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -61,6 +65,11 @@
 @CarProtocol
 @KeepFields
 public final class ListTemplate implements Template {
+    // These restrictions are imposed on ListTemplate to avoid exceeding the Android binder
+    // transaction limit of 1MB.
+    static final int MAX_ALLOWED_ITEMS = 100;
+    static final int MAX_MESSAGES_PER_CONVERSATION = 10;
+
     private final boolean mIsLoading;
     @Nullable
     private final CarText mTitle;
@@ -430,6 +439,14 @@
                 }
             }
 
+            if (!mSectionedLists.isEmpty()) {
+                List<SectionedItemList> truncatedList = getTruncatedCopy(mSectionedLists);
+                mSectionedLists.clear();
+                mSectionedLists.addAll(truncatedList);
+            } else if (mSingleList != null) {
+                mSingleList = truncate(mSingleList, new TruncateCounter(MAX_ALLOWED_ITEMS));
+            }
+
             return new ListTemplate(this);
         }
 
@@ -454,4 +471,90 @@
             mActions = new ArrayList<>(listTemplate.getActions());
         }
     }
+
+    /** A wrapper around an int with helper methods to keep track of a truncation limit. */
+    private static class TruncateCounter {
+        private int mRemainingItems;
+
+        TruncateCounter(int initialLimit) {
+            mRemainingItems = initialLimit;
+        }
+
+        @CanIgnoreReturnValue
+        public int decrement() {
+            return --mRemainingItems;
+        }
+
+        @CanIgnoreReturnValue
+        public int decrement(int minus) {
+            mRemainingItems -= minus;
+            return mRemainingItems;
+        }
+
+        public boolean canFit(int value) {
+            return mRemainingItems >= value;
+        }
+
+        public int remainingItems() {
+            return mRemainingItems;
+        }
+    }
+
+    static List<SectionedItemList> getTruncatedCopy(List<SectionedItemList> originalList) {
+        TruncateCounter itemLimit = new TruncateCounter(MAX_ALLOWED_ITEMS);
+        List<SectionedItemList> result = new ArrayList<>();
+        for (SectionedItemList original : originalList) {
+            ItemList truncatedItemList = truncate(original.getItemList(), itemLimit);
+            result.add(SectionedItemList.create(
+                    truncatedItemList, original.getHeader().toCharSequence()));
+            if (itemLimit.remainingItems() <= 0) {
+                break;
+            }
+        }
+        return result;
+    }
+
+    /** Truncates ListTemplates to not exceed the Android maximum binder transaction limit. */
+    @OptIn(markerClass = ExperimentalCarApi.class)
+    static ItemList truncate(ItemList itemList, TruncateCounter limit) {
+        ItemList.Builder builder = new ItemList.Builder(itemList);
+        builder.clearItems();
+        for (Item item : itemList.getItems()) {
+            // For Row and Grid items, no special truncation logic. Each item counts as 1.
+            if (!(item instanceof ConversationItem)) {
+                if (!limit.canFit(1)) {
+                    break;
+                }
+                builder.addItem(item);
+                limit.decrement();
+                continue;
+            }
+
+            // For ConversationItem, truncate the messages to max 10.
+            ConversationItem conversationItem = (ConversationItem) item;
+
+            // Each message counts a 1, and each ConversationItem counts as 1, so a minimum of 2
+            // spaces needs to remain.
+            if (!limit.canFit(2)) {
+                break;
+            }
+
+            // Rebuild the conversation item
+            ConversationItem.Builder conversationBuilder =
+                    new ConversationItem.Builder(conversationItem);
+            int maxMessagesAllowed =
+                    Math.min(limit.decrement(), MAX_MESSAGES_PER_CONVERSATION);
+            int messagesToAdd =
+                    Math.min(conversationItem.getMessages().size(), maxMessagesAllowed);
+            List<CarMessage> truncatedMessagesList =
+                    conversationItem.getMessages().subList(0, messagesToAdd);
+            conversationBuilder.setMessages(truncatedMessagesList);
+
+            builder.addItem(conversationBuilder.build());
+
+            limit.decrement(messagesToAdd);
+        }
+
+        return builder.build();
+    }
 }
diff --git a/car/app/app/src/test/java/androidx/car/app/messaging/model/ConversationItemTest.java b/car/app/app/src/test/java/androidx/car/app/messaging/model/ConversationItemTest.java
index 97cea42..ef2956c 100644
--- a/car/app/app/src/test/java/androidx/car/app/messaging/model/ConversationItemTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/messaging/model/ConversationItemTest.java
@@ -62,6 +62,7 @@
         );
     }
 
+    @Test
     public void build_throwsException_ifSenderNameMissing() {
         assertThrows(
                 NullPointerException.class,
@@ -73,6 +74,7 @@
         );
     }
 
+    @Test
     public void build_throwsException_ifSenderKeyMissing() {
         assertThrows(
                 NullPointerException.class,
@@ -84,6 +86,15 @@
         );
     }
 
+    @Test
+    public void builderConstructor_copiesAllFields() {
+        ConversationItem original = TestConversationFactory.createFullyPopulatedConversationItem();
+
+        ConversationItem result = new ConversationItem.Builder(original).build();
+
+        assertEqual(result, original);
+    }
+
     // region .equals() & .hashCode()
     @Test
     public void equalsAndHashCode_areEqual_forMinimalConversationItem() {
diff --git a/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java b/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
index 17d9f72..1777bdf 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
@@ -21,6 +21,9 @@
 import static org.junit.Assert.assertThrows;
 
 import androidx.car.app.TestUtils;
+import androidx.car.app.messaging.model.CarMessage;
+import androidx.car.app.messaging.model.ConversationItem;
+import androidx.car.app.messaging.model.TestConversationFactory;
 import androidx.test.core.app.ApplicationProvider;
 
 import org.junit.Test;
@@ -28,6 +31,9 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.internal.DoNotInstrument;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /** Tests for {@link ListTemplate}. */
 @RunWith(RobolectricTestRunner.class)
 @DoNotInstrument
@@ -457,6 +463,156 @@
                 .build();
     }
 
+    @Test
+    public void build_addingMoreThanMaxAllowedItemsInSingleList_truncates() {
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+        ItemList.Builder itemListBuilder = new ItemList.Builder();
+        int moreThanMaxAllowedItems = ListTemplate.MAX_ALLOWED_ITEMS + 1;
+        for (int i = 0; i < moreThanMaxAllowedItems; i++) {
+            itemListBuilder.addItem(new Row.Builder().setTitle(Integer.toString(i)).build());
+        }
+        ListTemplate listTemplate = new ListTemplate.Builder()
+                .setSingleList(itemListBuilder.build())
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+
+        assertThat(listTemplate.getSingleList().getItems()).hasSize(ListTemplate.MAX_ALLOWED_ITEMS);
+    }
+
+    @Test
+    public void build_addingMoreThanMaxAllowedItemsInSectionedList_truncates() {
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+
+        ItemList.Builder firstListBuilder = new ItemList.Builder();
+        addRowsToItemList(firstListBuilder, 10);
+        SectionedItemList firstList =
+                SectionedItemList.create(firstListBuilder.build(), "First List");
+
+        ItemList.Builder secondListBuilder = new ItemList.Builder();
+        addRowsToItemList(secondListBuilder, ListTemplate.MAX_ALLOWED_ITEMS);
+        SectionedItemList secondList =
+                SectionedItemList.create(secondListBuilder.build(), "Second list");
+
+        ItemList.Builder thirdListBuilder = new ItemList.Builder();
+        addRowsToItemList(thirdListBuilder, 10);
+        SectionedItemList thirdList =
+                SectionedItemList.create(thirdListBuilder.build(), "Third list");
+
+        // Add 3 lists, where the first list fits, second list is truncated, and the last list is
+        // dropped
+        ListTemplate listTemplate = new ListTemplate.Builder()
+                .addSectionedList(firstList)
+                .addSectionedList(secondList)
+                .addSectionedList(thirdList)
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+
+        assertThat(listTemplate.getSectionedLists()).hasSize(2);
+        assertThat(listTemplate.getSectionedLists().get(0).getItemList().getItems()).hasSize(10);
+        assertThat(listTemplate.getSectionedLists().get(1).getItemList().getItems()).hasSize(
+                ListTemplate.MAX_ALLOWED_ITEMS - 10);
+    }
+
+    @Test
+    public void build_aLotOfConversationMessages_truncates() {
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+        ItemList.Builder builder = new ItemList.Builder();
+
+        // Create a conversation with more than "max" messages. This should count as
+        // 11 items (conversation item + 10 messages)
+        ConversationItem.Builder conversationBuilder =
+                TestConversationFactory.createMinimalConversationItemBuilder();
+        List<CarMessage> messages = new ArrayList<>();
+        for (int i = 0; i < ListTemplate.MAX_MESSAGES_PER_CONVERSATION + 1; i++) {
+            messages.add(TestConversationFactory.createMinimalMessage());
+        }
+        conversationBuilder.setMessages(messages);
+        builder.addItem(conversationBuilder.build());
+
+        // Fill the item list with other conversations with padding (8 messages + 1 conversation
+        // = 9 items) x 9 = 81 items being added.
+        messages = messages.subList(0, 8);
+        for (int i = 0; i < 9; i++) {
+            builder.addItem(TestConversationFactory.createMinimalConversationItemBuilder()
+                    .setMessages(messages)
+                    .build());
+        }
+
+        // Which means there should be 92 items total here, so if we add another conversation with
+        // 10 messages, it should truncate it to 7 message to fill 8 spaces.
+        messages.clear();
+        for (int i = 0; i < 10; i++) {
+            messages.add(TestConversationFactory.createMinimalMessage());
+        }
+        builder.addItem(TestConversationFactory.createMinimalConversationItemBuilder()
+                .setMessages(messages)
+                .build());
+
+        // Just for good measure, add another conversation that will be dropped
+        builder.addItem(TestConversationFactory.createFullyPopulatedConversationItem());
+
+        // Build
+        ListTemplate listTemplate = new ListTemplate.Builder()
+                .setSingleList(builder.build())
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+
+        // 11 conversations should have been saved with the last 12th being dropped
+        assertThat(listTemplate.getSingleList().getItems()).hasSize(11);
+        // Expect that the first item (which originally had 11 messages), should have its message
+        // count truncated to the max limit
+        assertThat(((ConversationItem) listTemplate.getSingleList().getItems().get(
+                0)).getMessages())
+                .hasSize(ListTemplate.MAX_MESSAGES_PER_CONVERSATION);
+        // Expect that the last item (which originally had 10 messages), should have its message
+        // count truncated to fill the remaining spaces
+        assertThat(((ConversationItem) listTemplate.getSingleList().getItems().get(
+                10)).getMessages())
+                .hasSize(7);
+    }
+
+    @Test
+    public void build_addingConversations_neverResultsInAnEmptyConversation() {
+        // Add 10 conversations with 8 messages each to fill 99 items
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+        ItemList.Builder builder = new ItemList.Builder();
+
+        List<CarMessage> messages = new ArrayList<>();
+        for (int i = 0; i < 9; i++) {
+            messages.add(TestConversationFactory.createMinimalMessage());
+        }
+        for (int i = 0; i < 9; i++) {
+            builder.addItem(TestConversationFactory.createMinimalConversationItemBuilder()
+                    .setMessages(messages)
+                    .build());
+        }
+
+        // Add an 11th conversation which at minimum needs 2 spaces (1 for the conversation, 1
+        // for the message).
+        builder.addItem(TestConversationFactory.createMinimalConversationItemBuilder().build());
+
+        // And try to build
+        ListTemplate listTemplate = new ListTemplate.Builder()
+                .setSingleList(builder.build())
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+
+        // Assert that the last conversation was not added despite the item count only being 99
+        assertThat(listTemplate.getSingleList().getItems()).hasSize(10);
+    }
+
     private static ListTemplate createFullyPopulatedListTemplate() {
         ItemList itemList = new ItemList.Builder().build();
         ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
@@ -478,4 +634,10 @@
         Row row2 = new Row.Builder().setTitle("Oranges").build();
         return new ItemList.Builder().addItem(row1).addItem(row2).build();
     }
+
+    private static void addRowsToItemList(ItemList.Builder itemListBuilder, int rowsToAdd) {
+        for (int i = 0; i < rowsToAdd; i++) {
+            itemListBuilder.addItem(new Row.Builder().setTitle(Integer.toString(i)).build());
+        }
+    }
 }
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
index 0368ada..61c1a73 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
@@ -91,6 +91,7 @@
 import androidx.compose.ui.test.assertWidthIsEqualTo
 import androidx.compose.ui.test.captureToImage
 import androidx.compose.ui.test.click
+import androidx.compose.ui.test.getUnclippedBoundsInRoot
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onChildren
 import androidx.compose.ui.test.onNodeWithTag
@@ -120,7 +121,6 @@
 import com.google.common.truth.Truth.assertThat
 import kotlin.math.roundToInt
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.launch
 import org.junit.Rule
 import org.junit.Test
@@ -1159,15 +1159,21 @@
                 onValueChange = {},
                 visualTransformation = prefixTransformation,
                 label = {
-                    Text("label", color = Color.Red, modifier = Modifier.background(Color.Red))
+                    Text(
+                        text = "label",
+                        color = Color.Red,
+                        modifier = Modifier.testTag("Label").background(Color.Red)
+                    )
                 },
                 textStyle = TextStyle(color = Color.Blue),
                 colors = TextFieldDefaults.textFieldColors(backgroundColor = Color.White)
             )
         }
-        rule.onNode(SemanticsMatcher.keyIsDefined(SemanticsProperties.Text), true)
-            .captureToImage()
-            .assertPixels { Color.Red }
+        // Label's top padding is only TextFieldPadding in the unfocused state,
+        // but state should be focused
+        val labelBounds = rule.onNodeWithTag("Label", true)
+            .getUnclippedBoundsInRoot()
+        assertThat(labelBounds.top).isLessThan(TextFieldPadding)
     }
 
     @Test
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Typography.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
index ee273d1..a20d149 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
@@ -300,7 +300,7 @@
 }
 
 internal val DefaultLineHeightStyle = LineHeightStyle(
-    alignment = LineHeightStyle.Alignment.Proportional,
+    alignment = LineHeightStyle.Alignment.Center,
     trim = LineHeightStyle.Trim.None,
 )
 
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
index a3c631429..80d43c8 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
@@ -1076,6 +1076,29 @@
     }
 
     @Test
+    fun bottomAppBar_FABshown_whenActionsOverflowRow() {
+        rule.setMaterialContent(lightColorScheme()) {
+            BottomAppBar(
+                actions = {
+                    repeat(20) {
+                        FakeIcon(Modifier)
+                    }
+                },
+                floatingActionButton = {
+                    FloatingActionButton(
+                        onClick = { /* do something */ },
+                        modifier = Modifier.testTag("FAB"),
+                        containerColor = BottomAppBarDefaults.bottomAppBarFabColor,
+                        elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
+                    ) {
+                        Icon(Icons.Filled.Add, "Localized description")
+                    }
+                })
+        }
+        rule.onNodeWithTag("FAB").assertIsDisplayed()
+    }
+
+    @Test
     fun bottomAppBar_widthExpandsToScreen() {
         rule
             .setMaterialContentForSizeAssertions {
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
index 2e60a0a..9f0f5e4 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/TooltipScreenshotTest.kt
@@ -17,7 +17,6 @@
 package androidx.compose.material3
 
 import android.os.Build
-import android.os.Build.VERSION.SDK_INT
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Favorite
 import androidx.compose.runtime.Composable
@@ -33,8 +32,6 @@
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
-import org.junit.Assume
-import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -50,13 +47,6 @@
     @get:Rule
     val screenshotRule = AndroidXScreenshotTestRule(GOLDEN_MATERIAL3)
 
-    @Before
-    fun before() {
-        // Disable tests for API 33 until a solution can be found
-        // to make these tests stable for Firebase API 33 tests.
-        Assume.assumeTrue(SDK_INT != 33)
-    }
-
     @Test
     fun plainTooltip_lightTheme() {
         rule.setMaterialContent(lightColorScheme()) { PlainTooltipTest() }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
index 2a2aef5..e1799f9 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
@@ -36,7 +36,6 @@
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.WindowInsetsSides
 import androidx.compose.foundation.layout.fillMaxHeight
@@ -409,9 +408,13 @@
     windowInsets = windowInsets,
     contentPadding = contentPadding
 ) {
-    actions()
+    Row(
+        modifier = Modifier.weight(1f),
+        horizontalArrangement = Arrangement.Start,
+        verticalAlignment = Alignment.CenterVertically,
+        content = actions,
+    )
     if (floatingActionButton != null) {
-        Spacer(Modifier.weight(1f, true))
         Box(
             Modifier
                 .fillMaxHeight()
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
index 863fd9a..b0a91d5 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
@@ -146,7 +146,7 @@
 }
 
 internal val DefaultLineHeightStyle = LineHeightStyle(
-    alignment = LineHeightStyle.Alignment.Proportional,
+    alignment = LineHeightStyle.Alignment.Center,
     trim = LineHeightStyle.Trim.None
 )
 
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 7547594..d898c6f 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -32,6 +32,7 @@
     docs(project(":appactions:interaction:interaction-service"))
     docs(project(":appactions:interaction:interaction-service-proto"))
     docs(project(":appactions:interaction:interaction-service-testing"))
+    docs(project(":appactions:interaction:interaction-service-wear"))
     docs(project(":appcompat:appcompat"))
     docs(project(":appcompat:appcompat-resources"))
     docs(project(":appsearch:appsearch"))
diff --git a/gradle.properties b/gradle.properties
index f425df6..09b1a08 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -72,8 +72,6 @@
 kotlin.mpp.androidGradlePluginCompatibility.nowarn=true
 # Until we get a newer AGP which doesn't do this
 kotlin.options.suppressFreeCompilerArgsModificationWarning=true
-# b/275795136
-ksp.incremental=false
 
 # Properties we often want to toggle
 ksp.version.check=false
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
index adc15f3..b593986 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/JavaScriptSandbox.java
@@ -198,9 +198,9 @@
      */
     public static final String JS_FEATURE_CONSOLE_MESSAGING = "JS_FEATURE_CONSOLE_MESSAGING";
 
-    @GuardedBy("mLock")
-    @Nullable
-    private HashSet<String> mClientSideFeatureSet;
+    // This set must not be modified after JavaScriptSandbox construction.
+    @NonNull
+    private final HashSet<String> mClientSideFeatureSet;
 
     static class ConnectionSetup implements ServiceConnection {
         @Nullable
@@ -221,7 +221,12 @@
             }
             IJsSandboxService jsSandboxService =
                     IJsSandboxService.Stub.asInterface(service);
-            mJsSandbox = new JavaScriptSandbox(this, jsSandboxService);
+            try {
+                mJsSandbox = new JavaScriptSandbox(this, jsSandboxService);
+            } catch (RemoteException e) {
+                runShutdownTasks(e);
+                return;
+            }
             mCompleter.set(mJsSandbox);
             mCompleter = null;
         }
@@ -382,11 +387,11 @@
     // We prevent direct initializations of this class.
     // Use JavaScriptSandbox.createConnectedInstance().
     JavaScriptSandbox(@NonNull ConnectionSetup connectionSetup,
-            @NonNull IJsSandboxService jsSandboxService) {
+            @NonNull IJsSandboxService jsSandboxService) throws RemoteException {
         mConnection = connectionSetup;
-        synchronized (mLock) {
-            mJsSandboxService = jsSandboxService;
-        }
+        mJsSandboxService = jsSandboxService;
+        final List<String> features = mJsSandboxService.getSupportedFeatures();
+        mClientSideFeatureSet = buildClientSideFeatureSet(features);
         mGuard.open("close");
         // This should be at the end of the constructor.
     }
@@ -434,34 +439,27 @@
         }
     }
 
-    @GuardedBy("mLock")
-    @SuppressWarnings("NullAway")
-    private void populateClientFeatureSet() {
-        assert mJsSandboxService != null;
-        List<String> features;
-        try {
-            features = mJsSandboxService.getSupportedFeatures();
-        } catch (RemoteException e) {
-            throw new RuntimeException(e);
-        }
-        mClientSideFeatureSet = new HashSet<>();
+    @NonNull
+    private HashSet<String> buildClientSideFeatureSet(@NonNull List<String> features) {
+        HashSet<String> featureSet = new HashSet<>();
         if (features.contains(IJsSandboxService.ISOLATE_TERMINATION)) {
-            mClientSideFeatureSet.add(JS_FEATURE_ISOLATE_TERMINATION);
+            featureSet.add(JS_FEATURE_ISOLATE_TERMINATION);
         }
         if (features.contains(IJsSandboxService.WASM_FROM_ARRAY_BUFFER)) {
-            mClientSideFeatureSet.add(JS_FEATURE_PROMISE_RETURN);
-            mClientSideFeatureSet.add(JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER);
-            mClientSideFeatureSet.add(JS_FEATURE_WASM_COMPILATION);
+            featureSet.add(JS_FEATURE_PROMISE_RETURN);
+            featureSet.add(JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER);
+            featureSet.add(JS_FEATURE_WASM_COMPILATION);
         }
         if (features.contains(IJsSandboxService.ISOLATE_MAX_HEAP_SIZE_LIMIT)) {
-            mClientSideFeatureSet.add(JS_FEATURE_ISOLATE_MAX_HEAP_SIZE);
+            featureSet.add(JS_FEATURE_ISOLATE_MAX_HEAP_SIZE);
         }
         if (features.contains(IJsSandboxService.EVALUATE_WITHOUT_TRANSACTION_LIMIT)) {
-            mClientSideFeatureSet.add(JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT);
+            featureSet.add(JS_FEATURE_EVALUATE_WITHOUT_TRANSACTION_LIMIT);
         }
         if (features.contains(IJsSandboxService.CONSOLE_MESSAGING)) {
-            mClientSideFeatureSet.add(JS_FEATURE_CONSOLE_MESSAGING);
+            featureSet.add(JS_FEATURE_CONSOLE_MESSAGING);
         }
+        return featureSet;
     }
 
     @GuardedBy("mLock")
@@ -486,19 +484,9 @@
      * @param feature feature to be checked
      * @return {@code true} if supported, {@code false} otherwise
      */
-    @SuppressWarnings("NullAway")
     public boolean isFeatureSupported(@JsSandboxFeature @NonNull String feature) {
         Objects.requireNonNull(feature);
-        synchronized (mLock) {
-            if (mJsSandboxService == null) {
-                throw new IllegalStateException(
-                        "Attempting to check features on a service that isn't connected");
-            }
-            if (mClientSideFeatureSet == null) {
-                populateClientFeatureSet();
-            }
-            return mClientSideFeatureSet.contains(feature);
-        }
+        return mClientSideFeatureSet.contains(feature);
     }
 
     void removeFromIsolateSet(@NonNull JavaScriptIsolate isolate) {
diff --git a/libraryversions.toml b/libraryversions.toml
index 4acf0b4..a8188fa 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -12,7 +12,7 @@
 BENCHMARK = "1.2.0-alpha15"
 BIOMETRIC = "1.2.0-alpha06"
 BLUETOOTH = "1.0.0-alpha01"
-BROWSER = "1.6.0-alpha02"
+BROWSER = "1.6.0-beta01"
 BUILDSRC_TESTS = "1.0.0-alpha01"
 CAMERA = "1.3.0-alpha08"
 CAMERA_PIPE = "1.0.0-alpha01"
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/DeviceUtils.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/DeviceUtils.java
new file mode 100644
index 0000000..925a344
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/DeviceUtils.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.mediarouter.app;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.os.Build;
+
+import androidx.annotation.Dimension;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.mediarouter.R;
+
+/** Utility methods for checking properties of the current device. */
+final class DeviceUtils {
+    @Nullable
+    private static Boolean sIsPhone;
+    @Nullable
+    private static Boolean sIsTablet;
+    @Nullable
+    private static Boolean sIsFoldable;
+    @Nullable
+    private static Boolean sIsSevenInchTablet;
+    @Nullable
+    private static Boolean sIsWearable;
+    @Nullable
+    private static Boolean sIsAuto;
+    @Nullable
+    private static Boolean sIsTv;
+
+    /** The feature name for Auto devices. */
+    private static final String FEATURE_AUTO = "android.hardware.type.automotive";
+
+    /** The feature names for TV devices, either of which will qualify. */
+    private static final String FEATURE_TV_1 = "com.google.android.tv";
+
+    private static final String FEATURE_TV_2 = "android.hardware.type.television";
+    private static final String FEATURE_TV_3 = "android.software.leanback";
+
+    /** The minimum screen width for a 7-inch tablet. */
+    private static final @Dimension(unit = Dimension.DP) int
+            SEVEN_INCH_TABLET_MINIMUM_SCREEN_WIDTH_DP = 600;
+
+    private DeviceUtils() {
+    }
+
+    /**
+     * Returns a string representation of a device form factor. Supported form factors are:
+     * {@link #{R.string.mr_device_form_factor_phone} and
+     * @link #{R.string.mr_device_form_factor_tablet} and
+     * @link #{R.string.mr_device_form_factor_tv} and
+     * @link #{R.string.mr_device_form_factor_watch} and
+     * @link #{R.string.mr_device_form_factor_car} and
+     * @link #{R.string.mr_device_form_factor_unknown}}
+     */
+    static String getDeviceFormFactorString(@NonNull Context context) {
+        if (isPhone(context) || isFoldable(context)) {
+            return context.getString(R.string.mr_device_form_factor_phone);
+        } else if (isTablet(context) || isSevenInchTablet(context)) {
+            return context.getString(R.string.mr_device_form_factor_tablet);
+        } else if (isTv(context)) {
+            return context.getString(R.string.mr_device_form_factor_tv);
+        } else if (isWearable(context)) {
+            return context.getString(R.string.mr_device_form_factor_watch);
+        } else if (isAuto(context)) {
+            return context.getString(R.string.mr_device_form_factor_car);
+        } else {
+            return context.getString(R.string.mr_device_form_factor_unknown);
+        }
+    }
+
+    /** Returns {@code true} if the current device is considered a phone. */
+    private static boolean isPhone(@NonNull Context context) {
+        if (sIsPhone == null) {
+            sIsPhone =
+                    (!isTablet(context)
+                            && !isWearable(context)
+                            && !isAuto(context)
+                            && !isTv(context));
+        }
+        return sIsPhone;
+    }
+
+    /** Returns {@code true} if the current device considered a tablet (Honeycomb+ and XLarge). */
+    private static boolean isTablet(@NonNull Context context) {
+        return isTablet(context.getResources());
+    }
+
+    /** Returns {@code true} if the current device considered a tablet (Honeycomb+ and XLarge). */
+    private static boolean isTablet(@NonNull Resources resources) {
+        if (resources == null) {
+            return false;
+        }
+        if (sIsTablet == null) {
+            // Consider it to be tablet if it's either a) xlarge-v11, or b) sw600dp-v13.
+            boolean isXlarge =
+                    (resources.getConfiguration().screenLayout
+                            & Configuration.SCREENLAYOUT_SIZE_MASK)
+                            > Configuration.SCREENLAYOUT_SIZE_LARGE;
+            sIsTablet = isXlarge || isSevenInchTablet(resources);
+        }
+        return sIsTablet;
+    }
+
+    /**
+     * Returns {@code true} if the current device considered a foldable (R+ and has a hinge).
+     *
+     * <p>Note: this is not mutually exclusive with {@link #sIsPhone}
+     */
+    private static boolean isFoldable(@NonNull Context context) {
+        if (sIsFoldable == null) {
+            SensorManager sensorManager =
+                    (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+            sIsFoldable =
+                    Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
+                            && sensorManager != null
+                            && sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE) != null;
+        }
+        return sIsFoldable;
+    }
+
+    /**
+     * Returns {@code true} if the current device is considered to be a 7-inch tablet (e.g. and not
+     * a 10-inch tablet).
+     */
+    private static boolean isSevenInchTablet(@NonNull Context context) {
+        return isSevenInchTablet(context.getResources());
+    }
+
+    /**
+     * Returns {@code true} if the current device is considered to be a 7-inch tablet (e.g. and not
+     * a 10-inch tablet).
+     */
+    private static boolean isSevenInchTablet(@NonNull Resources resources) {
+        if (resources == null) {
+            return false;
+        }
+        if (sIsSevenInchTablet == null) {
+            Configuration configuration = resources.getConfiguration();
+            sIsSevenInchTablet =
+                    (configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
+                            <= Configuration.SCREENLAYOUT_SIZE_LARGE
+                            && configuration.smallestScreenWidthDp
+                            >= SEVEN_INCH_TABLET_MINIMUM_SCREEN_WIDTH_DP;
+        }
+        return sIsSevenInchTablet;
+    }
+
+    /**
+     * Returns {@code true} if the current device is a wearable. As of 2019Q4, that is synonymous
+     * with being a watch.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code WEARABLE}
+     * and {@code false} for all other build types.
+     */
+    private static boolean isWearable(@NonNull Context context) {
+        return isWearable(context.getPackageManager());
+    }
+
+    /**
+     * Returns {@code true} if the current device is a wearable. As of 2019Q4, that is synonymous
+     * with being a watch.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code WEARABLE}
+     * and {@code false} for all other build types.
+     */
+    private static boolean isWearable(@NonNull PackageManager packageManager) {
+        if (sIsWearable == null) {
+            sIsWearable =
+                    Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH
+                            && packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH);
+        }
+        return sIsWearable;
+    }
+
+    /**
+     * Returns {@code true} if the device should be considered as a car.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code AUTO} and
+     * {@code false} for all other build types.
+     */
+    private static boolean isAuto(@NonNull Context context) {
+        return isAuto(context.getPackageManager());
+    }
+
+    /**
+     * Returns {@code true} if the device should be considered as a car.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code AUTO} and
+     * {@code false} for all other build types.
+     */
+    private static boolean isAuto(@NonNull PackageManager packageManager) {
+        if (sIsAuto == null) {
+            sIsAuto = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
+                    && packageManager.hasSystemFeature(FEATURE_AUTO);
+        }
+        return sIsAuto;
+    }
+
+    /**
+     * Returns {@code true} if the device should be considered as a TV.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code ATV} and
+     * {@code false} for all other build types except {@code PHONE_PRE_LMP} (aka {@code PROD}).
+     */
+    private static boolean isTv(@NonNull Context context) {
+        return DeviceUtils.isTv(context.getPackageManager());
+    }
+
+    /**
+     * Returns {@code true} if the device should be considered as a TV.
+     *
+     * <p>For container release builds, returns {@code true} if the build type is {@code ATV} and
+     * {@code false} for all other build types except {@code PHONE_PRE_LMP} (aka {@code PROD}).
+     */
+    private static boolean isTv(@NonNull PackageManager packageManager) {
+        if (sIsTv == null) {
+            sIsTv =
+                    packageManager.hasSystemFeature(FEATURE_TV_1)
+                            || packageManager.hasSystemFeature(FEATURE_TV_2)
+                            || packageManager.hasSystemFeature(FEATURE_TV_3);
+        }
+        return sIsTv;
+    }
+}
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
index 51e6cb0..13c2dc7 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
@@ -37,7 +37,6 @@
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
-import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
@@ -80,23 +79,26 @@
     private static final int MSG_UPDATE_ROUTES = 1;
     private static final int MSG_SHOW_WIFI_HINT = 2;
     private static final int MSG_SHOW_NO_ROUTES = 3;
-
     private static final int SHOW_WIFI_HINT_DELAY_MS = 5000;
     private static final int SHOW_NO_ROUTES_DELAY_MS = 15000;
 
     private final MediaRouter mRouter;
     private final MediaRouterCallback mCallback;
-
-    private TextView mTitleView;
     private MediaRouteSelector mSelector = MediaRouteSelector.EMPTY;
     private ArrayList<MediaRouter.RouteInfo> mRoutes;
-    private RouteAdapter mAdapter;
+
+    // UI View elements
+    private TextView mTitleView;
+    private TextView mSearchingRoutesTextView;
+    private RelativeLayout mWifiWarningContainer;
+    private TextView mWifiWarningTextView;
+    private TextView mLearnMoreTextView;
+    private LinearLayout mOkButtonContainer;
+    private Button mOkButton;
+    private ProgressBar mSearchingProgressBar;
     private ListView mListView;
-    private RelativeLayout mEmptyView;
-    private LinearLayout mSearchingRoutesView;
-    private FrameLayout mNoRoutesView;
-    private FrameLayout mWifiWarningView;
-    private FrameLayout mFooterView;
+    private RouteAdapter mAdapter;
+
     private boolean mAttachedToWindow;
     private long mLastUpdateTime;
     @SuppressWarnings({"unchecked", "deprecation"})
@@ -224,25 +226,30 @@
 
         mRoutes = new ArrayList<>();
         mAdapter = new RouteAdapter(getContext(), mRoutes);
+
+        mTitleView = findViewById(R.id.mr_chooser_title);
+
+        mSearchingRoutesTextView = findViewById(R.id.mr_chooser_searching);
+        mWifiWarningContainer = findViewById(R.id.mr_chooser_wifi_warning_container);
+        mWifiWarningTextView = findViewById(R.id.mr_chooser_wifi_warning_description);
+        mLearnMoreTextView = findViewById(R.id.mr_chooser_wifi_learn_more);
+        mOkButtonContainer = findViewById(R.id.mr_chooser_ok_button_container);
+        mOkButton = findViewById(R.id.mr_chooser_ok_button);
+        mSearchingProgressBar = findViewById(R.id.mr_chooser_search_progress_bar);
+
+
+        String formFactor = DeviceUtils.getDeviceFormFactorString(getContext());
+        String wifiWarningText =
+                getContext().getString(R.string.mr_chooser_wifi_warning_description, formFactor);
+        mWifiWarningTextView.setText(wifiWarningText);
+
+        mLearnMoreTextView.setMovementMethod(LinkMovementMethod.getInstance());
+        mOkButton.setOnClickListener(view -> dismiss());
+
         mListView = findViewById(R.id.mr_chooser_list);
         mListView.setAdapter(mAdapter);
         mListView.setOnItemClickListener(mAdapter);
         mListView.setEmptyView(findViewById(android.R.id.empty));
-        mTitleView = findViewById(R.id.mr_chooser_title);
-
-        mEmptyView = findViewById(R.id.mr_empty_view);
-        mSearchingRoutesView = findViewById(R.id.mr_chooser_searching);
-        mNoRoutesView = findViewById(R.id.mr_chooser_no_routes);
-        mWifiWarningView = findViewById(R.id.mr_chooser_wifi_warning);
-        mFooterView = findViewById(R.id.mr_chooser_footer);
-
-        TextView zeroRoutesDescription = findViewById(R.id.mr_chooser_zero_routes_description);
-        TextView wifiWarningDescription = findViewById(R.id.mr_chooser_wifi_warning_description);
-        Button doneButton = findViewById(R.id.mr_chooser_done_button);
-
-        zeroRoutesDescription.setMovementMethod(LinkMovementMethod.getInstance());
-        wifiWarningDescription.setMovementMethod(LinkMovementMethod.getInstance());
-        doneButton.setOnClickListener(view -> dismiss());
 
         updateLayout();
     }
@@ -342,63 +349,63 @@
 
     void updateViewForState(@MediaRouterChooserDialogState int state) {
         switch (state) {
-            case NO_ROUTES:
-                updateViewForNoRoutes();
+            case FINDING_DEVICES:
+                updateViewForFindingDevices();
                 break;
             case NO_DEVICES_NO_WIFI_HINT:
                 updateViewForNoDevicesNoWifiHint();
                 break;
+            case NO_ROUTES:
+                updateViewForNoRoutes();
+                break;
             case SHOWING_ROUTES:
                 updateViewForShowingRoutes();
                 break;
-            case FINDING_DEVICES:
-                updateViewForFindingDevices();
-                break;
         }
     }
 
-    private void updateViewForNoRoutes() {
-        setTitle(R.string.mr_chooser_zero_routes_found_title);
-        mTitleView.setVisibility(View.VISIBLE);
+    private void updateViewForFindingDevices() {
+        setTitle(R.string.mr_chooser_title);
         mListView.setVisibility(View.GONE);
-        mEmptyView.setVisibility(View.VISIBLE);
-        mFooterView.setVisibility(View.VISIBLE);
-        mNoRoutesView.setVisibility(View.VISIBLE);
-        mSearchingRoutesView.setVisibility(View.GONE);
-        mWifiWarningView.setVisibility(View.GONE);
+        mSearchingRoutesTextView.setVisibility(View.VISIBLE);
+        mSearchingProgressBar.setVisibility(View.VISIBLE);
+        mOkButtonContainer.setVisibility(View.GONE);
+        mOkButton.setVisibility(View.GONE);
+        mLearnMoreTextView.setVisibility(View.GONE);
+        mWifiWarningContainer.setVisibility(View.GONE);
     }
 
     private void updateViewForNoDevicesNoWifiHint() {
         setTitle(R.string.mr_chooser_title);
-        mTitleView.setVisibility(View.VISIBLE);
         mListView.setVisibility(View.GONE);
-        mEmptyView.setVisibility(View.VISIBLE);
-        mFooterView.setVisibility(View.GONE);
-        mNoRoutesView.setVisibility(View.GONE);
-        mSearchingRoutesView.setVisibility(View.VISIBLE);
-        mWifiWarningView.setVisibility(View.VISIBLE);
+        mSearchingRoutesTextView.setVisibility(View.GONE);
+        mSearchingProgressBar.setVisibility(View.VISIBLE);
+        mOkButtonContainer.setVisibility(View.GONE);
+        mOkButton.setVisibility(View.GONE);
+        mLearnMoreTextView.setVisibility(View.INVISIBLE);
+        mWifiWarningContainer.setVisibility(View.VISIBLE);
+    }
+
+    private void updateViewForNoRoutes() {
+        setTitle(R.string.mr_chooser_zero_routes_found_title);
+        mListView.setVisibility(View.GONE);
+        mSearchingRoutesTextView.setVisibility(View.GONE);
+        mSearchingProgressBar.setVisibility(View.GONE);
+        mOkButtonContainer.setVisibility(View.VISIBLE);
+        mOkButton.setVisibility(View.VISIBLE);
+        mLearnMoreTextView.setVisibility(View.VISIBLE);
+        mWifiWarningContainer.setVisibility(View.VISIBLE);
     }
 
     private void updateViewForShowingRoutes() {
         setTitle(R.string.mr_chooser_title);
-        mTitleView.setVisibility(View.VISIBLE);
         mListView.setVisibility(View.VISIBLE);
-        mEmptyView.setVisibility(View.GONE);
-        mFooterView.setVisibility(View.GONE);
-        mNoRoutesView.setVisibility(View.GONE);
-        mSearchingRoutesView.setVisibility(View.GONE);
-        mWifiWarningView.setVisibility(View.GONE);
-    }
-
-    private void updateViewForFindingDevices() {
-        setTitle(R.string.mr_chooser_title);
-        mTitleView.setVisibility(View.VISIBLE);
-        mListView.setVisibility(View.GONE);
-        mEmptyView.setVisibility(View.VISIBLE);
-        mFooterView.setVisibility(View.GONE);
-        mNoRoutesView.setVisibility(View.GONE);
-        mSearchingRoutesView.setVisibility(View.VISIBLE);
-        mWifiWarningView.setVisibility(View.GONE);
+        mSearchingRoutesTextView.setVisibility(View.GONE);
+        mSearchingProgressBar.setVisibility(View.GONE);
+        mOkButtonContainer.setVisibility(View.GONE);
+        mOkButton.setVisibility(View.GONE);
+        mLearnMoreTextView.setVisibility(View.GONE);
+        mWifiWarningContainer.setVisibility(View.GONE);
     }
 
     private static final class RouteAdapter extends ArrayAdapter<MediaRouter.RouteInfo>
diff --git a/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_dark.png b/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_dark.png
new file mode 100644
index 0000000..76e0687a
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_dark.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_light.png b/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_light.png
new file mode 100644
index 0000000..6ebde6d
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-hdpi/ic_mr_wifi_icon_light.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_dark.png b/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_dark.png
new file mode 100644
index 0000000..0285b40
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_dark.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_light.png b/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_light.png
new file mode 100644
index 0000000..a3ccd85
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-mdpi/ic_mr_wifi_icon_light.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_dark.png b/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_dark.png
new file mode 100644
index 0000000..b4bd8be
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_dark.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_light.png b/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_light.png
new file mode 100644
index 0000000..61f9715
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xhdpi/ic_mr_wifi_icon_light.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_dark.png b/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_dark.png
new file mode 100644
index 0000000..16e58a9
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_dark.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_light.png b/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_light.png
new file mode 100644
index 0000000..ca59395
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xxhdpi/ic_mr_wifi_icon_light.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_dark.png b/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_dark.png
new file mode 100644
index 0000000..8807acb
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_dark.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_light.png b/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_light.png
new file mode 100644
index 0000000..2d8a7c8
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable-xxxhdpi/ic_mr_wifi_icon_light.png
Binary files differ
diff --git a/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_dark.xml b/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_dark.xml
new file mode 100644
index 0000000..3153d7e
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_dark.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_mr_wifi_icon_dark" />
+</selector>
diff --git a/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_light.xml b/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_light.xml
new file mode 100644
index 0000000..c6e75df
--- /dev/null
+++ b/mediarouter/mediarouter/src/main/res/drawable/mr_wifi_icon_light.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/ic_mr_wifi_icon_light" />
+</selector>
diff --git a/mediarouter/mediarouter/src/main/res/layout/mr_chooser_dialog.xml b/mediarouter/mediarouter/src/main/res/layout/mr_chooser_dialog.xml
index c8978f7..5050bf4 100644
--- a/mediarouter/mediarouter/src/main/res/layout/mr_chooser_dialog.xml
+++ b/mediarouter/mediarouter/src/main/res/layout/mr_chooser_dialog.xml
@@ -32,6 +32,92 @@
         android:text="@string/mr_chooser_title"
         android:textAppearance="@style/TextAppearance.MediaRouter.Title" />
 
+    <TextView
+        android:id="@+id/mr_chooser_searching"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"
+        android:text="@string/mr_chooser_looking_for_devices"
+        android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText" />
+
+    <RelativeLayout
+        android:id="@+id/mr_chooser_wifi_warning_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:visibility="gone">
+
+        <LinearLayout
+            android:id="@+id/mr_chooser_wifi_warning"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:layout_width="@dimen/mr_controller_wifi_icon_size"
+                android:layout_height="@dimen/mr_controller_wifi_icon_size"
+                android:layout_margin="16dp"
+                android:src="?attr/mediaRouteWifiIconDrawable"
+                android:contentDescription="@string/ic_media_route_learn_more_accessibility"/>
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="24dp"
+                android:layout_marginStart="24dp"
+                android:orientation="vertical">
+
+                <TextView
+                    android:id="@+id/mr_chooser_wifi_warning_description"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/mr_chooser_wifi_warning_description"
+                    android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText" />
+
+                <TextView
+                    android:id="@+id/mr_chooser_wifi_learn_more"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:text="@string/mr_chooser_wifi_learn_more"
+                    android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText"
+                    android:visibility="invisible" />
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/mr_chooser_ok_button_container"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/mr_chooser_wifi_warning">
+
+            <Space
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1" />
+
+            <Button
+                android:id="@+id/mr_chooser_ok_button"
+                style="?android:attr/borderlessButtonStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@android:string/ok"
+                android:minWidth="0dp"
+                android:visibility="gone"/>
+
+        </LinearLayout>
+
+    </RelativeLayout>
+
+    <ProgressBar
+        android:id="@+id/mr_chooser_search_progress_bar"
+        style="?android:attr/progressBarStyleHorizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:indeterminate="true" />
+
     <ListView
         android:id="@+id/mr_chooser_list"
         android:layout_width="fill_parent"
@@ -40,86 +126,4 @@
         android:dividerHeight="0dp"
         android:visibility="gone" />
 
-    <RelativeLayout
-        android:id="@+id/mr_empty_view"
-        android:layout_width="fill_parent"
-        android:layout_height="240dp"
-        android:visibility="visible">
-
-        <LinearLayout
-            android:id="@+id/mr_chooser_searching"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerInParent="true"
-            android:orientation="vertical"
-            android:visibility="visible">
-
-            <ProgressBar
-                android:id="@+id/mr_chooser_search_progress_bar"
-                style="?android:attr/progressBarStyleHorizontal"
-                android:layout_width="150dp"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:indeterminate="true" />
-
-            <TextView
-                android:id="@+id/mr_chooser_search_status"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:text="@string/mr_chooser_searching"
-                android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText" />
-
-        </LinearLayout>
-
-        <FrameLayout
-            android:id="@+id/mr_chooser_no_routes"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="gone">
-
-            <TextView
-                android:id="@+id/mr_chooser_zero_routes_description"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/mr_chooser_zero_routes_description"
-                android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText" />
-
-        </FrameLayout>
-
-        <FrameLayout
-            android:id="@+id/mr_chooser_wifi_warning"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:visibility="gone">
-
-            <TextView
-                android:id="@+id/mr_chooser_wifi_warning_description"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/mr_chooser_wifi_warning_description"
-                android:textAppearance="@style/TextAppearance.MediaRouter.SecondaryText" />
-
-        </FrameLayout>
-
-        <FrameLayout
-            android:id="@+id/mr_chooser_footer"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:gravity="bottom"
-            android:visibility="gone">
-
-            <Button
-                android:id="@+id/mr_chooser_done_button"
-                style="?android:attr/borderlessButtonStyle"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="end|right"
-                android:text="@string/mr_chooser_done_button_label" />
-
-        </FrameLayout>
-
-    </RelativeLayout>
-
 </LinearLayout>
diff --git a/mediarouter/mediarouter/src/main/res/values-af/strings.xml b/mediarouter/mediarouter/src/main/res/values-af/strings.xml
index bd833f3..2560d60 100644
--- a/mediarouter/mediarouter/src/main/res/values-af/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-af/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Speel op \'n groep"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Geen inligting beskikbaar nie"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Geen toestelle beskikbaar nie"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Kan nie toestelle kry nie. Maak seker dat jou toestel en die uitsaaitoestel in dieselfde wi-fi-netwerk is en probeer weer."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Maak seker dat jou toestel en die uitsaaitoestel in dieselfde wi-fi-netwerk is."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Klaar"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-am/strings.xml b/mediarouter/mediarouter/src/main/res/values-am/strings.xml
index 4619b0d1..b8d4461 100644
--- a/mediarouter/mediarouter/src/main/res/values-am/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-am/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"በቡድን ላይ ያጫውቱ"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ምንም መረጃ አይገኝም"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ምንም መሣሪያዎች አይገኙም"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"መሣሪያዎችን ማግኘት አልተቻለም፣ መሣሪያዎ እና የChromecast መሣሪያው በተመሳሳይ የWi-Fi አውታረ መረብ ላይ እንደሆኑ ያረጋግጡ እና እንደገና ይሞክሩ።"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"መሣሪያዎ እና የChromecast መሣሪያው በተመሳሳይ የWi-Fi አውታረ መረብ ላይ እንደሆኑ ያረጋግጡ።"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ተከናውኗል"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ar/strings.xml b/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
index 7d41901..4fc753a 100644
--- a/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ar/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"تشغيل على مجموعة من الأجهزة"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"لا تتوفر أي معلومات"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"لا تتوفّر أي أجهزة"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"‏يتعذّر العثور على أجهزة. تأكَّد من أنّ جهازك وجهاز البثّ متصلان بشبكة Wi-Fi نفسها."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"‏تأكَّد من أنّ جهازك وجهاز البثّ متصلان بشبكة Wi-Fi نفسها."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"تم"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-as/strings.xml b/mediarouter/mediarouter/src/main/res/values-as/strings.xml
index 60b9c9f..c732471 100644
--- a/mediarouter/mediarouter/src/main/res/values-as/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-as/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"কোনো এটা গোটত প্লে’ কৰক"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"কোনো তথ্য নাই"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"কোনো ডিভাইচ উপলব্ধ নহয়"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ডিভাইচ বিচাৰি পাবলৈ সক্ষম হোৱা নাই, আপোনাৰ ডিভাইচটো আৰু কাষ্ট কৰা ডিভাইচটো একেটা ৱাই-ফাই নেটৱৰ্কত থকাটো নিশ্চিত কৰক।"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"আপোনাৰ ডিভাইচটো আৰু কাষ্ট কৰা ডিভাইচটো একেটা ৱাই-ফাই নেটৱৰ্কত থকাটো নিশ্চিত কৰক।"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"কৰা হ’ল"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-az/strings.xml b/mediarouter/mediarouter/src/main/res/values-az/strings.xml
index 20ee3c1..c66e26c 100644
--- a/mediarouter/mediarouter/src/main/res/values-az/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-az/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Qrupda oxudun"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Əlçatan məlumat yoxdur"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Əlçatan cihaz yoxdur"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Cihazları tapmaq olmur. Cihaz və Yayım cihazının eyni Wi-Fi şəbəkəsində olduğuna əmin olub, yenidən cəhd edin."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Cihaz və Yayım cihazı eyni Wi-Fi şəbəkəsində olmalıdır."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Hazırdır"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml b/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
index e27efdc..a8903dd 100644
--- a/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-b+sr+Latn/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Puštajte u grupi"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nema dostupnih informacija"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nije dostupan nijedan uređaj"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nismo pronašli uređaje. Uverite se da su vaš uređaj i uređaj za prebacivanje na istoj WiFi mreži."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Uverite se da su uređaj i uređaj za prebacivanje na istoj WiFi mreži."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gotovo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-be/strings.xml b/mediarouter/mediarouter/src/main/res/values-be/strings.xml
index cdbeea5..6cb1b82 100644
--- a/mediarouter/mediarouter/src/main/res/values-be/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-be/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Прайграць на групе прылад"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Інфармацыя адсутнічае"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Няма даступных прылад"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Не ўдалося знайсці прыладу. Пераканайцеся, што ваша прылада і прылада для трансляцыі падключаны да адной і той жа сеткі Wi-Fi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Пераканайцеся, што ваша прылада і прылада для трансляцыі падключаны да адной і той жа сеткі Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Гатова"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bg/strings.xml b/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
index 1d7862c..fd34fe6 100644
--- a/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bg/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Възпроизвеждане в група"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Няма налична информация"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Няма налични устройства"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Не могат да се намерят устройства. Уверете се, че устройството ви и устройството Cast са в една и съща Wi-Fi мрежа, и опитайте отново."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Уверете се, че устройството ви и устройството Cast са в една и съща Wi-Fi мрежа."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Готово"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bn/strings.xml b/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
index b494578..3fffb29 100644
--- a/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bn/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"গ্রুপে প্লে করুন"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"কোনও তথ্য নেই"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"কোনও ডিভাইস উপলভ্য নেই"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ডিভাইস খুঁজে না পেলে, আপনার ডিভাইস ও কাস্ট ডিভাইস একই ওয়াই-ফাই নেটওয়ার্কে আছে কিনা তা ভালভাবে দেখে নিয়ে আবার চেষ্টা করুন।"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"আপনার ডিভাইস ও কাস্ট ডিভাইস একই ওয়াই-ফাই নেটওয়ার্কে রয়েছে কিনা তা ভালভাবে দেখে নিন।"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"হয়ে গেছে"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-bs/strings.xml b/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
index 212a482..9c1b595 100644
--- a/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-bs/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduciranje u grupi"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nema dostupnih informacija"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nema dostupnih uređaja"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nije moguće pronaći uređaje. Provjerite jesu li vaš uređaj i uređaj za emitiranje na istoj WiFi mreži i pokušajte ponovo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Provjerite jesu li vaš uređaj i uređaj za emitiranje na istoj WiFi mreži."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gotovo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ca/strings.xml b/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
index 86a8f3e..64b425b 100644
--- a/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ca/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reprodueix en un grup"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No hi ha informació disponible"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No hi ha cap dispositiu disponible"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"No es poden trobar els dispositius. Assegura\'t que el teu dispositiu i el dispositiu d\'emissió estiguin connectats a la mateixa xarxa Wi‐Fi i torna-ho a provar."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Comprova que el teu dispositiu i el dispositiu d\'emissió estiguin connectats a la mateixa xarxa Wi‐Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Fet"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-cs/strings.xml b/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
index 367b916..e90c215 100644
--- a/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-cs/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Přehrávání ve skupině"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nejsou k dispozici žádné informace"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nejsou k dispozici žádná zařízení"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Zařízení se nepodařilo najít. Zařízení a streamovací zařízení musí být připojeny ke stejné síti Wi-Fi. Zkuste to znovu."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Zařízení a streamovací zařízení musí být připojeny ke stejné síti Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Hotovo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-da/strings.xml b/mediarouter/mediarouter/src/main/res/values-da/strings.xml
index de4ce91..33ff77c 100644
--- a/mediarouter/mediarouter/src/main/res/values-da/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-da/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Afspil på en gruppe"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Der er ingen tilgængelige oplysninger"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Der er ingen tilgængelige enheder"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Det var ikke muligt at finde enhederne. Sørg for, at din enhed og Cast-enheden har forbindelse til det samme Wi-Fi-netværk, og prøv igen."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Sørg for, at din enhed og Cast-enheden har forbindelse til det samme Wi-Fi-netværk."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Udfør"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-de/strings.xml b/mediarouter/mediarouter/src/main/res/values-de/strings.xml
index 5a2f44c..81687cc 100644
--- a/mediarouter/mediarouter/src/main/res/values-de/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-de/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Auf einem Gruppengerät abspielen"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Keine Informationen verfügbar"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Keine Geräte verfügbar"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Geräte konnten nicht gefunden werden. Prüfe, ob dein Gerät und das Übertragungsgerät mit demselben WLAN verbunden sind."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Achte darauf, dass dein Gerät und das Übertragungsgerät mit demselben WLAN verbunden sind."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Fertig"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-el/strings.xml b/mediarouter/mediarouter/src/main/res/values-el/strings.xml
index aa0ada2..a7c1961 100644
--- a/mediarouter/mediarouter/src/main/res/values-el/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-el/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Αναπαραγωγή σε κάποια ομάδα"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Δεν υπάρχουν διαθέσιμες πληροφορίες"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Δεν υπάρχουν διαθέσιμες συσκευές"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Δεν είναι δυνατή η εύρεση συσκευών. Βεβαιωθείτε ότι η συσκευή σας και η συσκευή μετάδοσης είναι στο ίδιο δίκτυο Wi-Fi και δοκιμάστε ξανά."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Βεβαιωθείτε ότι η συσκευή σας και η συσκευή μετάδοσης είναι στο ίδιο δίκτυο Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Τέλος"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
index 5f58f94..2e5a3d7 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rAU/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure that your device and the cast device are on the same Wi-Fi network and try again."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure that your device and the cast device are on the same Wi-Fi network."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
index 68cb38b..2e5a3d7 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rCA/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure your device and the Cast device are on the same Wi-Fi network and try again."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure your device and the Cast device are on the same Wi-Fi network."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
index 5f58f94..2e5a3d7 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rGB/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure that your device and the cast device are on the same Wi-Fi network and try again."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure that your device and the cast device are on the same Wi-Fi network."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
index 5f58f94..2e5a3d7 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rIN/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Play on a group"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No info available"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No devices available"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Unable to find devices, make sure that your device and the cast device are on the same Wi-Fi network and try again."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Make sure that your device and the cast device are on the same Wi-Fi network."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Done"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml b/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
index 4d254b2..a95c66a 100644
--- a/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-en-rXC/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎Play on a group‎‏‎‎‏‎"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎No info available‎‏‎‎‏‎"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎No devices available‎‏‎‎‏‎"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎Unable to find devices, make sure your device and the Cast device are on the same Wi-Fi network and try again.‎‏‎‎‏‎"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎Make sure your device and the Cast device are on the same Wi-Fi network.‎‏‎‎‏‎"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎Done‎‏‎‎‏‎"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml b/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
index 939e6ba..939dfd8 100644
--- a/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-es-rUS/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir en un grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Sin información disponible"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No hay dispositivos disponibles"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"No se encontraron dispositivos. Asegúrate de que tu dispositivo y el dispositivo de transmisión están conectados a la misma red Wi-Fi, y vuelve a intentarlo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Asegúrate de que tu dispositivo y el dispositivo de transmisión están conectados a la misma red Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Listo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-es/strings.xml b/mediarouter/mediarouter/src/main/res/values-es/strings.xml
index 4aa769b..fa76eb1 100644
--- a/mediarouter/mediarouter/src/main/res/values-es/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-es/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir en un grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"No hay información disponible"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"No hay dispositivos disponibles"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"No se han podido encontrar los dispositivos. Comprueba que tu dispositivo y el dispositivo de emisión estén conectados a la misma red Wi-Fi y vuelve a intentarlo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Comprueba que tu dispositivo y el dispositivo de emisión estén conectados a la misma red Wi‑Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Hecho"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-et/strings.xml b/mediarouter/mediarouter/src/main/res/values-et/strings.xml
index 153797f..5e931bc 100644
--- a/mediarouter/mediarouter/src/main/res/values-et/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-et/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Grupis esitamine"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Teave puudub"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ühtegi seadet pole saadaval"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Seadmeid ei õnnestu leida. Veenduge, et teie seade ja ülekandeseade oleksid samas WiFi-võrgus, ja proovige uuesti."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Veenduge, et teie seade ja ülekandeseade oleksid samas WiFi-võrgus."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Valmis"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-eu/strings.xml b/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
index 64eb18b..028fe89 100644
--- a/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-eu/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Erreproduzitu talde batean"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ez dago informaziorik"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ez dago gailurik"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Ezin dira aurkitu gailuak. Ziurtatu gailua eta igorpen-gailua wifi-sare berean daudela. Ondoren, saiatu berriro."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Ziurtatu gailua eta igorpen-gailua wifi-sare berean daudela."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Eginda"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fa/strings.xml b/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
index 538d9f6..70cdbf1 100644
--- a/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fa/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"بازی در گروه"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"اطلاعاتی در دسترس نیست"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"دستگاهی موجود نیست"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"‏دستگاه‌ها پیدا نشدند؛ مطمئن شوید دستگاهتان و «دستگاه پخش» به یک شبکه Wi-Fi متصل باشند و دوباره امتحان کنید."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"‏مطمئن شوید دستگاهتان و «دستگاه پخش» به یک شبکه Wi-Fi متصل باشند."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"تمام"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fi/strings.xml b/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
index 92f367b..b76fa27 100644
--- a/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fi/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Toista ryhmässä"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ei tietoja saatavilla"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ei laitteita käytettävissä"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Laitteita ei löydy. Varmista, että laite ja striimauslaite ovat yhteydessä samaan Wi-Fi-verkkoon, ja yritä uudelleen."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Varmista, että laite ja striimauslaite ovat yhteydessä samaan Wi-Fi-verkkoon."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Valmis"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml b/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
index 5a907b4..0802269 100644
--- a/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fr-rCA/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Faire jouer sur un groupe d\'appareils"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Aucune donnée trouvée"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Aucun appareil à proximité"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Impossible de trouver les appareils. Assurez-vous que votre appareil et l\'appareil de diffusion sont connectés au même réseau Wi-Fi et réessayez."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Assurez-vous que votre appareil et l\'appareil de diffusion sont connectés au même réseau Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"OK"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-fr/strings.xml b/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
index e017eb6..2d206ef 100644
--- a/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-fr/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Lire sur un groupe d\'appareils"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Aucune information disponible"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Aucun appareil disponible"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Appareils introuvables. Assurez-vous que votre appareil et l\'appareil Cast sont connectés au même réseau Wi-Fi, puis réessayez."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Assurez-vous que votre appareil et l\'appareil Cast sont connectés au même réseau Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"OK"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-gl/strings.xml b/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
index 22b00ed..32b85a5 100644
--- a/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-gl/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproducir nun grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Non hai información dispoñible"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Non hai dispositivos dispoñibles"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Se non dás atopado os dispositivos, asegúrate de que o teu dispositivo e o de emisión estean na mesma rede wifi antes de tentalo de novo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Asegúrate de que o teu dispositivo e o de emisión estean na mesma rede wifi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Feito"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-gu/strings.xml b/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
index adb67b5..fa11d3aa 100644
--- a/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-gu/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"જૂથમાં રમો"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"કોઈ માહિતી ઉપલબ્ધ નથી"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"કોઈ ડિવાઇસ ઉપલબ્ધ નથી"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ડિવાઇસ શોધી ન શકતા હો તો ખાતરી કરો કે તમારા ડિવાઇસ અને કાસ્ટ કરી શકતા ડિવાઇસને એક જ વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કર્યા હોય અને ફરી પ્રયાસ કરો."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ખાતરી કરો કે તમારા ડિવાઇસ અને કાસ્ટ કરી શકતા ડિવાઇસને એક જ વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કર્યા હોય."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"થઈ ગયું"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hi/strings.xml b/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
index 3e79783..7b0245c 100644
--- a/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hi/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"समूह में खेलें"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कोई जानकारी मौजूद नहीं है"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"कोई डिवाइस मौजूद नहीं है"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"डिवाइस नहीं मिल रहे हैं. पक्का करें कि आपका डिवाइस उसी वाई-फ़ाई नेटवर्क से कनेक्ट किया गया हो जिससे कास्ट डिवाइस को कनेक्ट किया गया है और फिर से कोशिश करें."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"पक्का करें कि आपका डिवाइस उसी वाई-फ़ाई नेटवर्क से कनेक्ट किया गया हो जिससे कास्ट डिवाइस को कनेक्ट किया गया है."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"हो गया"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hr/strings.xml b/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
index 249c298..2abdda7 100644
--- a/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hr/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reprodukcija u grupi"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Informacije nisu dostupne"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nema dostupnih uređaja"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Uređaji nisu pronađeni, provjerite jesu li vaš uređaj i uređaj za emitiranje na istoj Wi-Fi mreži i pokušajte ponovo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Provjerite jesu li vaš uređaj i uređaj za emitiranje na istoj Wi-Fi mreži."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gotovo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hu/strings.xml b/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
index d19ec1c..b11e49f 100644
--- a/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hu/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Lejátszás eszközcsoportban"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nincs információ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nincs rendelkezésre álló eszköz"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nem találhatók eszközök, győződjön meg arról, hogy az eszköz és a Cast-eszköz ugyanazon a Wi-Fi-hálózaton van, majd próbálja újra."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Győződjön meg arról, hogy az eszköz és a Cast-eszköz ugyanazon a Wi-Fi-hálózaton van."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Kész"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-hy/strings.xml b/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
index 997de42..88103d5 100644
--- a/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-hy/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Նվագարկեք սարքերի խմբում"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Հասանելի տեղեկություններ չկան"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Հասանելի սարքեր չկան"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Չհաջողվեց սարքեր գտնել։ Համոզվեք, որ ձեր սարքը և Google Cast սարքը նույն Wi-Fi ցանցում են, և նորից փորձեք։"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Համոզվեք, որ ձեր սարքը և Google Cast սարքը նույն Wi-Fi ցանցում են։"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Պատրաստ է"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-in/strings.xml b/mediarouter/mediarouter/src/main/res/values-in/strings.xml
index 15d261a..39eb086 100644
--- a/mediarouter/mediarouter/src/main/res/values-in/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-in/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Putar di grup"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Info tidak tersedia"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Perangkat tidak tersedia"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Tidak dapat menemukan perangkat, pastikan perangkat Anda dan perangkat Transmisi berada pada jaringan Wi-Fi yang sama, lalu coba lagi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Pastikan perangkat Anda dan perangkat Transmisi berada pada jaringan Wi-Fi yang sama."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Selesai"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-is/strings.xml b/mediarouter/mediarouter/src/main/res/values-is/strings.xml
index aa6cc3c..31a1da6 100644
--- a/mediarouter/mediarouter/src/main/res/values-is/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-is/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spila í hóp"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Engar upplýsingar í boði"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Engin tæki í boði"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Tæki finnast ekki. Gakktu úr skugga um að tækið þitt og útsendingartækið séu tengd sama WiFi-neti."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Gakktu úr skugga um að tækið þitt og útsendingartækið séu tengd sama WiFi-neti."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Lokið"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-it/strings.xml b/mediarouter/mediarouter/src/main/res/values-it/strings.xml
index 028f6b7..a192988 100644
--- a/mediarouter/mediarouter/src/main/res/values-it/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-it/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Riproduci su un gruppo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nessuna informazione disponibile"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nessun dispositivo disponibile"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Impossibile trovare dispositivi, assicurati che il dispositivo e il dispositivo di trasmissione siano sulla stessa rete Wi-Fi e riprova."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Assicurati che il tuo dispositivo e quello di trasmissione siano collegati alla stessa rete Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Fine"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-iw/strings.xml b/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
index b8d39d2..6cc75c1 100644
--- a/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-iw/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"הפעלה בקבוצה"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"אין מידע זמין"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"אין מכשירים זמינים"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"‏המכשירים לא נמצאו, צריך לוודא שהמכשיר שלך ומכשיר ה-CAST מחוברים לאותה רשת Wi-Fi ולנסות שוב."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"‏יש לוודא שהמכשיר שלך ומכשיר ה-CAST מחוברים לאותה רשת Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"סיום"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ja/strings.xml b/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
index 1611cb2..2633af8 100644
--- a/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ja/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"グループで再生"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"情報がありません"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"利用可能なデバイスがありません"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"デバイスが見つかりませんでした。お使いのデバイスとキャスト デバイスが同じ Wi-Fi ネットワークに接続されていることを確認して、もう一度お試しください。"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"お使いのデバイスとキャスト デバイスが同じ Wi-Fi ネットワークに接続されていることを確認してください。"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"完了"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ka/strings.xml b/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
index 114665f..8c5785e 100644
--- a/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ka/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ჯგუფში დაკვრა"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ინფორმაცია მიუწვდომელია"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ხელმისაწვდომი მოწყობილობები არ არის"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"მოწყობილობების პოვნა ვერ ხერხდება — დარწმუნდით, რომ თქვენი და გადაცემის მოწყობილობა ერთსა და იმავე Wi-Fi ქსელთანაა დაკავშირებული და სცადეთ ხელახლა."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"დარწმუნდით, რომ თქვენი და გადაცემის მოწყობილობა ერთსა და იმავე Wi-Fi ქსელთანაა დაკავშირებული."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"მზადაა"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-kk/strings.xml b/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
index c385983..9289e01 100644
--- a/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-kk/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Топта ойнату"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ешқандай ақпарат жоқ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ешқандай құрылғы табылмады"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Ешқандай құрылғы табылмай тұр. Құрылғыңыз бен трансляциялау құрылғысы бір Wi-Fi желісіне жалғанғанын тексеріңіз де қайталап көріңіз."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Құрылғыңыз бен трансляциялау құрылғысы бір Wi-Fi желісіне жалғанғанын тексеріңіз."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Дайын"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-km/strings.xml b/mediarouter/mediarouter/src/main/res/values-km/strings.xml
index 8c3e141..3e60051 100644
--- a/mediarouter/mediarouter/src/main/res/values-km/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-km/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"លេងនៅ​លើក្រុម"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"មិនមានព័ត៌មានទេ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"មិន​មាន​ឧបករណ៍​ទេ"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"រកមិនឃើញឧបករណ៍ទេ សូមប្រាកដថា ឧបករណ៍របស់អ្នក និងឧបករណ៍បញ្ជូនស្ថិតលើបណ្ដាញ Wi-Fi តែមួយ រួចព្យាយាមម្ដងទៀត។"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"សូមប្រាកដថា ឧបករណ៍របស់អ្នក និងឧបករណ៍បញ្ជូន​ស្ថិតលើបណ្តាញ Wi-Fi តែមួយ។"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"រួចរាល់"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-kn/strings.xml b/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
index 484924c9..02f32b3 100644
--- a/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-kn/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ಗುಂಪಿನಲ್ಲಿ ಪ್ಲೇ ಮಾಡಿ"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ಯಾವುದೇ ಮಾಹಿತಿ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ಯಾವುದೇ ಸಾಧನಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ಸಾಧನಗಳನ್ನು ಹುಡುಕಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ, ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಬಿತ್ತರಿಸುವ ಸಾಧನವು ಒಂದೇ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಬಿತ್ತರಿಸುವ ಸಾಧನವು ಒಂದೇ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ಮುಗಿದಿದೆ"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ko/strings.xml b/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
index 7c49342..99a6b3c 100644
--- a/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ko/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"그룹에서 재생"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"사용할 수 있는 정보 없음"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"사용 가능한 기기 없음"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"기기를 찾을 수 없습니다. 기기와 Cast 기기가 동일한 Wi-Fi 네트워크에 연결되어 있는지 확인 후 다시 시도하세요."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"기기와 Cast 기기가 동일한 Wi-Fi 네트워크에 연결되어 있는지 확인하세요."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"완료"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ky/strings.xml b/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
index d47a45d..33d626b 100644
--- a/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ky/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Топто ойнотуу"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Эч маалымат жок"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Жеткиликтүү түзмөктөр жок"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Түзмөктөр табылбай жатат. Түзмөгүңүз менен тышкы экранга чыгаруучу түзмөк бир Wi-Fi тармагына туташканын текшерип, кайталап көрүңүз."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Түзмөгүңүз менен тышкы экранга чыгаруучу түзмөк бир Wi-Fi тармагына туташып турушу керек."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Бүттү"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lo/strings.xml b/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
index f666704..6ee278f 100644
--- a/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lo/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ຫຼິ້ນຢູ່ກຸ່ມ"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ບໍ່ມີຂໍ້ມູນ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ບໍ່ມີອຸປະກອນທີ່ສາມາດໃຊ້ໄດ້"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ບໍ່ພົບອຸປະກອນ, ກວດສອບວ່າອຸປະກອນຂອງທ່ານ ແລະ ອຸປະກອນ Chromecast ໃຊ້ເຄືອຂ່າຍ Wi-Fi ດຽວກັນ ແລ້ວລອງໃໝ່."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ກວດສອບວ່າອຸປະກອນຂອງທ່ານ ແລະ ອຸປະກອນ Chromecast ໃຊ້ເຄືອຂ່າຍ Wi-Fi ດຽວກັນ."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ແລ້ວໆ"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lt/strings.xml b/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
index 4acffae..c1dd51e 100644
--- a/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lt/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Leidimas grupėje"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nėra jokios informacijos"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nėra jokių pasiekiamų įrenginių"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nepavyko rasti įrenginių. Įsitikinkite, kad jūsų ir perdavimo įrenginiai prijungti prie to paties „Wi-Fi“ tinklo ir bandykite dar kartą."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Įsitikinkite, kad jūsų ir perdavimo įrenginiai prijungti prie to paties „Wi-Fi“ tinklo."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Atlikta"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-lv/strings.xml b/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
index e24841c..fe6b05e 100644
--- a/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-lv/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Atskaņošana grupā"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nav informācijas"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nav pieejamu ierīču"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nevar atrast ierīces. Pārbaudiet, vai jūsu ierīce un apraides ierīce ir savienota ar vienu un to pašu Wi‑Fi tīklu, un mēģiniet vēlreiz."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Pārbaudiet, vai jūsu ierīce un apraides ierīce ir savienota ar vienu un to pašu Wi‑Fi tīklu."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gatavs"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mk/strings.xml b/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
index db6ad85..cd3ad5b 100644
--- a/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mk/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Пуштете на група"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Нема достапни информации"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Нема достапни уреди"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Не може да се најдат уреди. Проверете дали вашиот уред и уредот со Cast се на истата Wi-Fi мрежа, па обидете се повторно."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Проверете дали вашиот уред и уредот со Cast се на истата Wi-Fi мрежа."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Готово"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ml/strings.xml b/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
index 98778c6..dfb85d4 100644
--- a/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ml/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ഒരു ഗ്രൂപ്പിൽ പ്ലേ ചെയ്യുക"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"വിവരങ്ങളൊന്നും ലഭ്യമല്ല"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ഉപകരണങ്ങളൊന്നും ലഭ്യമല്ല"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ഉപകരണങ്ങൾ കണ്ടെത്താനായില്ല, നിങ്ങളുടെ ഉപകരണവും കാസ്‌റ്റ് ഉപകരണവും ഒരേ വെെഫെെ നെറ്റ്‌വർക്കിലാണ് ഉള്ളതെന്ന് ഉറപ്പാക്കി വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"നിങ്ങളുടെ ഉപകരണവും കാസ്‌റ്റ് ഉപകരണവും ഒരേ വെെഫെെ നെറ്റ്‌വർക്കിലാണ് ഉള്ളതെന്ന് ഉറപ്പാക്കുക."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"പൂർത്തിയായി"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mn/strings.xml b/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
index 7a5b367..83de22e 100644
--- a/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mn/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Бүлэгт тоглуулах"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Мэдээлэл алга"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ямар ч боломжтой төхөөрөмж байхгүй"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Төхөөрөмжүүдийг олох боломжгүй. Таны төхөөрөмж болон дамжуулагч төхөөрөмж ижил Wi-Fi сүлжээнд холбогдсон эсэхийг шалгаад дахин оролдоно уу."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Таны төхөөрөмж болон дамжуулагч төхөөрөмж ижил Wi-Fi сүлжээнд холбогдсон эсэхийг шалгана уу."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Болсон"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-mr/strings.xml b/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
index 4bec966..f0712411 100644
--- a/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-mr/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"गटावर प्ले करा"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कोणतीही माहिती उपलब्ध नाही"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"कोणतीही डिव्हाइस उपलब्ध नाहीत"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"डिव्हाइस शोधता आली नाहीत, तुमचे डिव्हाइस आणि कास्‍ट डिव्‍हाइस एकाच वाय-फाय नेटवर्कवर असल्याची खात्री करा आणि पुन्हा प्रयत्न करा."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"तुमचे डिव्हाइस आणि कास्‍ट डिव्‍हाइस एकाच वाय-फाय नेटवर्कवर असल्याची खात्री करा."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"पूर्ण झाले"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ms/strings.xml b/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
index 858660e..4e29378 100644
--- a/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ms/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Mainkan pada kumpulan"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Maklumat tidak tersedia"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Tiada peranti tersedia"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Tidak dapat menemukan peranti, pastikan peranti anda dan peranti Cast menggunakan rangkaian Wi-Fi yang sama dan cuba lagi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Pastikan peranti anda dan peranti Cast menggunakan rangkaian Wi-Fi yang sama."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Selesai"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-my/strings.xml b/mediarouter/mediarouter/src/main/res/values-my/strings.xml
index ca1f5a9..3b3aba7 100644
--- a/mediarouter/mediarouter/src/main/res/values-my/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-my/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"အုပ်စုလိုက် ဖွင့်ခြင်း"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"အချက်အလက် မရရှိနိုင်ပါ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"စက်များ မရနိုင်ပါ"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"စက်များ ရှာမတွေ့ပါ။ သင်၏စက်နှင့် ‘ကာစ်လုပ်နိုင်သည့် စက်’ တို့သည် Wi-Fi ကွန်ရက်တစ်ခုတည်းသို့ ချိတ်ဆက်ထားကြောင်း သေချာစေပြီးနောက် ထပ်စမ်းကြည့်ပါ။"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"သင်၏စက်နှင့် ‘ကာစ်လုပ်နိုင်သည့် စက်’ တို့သည် Wi-Fi ကွန်ရက်တစ်ခုတည်းသို့ ချိတ်ဆက်ထားကြောင်း သေချာပါစေ။"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ပြီးပြီ"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-nb/strings.xml b/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
index 9150f1c..27520d9 100644
--- a/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-nb/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spill i en gruppe"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ingen informasjon er tilgjengelig"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ingen enheter er tilgjengelige"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Finner ikke enheter. Sjekk at enheten og Cast-enheten er koblet til samme wifi-nettverk, og prøv på nytt."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Sjekk at enheten og Cast-enheten er koblet til samme wifi-nettverk."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Ferdig"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ne/strings.xml b/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
index 318b0a0..e7372d4 100644
--- a/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ne/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"कुनै समूहमा प्ले गर्नुहोस्"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"कुनै पनि जानकारी उपलब्ध छैन"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"कुनै पनि डिभाइस उपलब्ध छैन"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"डिभाइसहरू भेट्टाउन सकिएन। तपाईंको डिभाइस र कास्ट डिभाइस एउटै Wi-Fi नेटवर्कमा कनेक्ट गरिएका छन् भन्ने कुरा सुनिश्चित गर्नुहोस् र फेरि प्रयास गर्नुहोस्।"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"तपाईंको डिभाइस र कास्ट डिभाइस एउटै Wi-Fi नेटवर्कमा कनेक्ट गरिएका छन् भन्ने कुरा सुनिश्चित गर्नुहोस्।"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"सम्पन्न भयो"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-nl/strings.xml b/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
index 2e54321..eb68ea9 100644
--- a/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-nl/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Afspelen in een groep"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Geen informatie beschikbaar"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Geen apparaten beschikbaar"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Kan geen apparaten vinden. Zorg dat je apparaat en het cast-apparaat verbinding hebben met hetzelfde wifi-netwerk en probeer het opnieuw."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Zorg dat je apparaat en het cast-apparaat verbinding hebben met hetzelfde wifi-netwerk."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Klaar"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-or/strings.xml b/mediarouter/mediarouter/src/main/res/values-or/strings.xml
index a6d5692..5c963d7 100644
--- a/mediarouter/mediarouter/src/main/res/values-or/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-or/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ଏକ ଗ୍ରୁପ୍‌ରେ ପ୍ଲେ କରନ୍ତୁ"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"କୌଣସି ସୂଚନା ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"କୌଣସି ଡିଭାଇସ ଉପଲବ୍ଧ ନାହିଁ"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ଡିଭାଇସଗୁଡ଼ିକୁ ଖୋଜିବାରେ ଅସମର୍ଥ, ଆପଣଙ୍କ ଡିଭାଇସ ଏବଂ କାଷ୍ଟ ଡିଭାଇସ ସମାନ ୱାଇ-ଫାଇ ନେଟୱାର୍କରେ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ଆପଣଙ୍କ ଡିଭାଇସ ଏବଂ କାଷ୍ଟ ଡିଭାଇସ ସମାନ ୱାଇ-ଫାଇ ନେଟୱାର୍କରେ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ।"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ହୋଇଗଲା"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pa/strings.xml b/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
index bb647c9..e5e715b 100644
--- a/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pa/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"ਕਿਸੇ ਗਰੁੱਪ ਵਿੱਚ ਖੇਡੋ"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ਕੋਈ ਜਾਣਕਾਰੀ ਉਪਲਬਧ ਨਹੀਂ"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ਕੋਈ ਡੀਵਾਈਸ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"ਡੀਵਾਈਸਾਂ ਨੂੰ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ, ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਅਤੇ ਕਾਸਟ ਡੀਵਾਈਸ ਇੱਕੋ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ \'ਤੇ ਹਨ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਅਤੇ ਕਾਸਟ ਡੀਵਾਈਸ ਇੱਕੋ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ \'ਤੇ ਹਨ।"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ਹੋ ਗਿਆ"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pl/strings.xml b/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
index 3463d58..25a280f 100644
--- a/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pl/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Odtwórz w grupie"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Brak informacji"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Brak dostępnych urządzeń"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nie można znaleźć urządzeń. Upewnij się, że Twoje urządzenie oraz urządzenie przesyłające są w tej samej sieci Wi-Fi, i spróbuj ponownie."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Upewnij się, że Twoje urządzenie oraz urządzenie przesyłające są w tej samej sieci Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gotowe"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
index ea1dfac..0dbea52 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt-rBR/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir em um grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nenhum dispositivo disponível"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Não foi possível encontrar dispositivos. Confira se o seu dispositivo e o de transmissão estão conectados à mesma rede Wi-Fi e tente de novo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Confira se o seu dispositivo e o de transmissão estão conectados à mesma rede Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Concluído"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
index 5483924..0f72d38 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt-rPT/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir num grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nenhum dispositivo disponível"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Não foi possível encontrar dispositivos. Certifique-se de que o seu dispositivo e o dispositivo de transmissão estão ligados à mesma rede Wi-Fi e tente novamente."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Certifique-se de que o seu dispositivo e o dispositivo de transmissão estão ligados à mesma rede Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Concluído"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-pt/strings.xml b/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
index ea1dfac..0dbea52 100644
--- a/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-pt/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Reproduzir em um grupo"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nenhuma informação disponível"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nenhum dispositivo disponível"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Não foi possível encontrar dispositivos. Confira se o seu dispositivo e o de transmissão estão conectados à mesma rede Wi-Fi e tente de novo."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Confira se o seu dispositivo e o de transmissão estão conectados à mesma rede Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Concluído"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ro/strings.xml b/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
index b7ea8b2..7c9ec75 100644
--- a/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ro/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Redă într-un grup"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nu sunt informații disponibile"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nu sunt disponibile dispozitive"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Nu s-au găsit dispozitive. Asigură-te că dispozitivul tău și dispozitivul de proiecție sunt conectate la aceeași rețea Wi-Fi și încearcă din nou."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Asigură-te că dispozitivul tău și dispozitivul de proiecție sunt conectate la aceeași rețea Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Gata"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ru/strings.xml b/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
index c6ec1fd..d9b549d 100644
--- a/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ru/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Воспроизведение в группе"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Данных нет"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Нет доступных устройств"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Не удается найти устройства. Убедитесь, что они подключены к одной и той же сети Wi-Fi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Убедитесь, что это устройство и устройство для трансляции подключены к одной и той же сети Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Готово"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-si/strings.xml b/mediarouter/mediarouter/src/main/res/values-si/strings.xml
index 830a8bd..be41018 100644
--- a/mediarouter/mediarouter/src/main/res/values-si/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-si/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"සමූහයක ධාවනය කරන්න"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ලබා ගත හැකි තොරතුරු නොමැත"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"කිසිදු උපාංගයක් නොමැත"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"උපාංග සොයා ගැනීමට නොහැකි වේ, ඔබේ උපාංගය සහ Cast උපාංගය එකම Wi-Fi ජාලයක ඇති බව සහතික කර ගෙන නැවත උත්සාහ කරන්න."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ඔබේ උපාංගය සහ Cast උපාංගය එකම Wi-Fi ජාලයක ඇති බව සහතික කර ගන්න."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"නිමයි"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sk/strings.xml b/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
index 4f96aa2..7c6c03b 100644
--- a/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sk/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Prehrávanie v skupine"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nie sú k dispozícii žiadne informácie"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nie sú k dispozícii žiadne zariadenia"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Zariadenia sa nedajú nájsť. Skontrolujte, či sú vaše zariadenie a zariadenie na prenos pripojené k rovnakej sieti Wi‑Fi, a skúste to znova."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Skontrolujte, či sú vaše zariadenie a zariadenie na prenos pripojené k rovnakej sieti Wi‑Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Hotovo"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sl/strings.xml b/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
index 10732e6..b870841 100644
--- a/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sl/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Predvajanje v skupini"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Ni podatkov"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nobena naprava ni na voljo"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Naprav ni mogoče najti. Prepričajte se, da sta vaša naprava in naprava za predvajanje povezani v isto omrežje Wi-Fi, in poskusite znova."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Prepričajte se, da sta vaša naprava in naprava za predvajanje povezani v isto omrežje Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Končano"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sq/strings.xml b/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
index 15cee8a..22432da 100644
--- a/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sq/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Luaj në një grup"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Nuk jepet asnjë informacion"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Nuk ofrohet asnjë pajisje"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Pajisjet nuk mund të gjenden. Sigurohu që pajisja jote dhe pajisja e transmetimit me teknologjinë \"cast\" të jenë në të njëjtin rrjet Wi-Fi dhe provo përsëri."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Sigurohu që si pajisja jote ashtu edhe pajisja e transmetimit me teknologjinë \"cast\" të jenë në të njëjtin rrjet Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"U krye"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sr/strings.xml b/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
index 6d72f70..feb426d 100644
--- a/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sr/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Пуштајте у групи"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Нема доступних информација"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Није доступан ниједан уређај"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Нисмо пронашли уређаје. Уверите се да су ваш уређај и уређај за пребацивање на истој WiFi мрежи."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Уверите се да су уређај и уређај за пребацивање на истој WiFi мрежи."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Готово"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sv/strings.xml b/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
index 9f26dc2..a8b44fa 100644
--- a/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sv/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Spela upp på en grupp enheter"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Det finns ingen tillgänglig information"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Inga tillgängliga enheter"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Det gick inte att hitta enheter. Kontrollera att din enhet och Cast-enheten är anslutna till samma wifi-nätverk och pröva igen."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Kontrollera att din enhet och Cast-enheten är anslutna till samma wifi-nätverk."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Klart"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-sw/strings.xml b/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
index d1fac7e..2e7c75e 100644
--- a/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-sw/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Cheza kwenye kikundi"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Hakuna maelezo yaliyopatikana"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Hakuna vifaa vilivyopatikana"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Imeshindwa kupata vifaa, hakikisha kifaa chako na Kifaa kinachotuma maudhui vimeunganishwa kwenye mtandao mmoja wa Wi-Fi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Hakikisha kifaa chako na Kifaa kinachotuma maudhui vimeunganishwa kwenye mtandao mmoja wa Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Nimemaliza"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ta/strings.xml b/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
index ee8cab7..2fde991 100644
--- a/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ta/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"குழுவில் இயக்கு"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"தகவல் எதுவுமில்லை"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"சாதனங்கள் இல்லை"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"சாதனங்களைக் கண்டறிய முடியவில்லை, உங்கள் சாதனமும் அனுப்பும் சாதனமும் ஒரே வைஃபை நெட்வொர்க்கில் இணைக்கப்பட்டிருப்பதை உறுதிசெய்து மீண்டும் முயலவும்."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"உங்கள் சாதனமும் அனுப்பும் சாதனமும் ஒரே வைஃபை நெட்வொர்க்கில் இணைக்கப்பட்டிருப்பதை உறுதிசெய்துகொள்ளவும்."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"முடிந்தது"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-te/strings.xml b/mediarouter/mediarouter/src/main/res/values-te/strings.xml
index e2c79ed..7622a4c 100644
--- a/mediarouter/mediarouter/src/main/res/values-te/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-te/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"గ్రూప్‌లో ప్లే చేయండి"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"సమాచారం అందుబాటులో లేదు"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"పరికరాలు ఏవీ అందుబాటులో లేవు"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"పరికరాలను కనుగొనడం సాధ్యపడలేదు, మీ పరికరం, ప్రసార పరికరం ఒకే Wi-Fi నెట్‌వర్క్‌లో ఉన్నాయని నిర్ధారించుకుని, మళ్లీ ట్రై చేయండి."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"మీ పరికరం, ప్రసార పరికరం ఒకే Wi-Fi నెట్‌వర్క్‌లో ఉన్నాయని నిర్ధారించుకోండి."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"పూర్తయింది"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-th/strings.xml b/mediarouter/mediarouter/src/main/res/values-th/strings.xml
index 9738543..43390b7 100644
--- a/mediarouter/mediarouter/src/main/res/values-th/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-th/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"เล่นในกลุ่ม"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"ไม่มีข้อมูล"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"ไม่มีอุปกรณ์ที่ใช้ได้"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"หาอุปกรณ์ไม่พบ ตรวจสอบว่าอุปกรณ์ของคุณและอุปกรณ์แคสต์ใช้เครือข่าย Wi-Fi เดียวกันแล้วลองอีกครั้ง"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"ตรวจสอบว่าอุปกรณ์ของคุณและอุปกรณ์แคสต์ใช้เครือข่าย Wi-Fi เดียวกัน"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"เสร็จสิ้น"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-tl/strings.xml b/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
index be497a3..e63231a 100644
--- a/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-tl/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"I-play sa isang pangkat"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Walang available na impormasyon"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Walang available na device"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Hindi makahanap ng mga device, tiyaking nakakonekta sa iisang Wi-Fi network ang iyong device at ang Cast device at subukan ulit."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Tiyaking nakakonekta sa iisang Wi-Fi network ang iyong device at ang Cast device."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Tapos na"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-tr/strings.xml b/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
index 3bc302e..c919e99 100644
--- a/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-tr/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Bir grupta oynatın"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Bilgi yok"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Kullanılabilir cihaz yok"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Cihaz bulunamadı. Cihazınızın ve yayın cihazının aynı kablosuz ağa bağlı olduğundan emin olup tekrar deneyin."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Cihazınızın yayın cihazınızla aynı kablosuz ağa bağlı olduğundan emin olun."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Bitti"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-uk/strings.xml b/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
index e997a99..a0656db 100644
--- a/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-uk/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Увімкнути на групі пристроїв"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Немає інформації"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Немає доступних пристроїв"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Не вдається знайти пристрої. Переконайтеся, що ваш пристрій і пристрій для трансляції підключено до однієї мережі Wi-Fi, і повторіть спробу."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Переконайтеся, що ваш пристрій і пристрій для трансляції підключено до однієї мережі Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Готово"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-ur/strings.xml b/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
index a0b934d..f1e0370 100644
--- a/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-ur/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"گروپ پر چلائیں"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"کوئی معلومات دستیاب نہیں"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"کوئی آلہ دستیاب نہیں ہے"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"‏آلات تلاش کرنے سے قاصر، یقینی بنائیں کہ آپ کا آلہ اور کاسٹ آلہ ایک ہی Wi-Fi نیٹ ورک پر ہیں اور دوبارہ کوشش کریں۔"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"‏یقینی بنائیں کہ آپ کا آلہ اور کاسٹ آلہ ایک ہی Wi-Fi نیٹ ورک پر ہیں۔"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"ہو گیا"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-uz/strings.xml b/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
index 106568b..98732ad 100644
--- a/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-uz/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Guruhda ijro qilish"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Hech narsa topilmadi"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Hech qanday qurilma topilmadi"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Qurilmalar topilmadi, qurilmangiz va translatsiya qurilmasi bir xil Wi-Fi tarmoqqa ulanganini tekshiring va qaytadan urining."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Qurilmangiz va translatsiya qurilmasi bir xil Wi-Fi tarmoqqa ulangan boʻlishi lozim."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Tayyor"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-vi/strings.xml b/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
index 54ac79f..f937b8c 100644
--- a/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-vi/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Phát trên nhóm"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Không có thông tin nào"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Không có thiết bị nào"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Không tìm thấy thiết bị, hãy đảm bảo thiết bị của bạn và Thiết bị truyền sử dụng cùng một mạng Wi-Fi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Hãy đảm bảo thiết bị của bạn và Thiết bị truyền sử dụng cùng một mạng Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Xong"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
index e90a3d8..3155df2 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rCN/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在一组设备上播放"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"没有任何相关信息"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"没有可用的设备"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"无法找到设备,确保您的设备和投放设备使用的是同一个 WLAN 网络,然后重试。"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"确保您的设备和投放设备使用的是同一个 WLAN 网络。"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"完成"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
index c907ac9..e37af77 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rHK/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在群組裝置中播放"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"沒有資料可以提供"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"沒有可用的裝置"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"找不到裝置。請確保你的裝置與投放裝置已連線至相同的 Wi-Fi 網絡,然後再試一次。"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"請確保你的裝置與投放裝置已連線至相同的 Wi-Fi 網絡。"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"完成"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml b/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
index a4977fa..16cddde 100644
--- a/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zh-rTW/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"在群組上播放"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"沒有可用的資訊"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"找不到裝置"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"找不到裝置。請確認你的裝置和投放裝置已連上同一個 Wi-Fi 網路,然後再試一次。"</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"請確認你的裝置和投放裝置已連上同一個 Wi-Fi 網路。"</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"完成"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values-zu/strings.xml b/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
index 5b03991..cc0b025 100644
--- a/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values-zu/strings.xml
@@ -42,7 +42,4 @@
     <string name="mr_dialog_transferable_header" msgid="6068257520605505468">"Dlala eqenjini"</string>
     <string name="mr_cast_dialog_title_view_placeholder" msgid="2175930138959078155">"Alukho ulwazi olutholakalayo"</string>
     <string name="mr_chooser_zero_routes_found_title" msgid="5213435473397442608">"Ayikho idivayisi etholakalayo"</string>
-    <string name="mr_chooser_zero_routes_description" msgid="5123320430013505927">"Awukwazi ukuthola amadivayisi, qinisekisa ukuthi idivayisi yakho nedivayisi ye-Cast zikunethiwekhi efanayo ye-Wi-Fi bese uyazama futhi."</string>
-    <string name="mr_chooser_wifi_warning_description" msgid="337903053432238985">"Qinisekisa ukuthi idivayisi yakho Nedivayisi yabalingisi zikunethiwekhi efanayo ye-Wi-Fi."</string>
-    <string name="mr_chooser_done_button_label" msgid="7897288652928484627">"Kwenziwe"</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values/attrs.xml b/mediarouter/mediarouter/src/main/res/values/attrs.xml
index 3e6dbe0..f25789e 100644
--- a/mediarouter/mediarouter/src/main/res/values/attrs.xml
+++ b/mediarouter/mediarouter/src/main/res/values/attrs.xml
@@ -41,6 +41,7 @@
     <attr name="mediaRoutePauseDrawable" format="reference" />
     <attr name="mediaRouteStopDrawable" format="reference" />
     <attr name="mediaRouteAudioTrackDrawable" format="reference" />
+    <attr name="mediaRouteWifiIconDrawable" format="reference" />
     <attr name="mediaRouteDefaultIconDrawable" format="reference" />
     <attr name="mediaRouteTvIconDrawable" format="reference" />
     <attr name="mediaRouteSpeakerIconDrawable" format="reference" />
diff --git a/mediarouter/mediarouter/src/main/res/values/dimens.xml b/mediarouter/mediarouter/src/main/res/values/dimens.xml
index f03eced..16d1a6d 100644
--- a/mediarouter/mediarouter/src/main/res/values/dimens.xml
+++ b/mediarouter/mediarouter/src/main/res/values/dimens.xml
@@ -53,6 +53,9 @@
     <!-- Group list fade out animation duration. -->
     <integer name="mr_controller_volume_group_list_fade_out_duration_ms">200</integer>
 
+    <!-- Size of wifi icon. -->
+    <dimen name="mr_controller_wifi_icon_size">24dp</dimen>
+
     <!-- MediaRouteDynamicChooserDialog/MediaRouteDynamicControllerDialog's common dimensions. -->
     <eat-comment />
     <!-- Height of group volume item in dynamic group -->
diff --git a/mediarouter/mediarouter/src/main/res/values/strings.xml b/mediarouter/mediarouter/src/main/res/values/strings.xml
index 40d73e1..fa295bd 100644
--- a/mediarouter/mediarouter/src/main/res/values/strings.xml
+++ b/mediarouter/mediarouter/src/main/res/values/strings.xml
@@ -43,6 +43,9 @@
     <!-- Placeholder text to show when no devices have been found. [CHAR LIMIT=50] -->
     <string name="mr_chooser_searching">Finding devices</string>
 
+    <!-- Placeholder text to show when looking for devices. [CHAR LIMIT=50] -->
+    <string name="mr_chooser_looking_for_devices">Looking for devices...</string>
+
     <!-- Button to disconnect from a media route.  [CHAR LIMIT=30] -->
     <string name="mr_controller_disconnect">Disconnect</string>
 
@@ -98,12 +101,18 @@
     <!-- Title of the media route chooser dialog when zero routes have been found after searching. [CHAR_LIMIT=NONE] -->
     <string name="mr_chooser_zero_routes_found_title">No devices available</string>
 
-    <!-- Text displayed when no routes have been found after searching. [CHAR_LIMIT=NONE] -->
-    <string name="mr_chooser_zero_routes_description"><a href="https://support.google.com/chromecast/?p=trouble-finding-devices">Learn more</a> about how you can cast your content to other devices.</string>
-
     <!-- Text displayed to hint making sure device and cast device are connected to the same Wi-Fi. [CHAR_LIMIT=NONE] -->
-    <string name="mr_chooser_wifi_warning_description">Make sure your device and the Cast device are on the same Wi-Fi network. \n\n<a href="https://support.google.com/chromecast/?p=trouble-finding-devices">Learn more</a></string>
+    <string name="mr_chooser_wifi_warning_description">Make sure the other device is on the same Wi-Fi network as this %s</string>
 
-    <!-- The label of the Done button that closes the Cast media route chooser dialog when tapped. [CHAR_LIMIT=30] -->
-    <string name="mr_chooser_done_button_label">Done</string>
+    <!-- Text displayed to link the user to the support article. [CHAR_LIMIT=NONE] -->
+    <string name="mr_chooser_wifi_learn_more"><a href="https://support.google.com/chromecast/?p=trouble-finding-devices">Learn more</a></string>
+    <string name="ic_media_route_learn_more_accessibility">Learn how to cast</string>
+
+    <!-- Text displayed representing different form factors of devices. [CHAR_LIMIT=NONE] -->
+    <string name="mr_device_form_factor_phone">phone</string>
+    <string name="mr_device_form_factor_tablet">tablet</string>
+    <string name="mr_device_form_factor_tv">tv</string>
+    <string name="mr_device_form_factor_watch">watch</string>
+    <string name="mr_device_form_factor_car">car</string>
+    <string name="mr_device_form_factor_unknown">device</string>
 </resources>
diff --git a/mediarouter/mediarouter/src/main/res/values/themes.xml b/mediarouter/mediarouter/src/main/res/values/themes.xml
index b5af40f..f723381 100644
--- a/mediarouter/mediarouter/src/main/res/values/themes.xml
+++ b/mediarouter/mediarouter/src/main/res/values/themes.xml
@@ -27,6 +27,7 @@
         <item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_dark</item>
         <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_dark</item>
         <item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_dark</item>
+        <item name="mediaRouteWifiIconDrawable">@drawable/mr_wifi_icon_dark</item>
         <item name="mediaRouteDefaultIconDrawable">@drawable/ic_mr_button_disconnected_dark</item>
         <item name="mediaRouteTvIconDrawable">@drawable/ic_vol_type_tv_dark</item>
         <item name="mediaRouteSpeakerIconDrawable">@drawable/ic_vol_type_speaker_dark</item>
@@ -51,6 +52,7 @@
         <item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_light</item>
         <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_light</item>
         <item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_light</item>
+        <item name="mediaRouteWifiIconDrawable">@drawable/mr_wifi_icon_light</item>
         <item name="mediaRouteDefaultIconDrawable">@drawable/ic_mr_button_grey</item>
         <item name="mediaRouteTvIconDrawable">@drawable/ic_vol_type_tv_light</item>
         <item name="mediaRouteSpeakerIconDrawable">@drawable/ic_vol_type_speaker_light</item>
diff --git a/navigation/navigation-fragment/build.gradle b/navigation/navigation-fragment/build.gradle
index 7d08548..021fb81 100644
--- a/navigation/navigation-fragment/build.gradle
+++ b/navigation/navigation-fragment/build.gradle
@@ -23,12 +23,12 @@
 }
 
 dependencies {
-    api("androidx.fragment:fragment-ktx:1.6.0-rc01")
+    api("androidx.fragment:fragment-ktx:1.6.0")
     api(project(":navigation:navigation-runtime"))
     api("androidx.slidingpanelayout:slidingpanelayout:1.2.0")
     api(libs.kotlinStdlib)
     androidTestImplementation(project(":navigation:navigation-testing"))
-    androidTestImplementation("androidx.fragment:fragment-testing:1.6.0-rc01")
+    androidTestImplementation("androidx.fragment:fragment-testing:1.6.0")
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testRunner)
diff --git a/room/room-common/src/main/java/androidx/room/AutoMigration.kt b/room/room-common/src/main/java/androidx/room/AutoMigration.kt
index c60ddb8..112f4b7 100644
--- a/room/room-common/src/main/java/androidx/room/AutoMigration.kt
+++ b/room/room-common/src/main/java/androidx/room/AutoMigration.kt
@@ -55,11 +55,11 @@
  *        Artist.class
  *    ],
  *    autoMigrations = [
- *        @AutoMigration (
+ *        AutoMigration (
  *            from = 1,
  *            to = 2
  *        ),
- *        @AutoMigration (
+ *        AutoMigration (
  *            from = 2,
  *            to = 3,
  *            spec = MusicDatabase.MyExampleAutoMigration::class
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
index ca11a18..338d041 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KSTypeVarianceResolver.kt
@@ -177,15 +177,24 @@
         val type = type ?: return this
         val resolvedType = type.getJavaWildcard(scope)
         fun inheritDeclarationSiteVariance(): Boolean {
+            // The variance of previous type arguments on the stack. If the type argument has no
+            // explicit (aka use-site) variance, the type param (aka declaration site) variance is
+            // used.
+            val varianceStack = typeArgStack.indices.map { i ->
+                if (typeArgStack[i].variance != Variance.INVARIANT) {
+                    typeArgStack[i].variance
+                } else {
+                    typeParamStack[i].variance
+                }
+            }
             // Before we check the current variance, we need to check the previous variance in the
             // stack to see if they allow us to inherit the current variance, and that logic differs
             // depending on the scope.
             if (scope.isValOrReturnType()) {
                 // For val and return type scopes, we don't use the declaration-site variance if
                 // none of variances in the stack are contravariant.
-                if (typeParamStack.indices.none { i ->
-                        (typeParamStack[i].variance == Variance.CONTRAVARIANT ||
-                            typeArgStack[i].variance == Variance.CONTRAVARIANT) &&
+                if (varianceStack.indices.none { i ->
+                        (varianceStack[i] == Variance.CONTRAVARIANT) &&
                             // The declaration and use site variance is ignored when using
                             // @JvmWildcard explicitly on a type.
                             !typeArgStack[i].hasJvmWildcardAnnotation()
@@ -195,15 +204,14 @@
             } else {
                 // For method parameters and var type scopes, we don't use the declaration-site
                 // variance if all of the following conditions apply.
-                if ( // If the last variance in the type argument stack is not contravariant
-                    typeArgStack.isNotEmpty() &&
-                    typeArgStack.last().variance != Variance.CONTRAVARIANT &&
-                    // And the type parameter stack contains at least one invariant parameter.
-                    typeParamStack.isNotEmpty() &&
-                    typeParamStack.any { it.variance == Variance.INVARIANT } &&
+                if ( // If the last variance in the stack is not contravariant
+                    varianceStack.isNotEmpty() &&
+                    varianceStack.last() != Variance.CONTRAVARIANT &&
+                    // And the stack contains at least one invariant parameter.
+                    varianceStack.any { it == Variance.INVARIANT } &&
                     // And the first invariant comes before the last contravariant (if any).
-                    typeParamStack.indexOfFirst { it.variance == Variance.INVARIANT } >=
-                    typeParamStack.indexOfLast { it.variance == Variance.CONTRAVARIANT }
+                    varianceStack.indexOfFirst { it == Variance.INVARIANT } >=
+                    varianceStack.indexOfLast { it == Variance.CONTRAVARIANT }
                 ) {
                     return false
                 }
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
index c793faf..2cf13ff 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspTypeNamesGoldenTest.kt
@@ -369,6 +369,15 @@
                         fun method53(param: MyInlineType): MyInlineType = TODO()
                         fun method54(param: MyGenericOut<MyInlineType>): MyGenericOut<MyInlineType> = TODO()
                         fun method55(param: MyGenericIn<MyInlineType>): MyGenericIn<MyInlineType> = TODO()
+                        fun method56(
+                            param: MyGeneric<out MyGeneric<out MyGenericOut<MyInterface>>>
+                        ): MyGeneric<out MyGeneric<out MyGenericOut<MyInterface>>> = TODO()
+                        fun method57(
+                            param: MyGeneric<out MyGeneric<MyGenericOut<MyInterface>>>
+                        ): MyGeneric<out MyGeneric<MyGenericOut<MyInterface>>> = TODO()
+                        fun method58(
+                            param: MyGeneric<out MyGenericOut<MyGenericOut<MyInterface>>>
+                        ): MyGeneric<out MyGenericOut<MyGenericOut<MyInterface>>> = TODO()
                     }
                 """.trimIndent()
             ), listOf("Subject")
diff --git a/settings.gradle b/settings.gradle
index e44b525..43d3b68 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -436,6 +436,7 @@
 includeProject(":appactions:interaction:interaction-service", [BuildType.MAIN])
 includeProject(":appactions:interaction:interaction-service-proto", [BuildType.MAIN])
 includeProject(":appactions:interaction:interaction-service-testing", [BuildType.MAIN])
+includeProject(":appactions:interaction:interaction-service-wear", [BuildType.MAIN])
 includeProject(":appactions:interaction:integration-tests:testapp", [BuildType.MAIN])
 includeProject(":appcompat:appcompat", [BuildType.MAIN])
 includeProject(":appcompat:appcompat-benchmark", [BuildType.MAIN])
diff --git a/test/uiautomator/uiautomator/build.gradle b/test/uiautomator/uiautomator/build.gradle
index b1dd210..b2293217 100644
--- a/test/uiautomator/uiautomator/build.gradle
+++ b/test/uiautomator/uiautomator/build.gradle
@@ -24,6 +24,7 @@
 dependencies {
     implementation(libs.junit)
     implementation("androidx.annotation:annotation:1.4.0")
+    implementation("androidx.tracing:tracing:1.1.0")
 
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testExtJunit)
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
index b67734a..5f8e39f 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoDumper.java
@@ -23,6 +23,8 @@
 
 import androidx.annotation.DoNotInline;
 import androidx.annotation.RequiresApi;
+import androidx.test.uiautomator.util.Traces;
+import androidx.test.uiautomator.util.Traces.Section;
 
 import org.xmlpull.v1.XmlSerializer;
 
@@ -30,29 +32,33 @@
 import java.io.OutputStream;
 
 class AccessibilityNodeInfoDumper {
-    private AccessibilityNodeInfoDumper() { }
 
-    private static final String LOGTAG = AccessibilityNodeInfoDumper.class.getSimpleName();
+    private static final String TAG = AccessibilityNodeInfoDumper.class.getSimpleName();
     private static final String[] NAF_EXCLUDED_CLASSES = new String[] {
             android.widget.GridView.class.getName(), android.widget.GridLayout.class.getName(),
             android.widget.ListView.class.getName(), android.widget.TableLayout.class.getName()
     };
 
+    private AccessibilityNodeInfoDumper() { }
+
     public static void dumpWindowHierarchy(UiDevice device, OutputStream out) throws IOException {
-        XmlSerializer serializer = Xml.newSerializer();
-        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
-        serializer.setOutput(out, "UTF-8");
+        try (Section ignored = Traces.trace("AccessibilityNodeInfoDumper.dumpWindowHierarchy")) {
+            XmlSerializer serializer = Xml.newSerializer();
+            serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
+            serializer.setOutput(out, "UTF-8");
 
-        serializer.startDocument("UTF-8", true);
-        serializer.startTag("", "hierarchy"); // TODO(allenhair): Should we use a namespace?
-        serializer.attribute("", "rotation", Integer.toString(device.getDisplayRotation()));
+            serializer.startDocument("UTF-8", true);
+            serializer.startTag("", "hierarchy"); // TODO(allenhair): Should we use a namespace?
+            serializer.attribute("", "rotation", Integer.toString(device.getDisplayRotation()));
 
-        for (AccessibilityNodeInfo root : device.getWindowRoots()) {
-            dumpNodeRec(root, serializer, 0, device.getDisplayWidth(), device.getDisplayHeight());
+            for (AccessibilityNodeInfo root : device.getWindowRoots()) {
+                dumpNodeRec(root, serializer, 0, device.getDisplayWidth(),
+                        device.getDisplayHeight());
+            }
+
+            serializer.endTag("", "hierarchy");
+            serializer.endDocument();
         }
-
-        serializer.endTag("", "hierarchy");
-        serializer.endDocument();
     }
 
     private static void dumpNodeRec(AccessibilityNodeInfo node, XmlSerializer serializer,int index,
@@ -90,11 +96,10 @@
                     dumpNodeRec(child, serializer, i, width, height);
                     child.recycle();
                 } else {
-                    Log.i(LOGTAG, String.format("Skipping invisible child: %s", child));
+                    Log.i(TAG, String.format("Skipping invisible child: %s", child));
                 }
             } else {
-                Log.i(LOGTAG, String.format("Null child %d/%d, parent: %s",
-                        i, count, node));
+                Log.i(TAG, String.format("Null child %d/%d, parent: %s", i, count, node));
             }
         }
         serializer.endTag("", "node");
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
index f91d12a..d2ff604 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/ByMatcher.java
@@ -23,6 +23,8 @@
 import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+import androidx.test.uiautomator.util.Traces;
+import androidx.test.uiautomator.util.Traces.Section;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -78,14 +80,16 @@
      */
     static AccessibilityNodeInfo findMatch(UiDevice device, BySelector selector,
             AccessibilityNodeInfo... roots) {
-        ByMatcher matcher = new ByMatcher(device, selector, true);
-        for (AccessibilityNodeInfo root : roots) {
-            List<AccessibilityNodeInfo> matches = matcher.findMatches(root);
-            if (!matches.isEmpty()) {
-                return matches.get(0);
+        try (Section ignored = Traces.trace("ByMatcher.findMatch")) {
+            ByMatcher matcher = new ByMatcher(device, selector, true);
+            for (AccessibilityNodeInfo root : roots) {
+                List<AccessibilityNodeInfo> matches = matcher.findMatches(root);
+                if (!matches.isEmpty()) {
+                    return matches.get(0);
+                }
             }
+            return null;
         }
-        return null;
     }
 
     /**
@@ -94,12 +98,14 @@
      */
     static List<AccessibilityNodeInfo> findMatches(UiDevice device, BySelector selector,
             AccessibilityNodeInfo... roots) {
-        List<AccessibilityNodeInfo> ret = new ArrayList<>();
-        ByMatcher matcher = new ByMatcher(device, selector, false);
-        for (AccessibilityNodeInfo root : roots) {
-            ret.addAll(matcher.findMatches(root));
+        try (Section ignored = Traces.trace("ByMatcher.findMatches")) {
+            List<AccessibilityNodeInfo> ret = new ArrayList<>();
+            ByMatcher matcher = new ByMatcher(device, selector, false);
+            for (AccessibilityNodeInfo root : roots) {
+                ret.addAll(matcher.findMatches(root));
+            }
+            return ret;
         }
-        return ret;
     }
 
     /** Searches the hierarchy under the root for nodes that match the selector. */
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/GestureController.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/GestureController.java
index 1c165d3..03fbd29 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/GestureController.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/GestureController.java
@@ -40,7 +40,8 @@
  * The {@link GestureController} provides methods for performing high-level {@link PointerGesture}s.
  */
 class GestureController {
-    private static final String TAG = "GestureController";
+
+    private static final String TAG = GestureController.class.getSimpleName();
 
     private static final long MOTION_EVENT_INJECTION_DELAY_MILLIS = 8; // 120Hz touch report rate
 
@@ -98,7 +99,6 @@
      */
     public <U> U performGestureAndWait(EventCondition<U> condition, long timeout,
             PointerGesture ... gestures) {
-
         return getDevice().performActionAndWait(new GestureRunnable(gestures), condition, timeout);
     }
 
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
index 15ca8ff..23aaf5d 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
@@ -48,6 +48,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.test.uiautomator.util.Traces;
+import androidx.test.uiautomator.util.Traces.Section;
 
 import java.io.BufferedOutputStream;
 import java.io.File;
@@ -71,6 +73,7 @@
  * such as pressing the d-pad or pressing the Home and Menu buttons.
  */
 public class UiDevice implements Searchable {
+
     static final String TAG = UiDevice.class.getSimpleName();
 
     // Use a short timeout after HOME or BACK key presses, as no events might be generated if
@@ -178,8 +181,10 @@
      * was not met before the {@code timeout}.
      */
     public <U> U wait(@NonNull Condition<? super UiDevice, U> condition, long timeout) {
-        Log.d(TAG, String.format("Waiting %dms for %s.", timeout, condition));
-        return mWaitMixin.wait(condition, timeout);
+        try (Section ignored = Traces.trace("UiDevice#wait")) {
+            Log.d(TAG, String.format("Waiting %dms for %s.", timeout, condition));
+            return mWaitMixin.wait(condition, timeout);
+        }
     }
 
     /**
@@ -192,22 +197,24 @@
      */
     public <U> U performActionAndWait(@NonNull Runnable action,
             @NonNull EventCondition<U> condition, long timeout) {
-        AccessibilityEvent event = null;
-        Log.d(TAG, String.format("Performing action %s and waiting %dms for %s.", action, timeout,
-                condition));
-        try {
-            event = getUiAutomation().executeAndWaitForEvent(
-                    action, condition, timeout);
-        } catch (TimeoutException e) {
-            // Ignore
-            Log.w(TAG, String.format("Timed out waiting %dms on the condition.", timeout), e);
-        }
+        try (Section ignored = Traces.trace("UiDevice#performActionAndWait")) {
+            AccessibilityEvent event = null;
+            Log.d(TAG, String.format("Performing action %s and waiting %dms for %s.", action,
+                    timeout, condition));
+            try {
+                event = getUiAutomation().executeAndWaitForEvent(
+                        action, condition, timeout);
+            } catch (TimeoutException e) {
+                // Ignore
+                Log.w(TAG, String.format("Timed out waiting %dms on the condition.", timeout), e);
+            }
 
-        if (event != null) {
-            event.recycle();
-        }
+            if (event != null) {
+                event.recycle();
+            }
 
-        return condition.getResult();
+            return condition.getResult();
+        }
     }
 
     /**
@@ -627,7 +634,9 @@
      * Default wait timeout is 10 seconds
      */
     public void waitForIdle() {
-        getQueryController().waitForIdle();
+        try (Section ignored = Traces.trace("UiDevice#waitForIdle")) {
+            getQueryController().waitForIdle();
+        }
     }
 
     /**
@@ -635,7 +644,9 @@
      * @param timeout in milliseconds
      */
     public void waitForIdle(long timeout) {
-        getQueryController().waitForIdle(timeout);
+        try (Section ignored = Traces.trace("UiDevice#waitForIdle")) {
+            getQueryController().waitForIdle(timeout);
+        }
     }
 
     /**
@@ -980,33 +991,36 @@
      *         window does not have the specified package name
      */
     public boolean waitForWindowUpdate(@Nullable String packageName, long timeout) {
-        if (packageName != null) {
-            if (!packageName.equals(getCurrentPackageName())) {
-                Log.w(TAG, String.format("Skipping wait as package %s does not match current "
-                        + "window %s.", packageName, getCurrentPackageName()));
+        try (Section ignored = Traces.trace("UiDevice#waitForWindowUpdate")) {
+            if (packageName != null) {
+                if (!packageName.equals(getCurrentPackageName())) {
+                    Log.w(TAG, String.format("Skipping wait as package %s does not match current "
+                            + "window %s.", packageName, getCurrentPackageName()));
+                    return false;
+                }
+            }
+            Runnable emptyRunnable = () -> {
+            };
+            AccessibilityEventFilter checkWindowUpdate = t -> {
+                if (t.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
+                    return packageName == null || (t.getPackageName() != null
+                            && packageName.contentEquals(t.getPackageName()));
+                }
+                return false;
+            };
+            Log.d(TAG, String.format("Waiting %dms for window update of package %s.", timeout,
+                    packageName));
+            try {
+                getUiAutomation().executeAndWaitForEvent(emptyRunnable, checkWindowUpdate, timeout);
+            } catch (TimeoutException e) {
+                Log.w(TAG, String.format("Timed out waiting %dms on window update.", timeout), e);
+                return false;
+            } catch (Exception e) {
+                Log.e(TAG, "Failed to wait for window update.", e);
                 return false;
             }
+            return true;
         }
-        Runnable emptyRunnable = () -> {};
-        AccessibilityEventFilter checkWindowUpdate = t -> {
-            if (t.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
-                return packageName == null || (t.getPackageName() != null
-                        && packageName.contentEquals(t.getPackageName()));
-            }
-            return false;
-        };
-        Log.d(TAG, String.format("Waiting %dms for window update of package %s.", timeout,
-                packageName));
-        try {
-            getUiAutomation().executeAndWaitForEvent(emptyRunnable, checkWindowUpdate, timeout);
-        } catch (TimeoutException e) {
-            Log.w(TAG, String.format("Timed out waiting %dms on window update.", timeout), e);
-            return false;
-        } catch (Exception e) {
-            Log.e(TAG, "Failed to wait for window update.", e);
-            return false;
-        }
-        return true;
     }
 
     /**
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
index b3abb55..5600fd2 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
@@ -41,6 +41,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.test.uiautomator.util.Traces;
+import androidx.test.uiautomator.util.Traces.Section;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -196,8 +198,10 @@
      * condition} was not met before the {@code timeout}.
      */
     public <U> U wait(@NonNull Condition<? super UiObject2, U> condition, long timeout) {
-        Log.d(TAG, String.format("Waiting %dms for %s.", timeout, condition));
-        return mWaitMixin.wait(condition, timeout);
+        try (Section ignored = Traces.trace("UiObject2#wait")) {
+            Log.d(TAG, String.format("Waiting %dms for %s.", timeout, condition));
+            return mWaitMixin.wait(condition, timeout);
+        }
     }
 
     // Search functions
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/util/Traces.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/util/Traces.java
new file mode 100644
index 0000000..73d5053
--- /dev/null
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/util/Traces.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.test.uiautomator.util;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.tracing.Trace;
+
+import java.io.Closeable;
+
+@RestrictTo(RestrictTo.Scope.LIBRARY)
+public final class Traces {
+
+    private Traces() {}
+
+    public interface Section extends Closeable {
+        @Override
+        void close();
+    }
+
+    @NonNull
+    public static Section trace(@NonNull String label) {
+        Trace.beginSection(label);
+        return Trace::endSection;
+    }
+}
diff --git a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
index fa4b4c4..f281d89 100644
--- a/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
+++ b/testutils/testutils-kmp/src/commonMain/kotlin/androidx/kruth/MapSubject.kt
@@ -27,6 +27,22 @@
         }
     }
 
+    /** Fails if the map is empty. */
+    fun isNotEmpty() {
+        requireNonNull(actual) { "Expected to be not empty, but was null" }
+
+        if (actual.isEmpty()) {
+            asserter.fail("Expected to be not empty, but was $actual")
+        }
+    }
+
+    /** Fails if expected size of map is not equal to actual. */
+    fun hasSize(expectedSize: Int) {
+        require(expectedSize >= 0) { "expectedSize must be >= 0, but was $expectedSize" }
+        requireNonNull(actual) { "Expected to be empty, but was null" }
+        asserter.assertEquals(expectedSize, actual.size)
+    }
+
     /** Fails if the map does not contain the given key. */
     fun containsKey(key: Any?) {
         requireNonNull(actual) { "Expected to contain $key, but was null" }
diff --git a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt
index 6590743..e1ddf10 100644
--- a/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt
+++ b/testutils/testutils-kmp/src/commonTest/kotlin/androidx/kruth/MapSubjectTest.kt
@@ -232,6 +232,35 @@
     }
 
     @Test
+    fun isNotEmpty() {
+        assertThat(mapOf(1 to 5)).isNotEmpty()
+    }
+
+    @Test
+    fun isNotEmptyWithFailure() {
+        assertFailsWith<AssertionError> {
+            assertThat(mapOf<Any, Any>()).isNotEmpty()
+        }
+    }
+
+    @Test
+    fun hasSize() {
+        assertThat(mapOf(1 to 2, 3 to 4)).hasSize(2)
+    }
+
+    @Test
+    fun hasSizeZero() {
+        assertThat(mapOf<Any, Any>()).hasSize(0)
+    }
+
+    @Test
+    fun hasSizeNegative() {
+        assertFailsWith<IllegalArgumentException> {
+            assertThat(mapOf(1 to 2)).hasSize(-1)
+        }
+    }
+
+    @Test
     fun containsKey() {
         assertThat(mapOf("kurt" to "kluever")).containsKey("kurt")
     }
diff --git a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
index f6f80437..4bda6b5 100644
--- a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
@@ -49,6 +49,7 @@
 import kotlin.test.assertTrue
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
 import kotlinx.coroutines.flow.firstOrNull
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.test.TestScope
@@ -62,10 +63,11 @@
 class WindowAreaControllerImplTest {
 
     @get:Rule
-    public val activityScenario: ActivityScenarioRule<TestActivity> =
+    val activityScenario: ActivityScenarioRule<TestActivity> =
         ActivityScenarioRule(TestActivity::class.java)
 
     private val testScope = TestScope(UnconfinedTestDispatcher())
+    private val minVendorApiLevel = 3
 
     /**
      * Tests that we can get a list of [WindowAreaInfo] objects with a type of
@@ -74,9 +76,9 @@
      */
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testRearFacingWindowAreaInfoList(): Unit = testScope.runTest {
+    fun testRearFacingWindowAreaInfoList(): Unit = testScope.runTest {
         assumeTrue(Build.VERSION.SDK_INT > Build.VERSION_CODES.Q)
-        assumeAtLeastVendorApiLevel(3)
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
         activityScenario.scenario.onActivity {
             val extensionComponent = FakeWindowAreaComponent()
             val controller = WindowAreaControllerImpl(
@@ -141,7 +143,7 @@
     }
 
     @Test
-    public fun testWindowAreaInfoListNullComponent(): Unit = testScope.runTest {
+    fun testWindowAreaInfoListNullComponent(): Unit = testScope.runTest {
         activityScenario.scenario.onActivity {
             val controller = EmptyWindowAreaControllerImpl()
             val collector = TestWindowAreaInfoListConsumer()
@@ -162,8 +164,8 @@
      */
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testTransferToRearFacingWindowArea(): Unit = testScope.runTest {
-        assumeAtLeastVendorApiLevel(3)
+    fun testTransferToRearFacingWindowArea(): Unit = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
         val extensions = FakeWindowAreaComponent()
         val controller = WindowAreaControllerImpl(
             windowAreaComponent = extensions,
@@ -171,14 +173,14 @@
         )
         extensions.currentRearDisplayStatus = STATUS_AVAILABLE
         val callback = TestWindowAreaSessionCallback()
-        var windowAreaInfo: WindowAreaInfo? = null
-        testScope.launch(Job()) {
-            windowAreaInfo = controller.windowAreaInfos.firstOrNull()
+        val windowAreaInfo: WindowAreaInfo? = async {
+            return@async controller.windowAreaInfos.firstOrNull()
                 ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
-        }
+        }.await()
+
         assertNotNull(windowAreaInfo)
         assertEquals(
-            windowAreaInfo!!.getCapability(OPERATION_TRANSFER_ACTIVITY_TO_AREA)?.status,
+            windowAreaInfo.getCapability(OPERATION_TRANSFER_ACTIVITY_TO_AREA)?.status,
             WINDOW_AREA_STATUS_AVAILABLE
         )
 
@@ -192,7 +194,7 @@
             assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
             testActivity.resetLayoutCounter()
             controller.transferActivityToWindowArea(
-                windowAreaInfo!!.token,
+                windowAreaInfo.token,
                 testActivity,
                 Runnable::run,
                 callback
@@ -213,21 +215,21 @@
 
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testTransferRearDisplayReturnsError_statusUnavailable(): Unit = testScope.runTest {
+    fun testTransferRearDisplayReturnsError_statusUnavailable() {
         testTransferRearDisplayReturnsError(STATUS_UNAVAILABLE)
     }
 
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testTransferRearDisplayReturnsError_statusActive(): Unit = testScope.runTest {
+    fun testTransferRearDisplayReturnsError_statusActive() {
         testTransferRearDisplayReturnsError(STATUS_ACTIVE)
     }
 
     @RequiresApi(Build.VERSION_CODES.Q)
     private fun testTransferRearDisplayReturnsError(
         initialState: @WindowAreaComponent.WindowAreaStatus Int
-    ) {
-        assumeAtLeastVendorApiLevel(3)
+    ) = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
         val extensions = FakeWindowAreaComponent()
         val controller = WindowAreaControllerImpl(
             windowAreaComponent = extensions,
@@ -235,20 +237,20 @@
         )
         extensions.currentRearDisplayStatus = initialState
         val callback = TestWindowAreaSessionCallback()
-        var windowAreaInfo: WindowAreaInfo? = null
-        testScope.launch(Job()) {
-            windowAreaInfo = controller.windowAreaInfos.firstOrNull()
+        val windowAreaInfo: WindowAreaInfo? = async {
+            return@async controller.windowAreaInfos.firstOrNull()
                 ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
-        }
+        }.await()
+
         assertNotNull(windowAreaInfo)
         assertEquals(
-            windowAreaInfo!!.getCapability(OPERATION_TRANSFER_ACTIVITY_TO_AREA)?.status,
+            windowAreaInfo.getCapability(OPERATION_TRANSFER_ACTIVITY_TO_AREA)?.status,
             WindowAreaAdapter.translate(initialState)
         )
 
         activityScenario.scenario.onActivity { testActivity ->
             controller.transferActivityToWindowArea(
-                windowAreaInfo!!.token,
+                windowAreaInfo.token,
                 testActivity,
                 Runnable::run,
                 callback
@@ -269,23 +271,24 @@
      */
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testPresentRearDisplayArea(): Unit = testScope.runTest {
-        assumeAtLeastVendorApiLevel(3)
+    fun testPresentRearDisplayArea(): Unit = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
         val extensions = FakeWindowAreaComponent()
         val controller = WindowAreaControllerImpl(
             windowAreaComponent = extensions,
             vendorApiLevel = 3
         )
-        var windowAreaInfo: WindowAreaInfo? = null
+
         extensions.updateRearDisplayStatusListeners(STATUS_AVAILABLE)
         extensions.updateRearDisplayPresentationStatusListeners(STATUS_AVAILABLE)
-        testScope.launch(Job()) {
-            windowAreaInfo = controller.windowAreaInfos.firstOrNull()
+        val windowAreaInfo: WindowAreaInfo? = async {
+            return@async controller.windowAreaInfos.firstOrNull()
                 ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
-        }
+        }.await()
+
         assertNotNull(windowAreaInfo)
         assertTrue {
-            windowAreaInfo!!
+            windowAreaInfo
                 .getCapability(OPERATION_PRESENT_ON_AREA)?.status ==
                 WINDOW_AREA_STATUS_AVAILABLE
         }
@@ -293,7 +296,7 @@
         val callback = TestWindowAreaPresentationSessionCallback()
         activityScenario.scenario.onActivity { testActivity ->
             controller.presentContentOnWindowArea(
-                windowAreaInfo!!.token,
+                windowAreaInfo.token,
                 testActivity,
                 Runnable::run,
                 callback
@@ -311,25 +314,145 @@
         }
     }
 
+    /**
+     * Tests the presentation flow on to a rear facing display works as expected. Similar to
+     * [testPresentRearDisplayArea], but starts the presentation with a new instance of
+     * [WindowAreaControllerImpl].
+     */
     @RequiresApi(Build.VERSION_CODES.Q)
     @Test
-    public fun testRearDisplayPresentationModeSessionEndedError(): Unit = testScope.runTest {
-        assumeAtLeastVendorApiLevel(3)
+    fun testPresentRearDisplayAreaWithNewController(): Unit = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
+        val extensions = FakeWindowAreaComponent()
+        val controller = WindowAreaControllerImpl(
+            windowAreaComponent = extensions,
+            vendorApiLevel = 3
+        )
+
+        extensions.updateRearDisplayStatusListeners(STATUS_AVAILABLE)
+        extensions.updateRearDisplayPresentationStatusListeners(STATUS_AVAILABLE)
+
+        val windowAreaInfo = async {
+            return@async controller.windowAreaInfos.firstOrNull()
+                ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
+        }.await()
+
+        assertNotNull(windowAreaInfo)
+        assertTrue {
+            windowAreaInfo
+                .getCapability(OPERATION_PRESENT_ON_AREA)?.status ==
+                WINDOW_AREA_STATUS_AVAILABLE
+        }
+
+        // Create a new controller to start the presentation.
+        val controller2 = WindowAreaControllerImpl(
+            windowAreaComponent = extensions,
+            vendorApiLevel = 3
+        )
+
+        val callback = TestWindowAreaPresentationSessionCallback()
+        activityScenario.scenario.onActivity { testActivity ->
+            controller2.presentContentOnWindowArea(
+                windowAreaInfo.token,
+                testActivity,
+                Runnable::run,
+                callback
+            )
+            assert(callback.sessionActive)
+            assert(!callback.contentVisible)
+
+            callback.presentation?.setContentView(TextView(testActivity))
+            assert(callback.contentVisible)
+            assert(callback.sessionActive)
+
+            callback.presentation?.close()
+            assert(!callback.contentVisible)
+            assert(!callback.sessionActive)
+        }
+    }
+
+    /**
+     * Tests the presentation flow on to a rear facing display works as expected. Similar to
+     * [testTransferToRearFacingWindowArea], but starts the presentation with a new instance of
+     * [WindowAreaControllerImpl].
+     */
+    @RequiresApi(Build.VERSION_CODES.Q)
+    @Test
+    fun testTransferToRearDisplayAreaWithNewController(): Unit = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
+        val extensions = FakeWindowAreaComponent()
+        val controller = WindowAreaControllerImpl(
+            windowAreaComponent = extensions,
+            vendorApiLevel = 3
+        )
+        extensions.currentRearDisplayStatus = STATUS_AVAILABLE
+        val callback = TestWindowAreaSessionCallback()
+        val windowAreaInfo = async {
+            return@async controller.windowAreaInfos.firstOrNull()
+                ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
+        }.await()
+
+        assertNotNull(windowAreaInfo)
+        assertEquals(
+            windowAreaInfo.getCapability(OPERATION_TRANSFER_ACTIVITY_TO_AREA)?.status,
+            WINDOW_AREA_STATUS_AVAILABLE
+        )
+
+        activityScenario.scenario.onActivity { testActivity ->
+            testActivity.resetLayoutCounter()
+            testActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+            testActivity.waitForLayout()
+        }
+
+        // Create a new controller to start the transfer.
+        val controller2 = WindowAreaControllerImpl(
+            windowAreaComponent = extensions,
+            vendorApiLevel = 3
+        )
+
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+            testActivity.resetLayoutCounter()
+            controller2.transferActivityToWindowArea(
+                windowAreaInfo.token,
+                testActivity,
+                Runnable::run,
+                callback
+            )
+        }
+
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
+            assert(callback.currentSession != null)
+            testActivity.resetLayoutCounter()
+            callback.endSession()
+        }
+        activityScenario.scenario.onActivity { testActivity ->
+            assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+            assert(callback.currentSession == null)
+        }
+    }
+
+    @RequiresApi(Build.VERSION_CODES.Q)
+    @Test
+    fun testRearDisplayPresentationModeSessionEndedError(): Unit = testScope.runTest {
+        assumeAtLeastVendorApiLevel(minVendorApiLevel)
         val extensionComponent = FakeWindowAreaComponent()
         val controller = WindowAreaControllerImpl(
             windowAreaComponent = extensionComponent,
             vendorApiLevel = 3
         )
-        var windowAreaInfo: WindowAreaInfo? = null
+
         extensionComponent.updateRearDisplayStatusListeners(STATUS_AVAILABLE)
         extensionComponent.updateRearDisplayPresentationStatusListeners(STATUS_UNAVAILABLE)
-        testScope.launch(Job()) {
-            windowAreaInfo = controller.windowAreaInfos.firstOrNull()
+        val windowAreaInfo: WindowAreaInfo? = async {
+            return@async controller.windowAreaInfos.firstOrNull()
                 ?.firstOrNull { it.type == WindowAreaInfo.Type.TYPE_REAR_FACING }
-        }
+        }.await()
+
         assertNotNull(windowAreaInfo)
         assertTrue {
-            windowAreaInfo!!
+            windowAreaInfo
                 .getCapability(OPERATION_PRESENT_ON_AREA)?.status ==
                 WINDOW_AREA_STATUS_UNAVAILABLE
         }
@@ -337,7 +460,7 @@
         val callback = TestWindowAreaPresentationSessionCallback()
         activityScenario.scenario.onActivity { testActivity ->
             controller.presentContentOnWindowArea(
-                windowAreaInfo!!.token,
+                windowAreaInfo.token,
                 testActivity,
                 Runnable::run,
                 callback
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaCapability.kt b/window/window/src/main/java/androidx/window/area/WindowAreaCapability.kt
index 3346bf2..8586aec 100644
--- a/window/window/src/main/java/androidx/window/area/WindowAreaCapability.kt
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaCapability.kt
@@ -36,6 +36,14 @@
 
         companion object {
             /**
+             * Status indicating that the WindowArea feature status is unknown, e.g. a status has
+             * not been received from the extensions implementation yet. Note that this is an
+             * internal status - external clients should receive [WINDOW_AREA_STATUS_UNSUPPORTED]
+             * instead. See [WindowAreaAdapter].
+             */
+            internal val WINDOW_AREA_STATUS_UNKNOWN = Status("UNKNOWN")
+
+            /**
              * Status indicating that the WindowArea feature is not a supported feature on the
              * device.
              */
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
index b31d974..641a277 100644
--- a/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
@@ -23,6 +23,7 @@
 import androidx.annotation.RequiresApi
 import androidx.window.area.WindowAreaCapability.Status.Companion.WINDOW_AREA_STATUS_ACTIVE
 import androidx.window.area.WindowAreaCapability.Status.Companion.WINDOW_AREA_STATUS_AVAILABLE
+import androidx.window.area.WindowAreaCapability.Status.Companion.WINDOW_AREA_STATUS_UNKNOWN
 import androidx.window.area.WindowAreaCapability.Status.Companion.WINDOW_AREA_STATUS_UNSUPPORTED
 import androidx.window.area.utils.DeviceUtils
 import androidx.window.core.BuildConfig
@@ -37,9 +38,13 @@
 import androidx.window.layout.WindowMetrics
 import androidx.window.layout.WindowMetricsCalculator
 import java.util.concurrent.Executor
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.asCoroutineDispatcher
 import kotlinx.coroutines.channels.awaitClose
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.callbackFlow
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.launch
 
 /**
  * Implementation of WindowAreaController for devices
@@ -58,9 +63,9 @@
 
     private lateinit var rearDisplaySessionConsumer: Consumer<Int>
     private var currentRearDisplayModeStatus: WindowAreaCapability.Status =
-        WINDOW_AREA_STATUS_UNSUPPORTED
+        WINDOW_AREA_STATUS_UNKNOWN
     private var currentRearDisplayPresentationStatus: WindowAreaCapability.Status =
-        WINDOW_AREA_STATUS_UNSUPPORTED
+        WINDOW_AREA_STATUS_UNKNOWN
 
     private val currentWindowAreaInfoMap = HashMap<String, WindowAreaInfo>()
 
@@ -200,7 +205,24 @@
         executor: Executor,
         windowAreaSessionCallback: WindowAreaSessionCallback
         ) {
-        if (token.interfaceDescriptor == REAR_DISPLAY_BINDER_DESCRIPTOR) {
+        if (token.interfaceDescriptor != REAR_DISPLAY_BINDER_DESCRIPTOR) {
+            executor.execute {
+                windowAreaSessionCallback.onSessionEnded(
+                    IllegalArgumentException("Invalid WindowAreaInfo token"))
+            }
+            return
+        }
+
+        if (currentRearDisplayModeStatus == WINDOW_AREA_STATUS_UNKNOWN) {
+            Log.d(TAG, "Force updating currentRearDisplayModeStatus")
+            // currentRearDisplayModeStatus may be null if the client has not queried
+            // WindowAreaController.windowAreaInfos using this instance. In this case, we query
+            // it for a single value to force update currentRearDisplayModeStatus.
+            CoroutineScope(executor.asCoroutineDispatcher()).launch {
+                windowAreaInfos.first()
+                startRearDisplayMode(activity, executor, windowAreaSessionCallback)
+            }
+        } else {
             startRearDisplayMode(activity, executor, windowAreaSessionCallback)
         }
     }
@@ -211,7 +233,28 @@
         executor: Executor,
         windowAreaPresentationSessionCallback: WindowAreaPresentationSessionCallback
     ) {
-        if (token.interfaceDescriptor == REAR_DISPLAY_BINDER_DESCRIPTOR) {
+        if (token.interfaceDescriptor != REAR_DISPLAY_BINDER_DESCRIPTOR) {
+            executor.execute {
+                windowAreaPresentationSessionCallback.onSessionEnded(
+                    IllegalArgumentException("Invalid WindowAreaInfo token"))
+            }
+            return
+        }
+
+        if (currentRearDisplayPresentationStatus == WINDOW_AREA_STATUS_UNKNOWN) {
+            Log.d(TAG, "Force updating currentRearDisplayPresentationStatus")
+            // currentRearDisplayModeStatus may be null if the client has not queried
+            // WindowAreaController.windowAreaInfos using this instance. In this case, we query
+            // it for a single value to force update currentRearDisplayPresentationStatus.
+            CoroutineScope(executor.asCoroutineDispatcher()).launch {
+                windowAreaInfos.first()
+                startRearDisplayPresentationMode(
+                    activity,
+                    executor,
+                    windowAreaPresentationSessionCallback
+                )
+            }
+        } else {
             startRearDisplayPresentationMode(
                 activity,
                 executor,
diff --git a/work/work-lint/src/main/java/androidx/work/lint/BadConfigurationProviderIssueDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/BadConfigurationProviderIssueDetector.kt
index c8475ef..a02b798 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/BadConfigurationProviderIssueDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/BadConfigurationProviderIssueDetector.kt
@@ -69,6 +69,11 @@
             return
         }
 
+        // Ignore abstract classes.
+        if (context.evaluator.isAbstract(declaration)) {
+            return
+        }
+
         val isApplication = context.evaluator.inheritsFrom(
             declaration.javaPsi, "android.app.Application", true
         )
@@ -91,10 +96,11 @@
     }
 
     override fun afterCheckRootProject(context: Context) {
+        val location = location ?: return
         if (hasApplicableTypes && !correct) {
             context.report(
                 issue = ISSUE,
-                location = location ?: Location.create(context.file),
+                location = location,
                 message = "Expected Application subtype to implement Configuration.Provider"
             )
         }
diff --git a/work/work-lint/src/main/java/androidx/work/lint/RemoveWorkManagerInitializerDetector.kt b/work/work-lint/src/main/java/androidx/work/lint/RemoveWorkManagerInitializerDetector.kt
index 030bfda..298549c 100644
--- a/work/work-lint/src/main/java/androidx/work/lint/RemoveWorkManagerInitializerDetector.kt
+++ b/work/work-lint/src/main/java/androidx/work/lint/RemoveWorkManagerInitializerDetector.kt
@@ -43,10 +43,6 @@
     private var removedDefaultInitializer = false
     private var location: Location? = null
 
-    // The `Application` subclass.
-    private var javaContext: JavaContext? = null
-    private var klass: UClass? = null
-
     private var applicationImplementsConfigurationProvider = false
 
     companion object {
@@ -90,12 +86,13 @@
 
     override fun getApplicableElements() = listOf("application")
 
-    override fun applicableSuperClasses() = listOf(
-        "android.app.Application",
-        "androidx.work.Configuration.Provider"
-    )
+    override fun applicableSuperClasses() = listOf("android.app.Application")
 
     override fun visitElement(context: XmlContext, element: Element) {
+        // Use the application tag as the location, unless we find something better.
+        if (location == null) {
+            location = context.getLocation(element)
+        }
         // Check providers
         val providers = element.getElementsByTagName("provider")
         val provider = providers.find { node ->
@@ -125,35 +122,39 @@
     }
 
     override fun visitClass(context: JavaContext, declaration: UClass) {
-        javaContext = context
-        if (context.evaluator.inheritsFrom(
+        if (!context.evaluator.inheritsFrom(
                 declaration.javaPsi,
                 "android.app.Application",
                 false
             )
         ) {
-            klass = declaration
-            if (context.evaluator.implementsInterface(
-                    declaration.javaPsi,
-                    "androidx.work.Configuration.Provider",
-                    false
-                )
-            ) {
-                applicationImplementsConfigurationProvider = true
-            }
+            return
+        }
+
+        // Ignore abstract classes.
+        if (context.evaluator.isAbstract(declaration)) {
+            return
+        }
+
+        // Allow suppression on the class itself.
+        if (context.driver.isSuppressed(context, ISSUE, declaration.javaPsi)) {
+            return
+        }
+
+        if (context.evaluator.implementsInterface(
+                declaration.javaPsi,
+                "androidx.work.Configuration.Provider",
+                false
+            )
+        ) {
+            applicationImplementsConfigurationProvider = true
         }
     }
 
     override fun afterCheckRootProject(context: Context) {
-        val location = location ?: Location.create(context.file)
-        val javaKlass = klass
-        val isSuppressed = if (javaContext != null && javaKlass != null) {
-            context.driver.isSuppressed(javaContext, ISSUE, javaKlass.javaPsi)
-        } else {
-            false
-        }
+        val location = location ?: return
         if (applicationImplementsConfigurationProvider) {
-            if (!removedDefaultInitializer && !isSuppressed) {
+            if (!removedDefaultInitializer) {
                 context.report(
                     issue = ISSUE,
                     location = location,
diff --git a/work/work-lint/src/test/java/androidx/work/lint/BadConfigurationProviderTest.kt b/work/work-lint/src/test/java/androidx/work/lint/BadConfigurationProviderTest.kt
index 345bf8c..d68832a 100644
--- a/work/work-lint/src/test/java/androidx/work/lint/BadConfigurationProviderTest.kt
+++ b/work/work-lint/src/test/java/androidx/work/lint/BadConfigurationProviderTest.kt
@@ -124,4 +124,70 @@
             .run()
             .expectClean()
     }
+
+    @Test
+    fun testNoApp() {
+        // If no application class is found then we don't report an incident.
+        val invalidProvider = kotlin(
+            "com/example/CustomProvider.kt",
+            """
+            package com.example
+
+            import androidx.work.Configuration
+
+            class Provider: Configuration.Provider {
+                override fun getWorkManagerConfiguration(): Configuration = TODO()
+            }
+            """
+        ).indented().within("src")
+
+        lint().files(
+            ANDROID_APPLICATION,
+            WORK_MANAGER_CONFIGURATION_PROVIDER,
+            invalidProvider
+        ).issues(BadConfigurationProviderIssueDetector.ISSUE)
+            .run()
+            .expectClean()
+    }
+
+    @Test
+    fun testWithAbstractApp() {
+        // Abstract application classes are ignored, so no incident will be reported.
+        val customApplication = kotlin(
+            "com/example/App.kt",
+            """
+            package com.example
+
+            import android.app.Application
+
+            abstract class App: Application() {
+                override fun onCreate() {
+
+                }
+            }
+            """
+        ).indented().within("src")
+
+        val invalidProvider = kotlin(
+            "com/example/CustomProvider.kt",
+            """
+            package com.example
+
+            import androidx.work.Configuration
+
+            class Provider: Configuration.Provider {
+                override fun getWorkManagerConfiguration(): Configuration = TODO()
+            }
+            """
+        ).indented().within("src")
+
+        lint().files(
+            ANDROID_APPLICATION,
+            WORK_MANAGER_CONFIGURATION_PROVIDER,
+            customApplication,
+            invalidProvider
+        ).issues(BadConfigurationProviderIssueDetector.ISSUE)
+            .run()
+            .expectClean()
+    }
 }
diff --git a/work/work-lint/src/test/java/androidx/work/lint/RemoveWorkManagerInitializerDetectorTest.kt b/work/work-lint/src/test/java/androidx/work/lint/RemoveWorkManagerInitializerDetectorTest.kt
index dae6ec1..b2eeb2c 100644
--- a/work/work-lint/src/test/java/androidx/work/lint/RemoveWorkManagerInitializerDetectorTest.kt
+++ b/work/work-lint/src/test/java/androidx/work/lint/RemoveWorkManagerInitializerDetectorTest.kt
@@ -23,7 +23,6 @@
 import com.android.tools.lint.checks.infrastructure.LintDetectorTest.kotlin
 import com.android.tools.lint.checks.infrastructure.TestFiles.manifest
 import com.android.tools.lint.checks.infrastructure.TestLintTask.lint
-import org.junit.Ignore
 import org.junit.Test
 
 class RemoveWorkManagerInitializerDetectorTest {
@@ -120,7 +119,6 @@
             .expectClean()
     }
 
-    @Ignore("b/187541663")
     @Test
     fun failWhenUsingDefaultManifestMergeStrategy() {
         val customApplication = kotlin(
@@ -163,7 +161,9 @@
             .run()
             .expect(
                 """
-                project0: Error: Remove androidx.work.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer]
+                AndroidManifest.xml:4: Error: Remove androidx.work.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization. [RemoveWorkManagerInitializer]
+                   <application />
+                   ~~~~~~~~~~~~~~~
                 1 errors, 0 warnings
                 """.trimIndent()
             )