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()
)