Merge "Import translations. DO NOT MERGE" into androidx-master-dev
diff --git a/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt b/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
index c0769bb..d8972b9 100644
--- a/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
+++ b/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
@@ -17,8 +17,8 @@
package androidx.activity
import android.os.Bundle
-import androidx.lifecycle.GenericLifecycleObserver
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -83,7 +83,7 @@
class LifecycleComponentActivity : ComponentActivity() {
val activityCallbackLifecycleOwner: LifecycleOwner = mock(LifecycleOwner::class.java)
- val lifecycleObserver: GenericLifecycleObserver = mock(GenericLifecycleObserver::class.java)
+ val lifecycleObserver: LifecycleEventObserver = mock(LifecycleEventObserver::class.java)
val destroyCountDownLatch = CountDownLatch(1)
init {
diff --git a/activity/src/androidTest/java/androidx/activity/ComponentActivityRunOnNextRecreateTest.kt b/activity/src/androidTest/java/androidx/activity/ComponentActivityRunOnNextRecreateTest.kt
index 59ace66..7920292e 100644
--- a/activity/src/androidTest/java/androidx/activity/ComponentActivityRunOnNextRecreateTest.kt
+++ b/activity/src/androidTest/java/androidx/activity/ComponentActivityRunOnNextRecreateTest.kt
@@ -17,7 +17,7 @@
package androidx.activity
import android.os.Bundle
-import androidx.lifecycle.GenericLifecycleObserver
+import androidx.lifecycle.LifecycleEventObserver
import androidx.savedstate.SavedStateRegistry
import androidx.savedstate.SavedStateRegistryOwner
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -61,7 +61,7 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState != null) {
- lifecycle.addObserver(GenericLifecycleObserver { _, _ ->
+ lifecycle.addObserver(LifecycleEventObserver { _, _ ->
Truth.assertThat(restartedValue).isEqualTo("restarted")
observerExecuted = true
})
diff --git a/activity/src/androidTest/java/androidx/activity/ComponentActivityViewModelTest.kt b/activity/src/androidTest/java/androidx/activity/ComponentActivityViewModelTest.kt
index 95bc7d4..51d2983 100644
--- a/activity/src/androidTest/java/androidx/activity/ComponentActivityViewModelTest.kt
+++ b/activity/src/androidTest/java/androidx/activity/ComponentActivityViewModelTest.kt
@@ -17,8 +17,8 @@
package androidx.activity
import android.os.Bundle
-import androidx.lifecycle.GenericLifecycleObserver
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
@@ -85,7 +85,7 @@
fun testActivityOnCleared() {
val activity = activityRule.activity
val latch = CountDownLatch(1)
- val observer = GenericLifecycleObserver { _, event ->
+ val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_DESTROY) {
activity.window.decorView.post {
try {
diff --git a/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/src/main/java/androidx/activity/ComponentActivity.java
index a7571d7..1d85dcc 100644
--- a/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -93,7 +93,8 @@
if (Build.VERSION.SDK_INT >= 19) {
getLifecycle().addObserver(new GenericLifecycleObserver() {
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_STOP) {
Window window = getWindow();
final View decor = window != null ? window.peekDecorView() : null;
@@ -106,7 +107,8 @@
}
getLifecycle().addObserver(new GenericLifecycleObserver() {
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_DESTROY) {
if (!isChangingConfigurations()) {
getViewModelStore().clear();
diff --git a/activity/src/main/java/androidx/activity/ImmLeaksCleaner.java b/activity/src/main/java/androidx/activity/ImmLeaksCleaner.java
index 3b6feb5..d226038 100644
--- a/activity/src/main/java/androidx/activity/ImmLeaksCleaner.java
+++ b/activity/src/main/java/androidx/activity/ImmLeaksCleaner.java
@@ -22,6 +22,7 @@
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.lifecycle.GenericLifecycleObserver;
import androidx.lifecycle.Lifecycle;
@@ -46,7 +47,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
if (event != Lifecycle.Event.ON_DESTROY) {
return;
}
diff --git a/appcompat/res/values-as/strings.xml b/appcompat/res/values-as/strings.xml
new file mode 100644
index 0000000..700c8fb
--- /dev/null
+++ b/appcompat/res/values-as/strings.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2012 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="abc_action_mode_done" msgid="2571498368472823490">"সম্পন্ন হ’ল"</string>
+ <string name="abc_action_bar_home_description" msgid="7903180715631665059">"গৃহ পৃষ্ঠালৈ যাওক"</string>
+ <string name="abc_action_bar_up_description" msgid="6794660482873516081">"ওপৰলৈ যাওক"</string>
+ <string name="abc_action_menu_overflow_description" msgid="1155814932213556626">"অধিক বিকল্প"</string>
+ <string name="abc_toolbar_collapse_description" msgid="6389460216547290468">"সংকোচন কৰক"</string>
+ <string name="abc_searchview_description_search" msgid="5466662225065974044">"সন্ধান"</string>
+ <string name="abc_search_hint" msgid="940844115270746197">"সন্ধান কৰক…"</string>
+ <string name="abc_searchview_description_query" msgid="908784302972860853">"সন্ধান কৰা প্ৰশ্ন"</string>
+ <string name="abc_searchview_description_clear" msgid="1769270744562318534">"সন্ধান কৰা প্ৰশ্ন মচক"</string>
+ <string name="abc_searchview_description_submit" msgid="8203855622131699655">"প্ৰশ্ন দাখিল কৰক"</string>
+ <string name="abc_searchview_description_voice" msgid="3478748990613108725">"কণ্ঠধ্বনিৰ দ্বাৰা সন্ধান"</string>
+ <string name="abc_activitychooserview_choose_application" msgid="1798588241954930982">"কোনো এপ্ বাছনি কৰক"</string>
+ <string name="abc_activity_chooser_view_see_all" msgid="3732416590524162402">"সকলো চাওক"</string>
+ <string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ৰ জৰিয়তে শ্বেয়াৰ কৰক"</string>
+ <string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"ইয়াৰ জৰিয়তে শ্বেয়াৰ কৰক"</string>
+ <string name="abc_capital_on" msgid="7831734969929204599">"অন"</string>
+ <string name="abc_capital_off" msgid="3403923230105792483">"অফ"</string>
+ <string name="search_menu_title" msgid="730395136688082741">"সন্ধান"</string>
+ <string name="abc_prepend_shortcut_label" msgid="3570106412128999382">"Menu+"</string>
+ <string name="abc_menu_meta_shortcut_label" msgid="8046416353848716905">"Meta+"</string>
+ <string name="abc_menu_ctrl_shortcut_label" msgid="944415252197684443">"Ctrl+"</string>
+ <string name="abc_menu_alt_shortcut_label" msgid="5725160506500770567">"Alt+"</string>
+ <string name="abc_menu_shift_shortcut_label" msgid="3271697756921353410">"Shift+"</string>
+ <string name="abc_menu_sym_shortcut_label" msgid="8327365089695024394">"Sym+"</string>
+ <string name="abc_menu_function_shortcut_label" msgid="4974283687810130415">"Function+"</string>
+ <string name="abc_menu_space_shortcut_label" msgid="2304645930658438191">"space"</string>
+ <string name="abc_menu_enter_shortcut_label" msgid="6840127756824236027">"enter"</string>
+ <string name="abc_menu_delete_shortcut_label" msgid="129742188101734366">"delete"</string>
+</resources>
diff --git a/appcompat/res/values-bn/strings.xml b/appcompat/res/values-bn/strings.xml
index f3e1a79..684a956 100644
--- a/appcompat/res/values-bn/strings.xml
+++ b/appcompat/res/values-bn/strings.xml
@@ -32,7 +32,7 @@
<string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-এর সাথে শেয়ার করুন"</string>
<string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"শেয়ার করুন"</string>
<string name="abc_capital_on" msgid="7831734969929204599">"চালু করুন"</string>
- <string name="abc_capital_off" msgid="3403923230105792483">"বন্ধ করুন"</string>
+ <string name="abc_capital_off" msgid="3403923230105792483">"বন্ধ আছে"</string>
<string name="search_menu_title" msgid="730395136688082741">"সার্চ করুন"</string>
<string name="abc_prepend_shortcut_label" msgid="3570106412128999382">"Menu+"</string>
<string name="abc_menu_meta_shortcut_label" msgid="8046416353848716905">"Meta+"</string>
diff --git a/appcompat/res/values-bs/strings.xml b/appcompat/res/values-bs/strings.xml
index c1aba29..4198b75 100644
--- a/appcompat/res/values-bs/strings.xml
+++ b/appcompat/res/values-bs/strings.xml
@@ -33,7 +33,7 @@
<string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"Dijeli sa"</string>
<string name="abc_capital_on" msgid="7831734969929204599">"UKLJUČENO"</string>
<string name="abc_capital_off" msgid="3403923230105792483">"ISKLJUČENO"</string>
- <string name="search_menu_title" msgid="730395136688082741">"Traži"</string>
+ <string name="search_menu_title" msgid="730395136688082741">"Pretražite"</string>
<string name="abc_prepend_shortcut_label" msgid="3570106412128999382">"Menu+"</string>
<string name="abc_menu_meta_shortcut_label" msgid="8046416353848716905">"Meta+"</string>
<string name="abc_menu_ctrl_shortcut_label" msgid="944415252197684443">"Ctrl+"</string>
diff --git a/appcompat/res/values-ca/strings.xml b/appcompat/res/values-ca/strings.xml
index 705de23..b558afa2 100644
--- a/appcompat/res/values-ca/strings.xml
+++ b/appcompat/res/values-ca/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="abc_action_mode_done" msgid="2571498368472823490">"Fet"</string>
<string name="abc_action_bar_home_description" msgid="7903180715631665059">"Navega a la pàgina d\'inici"</string>
- <string name="abc_action_bar_up_description" msgid="6794660482873516081">"Navega cap a dalt"</string>
+ <string name="abc_action_bar_up_description" msgid="6794660482873516081">"Navega cap amunt"</string>
<string name="abc_action_menu_overflow_description" msgid="1155814932213556626">"Més opcions"</string>
<string name="abc_toolbar_collapse_description" msgid="6389460216547290468">"Replega"</string>
<string name="abc_searchview_description_search" msgid="5466662225065974044">"Cerca"</string>
diff --git a/appcompat/res/values-de/strings.xml b/appcompat/res/values-de/strings.xml
index f1c33bf..c06df8e 100644
--- a/appcompat/res/values-de/strings.xml
+++ b/appcompat/res/values-de/strings.xml
@@ -28,7 +28,7 @@
<string name="abc_searchview_description_submit" msgid="8203855622131699655">"Anfrage senden"</string>
<string name="abc_searchview_description_voice" msgid="3478748990613108725">"Sprachsuche"</string>
<string name="abc_activitychooserview_choose_application" msgid="1798588241954930982">"App auswählen"</string>
- <string name="abc_activity_chooser_view_see_all" msgid="3732416590524162402">"Alle ansehen"</string>
+ <string name="abc_activity_chooser_view_see_all" msgid="3732416590524162402">"Alle anzeigen"</string>
<string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"Mit <xliff:g id="APPLICATION_NAME">%s</xliff:g> teilen"</string>
<string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"Teilen mit"</string>
<string name="abc_capital_on" msgid="7831734969929204599">"AN"</string>
diff --git a/appcompat/res/values-es/strings.xml b/appcompat/res/values-es/strings.xml
index 49c8e3c..c100f70 100644
--- a/appcompat/res/values-es/strings.xml
+++ b/appcompat/res/values-es/strings.xml
@@ -31,8 +31,8 @@
<string name="abc_activity_chooser_view_see_all" msgid="3732416590524162402">"Ver todo"</string>
<string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"Compartir con"</string>
- <string name="abc_capital_on" msgid="7831734969929204599">"SÍ"</string>
- <string name="abc_capital_off" msgid="3403923230105792483">"NO"</string>
+ <string name="abc_capital_on" msgid="7831734969929204599">"ACTIVADO"</string>
+ <string name="abc_capital_off" msgid="3403923230105792483">"DESACTIVADO"</string>
<string name="search_menu_title" msgid="730395136688082741">"Buscar"</string>
<string name="abc_prepend_shortcut_label" msgid="3570106412128999382">"Menú +"</string>
<string name="abc_menu_meta_shortcut_label" msgid="8046416353848716905">"Meta +"</string>
diff --git a/appcompat/res/values-or/strings.xml b/appcompat/res/values-or/strings.xml
index b7d691d..bb7c8ca 100644
--- a/appcompat/res/values-or/strings.xml
+++ b/appcompat/res/values-or/strings.xml
@@ -29,8 +29,8 @@
<string name="abc_searchview_description_voice" msgid="3478748990613108725">"ଭଏସ୍ ସର୍ଚ୍ଚ"</string>
<string name="abc_activitychooserview_choose_application" msgid="1798588241954930982">"ଗୋଟିଏ ଆପ୍ ବାଛନ୍ତୁ"</string>
<string name="abc_activity_chooser_view_see_all" msgid="3732416590524162402">"ସବୁ ଦେଖନ୍ତୁ"</string>
- <string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ସହ ଶେୟାର୍ କରନ୍ତୁ"</string>
- <string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"ଏହାଙ୍କ ସହ ଶେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="abc_shareactionprovider_share_with_application" msgid="9009661856846212431">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ସହ ସେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="abc_shareactionprovider_share_with" msgid="2650565705514630347">"ଏହାଙ୍କ ସହ ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="abc_capital_on" msgid="7831734969929204599">"ଅନ୍"</string>
<string name="abc_capital_off" msgid="3403923230105792483">"ଅଫ୍"</string>
<string name="search_menu_title" msgid="730395136688082741">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
diff --git a/appcompat/res/values-vi/strings.xml b/appcompat/res/values-vi/strings.xml
index 73374e1..e3bb407 100644
--- a/appcompat/res/values-vi/strings.xml
+++ b/appcompat/res/values-vi/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="abc_action_mode_done" msgid="2571498368472823490">"Xong"</string>
<string name="abc_action_bar_home_description" msgid="7903180715631665059">"Chỉ đường về nhà"</string>
- <string name="abc_action_bar_up_description" msgid="6794660482873516081">"Điều hướng lên trên"</string>
+ <string name="abc_action_bar_up_description" msgid="6794660482873516081">"Di chuyển lên"</string>
<string name="abc_action_menu_overflow_description" msgid="1155814932213556626">"Tùy chọn khác"</string>
<string name="abc_toolbar_collapse_description" msgid="6389460216547290468">"Thu gọn"</string>
<string name="abc_searchview_description_search" msgid="5466662225065974044">"Tìm kiếm"</string>
diff --git a/benchmark/api/1.0.0-alpha02.txt b/benchmark/api/1.0.0-alpha02.txt
index d53eea6..a1eb721 100644
--- a/benchmark/api/1.0.0-alpha02.txt
+++ b/benchmark/api/1.0.0-alpha02.txt
@@ -23,7 +23,7 @@
public final class BenchmarkState {
method public boolean keepRunning();
method public void pauseTiming();
- method public static void reportData(String className, String testName, long nanos, java.util.List<java.lang.Long> data, @IntRange(from=0) int warmupIterations, @IntRange(from=1) int repeatIterations);
+ method public static void reportData(String className, String testName, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=1) int repeatIterations);
method public void resumeTiming();
}
diff --git a/benchmark/api/current.txt b/benchmark/api/current.txt
index d53eea6..a1eb721 100644
--- a/benchmark/api/current.txt
+++ b/benchmark/api/current.txt
@@ -23,7 +23,7 @@
public final class BenchmarkState {
method public boolean keepRunning();
method public void pauseTiming();
- method public static void reportData(String className, String testName, long nanos, java.util.List<java.lang.Long> data, @IntRange(from=0) int warmupIterations, @IntRange(from=1) int repeatIterations);
+ method public static void reportData(String className, String testName, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=1) int repeatIterations);
method public void resumeTiming();
}
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
index fbaac83..fe7b13e 100644
--- a/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
+++ b/benchmark/src/androidTest/java/androidx/benchmark/BenchmarkStateTest.kt
@@ -125,11 +125,10 @@
@Test
fun reportResult() {
- BenchmarkState.reportData("className", "testName", 100, listOf(100), 1, 1)
+ BenchmarkState.reportData("className", "testName", listOf(100), 1, 1)
val expectedReport = BenchmarkState.Report(
className = "className",
testName = "testName",
- nanos = 100,
data = listOf(100),
repeatIterations = 1,
warmupIterations = 1
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt b/benchmark/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
index 5574c1a..d2f8c97 100644
--- a/benchmark/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
+++ b/benchmark/src/androidTest/java/androidx/benchmark/ResultWriterTest.kt
@@ -16,6 +16,7 @@
package androidx.benchmark
+import android.os.Build
import androidx.test.filters.SmallTest
import org.junit.Assert.assertEquals
import org.junit.Rule
@@ -34,7 +35,6 @@
private val reportA = BenchmarkState.Report(
testName = "MethodA",
className = "package.Class1",
- nanos = 100,
data = listOf(100, 101, 102),
repeatIterations = 100000,
warmupIterations = 8000
@@ -42,7 +42,6 @@
private val reportB = BenchmarkState.Report(
testName = "MethodB",
className = "package.Class2",
- nanos = 100,
data = listOf(100, 101, 102),
repeatIterations = 100000,
warmupIterations = 8000
@@ -63,35 +62,63 @@
fun validateJson() {
val tempFile = tempFolder.newFile()
+ val sustainedPerformanceModeInUse = AndroidBenchmarkRunner.sustainedPerformanceModeInUse
+
ResultWriter.writeReport(tempFile, listOf(reportA, reportB))
assertEquals(
"""
- [
- {
- "name": "MethodA",
- "className": "package.Class1",
- "nanos": 100,
- "warmupIterations": 8000,
- "repeatIterations": 100000,
- "runs": [
- 100,
- 101,
- 102
- ]
+ {
+ "context": {
+ "build": {
+ "device": "${Build.DEVICE}",
+ "fingerprint": "${Build.FINGERPRINT}",
+ "model": "${Build.MODEL}",
+ "version": {
+ "sdk": ${Build.VERSION.SDK_INT}
+ }
+ },
+ "cpuLocked": ${Clocks.areLocked},
+ "sustainedPerformanceModeEnabled": $sustainedPerformanceModeInUse
},
- {
- "name": "MethodB",
- "className": "package.Class2",
- "nanos": 100,
- "warmupIterations": 8000,
- "repeatIterations": 100000,
- "runs": [
- 100,
- 101,
- 102
- ]
- }
- ]
+ "benchmarks": [
+ {
+ "name": "MethodA",
+ "className": "package.Class1",
+ "metrics": {
+ "timeNs": {
+ "minimum": 100,
+ "maximum": 102,
+ "median": 101,
+ "runs": [
+ 100,
+ 101,
+ 102
+ ]
+ }
+ },
+ "warmupIterations": 8000,
+ "repeatIterations": 100000
+ },
+ {
+ "name": "MethodB",
+ "className": "package.Class2",
+ "metrics": {
+ "timeNs": {
+ "minimum": 100,
+ "maximum": 102,
+ "median": 101,
+ "runs": [
+ 100,
+ 101,
+ 102
+ ]
+ }
+ },
+ "warmupIterations": 8000,
+ "repeatIterations": 100000
+ }
+ ]
+ }
""".trimIndent(),
tempFile.readText()
)
diff --git a/benchmark/src/androidTest/java/androidx/benchmark/StatsTest.kt b/benchmark/src/androidTest/java/androidx/benchmark/StatsTest.kt
index 296fdc7..92d638b 100644
--- a/benchmark/src/androidTest/java/androidx/benchmark/StatsTest.kt
+++ b/benchmark/src/androidTest/java/androidx/benchmark/StatsTest.kt
@@ -39,6 +39,18 @@
}
@Test
+ fun one() {
+ val stats = Stats(listOf(10))
+ assertEquals(10.0, stats.mean, 0.0)
+ assertEquals(10, stats.median)
+ assertEquals(10, stats.max)
+ assertEquals(10, stats.min)
+ assertEquals(Double.NaN, stats.standardDeviation, 0.0)
+ assertEquals(10, stats.percentile90)
+ assertEquals(10, stats.percentile95)
+ }
+
+ @Test
fun percentile() {
val stats = Stats((1L..100L).toList())
assertEquals(50.5, stats.mean, 0.0)
diff --git a/benchmark/src/main/java/androidx/benchmark/BenchmarkState.kt b/benchmark/src/main/java/androidx/benchmark/BenchmarkState.kt
index 52f1b740..0540cb8 100644
--- a/benchmark/src/main/java/androidx/benchmark/BenchmarkState.kt
+++ b/benchmark/src/main/java/androidx/benchmark/BenchmarkState.kt
@@ -326,42 +326,30 @@
}
}
- private fun mean(): Long = stats.mean.toLong()
-
- private fun median(): Long = stats.median
-
- private fun min(): Long = stats.min
-
- private fun standardDeviation(): Long = stats.standardDeviation.toLong()
-
- private fun count(): Long = maxIterations.toLong()
-
internal data class Report(
val className: String,
val testName: String,
- val nanos: Long,
val data: List<Long>,
val repeatIterations: Int,
val warmupIterations: Int
- )
-
- internal fun getReport(testName: String, className: String): Report {
- return Report(
- className = className,
- testName = testName,
- nanos = min(),
- data = results,
- repeatIterations = maxIterations,
- warmupIterations = warmupIteration
- )
+ ) {
+ val stats = Stats(data)
}
+ internal fun getReport(testName: String, className: String) = Report(
+ className = className,
+ testName = testName,
+ data = results,
+ repeatIterations = maxIterations,
+ warmupIterations = warmupIteration
+ )
+
private fun summaryLine() = "Summary: " +
- "median=${median()}ns, " +
- "mean=${mean()}ns, " +
- "min=${min()}ns, " +
- "stddev=${standardDeviation()}ns, " +
- "count=${count()}"
+ "median=${stats.median}ns, " +
+ "mean=${stats.mean.toLong()}ns, " +
+ "min=${stats.min}ns, " +
+ "stddev=${stats.standardDeviation.toLong()}ns, " +
+ "count=$maxIterations"
/**
* Acquires a status report bundle
@@ -373,12 +361,12 @@
val status = Bundle()
val prefix = WarningState.WARNING_PREFIX
- status.putLong("${prefix}median", median())
- status.putLong("${prefix}mean", mean())
- status.putLong("${prefix}min", min())
- status.putLong("${prefix}standardDeviation", standardDeviation())
- status.putLong("${prefix}count", count())
- status.putIdeSummaryLine(key, min())
+ status.putLong("${prefix}median", stats.median)
+ status.putLong("${prefix}mean", stats.mean.toLong())
+ status.putLong("${prefix}min", stats.min)
+ status.putLong("${prefix}standardDeviation", stats.standardDeviation.toLong())
+ status.putLong("${prefix}count", maxIterations.toLong())
+ status.putIdeSummaryLine(key, stats.min)
return status
}
@@ -416,11 +404,7 @@
*
* @param className Name of class the benchmark runs in
* @param testName Name of the benchmark
- * @param nanos Summary number for benchmark result, in nanoseconds. Generally this is the
- * minimum value observed. If your existing external benchmark infrastructure
- * has a standard way of summarizing results, such as average or median, you
- * can use that instead.
- * @param data List of all measured results, in nanoseconds
+ * @param dataNs List of all measured results, in nanoseconds
* @param warmupIterations Number of iterations of warmup before measurements started.
* Should be no less than 0.
* @param repeatIterations Number of iterations in between each measurement. Should be no
@@ -431,29 +415,27 @@
fun reportData(
className: String,
testName: String,
- nanos: Long,
- data: List<Long>,
+ dataNs: List<Long>,
@androidx.annotation.IntRange(from = 0) warmupIterations: Int,
@androidx.annotation.IntRange(from = 1) repeatIterations: Int
) {
+ val report = Report(
+ className = className,
+ testName = testName,
+ data = dataNs,
+ repeatIterations = repeatIterations,
+ warmupIterations = warmupIterations
+ )
+
// Report value to Studio console
val bundle = Bundle()
val fullTestName = WarningState.WARNING_PREFIX +
if (className.isNotEmpty()) "$className.$testName" else testName
- bundle.putIdeSummaryLine(fullTestName, nanos)
+ bundle.putIdeSummaryLine(fullTestName, report.stats.min)
InstrumentationRegistry.getInstrumentation().sendStatus(Activity.RESULT_OK, bundle)
// Report values to file output
- ResultWriter.appendReport(
- BenchmarkState.Report(
- className = className,
- testName = testName,
- nanos = nanos,
- data = data,
- repeatIterations = repeatIterations,
- warmupIterations = warmupIterations
- )
- )
+ ResultWriter.appendReport(report)
}
internal fun sleepIfThermalThrottled(): Boolean {
diff --git a/benchmark/src/main/java/androidx/benchmark/ResultWriter.kt b/benchmark/src/main/java/androidx/benchmark/ResultWriter.kt
index 5da82c0..3ec390a 100644
--- a/benchmark/src/main/java/androidx/benchmark/ResultWriter.kt
+++ b/benchmark/src/main/java/androidx/benchmark/ResultWriter.kt
@@ -16,6 +16,7 @@
package androidx.benchmark
+import android.os.Build
import android.os.Environment.DIRECTORY_DOWNLOADS
import android.os.Environment.getExternalStoragePublicDirectory
import android.util.JsonWriter
@@ -53,27 +54,60 @@
val writer = JsonWriter(bufferedWriter())
writer.setIndent(" ")
- writer.beginArray()
+ writer.beginObject()
+
+ writer.name("context").beginObject()
+ .name("build").buildInfoObject()
+ .name("cpuLocked").value(Clocks.areLocked)
+ .name("sustainedPerformanceModeEnabled")
+ .value(AndroidBenchmarkRunner.sustainedPerformanceModeInUse)
+ writer.endObject()
+
+ writer.name("benchmarks").beginArray()
reports.forEach { writer.reportObject(it) }
writer.endArray()
+ writer.endObject()
+
writer.flush()
writer.close()
}
}
+ private fun JsonWriter.buildInfoObject(): JsonWriter {
+ beginObject()
+ .name("device").value(Build.DEVICE)
+ .name("fingerprint").value(Build.FINGERPRINT)
+ .name("model").value(Build.MODEL)
+ .name("version").beginObject().name("sdk").value(Build.VERSION.SDK_INT).endObject()
+ return endObject()
+ }
+
private fun JsonWriter.reportObject(report: BenchmarkState.Report): JsonWriter {
beginObject()
.name("name").value(report.testName)
.name("className").value(report.className)
- .name("nanos").value(report.nanos)
+ .name("metrics").metricsObject(report)
.name("warmupIterations").value(report.warmupIterations)
.name("repeatIterations").value(report.repeatIterations)
+ return endObject()
+ }
+
+ private fun JsonWriter.metricsObject(report: BenchmarkState.Report): JsonWriter {
+ beginObject()
+
+ name("timeNs").beginObject()
+ .name("minimum").value(report.stats.min)
+ .name("maximum").value(report.stats.max)
+ .name("median").value(report.stats.median)
+
name("runs").beginArray()
report.data.forEach { value(it) }
endArray()
+ endObject() // timeNs
+
return endObject()
}
}
diff --git a/benchmark/src/main/java/androidx/benchmark/Stats.java b/benchmark/src/main/java/androidx/benchmark/Stats.java
index c853df9..a94c0e0 100644
--- a/benchmark/src/main/java/androidx/benchmark/Stats.java
+++ b/benchmark/src/main/java/androidx/benchmark/Stats.java
@@ -35,10 +35,11 @@
// make a copy since we're modifying it
values = new ArrayList<>(values);
final int size = values.size();
- if (size < 2) {
- throw new IllegalArgumentException("At least two results are necessary.");
+ if (size < 1) {
+ throw new IllegalArgumentException("At least one result is necessary.");
}
+
Collections.sort(values);
mMin = values.get(0);
@@ -60,7 +61,8 @@
final double tmp = values.get(i) - mMean;
mStandardDeviation += tmp * tmp;
}
- mStandardDeviation = Math.sqrt(mStandardDeviation / (double) (size - 1));
+ mStandardDeviation = size == 1 ? Double.NaN :
+ Math.sqrt(mStandardDeviation / (double) (size - 1));
}
public double getMean() {
diff --git a/biometric/res/values-ar/strings.xml b/biometric/res/values-ar/strings.xml
index 902ba58..e66363c 100644
--- a/biometric/res/values-ar/strings.xml
+++ b/biometric/res/values-ar/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"المس زر استشعار بصمات الإصبع"</string>
+ <string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"المس زر استشعار بصمة الإصبع"</string>
<string name="fingerprint_not_recognized" msgid="5491287833813257925">"لم يتم التعرف عليها."</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"منطقة رسالة المساعدة"</string>
<string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"جهاز بصمة الإصبع غير متاح."</string>
diff --git a/biometric/res/values-my/strings.xml b/biometric/res/values-my/strings.xml
index ac23e9d..5c6e6c5 100644
--- a/biometric/res/values-my/strings.xml
+++ b/biometric/res/values-my/strings.xml
@@ -18,7 +18,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="fingerprint_dialog_touch_sensor" msgid="5354590751262189738">"လက်ဗွေအာရုံခံကိရိယာကို တို့ပါ"</string>
- <string name="fingerprint_not_recognized" msgid="5491287833813257925">"မသိပါ"</string>
+ <string name="fingerprint_not_recognized" msgid="5491287833813257925">"မသိ"</string>
<string name="accessibility_fingerprint_dialog_help_area" msgid="6241458715391513061">"အကူအညီမက်ဆေ့ဂျ် နေရာ"</string>
<string name="fingerprint_error_hw_not_available" msgid="3976825677335166260">"လက်ဗွေစက်ပစ္စည်း မရနိုင်ပါ။"</string>
<string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"မည်သည့် လက်ဗွေကိုမျှ ထည့်သွင်းမထားပါ။"</string>
diff --git a/biometric/res/values-tl/strings.xml b/biometric/res/values-tl/strings.xml
index 3efe18f..c6f5aab 100644
--- a/biometric/res/values-tl/strings.xml
+++ b/biometric/res/values-tl/strings.xml
@@ -24,6 +24,6 @@
<string name="fingerprint_error_no_fingerprints" msgid="3350805046152877040">"Walang naka-enroll na fingerprint."</string>
<string name="fingerprint_error_hw_not_present" msgid="1176237289575184578">"Walang sensor para sa fingerprint ang device na ito"</string>
<string name="fingerprint_error_user_canceled" msgid="3421037373085129417">"Kinansela ng user ang operasyon sa fingerprint."</string>
- <string name="fingerprint_error_lockout" msgid="1651062876313169162">"Masyadong maraming pagsubok. Pakisubukang muli sa ibang pagkakataon."</string>
+ <string name="fingerprint_error_lockout" msgid="1651062876313169162">"Masyadong maraming pagsubok. Pakisubukan ulit sa ibang pagkakataon."</string>
<string name="default_error_msg" msgid="7497355367608150274">"Hindi alam na error"</string>
</resources>
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index 8ef41cc..90a470b 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -95,10 +95,9 @@
// Arch libraries
const val ARCH_LIFECYCLE_RUNTIME = "androidx.lifecycle:lifecycle-runtime:2.0.0"
const val ARCH_LIFECYCLE_COMMON = "androidx.lifecycle:lifecycle-common:2.0.0@jar"
-const val ARCH_LIFECYCLE_LIVEDATA_CORE =
- "androidx.lifecycle:lifecycle-livedata-core:2.0.0"
-const val ARCH_LIFECYCLE_LIVEDATA =
- "androidx.lifecycle:lifecycle-livedata:2.0.0"
+const val ARCH_LIFECYCLE_LIVEDATA_CORE = "androidx.lifecycle:lifecycle-livedata-core:2.0.0"
+const val ARCH_LIFECYCLE_LIVEDATA = "androidx.lifecycle:lifecycle-livedata:2.0.0"
+const val ARCH_LIFECYCLE_SERVICE = "androidx.lifecycle:lifecycle-service:2.0.0"
const val ARCH_LIFECYCLE_VIEWMODEL = "androidx.lifecycle:lifecycle-viewmodel:2.0.0"
const val ARCH_LIFECYCLE_EXTENSIONS = "androidx.lifecycle:lifecycle-extensions:2.0.0"
const val ARCH_CORE_COMMON = "androidx.arch.core:core-common:2.0.1@jar"
diff --git a/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
new file mode 100755
index 0000000..cec7fd7
--- /dev/null
+++ b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+
+import java.util.List;
+
+/**
+ * Stub implementation for beauty image capture use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices.
+ */
+public final class BeautyImageCaptureExtenderImpl implements ImageCaptureExtenderImpl {
+ public BeautyImageCaptureExtenderImpl() {}
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureProcessorImpl getCaptureProcessor() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public List<CaptureStageImpl> getCaptureStages() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public int getMaxCaptureStage() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onDeInit() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+}
diff --git a/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
new file mode 100755
index 0000000..fcecc7c
--- /dev/null
+++ b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+
+/**
+ * Stub implementation for beauty view finder use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices.
+ */
+public final class BeautyPreviewExtenderImpl implements PreviewExtenderImpl {
+ public BeautyPreviewExtenderImpl() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl getCaptureStage() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public ProcessorType getProcessorType() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public RequestUpdateProcessorImpl getRequestUpdatePreviewProcessor() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onDeInit() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+}
diff --git a/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
new file mode 100755
index 0000000..199a519
--- /dev/null
+++ b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+
+import java.util.List;
+
+/**
+ * Stub implementation for night image capture use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices.
+ */
+public final class NightImageCaptureExtenderImpl implements ImageCaptureExtenderImpl {
+ public NightImageCaptureExtenderImpl() {}
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureProcessorImpl getCaptureProcessor() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public List<CaptureStageImpl> getCaptureStages() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public int getMaxCaptureStage() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onDeInit() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+}
diff --git a/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
new file mode 100755
index 0000000..2ec2392
--- /dev/null
+++ b/camera/extensions-stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+
+/**
+ * Stub implementation for night view finder use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices.
+ */
+public final class NightPreviewExtenderImpl implements PreviewExtenderImpl {
+ public NightPreviewExtenderImpl() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl getCaptureStage() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public ProcessorType getProcessorType() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public RequestUpdateProcessorImpl getRequestUpdatePreviewProcessor() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public void onDeInit() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ throw new RuntimeException("Stub, replace with implementation.");
+ }
+}
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java b/camera/extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java
new file mode 100644
index 0000000..e7dd18e
--- /dev/null
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/BeautyImageCaptureExtender.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 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.camera.extensions;
+
+import android.util.Log;
+
+import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.extensions.impl.BeautyImageCaptureExtenderImpl;
+
+/**
+ * Load the OEM extension implementation for beauty effect type.
+ */
+public class BeautyImageCaptureExtender extends ImageCaptureExtender {
+ private static final String TAG = "BeautyICExtender";
+
+ /**
+ * Create a new instance of the beauty extender.
+ *
+ * @param builder Builder that will be used to create the configurations for the
+ * {@link androidx.camera.core.ImageCapture}.
+ */
+ public static BeautyImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ try {
+ return new VendorBeautyImageCaptureExtender(builder);
+ } catch (NoClassDefFoundError e) {
+ Log.d(TAG, "No beauty image capture extender found. Falling back to default.");
+ return new DefaultBeautyImageCaptureExtender();
+ }
+ }
+
+ /** Empty implementation of beauty extender which does nothing. */
+ static class DefaultBeautyImageCaptureExtender extends BeautyImageCaptureExtender {
+ DefaultBeautyImageCaptureExtender() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable() {
+ return false;
+ }
+
+ @Override
+ public void enableExtension() {
+ }
+ }
+
+ /** Beauty extender that calls into the vendor provided implementation. */
+ static class VendorBeautyImageCaptureExtender extends BeautyImageCaptureExtender {
+ private final BeautyImageCaptureExtenderImpl mImpl;
+
+ VendorBeautyImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ mImpl = new BeautyImageCaptureExtenderImpl();
+ init(builder, mImpl);
+ }
+ }
+
+ private BeautyImageCaptureExtender() {}
+}
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/BeautyPreviewExtender.java b/camera/extensions/src/main/java/androidx/camera/extensions/BeautyPreviewExtender.java
new file mode 100644
index 0000000..5f37e7d
--- /dev/null
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/BeautyPreviewExtender.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 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.camera.extensions;
+
+import android.util.Log;
+
+import androidx.camera.core.PreviewConfig;
+import androidx.camera.extensions.impl.BeautyPreviewExtenderImpl;
+
+/**
+ * Load the OEM extension Preview implementation for beauty effect type.
+ */
+public class BeautyPreviewExtender extends PreviewExtender {
+ private static final String TAG = "BeautyPreviewExtender";
+
+ /**
+ * Create a new instance of the beauty extender.
+ *
+ * @param builder Builder that will be used to create the configurations for the
+ * {@link androidx.camera.core.Preview}.
+ */
+ public static BeautyPreviewExtender create(PreviewConfig.Builder builder) {
+ try {
+ return new VendorBeautyPreviewExtender(builder);
+ } catch (NoClassDefFoundError e) {
+ Log.d(TAG, "No beauty view finder extender found. Falling back to default.");
+ return new DefaultBeautyPreviewExtender();
+ }
+ }
+
+ /** Empty implementation of beauty extender which does nothing. */
+ static class DefaultBeautyPreviewExtender extends BeautyPreviewExtender {
+ DefaultBeautyPreviewExtender() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable() {
+ return false;
+ }
+
+ @Override
+ public void enableExtension() {
+ }
+ }
+
+ /** Beauty extender that calls into the vendor provided implementation. */
+ static class VendorBeautyPreviewExtender extends BeautyPreviewExtender {
+ private final BeautyPreviewExtenderImpl mImpl;
+
+ VendorBeautyPreviewExtender(PreviewConfig.Builder builder) {
+ mImpl = new BeautyPreviewExtenderImpl();
+ init(builder, mImpl);
+ }
+ }
+
+ private BeautyPreviewExtender() {}
+}
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java b/camera/extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
index 022b451..7e7e1c3 100644
--- a/camera/extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
@@ -36,7 +36,17 @@
* HDR mode that may get source pictures with different AE settings to generate a best
* result.
*/
- HDR
+ HDR,
+ /**
+ * Night mode is used for taking better still capture images under low-light situations,
+ * typically at night time.
+ */
+ NIGHT,
+ /**
+ * Beauty mode is used for taking still capture images that incorporate facial changes
+ * like skin tone, geometry, or retouching.
+ */
+ BEAUTY
}
/**
@@ -87,6 +97,12 @@
case HDR:
extender = HdrImageCaptureExtender.create(builder);
break;
+ case NIGHT:
+ extender = NightImageCaptureExtender.create(builder);
+ break;
+ case BEAUTY:
+ extender = BeautyImageCaptureExtender.create(builder);
+ break;
case NORMAL:
return true;
default:
@@ -109,6 +125,12 @@
case HDR:
extender = HdrPreviewExtender.create(builder);
break;
+ case NIGHT:
+ extender = NightPreviewExtender.create(builder);
+ break;
+ case BEAUTY:
+ extender = BeautyPreviewExtender.create(builder);
+ break;
case NORMAL:
return true;
default:
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java b/camera/extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java
new file mode 100644
index 0000000..96ce123
--- /dev/null
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/NightImageCaptureExtender.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 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.camera.extensions;
+
+import android.util.Log;
+
+import androidx.camera.core.ImageCaptureConfig;
+import androidx.camera.extensions.impl.NightImageCaptureExtenderImpl;
+
+/**
+ * Load the OEM extension implementation for night effect type.
+ */
+public class NightImageCaptureExtender extends ImageCaptureExtender {
+ private static final String TAG = "NightICExtender";
+
+ /**
+ * Create a new instance of the night extender.
+ *
+ * @param builder Builder that will be used to create the configurations for the
+ * {@link androidx.camera.core.ImageCapture}.
+ */
+ public static NightImageCaptureExtender create(ImageCaptureConfig.Builder builder) {
+ try {
+ return new VendorNightImageCaptureExtender(builder);
+ } catch (NoClassDefFoundError e) {
+ Log.d(TAG, "No night image capture extender found. Falling back to default.");
+ return new DefaultNightImageCaptureExtender();
+ }
+ }
+
+ /** Empty implementation of night extender which does nothing. */
+ static class DefaultNightImageCaptureExtender extends NightImageCaptureExtender {
+ DefaultNightImageCaptureExtender() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable() {
+ return false;
+ }
+
+ @Override
+ public void enableExtension() {
+ }
+ }
+
+ /** Night extender that calls into the vendor provided implementation. */
+ static class VendorNightImageCaptureExtender extends NightImageCaptureExtender {
+ private final NightImageCaptureExtenderImpl mImpl;
+
+ VendorNightImageCaptureExtender(ImageCaptureConfig.Builder builder) {
+ mImpl = new NightImageCaptureExtenderImpl();
+ init(builder, mImpl);
+ }
+ }
+
+ private NightImageCaptureExtender() {}
+}
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/NightPreviewExtender.java b/camera/extensions/src/main/java/androidx/camera/extensions/NightPreviewExtender.java
new file mode 100644
index 0000000..5d5d40e
--- /dev/null
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/NightPreviewExtender.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019 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.camera.extensions;
+
+import android.util.Log;
+
+import androidx.camera.core.PreviewConfig;
+import androidx.camera.extensions.impl.NightPreviewExtenderImpl;
+
+/**
+ * Load the OEM extension Preview implementation for night effect type.
+ */
+public class NightPreviewExtender extends PreviewExtender {
+ private static final String TAG = "NightPreviewExtender";
+
+ /**
+ * Create a new instance of the night extender.
+ *
+ * @param builder Builder that will be used to create the configurations for the
+ * {@link androidx.camera.core.Preview}.
+ */
+ public static NightPreviewExtender create(PreviewConfig.Builder builder) {
+ try {
+ return new VendorNightPreviewExtender(builder);
+ } catch (NoClassDefFoundError e) {
+ Log.d(TAG, "No night view finder extender found. Falling back to default.");
+ return new DefaultNightPreviewExtender();
+ }
+ }
+
+ /** Empty implementation of night extender which does nothing. */
+ static class DefaultNightPreviewExtender extends NightPreviewExtender {
+ DefaultNightPreviewExtender() {
+ }
+
+ @Override
+ public boolean isExtensionAvailable() {
+ return false;
+ }
+
+ @Override
+ public void enableExtension() {
+ }
+ }
+
+ /** Night extender that calls into the vendor provided implementation. */
+ static class VendorNightPreviewExtender extends NightPreviewExtender {
+ private final NightPreviewExtenderImpl mImpl;
+
+ VendorNightPreviewExtender(PreviewConfig.Builder builder) {
+ mImpl = new NightPreviewExtenderImpl();
+ init(builder, mImpl);
+ }
+ }
+
+ private NightPreviewExtender() {}
+}
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
index ae0424d..5921cde 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java
@@ -39,10 +39,14 @@
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewConfig;
import androidx.camera.core.UseCase;
+import androidx.camera.extensions.BeautyImageCaptureExtender;
+import androidx.camera.extensions.BeautyPreviewExtender;
import androidx.camera.extensions.BokehImageCaptureExtender;
import androidx.camera.extensions.BokehPreviewExtender;
import androidx.camera.extensions.HdrImageCaptureExtender;
import androidx.camera.extensions.HdrPreviewExtender;
+import androidx.camera.extensions.NightImageCaptureExtender;
+import androidx.camera.extensions.NightPreviewExtender;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
@@ -111,6 +115,20 @@
if (extender.isExtensionAvailable()) {
extender.enableExtension();
}
+ } else if (mCurrentImageCaptureType == ImageCaptureType.IMAGE_CAPTURE_TYPE_NIGHT) {
+ Log.d(TAG, "Enabling the extended view finder in night mode.");
+
+ NightPreviewExtender extender = NightPreviewExtender.create(builder);
+ if (extender.isExtensionAvailable()) {
+ extender.enableExtension();
+ }
+ } else if (mCurrentImageCaptureType == ImageCaptureType.IMAGE_CAPTURE_TYPE_BEAUTY) {
+ Log.d(TAG, "Enabling the extended view finder in beauty mode.");
+
+ BeautyPreviewExtender extender = BeautyPreviewExtender.create(builder);
+ if (extender.isExtensionAvailable()) {
+ extender.enableExtension();
+ }
}
mPreview = new Preview(builder.build());
@@ -134,6 +152,8 @@
enum ImageCaptureType {
IMAGE_CAPTURE_TYPE_HDR,
IMAGE_CAPTURE_TYPE_BOKEH,
+ IMAGE_CAPTURE_TYPE_NIGHT,
+ IMAGE_CAPTURE_TYPE_BEAUTY,
IMAGE_CAPTURE_TYPE_DEFAULT,
IMAGE_CAPTURE_TYPE_NONE,
}
@@ -158,6 +178,14 @@
enablePreview();
break;
case IMAGE_CAPTURE_TYPE_BOKEH:
+ enableImageCapture(ImageCaptureType.IMAGE_CAPTURE_TYPE_NIGHT);
+ enablePreview();
+ break;
+ case IMAGE_CAPTURE_TYPE_NIGHT:
+ enableImageCapture(ImageCaptureType.IMAGE_CAPTURE_TYPE_BEAUTY);
+ enablePreview();
+ break;
+ case IMAGE_CAPTURE_TYPE_BEAUTY:
enableImageCapture(ImageCaptureType.IMAGE_CAPTURE_TYPE_DEFAULT);
enablePreview();
break;
@@ -201,6 +229,20 @@
bokehImageCapture.enableExtension();
}
break;
+ case IMAGE_CAPTURE_TYPE_NIGHT:
+ NightImageCaptureExtender nightImageCapture = NightImageCaptureExtender.create(
+ builder);
+ if (nightImageCapture.isExtensionAvailable()) {
+ nightImageCapture.enableExtension();
+ }
+ break;
+ case IMAGE_CAPTURE_TYPE_BEAUTY:
+ BeautyImageCaptureExtender beautyImageCapture = BeautyImageCaptureExtender.create(
+ builder);
+ if (beautyImageCapture.isExtensionAvailable()) {
+ beautyImageCapture.enableExtension();
+ }
+ break;
case IMAGE_CAPTURE_TYPE_DEFAULT:
break;
case IMAGE_CAPTURE_TYPE_NONE:
diff --git a/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
new file mode 100755
index 0000000..dacb2aa
--- /dev/null
+++ b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.TotalCaptureResult;
+import android.media.Image;
+import android.media.ImageWriter;
+import android.os.Build;
+import android.util.Log;
+import android.util.Pair;
+import android.util.Size;
+import android.view.Surface;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Implementation for beauty image capture use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices. 3P developers
+ * don't need to implement this, unless this is used for related testing usage.
+ */
+public final class BeautyImageCaptureExtenderImpl implements ImageCaptureExtenderImpl {
+ private static final String TAG = "BeautyICExtender";
+ private static final int DEFAULT_STAGE_ID = 0;
+ private static final int SESSION_STAGE_ID = 101;
+
+ public BeautyImageCaptureExtenderImpl() {
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ // Requires API 23 for ImageWriter
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
+ }
+
+ @Override
+ public List<CaptureStageImpl> getCaptureStages() {
+ // Placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(DEFAULT_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+ List<CaptureStageImpl> captureStages = new ArrayList<>();
+ captureStages.add(captureStage);
+ return captureStages;
+ }
+
+ @Override
+ public CaptureProcessorImpl getCaptureProcessor() {
+ CaptureProcessorImpl captureProcessor =
+ new CaptureProcessorImpl() {
+ private ImageWriter mImageWriter;
+
+ @Override
+ public void onOutputSurface(Surface surface, int imageFormat) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ mImageWriter = ImageWriter.newInstance(surface, 1);
+ }
+ }
+
+ @Override
+ public void process(Map<Integer, Pair<Image, TotalCaptureResult>> results) {
+ Log.d(TAG, "Started beauty CaptureProcessor");
+
+ Pair<Image, TotalCaptureResult> result = results.get(DEFAULT_STAGE_ID);
+
+ if (result == null) {
+ Log.w(TAG,
+ "Unable to process since images does not contain all stages.");
+ return;
+ } else {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ Image image = mImageWriter.dequeueInputImage();
+
+ // Do processing here
+ ByteBuffer yByteBuffer = image.getPlanes()[0].getBuffer();
+ ByteBuffer uByteBuffer = image.getPlanes()[2].getBuffer();
+ ByteBuffer vByteBuffer = image.getPlanes()[1].getBuffer();
+
+ // Sample here just simply copy/paste the capture image result
+ yByteBuffer.put(result.first.getPlanes()[0].getBuffer());
+ uByteBuffer.put(result.first.getPlanes()[2].getBuffer());
+ vByteBuffer.put(result.first.getPlanes()[1].getBuffer());
+
+ mImageWriter.queueInputImage(image);
+ }
+ }
+
+ Log.d(TAG, "Completed beauty CaptureProcessor");
+ }
+
+ @Override
+ public void onResolutionUpdate(Size size) {
+
+ }
+
+ @Override
+ public void onImageFormatUpdate(int imageFormat) {
+
+ }
+ };
+ return captureProcessor;
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+
+ }
+
+ @Override
+ public void onDeInit() {
+
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public int getMaxCaptureStage() {
+ return 3;
+ }
+}
diff --git a/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
new file mode 100755
index 0000000..f3d553e
--- /dev/null
+++ b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CaptureRequest;
+
+/**
+ * Implementation for beauty view finder use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices. 3P developers
+ * don't need to implement this, unless this is used for related testing usage.
+ */
+public final class BeautyPreviewExtenderImpl implements PreviewExtenderImpl {
+ private static final int DEFAULT_STAGE_ID = 0;
+ private static final int SESSION_STAGE_ID = 101;
+
+ public BeautyPreviewExtenderImpl() {
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ // Implement the logic to check whether the extension function is supported or not.
+ return true;
+ }
+
+ @Override
+ public CaptureStageImpl getCaptureStage() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(DEFAULT_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public ProcessorType getProcessorType() {
+ return ProcessorType.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY;
+ }
+
+ @Override
+ public RequestUpdateProcessorImpl getRequestUpdatePreviewProcessor() {
+ return RequestUpdateProcessorImpls.noUpdateProcessor();
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+
+ }
+
+ @Override
+ public void onDeInit() {
+
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_NEGATIVE);
+
+ return captureStage;
+ }
+}
diff --git a/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
new file mode 100755
index 0000000..85c91e7
--- /dev/null
+++ b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.TotalCaptureResult;
+import android.media.Image;
+import android.media.ImageWriter;
+import android.os.Build;
+import android.util.Log;
+import android.util.Pair;
+import android.util.Size;
+import android.view.Surface;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Implementation for night image capture use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices. 3P developers
+ * don't need to implement this, unless this is used for related testing usage.
+ */
+public final class NightImageCaptureExtenderImpl implements ImageCaptureExtenderImpl {
+ private static final String TAG = "NightICExtender";
+ private static final int DEFAULT_STAGE_ID = 0;
+ private static final int SESSION_STAGE_ID = 101;
+
+ public NightImageCaptureExtenderImpl() {
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ // Requires API 23 for ImageWriter
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
+ }
+
+ @Override
+ public List<CaptureStageImpl> getCaptureStages() {
+ // Placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(DEFAULT_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+ List<CaptureStageImpl> captureStages = new ArrayList<>();
+ captureStages.add(captureStage);
+ return captureStages;
+ }
+
+ @Override
+ public CaptureProcessorImpl getCaptureProcessor() {
+ CaptureProcessorImpl captureProcessor =
+ new CaptureProcessorImpl() {
+ private ImageWriter mImageWriter;
+
+ @Override
+ public void onOutputSurface(Surface surface, int imageFormat) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ mImageWriter = ImageWriter.newInstance(surface, 1);
+ }
+ }
+
+ @Override
+ public void process(Map<Integer, Pair<Image, TotalCaptureResult>> results) {
+ Log.d(TAG, "Started night CaptureProcessor");
+
+ Pair<Image, TotalCaptureResult> result = results.get(DEFAULT_STAGE_ID);
+
+ if (result == null) {
+ Log.w(TAG,
+ "Unable to process since images does not contain all stages.");
+ return;
+ } else {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ Image image = mImageWriter.dequeueInputImage();
+
+ // Do processing here
+ ByteBuffer yByteBuffer = image.getPlanes()[0].getBuffer();
+ ByteBuffer uByteBuffer = image.getPlanes()[2].getBuffer();
+ ByteBuffer vByteBuffer = image.getPlanes()[1].getBuffer();
+
+ // Sample here just simply copy/paste the capture image result
+ yByteBuffer.put(result.first.getPlanes()[0].getBuffer());
+ uByteBuffer.put(result.first.getPlanes()[2].getBuffer());
+ vByteBuffer.put(result.first.getPlanes()[1].getBuffer());
+
+ mImageWriter.queueInputImage(image);
+ }
+ }
+
+ Log.d(TAG, "Completed night CaptureProcessor");
+ }
+
+ @Override
+ public void onResolutionUpdate(Size size) {
+
+ }
+
+ @Override
+ public void onImageFormatUpdate(int imageFormat) {
+
+ }
+ };
+ return captureProcessor;
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+
+ }
+
+ @Override
+ public void onDeInit() {
+
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public int getMaxCaptureStage() {
+ return 3;
+ }
+}
diff --git a/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
new file mode 100755
index 0000000..f9925c8
--- /dev/null
+++ b/camera/integration-tests/extensionstestlib/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2019 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.camera.extensions.impl;
+
+import android.content.Context;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CaptureRequest;
+
+/**
+ * Implementation for night view finder use case.
+ *
+ * <p>This class should be implemented by OEM and deployed to the target devices. 3P developers
+ * don't need to implement this, unless this is used for related testing usage.
+ */
+public final class NightPreviewExtenderImpl implements PreviewExtenderImpl {
+ private static final int DEFAULT_STAGE_ID = 0;
+ private static final int SESSION_STAGE_ID = 101;
+
+ public NightPreviewExtenderImpl() {
+ }
+
+ @Override
+ public void enableExtension(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ }
+
+ @Override
+ public boolean isExtensionAvailable(String cameraId,
+ CameraCharacteristics cameraCharacteristics) {
+ // Implement the logic to check whether the extension function is supported or not.
+ return true;
+ }
+
+ @Override
+ public CaptureStageImpl getCaptureStage() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(DEFAULT_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public ProcessorType getProcessorType() {
+ return ProcessorType.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY;
+ }
+
+ @Override
+ public RequestUpdateProcessorImpl getRequestUpdatePreviewProcessor() {
+ return RequestUpdateProcessorImpls.noUpdateProcessor();
+ }
+
+ @Override
+ public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
+ Context context) {
+
+ }
+
+ @Override
+ public void onDeInit() {
+
+ }
+
+ @Override
+ public CaptureStageImpl onPresetSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onEnableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+
+ @Override
+ public CaptureStageImpl onDisableSession() {
+ // Set the necessary CaptureRequest parameters via CaptureStage, here we use some
+ // placeholder set of CaptureRequest.Key values
+ SettableCaptureStage captureStage = new SettableCaptureStage(SESSION_STAGE_ID);
+ captureStage.addCaptureRequestParameters(CaptureRequest.CONTROL_EFFECT_MODE,
+ CaptureRequest.CONTROL_EFFECT_MODE_MONO);
+
+ return captureStage;
+ }
+}
diff --git a/car/core/api/1.0.0-alpha8.txt b/car/core/api/1.0.0-alpha8.txt
index 4bac96d..173332a 100644
--- a/car/core/api/1.0.0-alpha8.txt
+++ b/car/core/api/1.0.0-alpha8.txt
@@ -5,22 +5,22 @@
}
public static final class CarAlertDialog.Builder {
- ctor public CarAlertDialog.Builder(android.content.Context!);
+ ctor public CarAlertDialog.Builder(android.content.Context);
method public androidx.car.app.CarAlertDialog create();
method public androidx.car.app.CarAlertDialog.Builder setBody(@StringRes int);
- method public androidx.car.app.CarAlertDialog.Builder setBody(CharSequence!);
+ method public androidx.car.app.CarAlertDialog.Builder setBody(CharSequence?);
method public androidx.car.app.CarAlertDialog.Builder setBodyMovementMethod(android.text.method.MovementMethod?);
method public androidx.car.app.CarAlertDialog.Builder setCancelable(boolean);
method public androidx.car.app.CarAlertDialog.Builder setHeaderIcon(@DrawableRes int);
method public androidx.car.app.CarAlertDialog.Builder setHeaderIcon(android.graphics.drawable.Icon?);
method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
- method public androidx.car.app.CarAlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+ method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(CharSequence, android.content.DialogInterface.OnClickListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener?);
method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(CharSequence, android.content.DialogInterface.OnClickListener?);
method public androidx.car.app.CarAlertDialog.Builder setTitle(@StringRes int);
- method public androidx.car.app.CarAlertDialog.Builder setTitle(CharSequence!);
+ method public androidx.car.app.CarAlertDialog.Builder setTitle(CharSequence?);
}
public class CarListDialog extends android.app.Dialog {
@@ -68,7 +68,7 @@
public static class CarSingleChoiceDialog.Item {
ctor public CarSingleChoiceDialog.Item(CharSequence);
- ctor public CarSingleChoiceDialog.Item(CharSequence, CharSequence?);
+ ctor public CarSingleChoiceDialog.Item(CharSequence, CharSequence);
}
}
@@ -119,7 +119,7 @@
package androidx.car.util {
public class CarUxRestrictionsHelper {
- ctor public CarUxRestrictionsHelper(android.content.Context!, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
+ ctor public CarUxRestrictionsHelper(android.content.Context, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
method public androidx.car.uxrestrictions.CarUxRestrictions getCurrentCarUxRestrictions();
method public void start();
method public void stop();
diff --git a/car/core/api/current.txt b/car/core/api/current.txt
index 4bac96d..173332a 100644
--- a/car/core/api/current.txt
+++ b/car/core/api/current.txt
@@ -5,22 +5,22 @@
}
public static final class CarAlertDialog.Builder {
- ctor public CarAlertDialog.Builder(android.content.Context!);
+ ctor public CarAlertDialog.Builder(android.content.Context);
method public androidx.car.app.CarAlertDialog create();
method public androidx.car.app.CarAlertDialog.Builder setBody(@StringRes int);
- method public androidx.car.app.CarAlertDialog.Builder setBody(CharSequence!);
+ method public androidx.car.app.CarAlertDialog.Builder setBody(CharSequence?);
method public androidx.car.app.CarAlertDialog.Builder setBodyMovementMethod(android.text.method.MovementMethod?);
method public androidx.car.app.CarAlertDialog.Builder setCancelable(boolean);
method public androidx.car.app.CarAlertDialog.Builder setHeaderIcon(@DrawableRes int);
method public androidx.car.app.CarAlertDialog.Builder setHeaderIcon(android.graphics.drawable.Icon?);
method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
- method public androidx.car.app.CarAlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+ method public androidx.car.app.CarAlertDialog.Builder setNegativeButton(CharSequence, android.content.DialogInterface.OnClickListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener?);
method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener?);
- method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener?);
+ method public androidx.car.app.CarAlertDialog.Builder setPositiveButton(CharSequence, android.content.DialogInterface.OnClickListener?);
method public androidx.car.app.CarAlertDialog.Builder setTitle(@StringRes int);
- method public androidx.car.app.CarAlertDialog.Builder setTitle(CharSequence!);
+ method public androidx.car.app.CarAlertDialog.Builder setTitle(CharSequence?);
}
public class CarListDialog extends android.app.Dialog {
@@ -68,7 +68,7 @@
public static class CarSingleChoiceDialog.Item {
ctor public CarSingleChoiceDialog.Item(CharSequence);
- ctor public CarSingleChoiceDialog.Item(CharSequence, CharSequence?);
+ ctor public CarSingleChoiceDialog.Item(CharSequence, CharSequence);
}
}
@@ -119,7 +119,7 @@
package androidx.car.util {
public class CarUxRestrictionsHelper {
- ctor public CarUxRestrictionsHelper(android.content.Context!, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
+ ctor public CarUxRestrictionsHelper(android.content.Context, androidx.car.uxrestrictions.OnUxRestrictionsChangedListener);
method public androidx.car.uxrestrictions.CarUxRestrictions getCurrentCarUxRestrictions();
method public void start();
method public void stop();
diff --git a/car/core/src/main/java/androidx/car/app/CarAlertDialog.java b/car/core/src/main/java/androidx/car/app/CarAlertDialog.java
index 7e44e16..52e027c 100644
--- a/car/core/src/main/java/androidx/car/app/CarAlertDialog.java
+++ b/car/core/src/main/java/androidx/car/app/CarAlertDialog.java
@@ -369,8 +369,10 @@
* multiple {@code TouchDelegate}s and will delegate out touch events to each.
*/
private static final class ButtonPanelTouchDelegate extends TouchDelegate {
- @Nullable private TouchDelegate mPositiveButtonDelegate;
- @Nullable private TouchDelegate mNegativeButtonDelegate;
+ @Nullable
+ private TouchDelegate mPositiveButtonDelegate;
+ @Nullable
+ private TouchDelegate mNegativeButtonDelegate;
ButtonPanelTouchDelegate(View view) {
super(new Rect(), view);
@@ -442,7 +444,7 @@
*
* @param context The {@code Context} that the dialog is to be created in.
*/
- public Builder(Context context) {
+ public Builder(@NonNull Context context) {
mContext = context;
}
@@ -491,7 +493,7 @@
* @return This {@code Builder} object to allow for chaining of calls.
*/
@NonNull
- public Builder setTitle(CharSequence title) {
+ public Builder setTitle(@Nullable CharSequence title) {
mTitle = title;
return this;
}
@@ -515,7 +517,7 @@
* @return This {@code Builder} object to allow for chaining of calls.
*/
@NonNull
- public Builder setBody(CharSequence body) {
+ public Builder setBody(@Nullable CharSequence body) {
mBody = body;
return this;
}
@@ -523,7 +525,7 @@
/**
* Sets the {@link MovementMethod} to be applied on the body text of this alert dialog.
*
- * @param movementMethod The {@code MovementMethod} to apply or {@code null}.
+ * @param movementMethod The {@code MovementMethod} to apply or {@code null}.
* @return This {@code Builder} object to allow for chaining of calls.
* @see TextView#setMovementMethod(MovementMethod)
*/
@@ -541,7 +543,7 @@
* <p>The positive button should be used to accept and continue with the action (e.g.
* an "OK" action).
*
- * @param textId The resource id of the string to be used for the positive button text.
+ * @param textId The resource id of the string to be used for the positive button text.
* @param listener A {@link android.content.DialogInterface.OnClickListener} to be invoked
* when the button is clicked. Can be {@code null} to represent no listener.
* @return This {@code Builder} object to allow for chaining of calls.
@@ -562,13 +564,14 @@
* <p>The positive button should be used to accept and continue with the action (e.g.
* an "OK" action).
*
- * @param text The string to be used for the positive button text.
+ * @param text The string to be used for the positive button text.
* @param listener A {@link android.content.DialogInterface.OnClickListener} to be invoked
* when the button is clicked. Can be {@code null} to represent no listener.
* @return This {@code Builder} object to allow for chaining of calls.
*/
@NonNull
- public Builder setPositiveButton(CharSequence text, @Nullable OnClickListener listener) {
+ public Builder setPositiveButton(@NonNull CharSequence text,
+ @Nullable OnClickListener listener) {
mPositiveButtonText = text;
mPositiveButtonListener = listener;
return this;
@@ -581,7 +584,7 @@
*
* <p>The negative button should be used to cancel any actions the dialog represents.
*
- * @param textId The resource id of the string to be used for the negative button text.
+ * @param textId The resource id of the string to be used for the negative button text.
* @param listener A {@link android.content.DialogInterface.OnClickListener} to be invoked
* when the button is clicked. Can be {@code null} to represent no listener.
* @return This {@code Builder} object to allow for chaining of calls.
@@ -601,13 +604,14 @@
*
* <p>The negative button should be used to cancel any actions the dialog represents.
*
- * @param text The string to be used for the negative button text.
+ * @param text The string to be used for the negative button text.
* @param listener A {@link android.content.DialogInterface.OnClickListener} to be invoked
* when the button is clicked. Can be {@code null} to represent no listener.
* @return This {@code Builder} object to allow for chaining of calls.
*/
@NonNull
- public Builder setNegativeButton(CharSequence text, @Nullable OnClickListener listener) {
+ public Builder setNegativeButton(@NonNull CharSequence text,
+ @Nullable OnClickListener listener) {
mNegativeButtonText = text;
mNegativeButtonListener = listener;
return this;
@@ -634,12 +638,11 @@
*
* @param onCancelListener The listener to be invoked when this dialog is canceled.
* @return This {@code Builder} object to allow for chaining of calls.
- *
* @see #setCancelable(boolean)
* @see #setOnDismissListener(OnDismissListener)
*/
@NonNull
- public Builder setOnCancelListener(OnCancelListener onCancelListener) {
+ public Builder setOnCancelListener(@Nullable OnCancelListener onCancelListener) {
mOnCancelListener = onCancelListener;
return this;
}
@@ -650,7 +653,7 @@
* @return This {@code Builder} object to allow for chaining of calls.
*/
@NonNull
- public Builder setOnDismissListener(OnDismissListener onDismissListener) {
+ public Builder setOnDismissListener(@Nullable OnDismissListener onDismissListener) {
mOnDismissListener = onDismissListener;
return this;
}
diff --git a/car/core/src/main/java/androidx/car/app/CarSingleChoiceDialog.java b/car/core/src/main/java/androidx/car/app/CarSingleChoiceDialog.java
index 23bef3c..ea91bd1 100644
--- a/car/core/src/main/java/androidx/car/app/CarSingleChoiceDialog.java
+++ b/car/core/src/main/java/androidx/car/app/CarSingleChoiceDialog.java
@@ -256,7 +256,7 @@
* @param title The title of the item. This value must be non-empty.
*/
public Item(@NonNull CharSequence title) {
- this(title, /* body= */ null);
+ this(title, /* body= */ "");
}
@@ -266,7 +266,7 @@
* @param title The title of the item. This value must be non-empty.
* @param body The secondary body text of the item.
*/
- public Item(@NonNull CharSequence title, @Nullable CharSequence body) {
+ public Item(@NonNull CharSequence title, @NonNull CharSequence body) {
if (TextUtils.isEmpty(title)) {
throw new IllegalArgumentException("Title cannot be empty.");
}
diff --git a/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java b/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
index 65ad2f8..e4bb64a 100644
--- a/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
+++ b/car/core/src/main/java/androidx/car/util/CarUxRestrictionsHelper.java
@@ -41,14 +41,16 @@
// mCar is created in the constructor, but can be null if connection to the car is not
// successful.
@SuppressWarnings("WeakerAccess") /* synthetic access */
- @Nullable final Car mCar;
+ @Nullable
+ final Car mCar;
@SuppressWarnings("WeakerAccess") /* synthetic access */
- @Nullable CarUxRestrictionsManager mCarUxRestrictionsManager;
+ @Nullable
+ CarUxRestrictionsManager mCarUxRestrictionsManager;
@SuppressWarnings("WeakerAccess") /* synthetic access */
final OnUxRestrictionsChangedListener mListener;
- public CarUxRestrictionsHelper(Context context,
+ public CarUxRestrictionsHelper(@NonNull Context context,
@NonNull OnUxRestrictionsChangedListener listener) {
if (listener == null) {
throw new IllegalArgumentException("Listener cannot be null.");
@@ -63,7 +65,9 @@
* <p>This method can be called from {@code Activity}'s {@link Activity#onStart()}, or at the
* time of construction.
*
- * <p>This method must be accompanied with a matching {@link #stop()} to avoid leak.
+ * <p>This method must be accompanied with a matching {@link #stop()} to avoid leak. After
+ * {@link #start()} has been called, calling {@link #start()} subsequent times without
+ * calling {@link #stop()} will result in a no-op.
*/
public void start() {
try {
@@ -83,7 +87,8 @@
* time of being discarded.
*
* <p>After {@link #stop()} has been called, {@link #start()} can be called again to resume
- * monitoring car ux restrictions change.
+ * monitoring car ux restrictions change. Calling {@link #stop()} without calling
+ * {@link #start()} will result in a no-op.
*/
public void stop() {
if (mCarUxRestrictionsManager != null) {
diff --git a/car/moderator/res/values-as/strings.xml b/car/moderator/res/values-as/strings.xml
new file mode 100644
index 0000000..ad8b096
--- /dev/null
+++ b/car/moderator/res/values-as/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="speed_bump_lockout_message" msgid="5540717186175632753">"গাড়ী চলোৱাত ধ্যান দিয়ক"</string>
+</resources>
diff --git a/compose/plugins/cli-tests/build.gradle b/compose/plugins/cli-tests/build.gradle
index 8b80439..9261160 100644
--- a/compose/plugins/cli-tests/build.gradle
+++ b/compose/plugins/cli-tests/build.gradle
@@ -57,7 +57,7 @@
unitTests.all {
// There is only one version of the compose plugin built so the debug tests are
// sufficient as they test that one version
- if (it.name == 'testReleaseUnitTest') {
+ if (it.name == 'testReleaseUnitTest' || it.name == 'testDebugUnitTest') {
filter {
exclude '*'
}
diff --git a/core/api/restricted_1.1.0-beta02.txt b/core/api/restricted_1.1.0-beta02.txt
index 9f724f4..62d67c7 100644
--- a/core/api/restricted_1.1.0-beta02.txt
+++ b/core/api/restricted_1.1.0-beta02.txt
@@ -129,14 +129,15 @@
ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
}
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaver {
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
ctor public ShortcutInfoCompatSaver();
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
+ method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeAllShortcuts();
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeShortcuts(java.util.List<java.lang.String!>!);
+ method @AnyThread public abstract T! removeAllShortcuts();
+ method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
}
+
}
package androidx.core.content.res {
diff --git a/core/api/restricted_current.txt b/core/api/restricted_current.txt
index 9f724f4..62d67c7 100644
--- a/core/api/restricted_current.txt
+++ b/core/api/restricted_current.txt
@@ -129,14 +129,15 @@
ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
}
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaver {
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
ctor public ShortcutInfoCompatSaver();
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
+ method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeAllShortcuts();
- method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeShortcuts(java.util.List<java.lang.String!>!);
+ method @AnyThread public abstract T! removeAllShortcuts();
+ method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
}
+
}
package androidx.core.content.res {
diff --git a/core/build.gradle b/core/build.gradle
index 4b5c603..03fc3862 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -13,8 +13,6 @@
implementation("androidx.collection:collection:1.0.0")
api(ARCH_LIFECYCLE_RUNTIME, libs.exclude_annotations_transitive)
api(project(":versionedparcelable"))
- api(GUAVA_LISTENABLE_FUTURE)
- implementation(project(":concurrent:concurrent-futures"))
androidTestImplementation(KOTLIN_STDLIB)
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
diff --git a/core/res/values-as/strings.xml b/core/res/values-as/strings.xml
new file mode 100644
index 0000000..3039039
--- /dev/null
+++ b/core/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright (C) 2017 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="status_bar_notification_info_overflow" msgid="8106346172024741305">"৯৯৯+"</string>
+</resources>
diff --git a/core/src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java b/core/src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java
index 4bda3a7..caac3a7 100644
--- a/core/src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java
+++ b/core/src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java
@@ -16,14 +16,12 @@
package androidx.core.content.pm;
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
import androidx.annotation.AnyThread;
import androidx.annotation.RestrictTo;
import androidx.annotation.WorkerThread;
-import androidx.concurrent.futures.ResolvableFuture;
-
-import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.List;
@@ -35,30 +33,41 @@
* @hide
*/
@RestrictTo(LIBRARY_GROUP_PREFIX)
-public class ShortcutInfoCompatSaver {
+public abstract class ShortcutInfoCompatSaver<T> {
@AnyThread
- public ListenableFuture<Void> addShortcuts(List<ShortcutInfoCompat> shortcuts) {
- final ResolvableFuture<Void> result = ResolvableFuture.create();
- result.set(null);
- return result;
- }
+ public abstract T addShortcuts(List<ShortcutInfoCompat> shortcuts);
@AnyThread
- public ListenableFuture<Void> removeShortcuts(List<String> shortcutIds) {
- final ResolvableFuture<Void> result = ResolvableFuture.create();
- result.set(null);
- return result;
- }
+ public abstract T removeShortcuts(List<String> shortcutIds);
@AnyThread
- public ListenableFuture<Void> removeAllShortcuts() {
- final ResolvableFuture<Void> result = ResolvableFuture.create();
- result.set(null);
- return result;
- }
+ public abstract T removeAllShortcuts();
@WorkerThread
public List<ShortcutInfoCompat> getShortcuts() throws Exception {
return new ArrayList<>();
}
+
+ /**
+ * Implementation that does nothing and returns null from asynchronous methods.
+ *
+ * @hide
+ */
+ @RestrictTo(LIBRARY)
+ public static class NoopImpl extends ShortcutInfoCompatSaver<Void> {
+ @Override
+ public Void addShortcuts(List<ShortcutInfoCompat> shortcuts) {
+ return null;
+ }
+
+ @Override
+ public Void removeShortcuts(List<String> shortcutIds) {
+ return null;
+ }
+
+ @Override
+ public Void removeAllShortcuts() {
+ return null;
+ }
+ }
}
diff --git a/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java b/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
index fc7e4ae..509eb17 100644
--- a/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
+++ b/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
@@ -62,7 +62,7 @@
* If fails to load an implementation via reflection, will use the default implementation which
* is no-op to avoid unnecessary disk I/O.
*/
- private static volatile ShortcutInfoCompatSaver sShortcutInfoCompatSaver = null;
+ private static volatile ShortcutInfoCompatSaver<?> sShortcutInfoCompatSaver = null;
private ShortcutManagerCompat() {
/* Hide constructor */
@@ -298,7 +298,7 @@
if (sShortcutInfoCompatSaver == null) {
// Implementation not available. Instantiate to the default no-op impl.
- sShortcutInfoCompatSaver = new ShortcutInfoCompatSaver();
+ sShortcutInfoCompatSaver = new ShortcutInfoCompatSaver.NoopImpl();
}
}
return sShortcutInfoCompatSaver;
diff --git a/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentDismissTest.kt b/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentDismissTest.kt
index c53870c..51ca384 100644
--- a/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentDismissTest.kt
+++ b/fragment/src/androidTest/java/androidx/fragment/app/DialogFragmentDismissTest.kt
@@ -22,8 +22,8 @@
import android.os.Bundle
import android.os.Looper
import androidx.fragment.app.test.EmptyFragmentTestActivity
-import androidx.lifecycle.GenericLifecycleObserver
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
import androidx.test.filters.LargeTest
import androidx.test.rule.ActivityTestRule
import com.google.common.truth.Truth.assertWithMessage
@@ -110,7 +110,7 @@
var onDismissCalledCount = 0
val countDownLatch = CountDownLatch(3)
activityTestRule.runOnUiThread {
- fragment.lifecycle.addObserver(GenericLifecycleObserver { _, event ->
+ fragment.lifecycle.addObserver(LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_STOP) {
val dialog = fragment.dialog
dialogIsNonNull = dialog != null
diff --git a/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/src/main/java/androidx/fragment/app/Fragment.java
index 8e77d30c..3428c69e 100644
--- a/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -461,7 +461,8 @@
if (Build.VERSION.SDK_INT >= 19) {
mLifecycleRegistry.addObserver(new GenericLifecycleObserver() {
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_STOP) {
if (mView != null) {
mView.cancelPendingInputEvents();
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.kt b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.kt
index d8b17be..5bf786e 100644
--- a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.kt
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioTest.kt
@@ -23,9 +23,9 @@
import androidx.fragment.app.FragmentFactory
import androidx.fragment.testing.test.R.id.view_tag_id
import androidx.fragment.testing.test.R.style.ThemedFragmentTheme
-import androidx.lifecycle.GenericLifecycleObserver
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.Lifecycle.State
+import androidx.lifecycle.LifecycleEventObserver
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
@@ -198,7 +198,7 @@
fragment.requireView().setTag(view_tag_id, "fakeNavController")
}
}
- fragment.lifecycle.addObserver(GenericLifecycleObserver { _, event ->
+ fragment.lifecycle.addObserver(LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_START) {
tagSetBeforeOnStart =
fragment.requireView().getTag(view_tag_id) == "fakeNavController"
diff --git a/leanback/src/main/res/values-as/strings.xml b/leanback/src/main/res/values-as/strings.xml
index eb3b2b0..05b84d6 100644
--- a/leanback/src/main/res/values-as/strings.xml
+++ b/leanback/src/main/res/values-as/strings.xml
@@ -49,7 +49,7 @@
<string name="lb_playback_controls_closed_captioning_disable" msgid="5508271941331836786">"ছাব-টাইটেল অক্ষম কৰক"</string>
<string name="lb_playback_controls_picture_in_picture" msgid="8800305194045609275">"চিত্ৰৰ ভিতৰত চিত্ৰ ম\'ড আৰম্ভ কৰক"</string>
<string name="lb_playback_time_separator" msgid="6549544638083578695">"/"</string>
- <string name="lb_playback_controls_shown" msgid="7794717158616536936">"মিডিয়াৰ নিয়ন্ত্ৰণসমূহ দেখুওৱা হ\'ল"</string>
+ <string name="lb_playback_controls_shown" msgid="7794717158616536936">"মিডিয়াৰ নিয়ন্ত্ৰণসমূহ দেখুওৱা হ’ল"</string>
<string name="lb_playback_controls_hidden" msgid="619396299825306757">"মিডিয়াৰ নিয়ন্ত্ৰণসমূহ লুকুৱাই ৰখা হৈছে, দেখুওৱাবলৈ ডি-পেডত টিপক"</string>
<string name="lb_guidedaction_finish_title" msgid="7747913934287176843">"সমাপ্ত"</string>
<string name="lb_guidedaction_continue_title" msgid="1122271825827282965">"অব্যাহত ৰাখক"</string>
diff --git a/leanback/src/main/res/values-bs/strings.xml b/leanback/src/main/res/values-bs/strings.xml
index dbdfdea..6c429a0 100644
--- a/leanback/src/main/res/values-bs/strings.xml
+++ b/leanback/src/main/res/values-bs/strings.xml
@@ -55,5 +55,5 @@
<string name="lb_guidedaction_continue_title" msgid="1122271825827282965">"Nastavi"</string>
<string name="lb_media_player_error" msgid="8748646000835486516">"Kôd greške MediaPlayera %1$d dodatno %2$d"</string>
<string name="lb_onboarding_get_started" msgid="7674487829030291492">"ZAPOČNITE"</string>
- <string name="lb_onboarding_accessibility_next" msgid="4213611627196077555">"Dalje"</string>
+ <string name="lb_onboarding_accessibility_next" msgid="4213611627196077555">"Naprijed"</string>
</resources>
diff --git a/leanback/src/main/res/values-eu/strings.xml b/leanback/src/main/res/values-eu/strings.xml
index 72c433f..50bdcaf 100644
--- a/leanback/src/main/res/values-eu/strings.xml
+++ b/leanback/src/main/res/values-eu/strings.xml
@@ -55,5 +55,5 @@
<string name="lb_guidedaction_continue_title" msgid="1122271825827282965">"Egin aurrera"</string>
<string name="lb_media_player_error" msgid="8748646000835486516">"MediaPlayer errore-kodea: %1$d (%2$d gehigarria)"</string>
<string name="lb_onboarding_get_started" msgid="7674487829030291492">"HASI ERABILTZEN"</string>
- <string name="lb_onboarding_accessibility_next" msgid="4213611627196077555">"Aurrera"</string>
+ <string name="lb_onboarding_accessibility_next" msgid="4213611627196077555">"Hurrengoa"</string>
</resources>
diff --git a/leanback/src/main/res/values-iw/strings.xml b/leanback/src/main/res/values-iw/strings.xml
index 7f02b2e..d31a805 100644
--- a/leanback/src/main/res/values-iw/strings.xml
+++ b/leanback/src/main/res/values-iw/strings.xml
@@ -39,8 +39,8 @@
<string name="lb_playback_controls_thumb_down" msgid="5075744418630733006">"ביטול בחירה בסימון \'לא אהבתי\'"</string>
<string name="lb_playback_controls_thumb_down_outline" msgid="2847309435442474470">"בחירה בסימון \'לא אהבתי\'"</string>
<string name="lb_playback_controls_repeat_none" msgid="5812341701962930499">"אל תחזור על כלום"</string>
- <string name="lb_playback_controls_repeat_all" msgid="5164826436271322261">"חזור על הכול"</string>
- <string name="lb_playback_controls_repeat_one" msgid="7675097479246139440">"חזור על פריט אחד"</string>
+ <string name="lb_playback_controls_repeat_all" msgid="5164826436271322261">"חזרה על הכל"</string>
+ <string name="lb_playback_controls_repeat_one" msgid="7675097479246139440">"חזרה על פריט אחד"</string>
<string name="lb_playback_controls_shuffle_enable" msgid="7809089255981448519">"הפעלת ערבוב"</string>
<string name="lb_playback_controls_shuffle_disable" msgid="8182435535948303910">"השבתת ערבוב"</string>
<string name="lb_playback_controls_high_quality_enable" msgid="1862669142355962638">"הפעלת איכות גבוהה"</string>
diff --git a/leanback/src/main/res/values-ne/strings.xml b/leanback/src/main/res/values-ne/strings.xml
index 416fc65..5cf37cd 100644
--- a/leanback/src/main/res/values-ne/strings.xml
+++ b/leanback/src/main/res/values-ne/strings.xml
@@ -47,7 +47,7 @@
<string name="lb_playback_controls_high_quality_disable" msgid="3000046054608531995">"उच्च गुणस्तरलाई असक्षम पार्नुहोस्"</string>
<string name="lb_playback_controls_closed_captioning_enable" msgid="3934392140182327163">"उप शीर्षकहरू देखाउने सुविधालाई सक्षम पार्नुहोस्"</string>
<string name="lb_playback_controls_closed_captioning_disable" msgid="5508271941331836786">"उप शीर्षकहरू देखाउने सुविधालाई असक्षम पार्नुहोस्"</string>
- <string name="lb_playback_controls_picture_in_picture" msgid="8800305194045609275">"तस्बिरभित्र तस्बिर नामक मोडमा प्रविष्ट गर्नुहोस्"</string>
+ <string name="lb_playback_controls_picture_in_picture" msgid="8800305194045609275">"तस्बिरभित्र तस्बिर नामक मोडमा प्रविष्टि गर्नुहोस्"</string>
<string name="lb_playback_time_separator" msgid="6549544638083578695">"/"</string>
<string name="lb_playback_controls_shown" msgid="7794717158616536936">"मिडियाका नियन्त्रणहरू देखाइएका छन्"</string>
<string name="lb_playback_controls_hidden" msgid="619396299825306757">"मिडियाका नियन्त्रणहरूलाई लुकाइएको छ, देखाउनका लागि d-pad नामक बटन थिच्नुहोस्"</string>
diff --git a/leanback/src/main/res/values-ta/strings.xml b/leanback/src/main/res/values-ta/strings.xml
index 10c84ca..d0b2641 100644
--- a/leanback/src/main/res/values-ta/strings.xml
+++ b/leanback/src/main/res/values-ta/strings.xml
@@ -41,8 +41,8 @@
<string name="lb_playback_controls_repeat_none" msgid="5812341701962930499">"எதையும் மீண்டும் இயக்காதே"</string>
<string name="lb_playback_controls_repeat_all" msgid="5164826436271322261">"அனைத்தையும் மீண்டும் இயக்கு"</string>
<string name="lb_playback_controls_repeat_one" msgid="7675097479246139440">"ஒன்றை மட்டும் மீண்டும் இயக்கு"</string>
- <string name="lb_playback_controls_shuffle_enable" msgid="7809089255981448519">"கலைத்து இயக்கு"</string>
- <string name="lb_playback_controls_shuffle_disable" msgid="8182435535948303910">"கலைக்காமல் இயக்கு"</string>
+ <string name="lb_playback_controls_shuffle_enable" msgid="7809089255981448519">"வரிசை மாற்றி இயக்கு"</string>
+ <string name="lb_playback_controls_shuffle_disable" msgid="8182435535948303910">"வரிசை மாற்றி இயக்குவதை நிறுத்து"</string>
<string name="lb_playback_controls_high_quality_enable" msgid="1862669142355962638">"உயர்தரத்தை இயக்கு"</string>
<string name="lb_playback_controls_high_quality_disable" msgid="3000046054608531995">"உயர்தரத்தை முடக்கு"</string>
<string name="lb_playback_controls_closed_captioning_enable" msgid="3934392140182327163">"விரிவான வசனங்களை இயக்கு"</string>
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/CompositeGeneratedAdaptersObserver.java b/lifecycle/common/src/main/java/androidx/lifecycle/CompositeGeneratedAdaptersObserver.java
index 10d7adb..cd2e072 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/CompositeGeneratedAdaptersObserver.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/CompositeGeneratedAdaptersObserver.java
@@ -17,6 +17,8 @@
package androidx.lifecycle;
+import androidx.annotation.NonNull;
+
class CompositeGeneratedAdaptersObserver implements LifecycleEventObserver {
private final GeneratedAdapter[] mGeneratedAdapters;
@@ -26,7 +28,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
MethodCallsLogger logger = new MethodCallsLogger();
for (GeneratedAdapter mGenerated: mGeneratedAdapters) {
mGenerated.callMethods(source, event, false, logger);
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/FullLifecycleObserverAdapter.java b/lifecycle/common/src/main/java/androidx/lifecycle/FullLifecycleObserverAdapter.java
index 0c9ff0b..10223d4 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/FullLifecycleObserverAdapter.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/FullLifecycleObserverAdapter.java
@@ -16,6 +16,8 @@
package androidx.lifecycle;
+import androidx.annotation.NonNull;
+
class FullLifecycleObserverAdapter implements LifecycleEventObserver {
private final FullLifecycleObserver mFullLifecycleObserver;
@@ -28,7 +30,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
switch (event) {
case ON_CREATE:
mFullLifecycleObserver.onCreate(source);
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
index 9450466..2abb6ec 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/Lifecycling.java
@@ -49,6 +49,7 @@
/**
* @deprecated Left for compatibility with lifecycle-runtime:2.0
*/
+ @SuppressWarnings("deprecation")
@Deprecated
@NonNull
static GenericLifecycleObserver getCallback(final Object object) {
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/ReflectiveGenericLifecycleObserver.java b/lifecycle/common/src/main/java/androidx/lifecycle/ReflectiveGenericLifecycleObserver.java
index 69212de..ba39f7b 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/ReflectiveGenericLifecycleObserver.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/ReflectiveGenericLifecycleObserver.java
@@ -16,6 +16,7 @@
package androidx.lifecycle;
+import androidx.annotation.NonNull;
import androidx.lifecycle.ClassesInfoCache.CallbackInfo;
import androidx.lifecycle.Lifecycle.Event;
@@ -32,7 +33,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Event event) {
mInfo.invokeCallbacks(source, event, mWrapped);
}
}
diff --git a/lifecycle/common/src/main/java/androidx/lifecycle/SingleGeneratedAdapterObserver.java b/lifecycle/common/src/main/java/androidx/lifecycle/SingleGeneratedAdapterObserver.java
index 2f77c1d..13f7b63 100644
--- a/lifecycle/common/src/main/java/androidx/lifecycle/SingleGeneratedAdapterObserver.java
+++ b/lifecycle/common/src/main/java/androidx/lifecycle/SingleGeneratedAdapterObserver.java
@@ -16,6 +16,8 @@
package androidx.lifecycle;
+import androidx.annotation.NonNull;
+
class SingleGeneratedAdapterObserver implements LifecycleEventObserver {
private final GeneratedAdapter mGeneratedAdapter;
@@ -25,7 +27,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
mGeneratedAdapter.callMethods(source, event, false, null);
mGeneratedAdapter.callMethods(source, event, true, null);
}
diff --git a/lifecycle/common/src/test/java/androidx/lifecycle/FullLifecycleObserverTest.java b/lifecycle/common/src/test/java/androidx/lifecycle/FullLifecycleObserverTest.java
index 431f099..8a6500b 100644
--- a/lifecycle/common/src/test/java/androidx/lifecycle/FullLifecycleObserverTest.java
+++ b/lifecycle/common/src/test/java/androidx/lifecycle/FullLifecycleObserverTest.java
@@ -32,6 +32,8 @@
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.when;
+import androidx.annotation.NonNull;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -123,7 +125,8 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
}
}
diff --git a/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java b/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
index a137f43..5854dce 100644
--- a/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
+++ b/lifecycle/common/src/test/java/androidx/lifecycle/LifecyclingTest.java
@@ -87,11 +87,13 @@
}
// MUST BE HERE TILL Lifecycle 3.0.0 release for back-compatibility with other modules
+ @SuppressWarnings("deprecation")
@Test
public void testDeprecatedGenericLifecycleObserver() {
GenericLifecycleObserver genericLifecycleObserver = new GenericLifecycleObserver() {
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
}
};
LifecycleEventObserver observer = lifecycleEventObserver(genericLifecycleObserver);
@@ -99,11 +101,13 @@
}
// MUST BE HERE TILL Lifecycle 3.0.0 release for back-compatibility with other modules
+ @SuppressWarnings("deprecation")
@Test
public void testDeprecatedLifecyclingCallback() {
GenericLifecycleObserver genericLifecycleObserver = new GenericLifecycleObserver() {
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
}
};
LifecycleEventObserver observer = Lifecycling.getCallback(genericLifecycleObserver);
diff --git a/lifecycle/integration-tests/testapp/src/androidTest/java/androidx/lifecycle/SynchronousActivityLifecycleTest.java b/lifecycle/integration-tests/testapp/src/androidTest/java/androidx/lifecycle/SynchronousActivityLifecycleTest.java
index bbb2292..245ff06 100644
--- a/lifecycle/integration-tests/testapp/src/androidTest/java/androidx/lifecycle/SynchronousActivityLifecycleTest.java
+++ b/lifecycle/integration-tests/testapp/src/androidTest/java/androidx/lifecycle/SynchronousActivityLifecycleTest.java
@@ -29,6 +29,7 @@
import android.content.pm.ActivityInfo;
import android.os.Build;
+import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle.Event;
import androidx.lifecycle.testapp.LifecycleTestActivity;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -181,7 +182,7 @@
}
@Override
- public void onStateChanged(LifecycleOwner lifecycleOwner, Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner lifecycleOwner, @NonNull Event event) {
if (mMuted) {
return;
}
diff --git a/lifecycle/livedata-core/src/main/java/androidx/lifecycle/LiveData.java b/lifecycle/livedata-core/src/main/java/androidx/lifecycle/LiveData.java
index 43909fa..719c8ed 100644
--- a/lifecycle/livedata-core/src/main/java/androidx/lifecycle/LiveData.java
+++ b/lifecycle/livedata-core/src/main/java/androidx/lifecycle/LiveData.java
@@ -80,6 +80,7 @@
@SuppressWarnings("FieldCanBeLocal")
private boolean mDispatchInvalidated;
private final Runnable mPostValueRunnable = new Runnable() {
+ @SuppressWarnings("unchecked")
@Override
public void run() {
Object newValue;
@@ -87,7 +88,6 @@
newValue = mPendingData;
mPendingData = NOT_SET;
}
- //noinspection unchecked
setValue((T) newValue);
}
};
@@ -110,6 +110,7 @@
mVersion = START_VERSION;
}
+ @SuppressWarnings("unchecked")
private void considerNotify(ObserverWrapper observer) {
if (!observer.mActive) {
return;
@@ -127,7 +128,6 @@
return;
}
observer.mLastVersion = mVersion;
- //noinspection unchecked
observer.mObserver.onChanged((T) mData);
}
@@ -314,11 +314,11 @@
*
* @return the current value
*/
+ @SuppressWarnings("unchecked")
@Nullable
public T getValue() {
Object data = mData;
if (data != NOT_SET) {
- //noinspection unchecked
return (T) data;
}
return null;
@@ -386,7 +386,8 @@
}
@Override
- public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) {
+ public void onStateChanged(@NonNull LifecycleOwner source,
+ @NonNull Lifecycle.Event event) {
if (mOwner.getLifecycle().getCurrentState() == DESTROYED) {
removeObserver(mObserver);
return;
diff --git a/lifecycle/livedata/src/test/java/androidx/lifecycle/ComputableLiveDataTest.java b/lifecycle/livedata/src/test/java/androidx/lifecycle/ComputableLiveDataTest.java
index 2b9d37e..96796e3 100644
--- a/lifecycle/livedata/src/test/java/androidx/lifecycle/ComputableLiveDataTest.java
+++ b/lifecycle/livedata/src/test/java/androidx/lifecycle/ComputableLiveDataTest.java
@@ -75,6 +75,7 @@
verify(mTaskExecutor, never()).executeOnDiskIO(computable.mInvalidationRunnable);
}
+ @SuppressWarnings("unchecked")
@Test
public void noConcurrentCompute() throws InterruptedException {
TaskExecutorWithFakeMainThread executor = new TaskExecutorWithFakeMainThread(2);
@@ -97,7 +98,6 @@
}
};
final ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class);
- //noinspection unchecked
final Observer<Integer> observer = mock(Observer.class);
executor.postToMainThread(new Runnable() {
@Override
diff --git a/lifecycle/runtime/src/test/java/androidx/lifecycle/LifecycleRegistryTest.java b/lifecycle/runtime/src/test/java/androidx/lifecycle/LifecycleRegistryTest.java
index f12bfd3..414fb28 100644
--- a/lifecycle/runtime/src/test/java/androidx/lifecycle/LifecycleRegistryTest.java
+++ b/lifecycle/runtime/src/test/java/androidx/lifecycle/LifecycleRegistryTest.java
@@ -81,6 +81,7 @@
assertThat(mRegistry.getObserverCount(), is(0));
}
+ @SuppressWarnings("deprecation")
@Test
public void addGenericAndObserve() {
GenericLifecycleObserver generic = mock(GenericLifecycleObserver.class);
diff --git a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/AndroidViewModel.java b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/AndroidViewModel.java
index 1782453..f3fc032 100644
--- a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/AndroidViewModel.java
+++ b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/AndroidViewModel.java
@@ -38,10 +38,9 @@
/**
* Return the application.
*/
- @SuppressWarnings("TypeParameterUnusedInFormals")
+ @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
@NonNull
public <T extends Application> T getApplication() {
- //noinspection unchecked
return (T) mApplication;
}
}
diff --git a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModel.java b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModel.java
index d18d8ed..0709327 100644
--- a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModel.java
+++ b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModel.java
@@ -151,10 +151,10 @@
* it implements {@link Closeable}. The same object may receive multiple close calls, so method
* should be idempotent.
*/
+ @SuppressWarnings("unchecked")
<T> T setTagIfAbsent(String key, T newValue) {
T previous;
synchronized (mBagOfTags) {
- //noinspection unchecked
previous = (T) mBagOfTags.get(key);
if (previous == null) {
mBagOfTags.put(key, newValue);
@@ -173,9 +173,8 @@
/**
* Returns the tag associated with this viewmodel and the specified key.
*/
- @SuppressWarnings("TypeParameterUnusedInFormals")
+ @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
<T> T getTag(String key) {
- //noinspection unchecked
synchronized (mBagOfTags) {
return (T) mBagOfTags.get(key);
}
diff --git a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
index fa2efb9..56d9f1b 100644
--- a/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
+++ b/lifecycle/viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.java
@@ -144,13 +144,13 @@
* @param <T> The type parameter for the ViewModel.
* @return A ViewModel that is an instance of the given type {@code T}.
*/
+ @SuppressWarnings("unchecked")
@NonNull
@MainThread
public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) {
ViewModel viewModel = mViewModelStore.get(key);
if (modelClass.isInstance(viewModel)) {
- //noinspection unchecked
return (T) viewModel;
} else {
//noinspection StatementWithEmptyBody
@@ -164,7 +164,6 @@
viewModel = (mFactory).create(modelClass);
}
mViewModelStore.put(key, viewModel);
- //noinspection unchecked
return (T) viewModel;
}
diff --git a/mediarouter/src/main/res/values-in/strings.xml b/mediarouter/src/main/res/values-in/strings.xml
index 305bae8..45f7ff0 100644
--- a/mediarouter/src/main/res/values-in/strings.xml
+++ b/mediarouter/src/main/res/values-in/strings.xml
@@ -33,7 +33,7 @@
<string name="mr_controller_expand_group" msgid="2422682304043876468">"Luaskan"</string>
<string name="mr_controller_collapse_group" msgid="5518911192681928413">"Ciutkan"</string>
<string name="mr_controller_album_art" msgid="5813284753012893250">"Sampul album"</string>
- <string name="mr_controller_volume_slider" msgid="691656961160498512">"Penggeser volume"</string>
+ <string name="mr_controller_volume_slider" msgid="691656961160498512">"Pengatur volume"</string>
<string name="mr_controller_no_media_selected" msgid="4342878516155861006">"Tidak ada media yang dipilih"</string>
<string name="mr_controller_no_info_available" msgid="7299368841849988218">"Tidak ada info yang tersedia"</string>
<string name="mr_controller_casting_screen" msgid="5286734709674025661">"Melakukan cast layar"</string>
diff --git a/mediarouter/src/main/res/values-ja/strings.xml b/mediarouter/src/main/res/values-ja/strings.xml
index 7558a71..21f712a 100644
--- a/mediarouter/src/main/res/values-ja/strings.xml
+++ b/mediarouter/src/main/res/values-ja/strings.xml
@@ -17,13 +17,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="mr_system_route_name" msgid="3117964881088969586">"システム"</string>
- <string name="mr_user_route_category_name" msgid="8236416097133080726">"端末"</string>
+ <string name="mr_user_route_category_name" msgid="8236416097133080726">"デバイス"</string>
<string name="mr_button_content_description" msgid="1685185767093348095">"キャスト アイコン"</string>
<string name="mr_cast_button_disconnected" msgid="5501231066847739632">"キャスト アイコン。接続解除済み"</string>
<string name="mr_cast_button_connecting" msgid="8959304318293841992">"キャスト アイコン。接続中"</string>
<string name="mr_cast_button_connected" msgid="1350095112462806159">"キャスト アイコン。接続済み"</string>
<string name="mr_chooser_title" msgid="7548226170787476564">"キャスト先"</string>
- <string name="mr_chooser_searching" msgid="5504553798429329689">"端末を検出しています"</string>
+ <string name="mr_chooser_searching" msgid="5504553798429329689">"デバイスを検出しています"</string>
<string name="mr_controller_disconnect" msgid="1370654436555555647">"接続を解除"</string>
<string name="mr_controller_stop_casting" msgid="7617024847862349259">"キャストを停止"</string>
<string name="mr_controller_close_description" msgid="5468775621814500662">"閉じる"</string>
@@ -37,7 +37,7 @@
<string name="mr_controller_no_media_selected" msgid="4342878516155861006">"メディアが選択されていません"</string>
<string name="mr_controller_no_info_available" msgid="7299368841849988218">"情報がありません"</string>
<string name="mr_controller_casting_screen" msgid="5286734709674025661">"画面をキャストしています"</string>
- <string name="mr_dialog_groupable_header" msgid="470815817763403488">"端末の追加"</string>
+ <string name="mr_dialog_groupable_header" msgid="470815817763403488">"デバイスの追加"</string>
<string name="mr_dialog_transferable_header" msgid="8242946697267839296">"グループで再生"</string>
<string name="mr_cast_dialog_title_view_placeholder" msgid="6167045754274068030">"情報がありません"</string>
</resources>
diff --git a/mediarouter/src/main/res/values-pa/strings.xml b/mediarouter/src/main/res/values-pa/strings.xml
index 71224a6..46a04e3 100644
--- a/mediarouter/src/main/res/values-pa/strings.xml
+++ b/mediarouter/src/main/res/values-pa/strings.xml
@@ -22,7 +22,7 @@
<string name="mr_cast_button_disconnected" msgid="5501231066847739632">"\'ਕਾਸਟ ਕਰੋ\' ਬਟਨ। ਡਿਸਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
<string name="mr_cast_button_connecting" msgid="8959304318293841992">"\'ਕਾਸਟ ਕਰੋ\' ਬਟਨ। ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="mr_cast_button_connected" msgid="1350095112462806159">"\'ਕਾਸਟ ਕਰੋ\' ਬਟਨ। ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
- <string name="mr_chooser_title" msgid="7548226170787476564">"ਏਥੇ ਕਾਸਟ ਕਰੋ"</string>
+ <string name="mr_chooser_title" msgid="7548226170787476564">"ਇਸਦੇ ਨਾਲ ਕਾਸਟ ਕਰੋ"</string>
<string name="mr_chooser_searching" msgid="5504553798429329689">"ਡੀਵਾਈਸ ਲੱਭੇ ਜਾ ਰਹੇ ਹਨ"</string>
<string name="mr_controller_disconnect" msgid="1370654436555555647">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
<string name="mr_controller_stop_casting" msgid="7617024847862349259">"ਕਾਸਟ ਕਰਨਾ ਬੰਦ ਕਰੋ"</string>
diff --git a/navigation/common/src/androidTest/java/androidx/navigation/NavGraphNavigatorStateTest.kt b/navigation/common/src/androidTest/java/androidx/navigation/NavGraphNavigatorStateTest.kt
deleted file mode 100644
index 11f5871..0000000
--- a/navigation/common/src/androidTest/java/androidx/navigation/NavGraphNavigatorStateTest.kt
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2018 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.navigation
-
-import androidx.annotation.IdRes
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-
-@SmallTest
-class NavGraphNavigatorStateTest {
-
- companion object {
- @IdRes
- private const val FIRST_DESTINATION_ID = 1
- }
-
- private lateinit var provider: NavigatorProvider
- private lateinit var noOpNavigator: NoOpNavigator
- private lateinit var navGraphNavigator: NavGraphNavigator
-
- @Before
- fun setup() {
- provider = NavigatorProvider().apply {
- addNavigator(NoOpNavigator().also { noOpNavigator = it })
- addNavigator(NavGraphNavigator(this).also {
- navGraphNavigator = it
- })
- }
- }
-
- @Test
- fun navigateSingleTopSaveState() {
- val destination = noOpNavigator.createDestination().apply {
- id = FIRST_DESTINATION_ID
- }
- val graph = navGraphNavigator.createDestination().apply {
- addDestination(destination)
- startDestination = FIRST_DESTINATION_ID
- }
- assertThat(navGraphNavigator.navigate(graph, null, null, null))
- .isEqualTo(destination)
-
- // Save and restore the state, effectively resetting the NavGraphNavigator
- val saveState = navGraphNavigator.onSaveState()
- navGraphNavigator.onRestoreState(saveState)
-
- assertThat(navGraphNavigator.navigate(graph, null,
- NavOptions.Builder().setLaunchSingleTop(true).build(), null))
- .isEqualTo(destination)
- }
-}
diff --git a/navigation/common/src/main/java/androidx/navigation/NavGraphNavigator.java b/navigation/common/src/main/java/androidx/navigation/NavGraphNavigator.java
index 7bac4bd..4bf9522 100644
--- a/navigation/common/src/main/java/androidx/navigation/NavGraphNavigator.java
+++ b/navigation/common/src/main/java/androidx/navigation/NavGraphNavigator.java
@@ -21,18 +21,13 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import java.util.ArrayDeque;
-
/**
* A Navigator built specifically for {@link NavGraph} elements. Handles navigating to the
* correct destination when the NavGraph is the target of navigation actions.
*/
@Navigator.Name("navigation")
public class NavGraphNavigator extends Navigator<NavGraph> {
- private static final String KEY_BACK_STACK_IDS = "androidx-nav-graph:navigator:backStackIds";
-
private final NavigatorProvider mNavigatorProvider;
- private ArrayDeque<Integer> mBackStack = new ArrayDeque<>();
/**
* Construct a Navigator capable of routing incoming navigation requests to the proper
@@ -71,70 +66,14 @@
throw new IllegalArgumentException("navigation destination " + dest
+ " is not a direct child of this NavGraph");
}
- if (navOptions == null || !(navOptions.shouldLaunchSingleTop()
- && isAlreadyTop(destination))) {
- mBackStack.add(destination.getId());
- }
Navigator<NavDestination> navigator = mNavigatorProvider.getNavigator(
startDestination.getNavigatorName());
return navigator.navigate(startDestination, startDestination.addInDefaultArgs(args),
navOptions, navigatorExtras);
}
- /**
- * This method to checks to see if navigating to the given destId would result in you
- * being right back where you started (we want to avoid creating a duplicate stack of the
- * same destinations).
- *
- * Because you can have a NavGraph as the start destination of another graph, we need to both
- * check the current NavGraph (i.e., no direct singleTop copies) and all of the parents that
- * start the current NavGraph via their start destinations.
- */
- private boolean isAlreadyTop(NavGraph destination) {
- if (mBackStack.isEmpty()) {
- return false;
- }
- int topDestId = mBackStack.peekLast();
- NavGraph current = destination;
- while (current.getId() != topDestId) {
- NavDestination startDestination = current.findNode(current.getStartDestination());
- if (startDestination instanceof NavGraph) {
- current = (NavGraph) startDestination;
- } else {
- return false;
- }
- }
- return true;
- }
-
@Override
public boolean popBackStack() {
- return mBackStack.pollLast() != null;
- }
-
- @Override
- @Nullable
- public Bundle onSaveState() {
- Bundle b = new Bundle();
- int[] backStack = new int[mBackStack.size()];
- int index = 0;
- for (Integer id : mBackStack) {
- backStack[index++] = id;
- }
- b.putIntArray(KEY_BACK_STACK_IDS, backStack);
- return b;
- }
-
- @Override
- public void onRestoreState(@Nullable Bundle savedState) {
- if (savedState != null) {
- int[] backStack = savedState.getIntArray(KEY_BACK_STACK_IDS);
- if (backStack != null) {
- mBackStack.clear();
- for (int destId : backStack) {
- mBackStack.add(destId);
- }
- }
- }
+ return true;
}
}
diff --git a/navigation/common/src/test/java/androidx/navigation/NavGraphNavigatorTest.kt b/navigation/common/src/test/java/androidx/navigation/NavGraphNavigatorTest.kt
index 9f74865..f37ade4 100644
--- a/navigation/common/src/test/java/androidx/navigation/NavGraphNavigatorTest.kt
+++ b/navigation/common/src/test/java/androidx/navigation/NavGraphNavigatorTest.kt
@@ -80,14 +80,6 @@
}
@Test
- fun popWithEmptyStack() {
- val success = navGraphNavigator.popBackStack()
- assertWithMessage("popBackStack should return false on an empty stack")
- .that(success)
- .isFalse()
- }
-
- @Test
fun navigateThenPop() {
val destination = createFirstDestination()
val graph = createGraphWithDestination(destination)
diff --git a/navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java b/navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
index cef3596..90882eb 100644
--- a/navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
+++ b/navigation/fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
@@ -207,7 +207,7 @@
mNavController = new NavHostController(context);
mNavController.setLifecycleOwner(this);
- mNavController.setOnBackPressedDispatcherOwner(requireActivity());
+ mNavController.setOnBackPressedDispatcher(requireActivity().getOnBackPressedDispatcher());
// Set the default state - this will be updated whenever
// onPrimaryNavigationFragmentChanged() is called
mNavController.enableOnBackPressed(
diff --git a/navigation/runtime/api/2.1.0-alpha05.txt b/navigation/runtime/api/2.1.0-alpha05.txt
index 160bf57..1dda053 100644
--- a/navigation/runtime/api/2.1.0-alpha05.txt
+++ b/navigation/runtime/api/2.1.0-alpha05.txt
@@ -95,7 +95,7 @@
ctor public NavHostController(android.content.Context);
method public void enableOnBackPressed(boolean);
method public void setLifecycleOwner(androidx.lifecycle.LifecycleOwner);
- method public void setOnBackPressedDispatcherOwner(androidx.activity.OnBackPressedDispatcherOwner);
+ method public void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher);
method public void setViewModelStore(androidx.lifecycle.ViewModelStore);
}
diff --git a/navigation/runtime/api/current.txt b/navigation/runtime/api/current.txt
index 160bf57..1dda053 100644
--- a/navigation/runtime/api/current.txt
+++ b/navigation/runtime/api/current.txt
@@ -95,7 +95,7 @@
ctor public NavHostController(android.content.Context);
method public void enableOnBackPressed(boolean);
method public void setLifecycleOwner(androidx.lifecycle.LifecycleOwner);
- method public void setOnBackPressedDispatcherOwner(androidx.activity.OnBackPressedDispatcherOwner);
+ method public void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher);
method public void setViewModelStore(androidx.lifecycle.ViewModelStore);
}
diff --git a/navigation/runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt b/navigation/runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
index 8acda64..c86f527 100644
--- a/navigation/runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
+++ b/navigation/runtime/src/androidTest/java/androidx/navigation/NavControllerTest.kt
@@ -249,6 +249,76 @@
}
@Test
+ fun testNavigateToDifferentGraphViaDeepLink3x() {
+ val navController = createNavController()
+ navController.setGraph(R.navigation.nav_multiple_navigation)
+ val navigator = navController.navigatorProvider.getNavigator(TestNavigator::class.java)
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+
+ val deepLink = Uri.parse("android-app://androidx.navigation.test/test")
+
+ navController.navigate(deepLink)
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.deep_link_child_second_test)
+ assertThat(navigator.backStack.size).isEqualTo(2)
+
+ navController.popBackStack()
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+
+ // repeat nav and pop 2 more times.
+ navController.navigate(deepLink)
+ navController.popBackStack()
+ navController.navigate(deepLink)
+
+ val popped = navController.popBackStack()
+ assertWithMessage("NavController should return true when popping a non-root destination")
+ .that(popped)
+ .isTrue()
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+ }
+
+ @Test
+ fun testNavigateToDifferentGraphViaDeepLinkToGrandchild3x() {
+ val navController = createNavController()
+ navController.setGraph(R.navigation.nav_multiple_navigation)
+ val navigator = navController.navigatorProvider.getNavigator(TestNavigator::class.java)
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+
+ val deepLink = Uri.parse("android-app://androidx.navigation.test/grand_child_test")
+
+ navController.navigate(deepLink)
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.deep_link_grandchild_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(2)
+
+ navController.popBackStack()
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+
+ // repeat nav and pop 2 more times.
+ navController.navigate(deepLink)
+ navController.popBackStack()
+ navController.navigate(deepLink)
+
+ val popped = navController.popBackStack()
+ assertWithMessage("NavController should return true when popping a non-root destination")
+ .that(popped)
+ .isTrue()
+ assertThat(navController.currentDestination?.id ?: 0)
+ .isEqualTo(R.id.simple_child_start_test)
+ assertThat(navigator.backStack.size).isEqualTo(1)
+ }
+
+ @Test
fun testSaveRestoreStateXml() {
val context = ApplicationProvider.getApplicationContext() as Context
var navController = NavController(context)
diff --git a/navigation/runtime/src/androidTest/res/navigation/nav_multiple_navigation.xml b/navigation/runtime/src/androidTest/res/navigation/nav_multiple_navigation.xml
index f0e04b1..1f62231 100644
--- a/navigation/runtime/src/androidTest/res/navigation/nav_multiple_navigation.xml
+++ b/navigation/runtime/src/androidTest/res/navigation/nav_multiple_navigation.xml
@@ -47,5 +47,15 @@
app:popUpTo="@id/deep_link_child_start_test" />
<deepLink app:uri="android-app://androidx.navigation.test/test" />
</test>
+ <navigation android:id="@+id/deep_link_child_second"
+ app:startDestination="@+id/deep_link_grandchild_start_test">
+
+ <test android:id="@+id/deep_link_grandchild_start_test">
+ <action
+ android:id="@+id/deep_link_child_finish"
+ app:popUpTo="@+id/deep_link_child_start_test" />
+ <deepLink app:uri="android-app://androidx.navigation.test/grand_child_test" />
+ </test>
+ </navigation>
</navigation>
</navigation>
\ No newline at end of file
diff --git a/navigation/runtime/src/main/java/androidx/navigation/NavController.java b/navigation/runtime/src/main/java/androidx/navigation/NavController.java
index 91cc8e01..ec650ea 100644
--- a/navigation/runtime/src/main/java/androidx/navigation/NavController.java
+++ b/navigation/runtime/src/main/java/androidx/navigation/NavController.java
@@ -27,7 +27,6 @@
import androidx.activity.OnBackPressedCallback;
import androidx.activity.OnBackPressedDispatcher;
-import androidx.activity.OnBackPressedDispatcherOwner;
import androidx.annotation.CallSuper;
import androidx.annotation.IdRes;
import androidx.annotation.NavigationRes;
@@ -995,11 +994,11 @@
mLifecycleOwner = owner;
}
- void setOnBackPressedDispatcherOwner(@NonNull OnBackPressedDispatcherOwner owner) {
+ void setOnBackPressedDispatcher(@NonNull OnBackPressedDispatcher dispatcher) {
if (mLifecycleOwner == null) {
- mLifecycleOwner = owner;
+ throw new IllegalStateException("You must call setLifecycleOwner() before calling "
+ + "setOnBackPressedDispatcher()");
}
- OnBackPressedDispatcher dispatcher = owner.getOnBackPressedDispatcher();
// Remove the callback from any previous dispatcher
mOnBackPressedCallback.remove();
// Then add it to the new dispatcher
diff --git a/navigation/runtime/src/main/java/androidx/navigation/NavHost.java b/navigation/runtime/src/main/java/androidx/navigation/NavHost.java
index ed587a2..603740e 100644
--- a/navigation/runtime/src/main/java/androidx/navigation/NavHost.java
+++ b/navigation/runtime/src/main/java/androidx/navigation/NavHost.java
@@ -19,7 +19,6 @@
import android.os.Bundle;
import android.view.View;
-import androidx.activity.OnBackPressedDispatcherOwner;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelStore;
@@ -39,7 +38,7 @@
* <li>Call {@link Navigation#setViewNavController(View, NavController)} on their root view</li>
* <li>Route system Back button events to the NavController either by manually calling
* {@link NavController#popBackStack()} or by calling
- * {@link NavHostController#setOnBackPressedDispatcherOwner(OnBackPressedDispatcherOwner)}
+ * {@link NavHostController#setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher)}
* when constructing the NavController.</li>
* </ul>
* Optionally, a navigation host should consider calling:
diff --git a/navigation/runtime/src/main/java/androidx/navigation/NavHostController.java b/navigation/runtime/src/main/java/androidx/navigation/NavHostController.java
index cc7c6b8..0005c619 100644
--- a/navigation/runtime/src/main/java/androidx/navigation/NavHostController.java
+++ b/navigation/runtime/src/main/java/androidx/navigation/NavHostController.java
@@ -21,7 +21,6 @@
import androidx.activity.OnBackPressedCallback;
import androidx.activity.OnBackPressedDispatcher;
-import androidx.activity.OnBackPressedDispatcherOwner;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelStore;
@@ -58,7 +57,7 @@
* Sets the host's {@link LifecycleOwner}.
*
* @param owner The {@link LifecycleOwner} associated with the containing {@link NavHost}.
- * @see #setOnBackPressedDispatcherOwner(OnBackPressedDispatcherOwner)
+ * @see NavHostController#setOnBackPressedDispatcher(OnBackPressedDispatcher)
*/
@Override
public void setLifecycleOwner(@NonNull LifecycleOwner owner) {
@@ -66,24 +65,25 @@
}
/**
- * Sets the host's {@link OnBackPressedDispatcherOwner}. If set, NavController will
+ * Sets the host's {@link OnBackPressedDispatcher}. If set, NavController will
* register a {@link OnBackPressedCallback} to handle system Back button events.
* <p>
- * If you have not explicitly called {@link #setLifecycleOwner(LifecycleOwner)},
- * the owner you pass here will be used as the {@link LifecycleOwner} for registering
+ * You must explicitly called {@link #setLifecycleOwner(LifecycleOwner)} before calling this
+ * method as the owner set there will be used as the {@link LifecycleOwner} for registering
* the {@link OnBackPressedCallback}.
* <p>
* You can dynamically enable and disable whether the NavController should handle the
* system Back button events by calling {@link #enableOnBackPressed(boolean)}.
*
- * @param owner The {@link OnBackPressedDispatcherOwner} associated with the containing
+ * @param dispatcher The {@link OnBackPressedDispatcher} associated with the containing
* {@link NavHost}.
+ * @throws IllegalStateException if you have not called
+ * {@link #setLifecycleOwner(LifecycleOwner)} before calling this method.
* @see #setLifecycleOwner(LifecycleOwner)
*/
@Override
- public void setOnBackPressedDispatcherOwner(
- @NonNull OnBackPressedDispatcherOwner owner) {
- super.setOnBackPressedDispatcherOwner(owner);
+ public void setOnBackPressedDispatcher(@NonNull OnBackPressedDispatcher dispatcher) {
+ super.setOnBackPressedDispatcher(dispatcher);
}
/**
diff --git a/navigation/ui/src/main/res/values-bs/strings.xml b/navigation/ui/src/main/res/values-bs/strings.xml
index 39602a7..f4b93f0 100644
--- a/navigation/ui/src/main/res/values-bs/strings.xml
+++ b/navigation/ui/src/main/res/values-bs/strings.xml
@@ -17,6 +17,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="nav_app_bar_open_drawer_description" msgid="7456070600745802113">"Otvaranje panela za navigaciju"</string>
+ <string name="nav_app_bar_open_drawer_description" msgid="7456070600745802113">"Otvaranje ladice za navigaciju"</string>
<string name="nav_app_bar_navigate_up_description" msgid="6301633601645100427">"Idi gore"</string>
</resources>
diff --git a/preference/res/values-az/strings.xml b/preference/res/values-az/strings.xml
index f79e4bc..f6b48bb 100644
--- a/preference/res/values-az/strings.xml
+++ b/preference/res/values-az/strings.xml
@@ -3,7 +3,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"AKTİV"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"DEAKTİV"</string>
- <string name="expand_button_title" msgid="1234962710353108940">"Qabaqcıl"</string>
+ <string name="expand_button_title" msgid="1234962710353108940">"Qabaqcıl ayarlar"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"Kopyalayın"</string>
<string name="preference_copied" msgid="7961817945132860002">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" buferə kopyalandı."</string>
diff --git a/preference/res/values-cs/strings.xml b/preference/res/values-cs/strings.xml
index 0a5c920..e0f41e4 100644
--- a/preference/res/values-cs/strings.xml
+++ b/preference/res/values-cs/strings.xml
@@ -2,7 +2,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"ZAP"</string>
- <string name="v7_preference_off" msgid="5138405918326871307">"VYP"</string>
+ <string name="v7_preference_off" msgid="5138405918326871307">"Vypnutí"</string>
<string name="expand_button_title" msgid="1234962710353108940">"Rozšířená nastavení"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"Kopírovat"</string>
diff --git a/preference/res/values-et/strings.xml b/preference/res/values-et/strings.xml
index 2d10743..5976d46 100644
--- a/preference/res/values-et/strings.xml
+++ b/preference/res/values-et/strings.xml
@@ -3,7 +3,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"SEES"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"VÄLJAS"</string>
- <string name="expand_button_title" msgid="1234962710353108940">"Täpsem"</string>
+ <string name="expand_button_title" msgid="1234962710353108940">"Täpsemad"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"Kopeerimine"</string>
<string name="preference_copied" msgid="7961817945132860002">"„<xliff:g id="SUMMARY">%1$s</xliff:g>” on lõikelauale kopeeritud."</string>
diff --git a/preference/res/values-fa/strings.xml b/preference/res/values-fa/strings.xml
index e17f895..2c6d65b 100644
--- a/preference/res/values-fa/strings.xml
+++ b/preference/res/values-fa/strings.xml
@@ -6,6 +6,6 @@
<string name="expand_button_title" msgid="1234962710353108940">"پیشرفته"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>، <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"کپی"</string>
- <string name="preference_copied" msgid="7961817945132860002">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» در کلیپبورد کپی شد."</string>
+ <string name="preference_copied" msgid="7961817945132860002">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» در بریدهدان کپی شد."</string>
<string name="not_set" msgid="478774118347071097">"تنظیم نشده است"</string>
</resources>
diff --git a/preference/res/values-fr/strings.xml b/preference/res/values-fr/strings.xml
index e9490d7b..97fedcc 100644
--- a/preference/res/values-fr/strings.xml
+++ b/preference/res/values-fr/strings.xml
@@ -3,7 +3,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"ACTIVÉ"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"DÉSACTIVÉ"</string>
- <string name="expand_button_title" msgid="1234962710353108940">"Préférences avancées"</string>
+ <string name="expand_button_title" msgid="1234962710353108940">"Paramètres avancés"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"Copier"</string>
<string name="preference_copied" msgid="7961817945132860002">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copié dans le presse-papier."</string>
diff --git a/preference/res/values-ml/strings.xml b/preference/res/values-ml/strings.xml
index a87d23c..e2aaf2a 100644
--- a/preference/res/values-ml/strings.xml
+++ b/preference/res/values-ml/strings.xml
@@ -2,7 +2,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"ഓൺ"</string>
- <string name="v7_preference_off" msgid="5138405918326871307">"ഓഫ്"</string>
+ <string name="v7_preference_off" msgid="5138405918326871307">"ഓഫാണ്"</string>
<string name="expand_button_title" msgid="1234962710353108940">"വിപുലമായത്"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"പകർത്തുക"</string>
diff --git a/preference/res/values-te/strings.xml b/preference/res/values-te/strings.xml
index d552b58..34c3382 100644
--- a/preference/res/values-te/strings.xml
+++ b/preference/res/values-te/strings.xml
@@ -3,7 +3,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="v7_preference_on" msgid="27351710992731591">"ఆన్ చేయండి"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"ఆఫ్ చేయండి"</string>
- <string name="expand_button_title" msgid="1234962710353108940">"అధునాతన"</string>
+ <string name="expand_button_title" msgid="1234962710353108940">"అధునాతనం"</string>
<string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"కాపీ చేయి"</string>
<string name="preference_copied" msgid="7961817945132860002">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" క్లిప్బోర్డ్కి కాపీ చేయబడింది."</string>
diff --git a/preference/res/values-zh-rHK/strings.xml b/preference/res/values-zh-rHK/strings.xml
index 38376a7..487dc31 100644
--- a/preference/res/values-zh-rHK/strings.xml
+++ b/preference/res/values-zh-rHK/strings.xml
@@ -4,7 +4,7 @@
<string name="v7_preference_on" msgid="27351710992731591">"開啟"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"關閉"</string>
<string name="expand_button_title" msgid="1234962710353108940">"進階"</string>
- <string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>,<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+ <string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"複製"</string>
<string name="preference_copied" msgid="7961817945132860002">"「<xliff:g id="SUMMARY">%1$s</xliff:g>」已複製到剪貼簿。"</string>
<string name="not_set" msgid="478774118347071097">"未設定"</string>
diff --git a/preference/res/values-zh-rTW/strings.xml b/preference/res/values-zh-rTW/strings.xml
index 7787479..4628cf0 100644
--- a/preference/res/values-zh-rTW/strings.xml
+++ b/preference/res/values-zh-rTW/strings.xml
@@ -4,7 +4,7 @@
<string name="v7_preference_on" msgid="27351710992731591">"開啟"</string>
<string name="v7_preference_off" msgid="5138405918326871307">"關閉"</string>
<string name="expand_button_title" msgid="1234962710353108940">"進階"</string>
- <string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>,<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+ <string name="summary_collapsed_preference_list" msgid="5190123168583152844">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
<string name="copy" msgid="3209159573327985035">"複製"</string>
<string name="preference_copied" msgid="7961817945132860002">"已將「<xliff:g id="SUMMARY">%1$s</xliff:g>」複製到剪貼簿。"</string>
<string name="not_set" msgid="478774118347071097">"未設定"</string>
diff --git a/sharetarget/api/restricted_1.0.0-alpha02.txt b/sharetarget/api/restricted_1.0.0-alpha02.txt
index 36d3782..b838cc7 100644
--- a/sharetarget/api/restricted_1.0.0-alpha02.txt
+++ b/sharetarget/api/restricted_1.0.0-alpha02.txt
@@ -6,9 +6,12 @@
method public java.util.List<android.service.chooser.ChooserTarget!>! onGetChooserTargets(android.content.ComponentName!, android.content.IntentFilter!);
}
- @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaverImpl extends androidx.core.content.pm.ShortcutInfoCompatSaver {
+ @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaverImpl extends androidx.core.content.pm.ShortcutInfoCompatSaver<com.google.common.util.concurrent.ListenableFuture<java.lang.Void>> {
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
method @AnyThread public static androidx.sharetarget.ShortcutInfoCompatSaverImpl! getInstance(android.content.Context!);
method @WorkerThread public androidx.core.graphics.drawable.IconCompat! getShortcutIcon(String!) throws java.lang.Exception;
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeAllShortcuts();
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeShortcuts(java.util.List<java.lang.String!>!);
}
}
diff --git a/sharetarget/api/restricted_current.txt b/sharetarget/api/restricted_current.txt
index 36d3782..b838cc7 100644
--- a/sharetarget/api/restricted_current.txt
+++ b/sharetarget/api/restricted_current.txt
@@ -6,9 +6,12 @@
method public java.util.List<android.service.chooser.ChooserTarget!>! onGetChooserTargets(android.content.ComponentName!, android.content.IntentFilter!);
}
- @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaverImpl extends androidx.core.content.pm.ShortcutInfoCompatSaver {
+ @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ShortcutInfoCompatSaverImpl extends androidx.core.content.pm.ShortcutInfoCompatSaver<com.google.common.util.concurrent.ListenableFuture<java.lang.Void>> {
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
method @AnyThread public static androidx.sharetarget.ShortcutInfoCompatSaverImpl! getInstance(android.content.Context!);
method @WorkerThread public androidx.core.graphics.drawable.IconCompat! getShortcutIcon(String!) throws java.lang.Exception;
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeAllShortcuts();
+ method @AnyThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>! removeShortcuts(java.util.List<java.lang.String!>!);
}
}
diff --git a/sharetarget/src/main/java/androidx/sharetarget/ShortcutInfoCompatSaverImpl.java b/sharetarget/src/main/java/androidx/sharetarget/ShortcutInfoCompatSaverImpl.java
index c0ef1dc..ef820f0 100644
--- a/sharetarget/src/main/java/androidx/sharetarget/ShortcutInfoCompatSaverImpl.java
+++ b/sharetarget/src/main/java/androidx/sharetarget/ShortcutInfoCompatSaverImpl.java
@@ -62,7 +62,7 @@
@RequiresApi(19)
@RestrictTo(LIBRARY_GROUP_PREFIX)
//TODO: we need Futures.addCallback and CallbackToFutureAdapter, update once they're available
-public class ShortcutInfoCompatSaverImpl extends ShortcutInfoCompatSaver {
+public class ShortcutInfoCompatSaverImpl extends ShortcutInfoCompatSaver<ListenableFuture<Void>> {
static final String TAG = "ShortcutInfoCompatSaver";
diff --git a/slices/core/src/main/res/values-eu/strings.xml b/slices/core/src/main/res/values-eu/strings.xml
index 3329fa5..55e4c59d 100644
--- a/slices/core/src/main/res/values-eu/strings.xml
+++ b/slices/core/src/main/res/values-eu/strings.xml
@@ -18,7 +18,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="abc_slices_permission_request" msgid="3604847235923472451">"<xliff:g id="APP_0">%1$s</xliff:g> aplikazioak <xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakutsi nahi ditu"</string>
- <string name="abc_slice_permission_title" msgid="4175332421259324948">"<xliff:g id="APP_0">%1$s</xliff:g> aplikazioari <xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakustea baimendu nahi diozu?"</string>
+ <string name="abc_slice_permission_title" msgid="4175332421259324948">"<xliff:g id="APP_0">%1$s</xliff:g> aplikazioari <xliff:g id="APP_2">%2$s</xliff:g> aplikazioaren zatiak erakusteko baimena eman nahi diozu?"</string>
<string name="abc_slice_permission_text_1" msgid="4525743640399572811">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioaren informazioa irakur dezake."</string>
<string name="abc_slice_permission_text_2" msgid="7323565634860251794">"- <xliff:g id="APP">%1$s</xliff:g> aplikazioan ekintzak gauza ditzake."</string>
<string name="abc_slice_permission_checkbox" msgid="5696872682700058611">"Baimendu <xliff:g id="APP">%1$s</xliff:g> aplikazioari edozein aplikazioren zatiak erakustea"</string>
diff --git a/slices/core/src/main/res/values-it/strings.xml b/slices/core/src/main/res/values-it/strings.xml
index 57540ce..333547d 100644
--- a/slices/core/src/main/res/values-it/strings.xml
+++ b/slices/core/src/main/res/values-it/strings.xml
@@ -23,5 +23,5 @@
<string name="abc_slice_permission_text_2" msgid="7323565634860251794">"- Può compiere azioni nell\'app <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="abc_slice_permission_checkbox" msgid="5696872682700058611">"Consenti all\'app <xliff:g id="APP">%1$s</xliff:g> di mostrare porzioni di qualsiasi app"</string>
<string name="abc_slice_permission_allow" msgid="5024599872061409708">"Consenti"</string>
- <string name="abc_slice_permission_deny" msgid="3819478292430407705">"Nega"</string>
+ <string name="abc_slice_permission_deny" msgid="3819478292430407705">"Rifiuta"</string>
</resources>
diff --git a/slices/core/src/main/res/values-ta/strings.xml b/slices/core/src/main/res/values-ta/strings.xml
index 8ab82bd..0c8d874 100644
--- a/slices/core/src/main/res/values-ta/strings.xml
+++ b/slices/core/src/main/res/values-ta/strings.xml
@@ -17,11 +17,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="abc_slices_permission_request" msgid="3604847235923472451">"<xliff:g id="APP_2">%2$s</xliff:g> பயன்பாட்டின் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP_0">%1$s</xliff:g> அனுமதி கேட்கிறது"</string>
- <string name="abc_slice_permission_title" msgid="4175332421259324948">"<xliff:g id="APP_2">%2$s</xliff:g> பயன்பாட்டின் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP_0">%1$s</xliff:g> பயன்பாட்டை அனுமதிக்கவா?"</string>
+ <string name="abc_slices_permission_request" msgid="3604847235923472451">"<xliff:g id="APP_2">%2$s</xliff:g> ஆப்ஸின் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP_0">%1$s</xliff:g> அனுமதி கேட்கிறது"</string>
+ <string name="abc_slice_permission_title" msgid="4175332421259324948">"<xliff:g id="APP_2">%2$s</xliff:g> ஆப்ஸின் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP_0">%1$s</xliff:g> ஆப்ஸை அனுமதிக்கவா?"</string>
<string name="abc_slice_permission_text_1" msgid="4525743640399572811">"- இது, <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டிலிருக்கும் தகவலைப் படிக்கும்"</string>
<string name="abc_slice_permission_text_2" msgid="7323565634860251794">"- இது, <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டிற்குள் செயல்பாடுகளில் ஈடுபடும்"</string>
- <string name="abc_slice_permission_checkbox" msgid="5696872682700058611">"எந்தப் பயன்பாட்டிலிருந்தும் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டை அனுமதி"</string>
+ <string name="abc_slice_permission_checkbox" msgid="5696872682700058611">"எந்தப் பயன்பாட்டிலிருந்தும் விழிப்பூட்டல்களைக் காண்பிக்க, <xliff:g id="APP">%1$s</xliff:g> ஆப்ஸை அனுமதி"</string>
<string name="abc_slice_permission_allow" msgid="5024599872061409708">"அனுமதி"</string>
<string name="abc_slice_permission_deny" msgid="3819478292430407705">"நிராகரி"</string>
</resources>
diff --git a/slices/view/src/main/res/values-af/strings.xml b/slices/view/src/main/res/values-af/strings.xml
index cfe8138..fb3b6db 100644
--- a/slices/view/src/main/res/values-af/strings.xml
+++ b/slices/view/src/main/res/values-af/strings.xml
@@ -22,8 +22,8 @@
<string name="abc_slice_show_more" msgid="1567717014004692768">"Wys meer"</string>
<string name="abc_slice_updated" msgid="8155085405396453848">"Opgedateer om <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="6996334305156847955">
- <item quantity="other"><xliff:g id="ID_2">%d</xliff:g> min. gelede</item>
- <item quantity="one"><xliff:g id="ID_1">%d</xliff:g> min. gelede</item>
+ <item quantity="other"><xliff:g id="ID_2">%d</xliff:g> m. gelede</item>
+ <item quantity="one"><xliff:g id="ID_1">%d</xliff:g> m. gelede</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="6212691832333991589">
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> jaar gelede</item>
diff --git a/slices/view/src/main/res/values-as/strings.xml b/slices/view/src/main/res/values-as/strings.xml
index dbc598f..78cc260 100644
--- a/slices/view/src/main/res/values-as/strings.xml
+++ b/slices/view/src/main/res/values-as/strings.xml
@@ -20,7 +20,7 @@
<string name="abc_slice_more_content" msgid="6405516388971241142">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string>
<string name="abc_slice_more" msgid="1983560225998630901">"অধিক"</string>
<string name="abc_slice_show_more" msgid="1567717014004692768">"অধিক দেখুৱাওক"</string>
- <string name="abc_slice_updated" msgid="8155085405396453848">"<xliff:g id="TIME">%1$s</xliff:g> আপডেট কৰা হৈছিল"</string>
+ <string name="abc_slice_updated" msgid="8155085405396453848">"<xliff:g id="TIME">%1$s</xliff:g> আপডে’ট কৰা হৈছিল"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="6996334305156847955">
<item quantity="one"><xliff:g id="ID_2">%d</xliff:g> মিনিট আগেয়ে</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> মিনিট আগেয়ে</item>
diff --git a/slices/view/src/main/res/values-eu/strings.xml b/slices/view/src/main/res/values-eu/strings.xml
index 5e0642c..4a7f780 100644
--- a/slices/view/src/main/res/values-eu/strings.xml
+++ b/slices/view/src/main/res/values-eu/strings.xml
@@ -22,8 +22,8 @@
<string name="abc_slice_show_more" msgid="1567717014004692768">"Erakutsi gehiago"</string>
<string name="abc_slice_updated" msgid="8155085405396453848">"Azken eguneratzea: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="6996334305156847955">
- <item quantity="other">Duela <xliff:g id="ID_2">%d</xliff:g> minutu</item>
- <item quantity="one">Duela <xliff:g id="ID_1">%d</xliff:g> minutu</item>
+ <item quantity="other">Duela <xliff:g id="ID_2">%d</xliff:g> min</item>
+ <item quantity="one">Duela <xliff:g id="ID_1">%d</xliff:g> min</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="6212691832333991589">
<item quantity="other">Duela <xliff:g id="ID_2">%d</xliff:g> urte</item>
diff --git a/slices/view/src/main/res/values-mr/strings.xml b/slices/view/src/main/res/values-mr/strings.xml
index 80aa0a7..54d042c 100644
--- a/slices/view/src/main/res/values-mr/strings.xml
+++ b/slices/view/src/main/res/values-mr/strings.xml
@@ -22,16 +22,16 @@
<string name="abc_slice_show_more" msgid="1567717014004692768">"आणखी दाखवा"</string>
<string name="abc_slice_updated" msgid="8155085405396453848">"<xliff:g id="TIME">%1$s</xliff:g> ला अपडेट केले"</string>
<plurals name="abc_slice_duration_min" formatted="false" msgid="6996334305156847955">
- <item quantity="one"><xliff:g id="ID_2">%d</xliff:g> मिनिटापूर्वी</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> मिनिटांपूर्वी</item>
+ <item quantity="one"><xliff:g id="ID_1">%d</xliff:g> मिनिटापूर्वी</item>
</plurals>
<plurals name="abc_slice_duration_years" formatted="false" msgid="6212691832333991589">
- <item quantity="one"><xliff:g id="ID_2">%d</xliff:g> वर्षापूर्वी</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> वर्षांपूर्वी</item>
+ <item quantity="one"><xliff:g id="ID_1">%d</xliff:g> वर्षापूर्वी</item>
</plurals>
<plurals name="abc_slice_duration_days" formatted="false" msgid="6241698511167107334">
- <item quantity="one"><xliff:g id="ID_2">%d</xliff:g> दिवसापूर्वी</item>
<item quantity="other"><xliff:g id="ID_2">%d</xliff:g> दिवसांपूर्वी</item>
+ <item quantity="one"><xliff:g id="ID_1">%d</xliff:g> दिवसापूर्वी</item>
</plurals>
<string name="abc_slice_error" msgid="4188371422904147368">"कनेक्ट करता आले नाही"</string>
</resources>
diff --git a/textclassifier/src/main/res/values-am/strings.xml b/textclassifier/src/main/res/values-am/strings.xml
index 7218771..831ac2b 100644
--- a/textclassifier/src/main/res/values-am/strings.xml
+++ b/textclassifier/src/main/res/values-am/strings.xml
@@ -19,7 +19,7 @@
<string name="email" msgid="5568050657313893478">"ኢሜይል"</string>
<string name="email_desc" msgid="6941280589171810022">"ለተመረጡ አድራሻዎች ኢሜይል ላክ"</string>
<string name="dial" msgid="7317293545368448453">"ደውል"</string>
- <string name="dial_desc" msgid="5129451396208040332">"ወደተመረጠው ስልክ ቁጥር ደውል"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"ወደ ተመረጠው ስልክ ቁጥር ደውል"</string>
<string name="browse" msgid="3733970143542020945">"ክፈት"</string>
<string name="browse_desc" msgid="3898254913938219011">"የተመረጠውን ዩአርኤል ክፈት"</string>
<string name="sms" msgid="5495416906312064886">"መልዕክት"</string>
diff --git a/textclassifier/src/main/res/values-ar/strings.xml b/textclassifier/src/main/res/values-ar/strings.xml
index b2569b9..52fb7d7 100644
--- a/textclassifier/src/main/res/values-ar/strings.xml
+++ b/textclassifier/src/main/res/values-ar/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"البريد الإلكتروني"</string>
+ <string name="email" msgid="5568050657313893478">"إرسال بريد إلكتروني"</string>
<string name="email_desc" msgid="6941280589171810022">"مراسلة العنوان المحدد عبر البريد الإلكتروني"</string>
<string name="dial" msgid="7317293545368448453">"اتصال"</string>
<string name="dial_desc" msgid="5129451396208040332">"الاتصال برقم الهاتف المحدد"</string>
<string name="browse" msgid="3733970143542020945">"فتح"</string>
<string name="browse_desc" msgid="3898254913938219011">"فتح عنوان URL المحدد"</string>
- <string name="sms" msgid="5495416906312064886">"رسالة"</string>
+ <string name="sms" msgid="5495416906312064886">"إرسال رسائل قصيرة"</string>
<string name="sms_desc" msgid="8293660783374489324">"مراسلة رقم الهاتف المحدد"</string>
<string name="add_contact" msgid="9005634177208282449">"إضافة"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"إضافة إلى جهات الاتصال"</string>
diff --git a/textclassifier/src/main/res/values-as/strings.xml b/textclassifier/src/main/res/values-as/strings.xml
new file mode 100644
index 0000000..7f52871
--- /dev/null
+++ b/textclassifier/src/main/res/values-as/strings.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2018 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="email" msgid="5568050657313893478">"ইমেইল কৰক"</string>
+ <string name="email_desc" msgid="6941280589171810022">"বাছনি কৰা ঠিকনালৈ ইমেইল পঠিয়াওক"</string>
+ <string name="dial" msgid="7317293545368448453">"কল কৰক"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"বাছনি কৰা ফ\'ন নম্বৰত কল কৰক"</string>
+ <string name="browse" msgid="3733970143542020945">"খোলক"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"বাছনি কৰা URL খোলক"</string>
+ <string name="sms" msgid="5495416906312064886">"বাৰ্তা পঠিয়াওক"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"বাছনি কৰা ফ’ন নম্বৰলৈ বাৰ্তা পঠিয়াওক"</string>
+ <string name="add_contact" msgid="9005634177208282449">"যোগ কৰক"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"সর্ম্পকসূচীত যোগ কৰক"</string>
+ <string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"অধিক বিকল্প"</string>
+ <string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"অভাৰফ্ল\' বন্ধ কৰক"</string>
+ <string name="abc_share" msgid="7091841667818715717">"শ্বেয়াৰ কৰক"</string>
+</resources>
diff --git a/textclassifier/src/main/res/values-az/strings.xml b/textclassifier/src/main/res/values-az/strings.xml
index e8b583e..b8de8f8 100644
--- a/textclassifier/src/main/res/values-az/strings.xml
+++ b/textclassifier/src/main/res/values-az/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-poçt"</string>
+ <string name="email" msgid="5568050657313893478">"E-poçt yazın"</string>
<string name="email_desc" msgid="6941280589171810022">"Seçilmiş ünvana e-məktub yazın"</string>
<string name="dial" msgid="7317293545368448453">"Zəng edin"</string>
<string name="dial_desc" msgid="5129451396208040332">"Seçilmiş telefon nömrəsinə zəng edin"</string>
<string name="browse" msgid="3733970143542020945">"Açın"</string>
<string name="browse_desc" msgid="3898254913938219011">"Seçilmiş linki açın"</string>
- <string name="sms" msgid="5495416906312064886">"Mesaj"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Seçilmiş telefon nömrəsini mesajla göndərin"</string>
+ <string name="sms" msgid="5495416906312064886">"Mesaj yazın"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Seçilmiş telefon nömrəsinə mesaj göndərin"</string>
<string name="add_contact" msgid="9005634177208282449">"Əlavə edin"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Kontakta əlavə edin"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Digər seçimlər"</string>
diff --git a/textclassifier/src/main/res/values-bs/strings.xml b/textclassifier/src/main/res/values-bs/strings.xml
index 0bc610f8..0ad050a 100644
--- a/textclassifier/src/main/res/values-bs/strings.xml
+++ b/textclassifier/src/main/res/values-bs/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-pošta"</string>
- <string name="email_desc" msgid="6941280589171810022">"Pošaljite e-poruku na odabrane adrese"</string>
- <string name="dial" msgid="7317293545368448453">"Poziv"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Pozovite odabrani broj telefona"</string>
+ <string name="email" msgid="5568050657313893478">"Pošalji e-poruku"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Pošalji e-poruku na odabranu adresu"</string>
+ <string name="dial" msgid="7317293545368448453">"Pozovi"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Pozovi odabrani broj telefona"</string>
<string name="browse" msgid="3733970143542020945">"Otvori"</string>
- <string name="browse_desc" msgid="3898254913938219011">"Otvorite odabrani URL"</string>
- <string name="sms" msgid="5495416906312064886">"Poruka"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Pošaljite poruku odabranom broju telefona"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"Otvori odabrani URL"</string>
+ <string name="sms" msgid="5495416906312064886">"Pošalji SMS"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Pošalji SMS odabranom broju telefona"</string>
<string name="add_contact" msgid="9005634177208282449">"Dodaj"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Dodaj u kontakte"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Više opcija"</string>
diff --git a/textclassifier/src/main/res/values-ca/strings.xml b/textclassifier/src/main/res/values-ca/strings.xml
index 0f2cf5ab..e4932cb 100644
--- a/textclassifier/src/main/res/values-ca/strings.xml
+++ b/textclassifier/src/main/res/values-ca/strings.xml
@@ -22,7 +22,7 @@
<string name="dial_desc" msgid="5129451396208040332">"Truca al número de telèfon seleccionat"</string>
<string name="browse" msgid="3733970143542020945">"Obre"</string>
<string name="browse_desc" msgid="3898254913938219011">"Obre l\'URL seleccionat"</string>
- <string name="sms" msgid="5495416906312064886">"Missatge"</string>
+ <string name="sms" msgid="5495416906312064886">"Envia un SMS"</string>
<string name="sms_desc" msgid="8293660783374489324">"Envia un missatge al número de telèfon seleccionat"</string>
<string name="add_contact" msgid="9005634177208282449">"Afegeix"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Afegeix als contactes"</string>
diff --git a/textclassifier/src/main/res/values-cs/strings.xml b/textclassifier/src/main/res/values-cs/strings.xml
index cc7360f..757a68d 100644
--- a/textclassifier/src/main/res/values-cs/strings.xml
+++ b/textclassifier/src/main/res/values-cs/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E‑mail"</string>
+ <string name="email" msgid="5568050657313893478">"Poslat e-mail"</string>
<string name="email_desc" msgid="6941280589171810022">"Napsat na vybranou e‑mailovou adresu"</string>
- <string name="dial" msgid="7317293545368448453">"Volat"</string>
+ <string name="dial" msgid="7317293545368448453">"Zavolat"</string>
<string name="dial_desc" msgid="5129451396208040332">"Zavolat na vybrané telefonní číslo"</string>
<string name="browse" msgid="3733970143542020945">"Otevřít"</string>
<string name="browse_desc" msgid="3898254913938219011">"Otevřít vybranou adresu URL"</string>
- <string name="sms" msgid="5495416906312064886">"Zpráva"</string>
+ <string name="sms" msgid="5495416906312064886">"Napsat zprávu"</string>
<string name="sms_desc" msgid="8293660783374489324">"Napsat SMS na vybrané telefonní číslo"</string>
<string name="add_contact" msgid="9005634177208282449">"Přidat"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Přidat do kontaktů"</string>
diff --git a/textclassifier/src/main/res/values-da/strings.xml b/textclassifier/src/main/res/values-da/strings.xml
index 50e7f3d..d519fc9 100644
--- a/textclassifier/src/main/res/values-da/strings.xml
+++ b/textclassifier/src/main/res/values-da/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Mail"</string>
+ <string name="email" msgid="5568050657313893478">"Send mail"</string>
<string name="email_desc" msgid="6941280589171810022">"Send en mail til den valgte adresse"</string>
- <string name="dial" msgid="7317293545368448453">"Opkald"</string>
+ <string name="dial" msgid="7317293545368448453">"Ring op"</string>
<string name="dial_desc" msgid="5129451396208040332">"Ring til det valgte telefonnummer"</string>
<string name="browse" msgid="3733970143542020945">"Åbn"</string>
<string name="browse_desc" msgid="3898254913938219011">"Åbn den valgte webadresse"</string>
- <string name="sms" msgid="5495416906312064886">"Besked"</string>
+ <string name="sms" msgid="5495416906312064886">"Send besked"</string>
<string name="sms_desc" msgid="8293660783374489324">"Send en besked til det valgte telefonnummer"</string>
<string name="add_contact" msgid="9005634177208282449">"Tilføj"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Føj til kontakter"</string>
diff --git a/textclassifier/src/main/res/values-de/strings.xml b/textclassifier/src/main/res/values-de/strings.xml
index 373ba36..463609c 100644
--- a/textclassifier/src/main/res/values-de/strings.xml
+++ b/textclassifier/src/main/res/values-de/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-Mail"</string>
+ <string name="email" msgid="5568050657313893478">"E-Mail senden"</string>
<string name="email_desc" msgid="6941280589171810022">"E-Mail an ausgewählte Adresse senden"</string>
<string name="dial" msgid="7317293545368448453">"Anruf"</string>
<string name="dial_desc" msgid="5129451396208040332">"Ausgewählte Telefonnummer anrufen"</string>
<string name="browse" msgid="3733970143542020945">"Öffnen"</string>
<string name="browse_desc" msgid="3898254913938219011">"Ausgewählte URL öffnen"</string>
- <string name="sms" msgid="5495416906312064886">"SMS"</string>
+ <string name="sms" msgid="5495416906312064886">"SMS senden"</string>
<string name="sms_desc" msgid="8293660783374489324">"SMS an ausgewählte Telefonnummer senden"</string>
<string name="add_contact" msgid="9005634177208282449">"Hinzufügen"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Zu Kontakten hinzufügen"</string>
diff --git a/textclassifier/src/main/res/values-es/strings.xml b/textclassifier/src/main/res/values-es/strings.xml
index 007e62e..dd4c644 100644
--- a/textclassifier/src/main/res/values-es/strings.xml
+++ b/textclassifier/src/main/res/values-es/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Correo electrónico"</string>
+ <string name="email" msgid="5568050657313893478">"Enviar correo"</string>
<string name="email_desc" msgid="6941280589171810022">"Enviar un correo electrónico a la dirección seleccionada"</string>
<string name="dial" msgid="7317293545368448453">"Llamar"</string>
<string name="dial_desc" msgid="5129451396208040332">"Llamar al número de teléfono seleccionado"</string>
<string name="browse" msgid="3733970143542020945">"Abrir"</string>
<string name="browse_desc" msgid="3898254913938219011">"Abrir la URL seleccionada"</string>
- <string name="sms" msgid="5495416906312064886">"Mensaje"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Enviar un mensaje al número de teléfono seleccionado"</string>
+ <string name="sms" msgid="5495416906312064886">"Enviar SMS"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Enviar SMS al teléfono seleccionado"</string>
<string name="add_contact" msgid="9005634177208282449">"Añadir"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Añadir a contactos"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Más opciones"</string>
diff --git a/textclassifier/src/main/res/values-et/strings.xml b/textclassifier/src/main/res/values-et/strings.xml
index da2ecfb..b4b2e29 100644
--- a/textclassifier/src/main/res/values-et/strings.xml
+++ b/textclassifier/src/main/res/values-et/strings.xml
@@ -16,16 +16,16 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-post"</string>
- <string name="email_desc" msgid="6941280589171810022">"Valitud aadressile meili saatmine"</string>
- <string name="dial" msgid="7317293545368448453">"Kõne"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Valitud telefoninumbrile helistamine"</string>
+ <string name="email" msgid="5568050657313893478">"Saada meil"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Saada valitud aadressile meil"</string>
+ <string name="dial" msgid="7317293545368448453">"Helista"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Helista valitud telefoninumbrile"</string>
<string name="browse" msgid="3733970143542020945">"Ava"</string>
- <string name="browse_desc" msgid="3898254913938219011">"Valitud URL-i avamine"</string>
- <string name="sms" msgid="5495416906312064886">"Sõnum"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Valitud telefoninumbrile sõnumi saatmine"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"Ava valitud URL"</string>
+ <string name="sms" msgid="5495416906312064886">"Saada sõnum"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Saada valitud telefoninumbrile sõnum"</string>
<string name="add_contact" msgid="9005634177208282449">"Lisa"</string>
- <string name="add_contact_desc" msgid="2475604767309086575">"Lisamine kontaktidesse"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"Lisa kontaktidesse"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Rohkem valikuid"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Ületäite sulgemine"</string>
<string name="abc_share" msgid="7091841667818715717">"Jaga"</string>
diff --git a/textclassifier/src/main/res/values-eu/strings.xml b/textclassifier/src/main/res/values-eu/strings.xml
index 0cfaf81..5b98777 100644
--- a/textclassifier/src/main/res/values-eu/strings.xml
+++ b/textclassifier/src/main/res/values-eu/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Bidali mezu elektroniko bat"</string>
+ <string name="email" msgid="5568050657313893478">"Bidali mezu bat"</string>
<string name="email_desc" msgid="6941280589171810022">"Bidali mezu elektroniko bat hautatutako helbidera"</string>
<string name="dial" msgid="7317293545368448453">"Deitu"</string>
<string name="dial_desc" msgid="5129451396208040332">"Deitu hautatutako telefono-zenbakira"</string>
diff --git a/textclassifier/src/main/res/values-fa/strings.xml b/textclassifier/src/main/res/values-fa/strings.xml
index f9d259f..0c01dc6 100644
--- a/textclassifier/src/main/res/values-fa/strings.xml
+++ b/textclassifier/src/main/res/values-fa/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ایمیل"</string>
+ <string name="email" msgid="5568050657313893478">"فرستادن ایمیل"</string>
<string name="email_desc" msgid="6941280589171810022">"ارسال ایمیل به نشانی انتخابی"</string>
- <string name="dial" msgid="7317293545368448453">"تماس"</string>
+ <string name="dial" msgid="7317293545368448453">"تماس گرفتن"</string>
<string name="dial_desc" msgid="5129451396208040332">"تماس با شماره تلفن انتخابی"</string>
<string name="browse" msgid="3733970143542020945">"باز کردن"</string>
<string name="browse_desc" msgid="3898254913938219011">"باز کردن نشانی وب انتخابی"</string>
- <string name="sms" msgid="5495416906312064886">"پیام"</string>
+ <string name="sms" msgid="5495416906312064886">"فرستادن پیام"</string>
<string name="sms_desc" msgid="8293660783374489324">"ارسال پیام به شماره تلفن انتخابی"</string>
<string name="add_contact" msgid="9005634177208282449">"افزودن"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"افزودن به مخاطبین"</string>
diff --git a/textclassifier/src/main/res/values-fr-rCA/strings.xml b/textclassifier/src/main/res/values-fr-rCA/strings.xml
index d1ff08c..d56c13f 100644
--- a/textclassifier/src/main/res/values-fr-rCA/strings.xml
+++ b/textclassifier/src/main/res/values-fr-rCA/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Courriel"</string>
+ <string name="email" msgid="5568050657313893478">"Envoyer un courriel"</string>
<string name="email_desc" msgid="6941280589171810022">"Envoyer un courriel à l\'adresse sélectionnée"</string>
<string name="dial" msgid="7317293545368448453">"Appeler"</string>
<string name="dial_desc" msgid="5129451396208040332">"Téléphoner au numéro sélectionné"</string>
<string name="browse" msgid="3733970143542020945">"Ouvrir"</string>
<string name="browse_desc" msgid="3898254913938219011">"Ouvrir l\'adresse URL sélectionnée"</string>
- <string name="sms" msgid="5495416906312064886">"Message"</string>
+ <string name="sms" msgid="5495416906312064886">"Envoyer un texto"</string>
<string name="sms_desc" msgid="8293660783374489324">"Envoyer un message texte au numéro de téléphone sélectionné"</string>
<string name="add_contact" msgid="9005634177208282449">"Ajouter"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Ajouter aux contacts"</string>
diff --git a/textclassifier/src/main/res/values-fr/strings.xml b/textclassifier/src/main/res/values-fr/strings.xml
index 87beba5..8fc7a9a 100644
--- a/textclassifier/src/main/res/values-fr/strings.xml
+++ b/textclassifier/src/main/res/values-fr/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-mail"</string>
+ <string name="email" msgid="5568050657313893478">"Envoyer un e-mail"</string>
<string name="email_desc" msgid="6941280589171810022">"Envoyer un e-mail à l\'adresse sélectionnée"</string>
<string name="dial" msgid="7317293545368448453">"Appeler"</string>
<string name="dial_desc" msgid="5129451396208040332">"Appeler le numéro de téléphone sélectionné"</string>
<string name="browse" msgid="3733970143542020945">"Ouvrir"</string>
<string name="browse_desc" msgid="3898254913938219011">"Ouvrir l\'URL sélectionnée"</string>
- <string name="sms" msgid="5495416906312064886">"Message"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Envoyer un message au numéro de téléphone sélectionné"</string>
+ <string name="sms" msgid="5495416906312064886">"Envoyer un SMS"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Envoyer un SMS au numéro de téléphone sélectionné"</string>
<string name="add_contact" msgid="9005634177208282449">"Ajouter"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Ajouter aux contacts"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Autres options"</string>
diff --git a/textclassifier/src/main/res/values-gl/strings.xml b/textclassifier/src/main/res/values-gl/strings.xml
index b17e574..2c4385c 100644
--- a/textclassifier/src/main/res/values-gl/strings.xml
+++ b/textclassifier/src/main/res/values-gl/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Correo electrónico"</string>
+ <string name="email" msgid="5568050657313893478">"Enviar correo e."</string>
<string name="email_desc" msgid="6941280589171810022">"Envía un correo electrónico ao enderezo seleccionado"</string>
<string name="dial" msgid="7317293545368448453">"Chamar"</string>
<string name="dial_desc" msgid="5129451396208040332">"Chama ao número de teléfono seleccionado"</string>
<string name="browse" msgid="3733970143542020945">"Abrir"</string>
<string name="browse_desc" msgid="3898254913938219011">"Abre o URL seleccionado"</string>
- <string name="sms" msgid="5495416906312064886">"Enviar mensaxe"</string>
+ <string name="sms" msgid="5495416906312064886">"Enviar SMS"</string>
<string name="sms_desc" msgid="8293660783374489324">"Envía unha mensaxe ao número de teléfono seleccionado"</string>
<string name="add_contact" msgid="9005634177208282449">"Engadir"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Engade o elemento aos contactos"</string>
diff --git a/textclassifier/src/main/res/values-gu/strings.xml b/textclassifier/src/main/res/values-gu/strings.xml
index 84ec7d3..c92cbd17 100644
--- a/textclassifier/src/main/res/values-gu/strings.xml
+++ b/textclassifier/src/main/res/values-gu/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ઇમેઇલ"</string>
+ <string name="email" msgid="5568050657313893478">"ઇમેઇલ કરો"</string>
<string name="email_desc" msgid="6941280589171810022">"પસંદ કરેલા ઍડ્રેસ પર ઇમેઇલ મોકલો"</string>
- <string name="dial" msgid="7317293545368448453">"કૉલ"</string>
+ <string name="dial" msgid="7317293545368448453">"કૉલ કરો"</string>
<string name="dial_desc" msgid="5129451396208040332">"પસંદ કરેલા ફોન નંબર પર કૉલ કરો"</string>
<string name="browse" msgid="3733970143542020945">"ખોલો"</string>
<string name="browse_desc" msgid="3898254913938219011">"પસંદ કરેલું URL ખોલો"</string>
- <string name="sms" msgid="5495416906312064886">"સંદેશ"</string>
+ <string name="sms" msgid="5495416906312064886">"સંદેશ મોકલો"</string>
<string name="sms_desc" msgid="8293660783374489324">"પસંદ કરેલા ફોન નંબર પર સંદેશ મોકલો"</string>
<string name="add_contact" msgid="9005634177208282449">"ઉમેરો"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"સંપર્કોમાં ઉમેરો"</string>
diff --git a/textclassifier/src/main/res/values-hi/strings.xml b/textclassifier/src/main/res/values-hi/strings.xml
index 0d3da9e2..e9cf510 100644
--- a/textclassifier/src/main/res/values-hi/strings.xml
+++ b/textclassifier/src/main/res/values-hi/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ईमेल"</string>
+ <string name="email" msgid="5568050657313893478">"ईमेल करें"</string>
<string name="email_desc" msgid="6941280589171810022">"चुने गए पते पर ईमेल भेजें"</string>
<string name="dial" msgid="7317293545368448453">"कॉल करें"</string>
<string name="dial_desc" msgid="5129451396208040332">"चुने गए फ़ोन नंबर पर कॉल करें"</string>
<string name="browse" msgid="3733970143542020945">"खोलें"</string>
<string name="browse_desc" msgid="3898254913938219011">"चुना गया यूआरएल खोलें"</string>
- <string name="sms" msgid="5495416906312064886">"मैसेज"</string>
+ <string name="sms" msgid="5495416906312064886">"मैसेज करें"</string>
<string name="sms_desc" msgid="8293660783374489324">"चुने गए फ़ोन नंबर को मैसेज करें"</string>
<string name="add_contact" msgid="9005634177208282449">"जोड़ें"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"संपर्क सूची में जोड़ें"</string>
diff --git a/textclassifier/src/main/res/values-hr/strings.xml b/textclassifier/src/main/res/values-hr/strings.xml
index 197bf47..0a05d23 100644
--- a/textclassifier/src/main/res/values-hr/strings.xml
+++ b/textclassifier/src/main/res/values-hr/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-pošta"</string>
- <string name="email_desc" msgid="6941280589171810022">"Slanje e-poruke na odabranu adresu"</string>
- <string name="dial" msgid="7317293545368448453">"Poziv"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Pozivanje odabranog telefonskog broja"</string>
+ <string name="email" msgid="5568050657313893478">"Pošalji e-poštu"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Pošalji e-poštu na odabranu adresu"</string>
+ <string name="dial" msgid="7317293545368448453">"Nazovi"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Nazovi odabrani telefonski broj"</string>
<string name="browse" msgid="3733970143542020945">"Otvori"</string>
- <string name="browse_desc" msgid="3898254913938219011">"Otvaranje odabranog URL-a"</string>
- <string name="sms" msgid="5495416906312064886">"Poruka"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Slanje poruke na odabrani telefonski broj"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"Otvori odabrani URL"</string>
+ <string name="sms" msgid="5495416906312064886">"Pošalji poruku"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Pošalji poruku na odabrani telefonski broj"</string>
<string name="add_contact" msgid="9005634177208282449">"Dodaj"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Dodaj u kontakte"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Više opcija"</string>
diff --git a/textclassifier/src/main/res/values-hu/strings.xml b/textclassifier/src/main/res/values-hu/strings.xml
index b58ea3c..59d8bf4 100644
--- a/textclassifier/src/main/res/values-hu/strings.xml
+++ b/textclassifier/src/main/res/values-hu/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="email" msgid="5568050657313893478">"E-mail"</string>
- <string name="email_desc" msgid="6941280589171810022">"Kiválasztott cím elküldése e-mailben"</string>
+ <string name="email_desc" msgid="6941280589171810022">"E-mail küldése a kiválasztott címre"</string>
<string name="dial" msgid="7317293545368448453">"Hívás"</string>
<string name="dial_desc" msgid="5129451396208040332">"Kiválasztott telefonszám hívása"</string>
<string name="browse" msgid="3733970143542020945">"Megnyitás"</string>
diff --git a/textclassifier/src/main/res/values-hy/strings.xml b/textclassifier/src/main/res/values-hy/strings.xml
index a3b204e..d7317e8 100644
--- a/textclassifier/src/main/res/values-hy/strings.xml
+++ b/textclassifier/src/main/res/values-hy/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="email" msgid="5568050657313893478">"Էլփոստ"</string>
<string name="email_desc" msgid="6941280589171810022">"Նամակ ուղարկել ընտրված հասցեին"</string>
- <string name="dial" msgid="7317293545368448453">"Զանգ"</string>
+ <string name="dial" msgid="7317293545368448453">"Զանգել"</string>
<string name="dial_desc" msgid="5129451396208040332">"Զանգել ընտրված հեռախոսահամարին"</string>
<string name="browse" msgid="3733970143542020945">"Բացել"</string>
<string name="browse_desc" msgid="3898254913938219011">"Բացել ընտրված URL-ը"</string>
diff --git a/textclassifier/src/main/res/values-in/strings.xml b/textclassifier/src/main/res/values-in/strings.xml
index ea214c8..85dbb52 100644
--- a/textclassifier/src/main/res/values-in/strings.xml
+++ b/textclassifier/src/main/res/values-in/strings.xml
@@ -17,13 +17,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="email" msgid="5568050657313893478">"Email"</string>
- <string name="email_desc" msgid="6941280589171810022">"Mengirimkan email ke alamat yang dipilih"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Kirim email ke alamat yang dipilih"</string>
<string name="dial" msgid="7317293545368448453">"Panggil"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Memanggil nomor telepon yang dipilih"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Panggil nomor telepon yang dipilih"</string>
<string name="browse" msgid="3733970143542020945">"Buka"</string>
<string name="browse_desc" msgid="3898254913938219011">"Buka URL yang dipilih"</string>
<string name="sms" msgid="5495416906312064886">"Pesan"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Mengirimkan SMS ke nomor telepon yang dipilih"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Kirim SMS ke nomor telepon yang dipilih"</string>
<string name="add_contact" msgid="9005634177208282449">"Tambahkan"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Tambahkan ke kontak"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Opsi lain"</string>
diff --git a/textclassifier/src/main/res/values-iw/strings.xml b/textclassifier/src/main/res/values-iw/strings.xml
index 84df5c1..b577732 100644
--- a/textclassifier/src/main/res/values-iw/strings.xml
+++ b/textclassifier/src/main/res/values-iw/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"אימייל"</string>
+ <string name="email" msgid="5568050657313893478">"התכתבות באימייל"</string>
<string name="email_desc" msgid="6941280589171810022">"שליחת אימייל לכתובת שנבחרה"</string>
- <string name="dial" msgid="7317293545368448453">"שיחה"</string>
+ <string name="dial" msgid="7317293545368448453">"ביצוע שיחה"</string>
<string name="dial_desc" msgid="5129451396208040332">"התקשרות למספר הטלפון שנבחר"</string>
<string name="browse" msgid="3733970143542020945">"פתיחה"</string>
<string name="browse_desc" msgid="3898254913938219011">"פתיחה של כתובת האתר שנבחרה"</string>
- <string name="sms" msgid="5495416906312064886">"הודעה"</string>
+ <string name="sms" msgid="5495416906312064886">"התכתבות בהודעות"</string>
<string name="sms_desc" msgid="8293660783374489324">"שליחת הודעה למספר הטלפון שנבחר"</string>
<string name="add_contact" msgid="9005634177208282449">"הוספה"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"הוספה לאנשי הקשר"</string>
diff --git a/textclassifier/src/main/res/values-kk/strings.xml b/textclassifier/src/main/res/values-kk/strings.xml
index 49cae0b..70a0090 100644
--- a/textclassifier/src/main/res/values-kk/strings.xml
+++ b/textclassifier/src/main/res/values-kk/strings.xml
@@ -16,16 +16,16 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Электрондық пошта"</string>
- <string name="email_desc" msgid="6941280589171810022">"Таңдалған электрондық пошта мекенжайына хабар жіберу"</string>
+ <string name="email" msgid="5568050657313893478">"Эл. поштаны ашу"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Таңдалған мекенжайға хабар жіберу"</string>
<string name="dial" msgid="7317293545368448453">"Қоңырау шалу"</string>
<string name="dial_desc" msgid="5129451396208040332">"Таңдалған телефон нөміріне қоңырау шалу"</string>
<string name="browse" msgid="3733970143542020945">"Ашу"</string>
<string name="browse_desc" msgid="3898254913938219011">"Таңдалған URL мекенжайын ашу"</string>
- <string name="sms" msgid="5495416906312064886">"Хабар"</string>
+ <string name="sms" msgid="5495416906312064886">"Хабар жіберу"</string>
<string name="sms_desc" msgid="8293660783374489324">"Таңдалған телефон нөміріне хабар жіберу"</string>
- <string name="add_contact" msgid="9005634177208282449">"Қосу"</string>
- <string name="add_contact_desc" msgid="2475604767309086575">"Контактілерге қосу"</string>
+ <string name="add_contact" msgid="9005634177208282449">"Енгізу"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"Контактілер тізіміне енгізу"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Басқа опциялар"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Қосымша мәзірді жабу"</string>
<string name="abc_share" msgid="7091841667818715717">"Бөлісу"</string>
diff --git a/textclassifier/src/main/res/values-km/strings.xml b/textclassifier/src/main/res/values-km/strings.xml
index 11fcb96..e71c64b5 100644
--- a/textclassifier/src/main/res/values-km/strings.xml
+++ b/textclassifier/src/main/res/values-km/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"អ៊ីមែល"</string>
+ <string name="email" msgid="5568050657313893478">"ផ្ញើអ៊ីមែល"</string>
<string name="email_desc" msgid="6941280589171810022">"ផ្ញើអ៊ីមែលទៅអាសយដ្ឋានដែលបានជ្រើសរើស"</string>
- <string name="dial" msgid="7317293545368448453">"ហៅ"</string>
- <string name="dial_desc" msgid="5129451396208040332">"ហៅទៅលេខទូរសព្ទដែលបានជ្រើសរើស"</string>
+ <string name="dial" msgid="7317293545368448453">"ហៅទូរសព្ទ"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"ហៅទូរសព្ទទៅលេខដែលបានជ្រើសរើស"</string>
<string name="browse" msgid="3733970143542020945">"បើក"</string>
<string name="browse_desc" msgid="3898254913938219011">"បើក URL ដែលបានជ្រើសរើស"</string>
- <string name="sms" msgid="5495416906312064886">"សារ"</string>
+ <string name="sms" msgid="5495416906312064886">"ផ្ញើសារ"</string>
<string name="sms_desc" msgid="8293660783374489324">"ផ្ញើសារទៅលេខទូរសព្ទដែលបានជ្រើសរើស"</string>
<string name="add_contact" msgid="9005634177208282449">"បញ្ចូល"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"បញ្ចូលទៅក្នុងទំនាក់ទំនង"</string>
diff --git a/textclassifier/src/main/res/values-kn/strings.xml b/textclassifier/src/main/res/values-kn/strings.xml
index 57769c7..14dfb18 100644
--- a/textclassifier/src/main/res/values-kn/strings.xml
+++ b/textclassifier/src/main/res/values-kn/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ಇಮೇಲ್"</string>
+ <string name="email" msgid="5568050657313893478">"ಇಮೇಲ್ ಮಾಡಿ"</string>
<string name="email_desc" msgid="6941280589171810022">"ಆಯ್ಕೆಮಾಡಿದ ವಿಳಾಸಕ್ಕೆ ಇಮೇಲ್ ಮಾಡಿ"</string>
- <string name="dial" msgid="7317293545368448453">"ಕರೆ"</string>
+ <string name="dial" msgid="7317293545368448453">"ಕರೆ ಮಾಡಿ"</string>
<string name="dial_desc" msgid="5129451396208040332">"ಆಯ್ಕೆಮಾಡಿದ ಫೋನ್ ಸಂಖ್ಯೆಗೆ ಕರೆ ಮಾಡಿ"</string>
<string name="browse" msgid="3733970143542020945">"ತೆರೆಯಿರಿ"</string>
<string name="browse_desc" msgid="3898254913938219011">"ಆಯ್ಕೆ ಮಾಡಿದ URL ತೆರೆಯಿರಿ"</string>
- <string name="sms" msgid="5495416906312064886">"ಸಂದೇಶ"</string>
+ <string name="sms" msgid="5495416906312064886">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
<string name="sms_desc" msgid="8293660783374489324">"ಆಯ್ಕೆಮಾಡಿದ ಫೋನ್ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
<string name="add_contact" msgid="9005634177208282449">"ಸೇರಿಸಿ"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸಿ"</string>
diff --git a/textclassifier/src/main/res/values-ky/strings.xml b/textclassifier/src/main/res/values-ky/strings.xml
index f0da54b..1ae09c4 100644
--- a/textclassifier/src/main/res/values-ky/strings.xml
+++ b/textclassifier/src/main/res/values-ky/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Электрондук почта"</string>
+ <string name="email" msgid="5568050657313893478">"Электрондук кат жөнөтүү"</string>
<string name="email_desc" msgid="6941280589171810022">"Тандалган дарекке электрондук кат жөнөтүү"</string>
<string name="dial" msgid="7317293545368448453">"Чалуу"</string>
<string name="dial_desc" msgid="5129451396208040332">"Тандалган телефон номерине чалуу"</string>
<string name="browse" msgid="3733970143542020945">"Ачуу"</string>
<string name="browse_desc" msgid="3898254913938219011">"Тандалган URL\'ди ачуу"</string>
- <string name="sms" msgid="5495416906312064886">"Билдирүү"</string>
+ <string name="sms" msgid="5495416906312064886">"Билдирүү жөнөтүү"</string>
<string name="sms_desc" msgid="8293660783374489324">"Тандалган телефон номерине билдирүү жөнөтүү"</string>
<string name="add_contact" msgid="9005634177208282449">"Кошуу"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Байланыштарга кошуу"</string>
diff --git a/textclassifier/src/main/res/values-lt/strings.xml b/textclassifier/src/main/res/values-lt/strings.xml
index f0affddb..8055d7e 100644
--- a/textclassifier/src/main/res/values-lt/strings.xml
+++ b/textclassifier/src/main/res/values-lt/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"El. paštas"</string>
+ <string name="email" msgid="5568050657313893478">"Rašyti el. laišką"</string>
<string name="email_desc" msgid="6941280589171810022">"Siųsti el. laišką pasirinktu adresu"</string>
<string name="dial" msgid="7317293545368448453">"Skambinti"</string>
<string name="dial_desc" msgid="5129451396208040332">"Skambinti pasirinktu telefono numeriu"</string>
<string name="browse" msgid="3733970143542020945">"Atidaryti"</string>
<string name="browse_desc" msgid="3898254913938219011">"Atidaryti pasirinktą URL"</string>
- <string name="sms" msgid="5495416906312064886">"Pranešimas"</string>
+ <string name="sms" msgid="5495416906312064886">"Rašyti pranešimą"</string>
<string name="sms_desc" msgid="8293660783374489324">"Siųsti pranešimą pasirinktu telefono numeriu"</string>
<string name="add_contact" msgid="9005634177208282449">"Pridėti"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Pridėti prie kontaktų"</string>
diff --git a/textclassifier/src/main/res/values-lv/strings.xml b/textclassifier/src/main/res/values-lv/strings.xml
index b3d2599..01b7230 100644
--- a/textclassifier/src/main/res/values-lv/strings.xml
+++ b/textclassifier/src/main/res/values-lv/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-pasta ziņojums"</string>
+ <string name="email" msgid="5568050657313893478">"E-pasts"</string>
<string name="email_desc" msgid="6941280589171810022">"Nosūtīt e-pasta ziņojumu uz atlasīto adresi"</string>
<string name="dial" msgid="7317293545368448453">"Zvans"</string>
<string name="dial_desc" msgid="5129451396208040332">"Zvanīt uz atlasīto tālruņa numuru"</string>
diff --git a/textclassifier/src/main/res/values-mk/strings.xml b/textclassifier/src/main/res/values-mk/strings.xml
index dc5183b..39235db 100644
--- a/textclassifier/src/main/res/values-mk/strings.xml
+++ b/textclassifier/src/main/res/values-mk/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Е-пошта"</string>
+ <string name="email" msgid="5568050657313893478">"Испрати е-пошта"</string>
<string name="email_desc" msgid="6941280589171810022">"Испрати е-порака до избраната адреса"</string>
<string name="dial" msgid="7317293545368448453">"Повикај"</string>
<string name="dial_desc" msgid="5129451396208040332">"Повикај го избраниот телефонски број"</string>
<string name="browse" msgid="3733970143542020945">"Отвори"</string>
<string name="browse_desc" msgid="3898254913938219011">"Отвори ја избраната URL-адреса"</string>
- <string name="sms" msgid="5495416906312064886">"Порака"</string>
+ <string name="sms" msgid="5495416906312064886">"Испрати порака"</string>
<string name="sms_desc" msgid="8293660783374489324">"Испрати порака до избраниот телефонски број"</string>
<string name="add_contact" msgid="9005634177208282449">"Додај"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Додај во контакти"</string>
diff --git a/textclassifier/src/main/res/values-ml/strings.xml b/textclassifier/src/main/res/values-ml/strings.xml
index 1d5d95b..b8726a9 100644
--- a/textclassifier/src/main/res/values-ml/strings.xml
+++ b/textclassifier/src/main/res/values-ml/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ഇമെയിൽ"</string>
+ <string name="email" msgid="5568050657313893478">"ഇമെയിൽ അയയ്ക്കൂ"</string>
<string name="email_desc" msgid="6941280589171810022">"തിരഞ്ഞെടുത്ത വിലാസത്തിലേക്ക് ഇമെയിൽ അയയ്ക്കുക"</string>
<string name="dial" msgid="7317293545368448453">"വിളിക്കുക"</string>
<string name="dial_desc" msgid="5129451396208040332">"തിരഞ്ഞെടുത്ത ഫോൺ നമ്പറിലേക്ക് വിളിക്കുക"</string>
<string name="browse" msgid="3733970143542020945">"തുറക്കുക"</string>
<string name="browse_desc" msgid="3898254913938219011">"തിരഞ്ഞെടുത്ത URL തുറക്കുക"</string>
- <string name="sms" msgid="5495416906312064886">"സന്ദേശം"</string>
+ <string name="sms" msgid="5495416906312064886">"സന്ദേശം അയയ്ക്കൂ"</string>
<string name="sms_desc" msgid="8293660783374489324">"തിരഞ്ഞെടുത്ത ഫോൺ നമ്പറിലേക്ക് സന്ദേശം അയയ്ക്കുക"</string>
<string name="add_contact" msgid="9005634177208282449">"ചേർക്കുക"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"കോൺടാക്റ്റുകളിലേക്ക് ചേർക്കുക"</string>
diff --git a/textclassifier/src/main/res/values-mn/strings.xml b/textclassifier/src/main/res/values-mn/strings.xml
index c4e9d7e..9dfd17b 100644
--- a/textclassifier/src/main/res/values-mn/strings.xml
+++ b/textclassifier/src/main/res/values-mn/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Имэйл"</string>
+ <string name="email" msgid="5568050657313893478">"Имэйл бичих"</string>
<string name="email_desc" msgid="6941280589171810022">"Сонгосон хаяг руу имэйл илгээх"</string>
<string name="dial" msgid="7317293545368448453">"Залгах"</string>
<string name="dial_desc" msgid="5129451396208040332">"Сонгосон утасны дугаар руу залгах"</string>
<string name="browse" msgid="3733970143542020945">"Нээх"</string>
<string name="browse_desc" msgid="3898254913938219011">"Сонгосон URL-г нээх"</string>
- <string name="sms" msgid="5495416906312064886">"Мессеж"</string>
+ <string name="sms" msgid="5495416906312064886">"Мессеж бичих"</string>
<string name="sms_desc" msgid="8293660783374489324">"Сонгосон утасны дугаар руу мессеж илгээх"</string>
<string name="add_contact" msgid="9005634177208282449">"Нэмэх"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Харилцагчид нэмэх"</string>
diff --git a/textclassifier/src/main/res/values-mr/strings.xml b/textclassifier/src/main/res/values-mr/strings.xml
index 895d1dc..11a2d55 100644
--- a/textclassifier/src/main/res/values-mr/strings.xml
+++ b/textclassifier/src/main/res/values-mr/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ईमेल"</string>
+ <string name="email" msgid="5568050657313893478">"ईमेल करा"</string>
<string name="email_desc" msgid="6941280589171810022">"निवडलेल्या अॅड्रेसवर ईमेल करा"</string>
<string name="dial" msgid="7317293545368448453">"कॉल करा"</string>
<string name="dial_desc" msgid="5129451396208040332">"निवडलेल्या फोन नंबरवर कॉल करा"</string>
<string name="browse" msgid="3733970143542020945">"उघडा"</string>
<string name="browse_desc" msgid="3898254913938219011">"निवडलेली URL उघडा"</string>
- <string name="sms" msgid="5495416906312064886">"मेसेज"</string>
+ <string name="sms" msgid="5495416906312064886">"मेसेज करा"</string>
<string name="sms_desc" msgid="8293660783374489324">"निवडलेल्या फोन नंबरवर मेसेज करा"</string>
<string name="add_contact" msgid="9005634177208282449">"जोडा"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"संपर्कांमध्ये जोडा"</string>
diff --git a/textclassifier/src/main/res/values-my/strings.xml b/textclassifier/src/main/res/values-my/strings.xml
index 9a159f0..78edba2 100644
--- a/textclassifier/src/main/res/values-my/strings.xml
+++ b/textclassifier/src/main/res/values-my/strings.xml
@@ -16,16 +16,16 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"အီးမေးလ်"</string>
+ <string name="email" msgid="5568050657313893478">"အီးမေးလ်ပို့ရန်"</string>
<string name="email_desc" msgid="6941280589171810022">"ရွေးထားသည့် လိပ်စာသို့ အီးမေးလ်ပို့ရန်"</string>
<string name="dial" msgid="7317293545368448453">"ခေါ်ဆိုရန်"</string>
<string name="dial_desc" msgid="5129451396208040332">"ရွေးထားသည့် ဖုန်းနံပါတ်ကို ခေါ်ရန်"</string>
<string name="browse" msgid="3733970143542020945">"ဖွင့်ရန်"</string>
<string name="browse_desc" msgid="3898254913938219011">"ရွေးထားသည့် URL ကို ဖွင့်ရန်"</string>
- <string name="sms" msgid="5495416906312064886">"မက်ဆေ့ဂျ်"</string>
+ <string name="sms" msgid="5495416906312064886">"မက်ဆေ့ဂျ်ပို့ရန်"</string>
<string name="sms_desc" msgid="8293660783374489324">"ရွေးထားသည့် ဖုန်းနံပါတ်ကို မက်ဆေ့ဂျ်ပို့ရန်"</string>
<string name="add_contact" msgid="9005634177208282449">"ထည့်ရန်"</string>
- <string name="add_contact_desc" msgid="2475604767309086575">"ထည့်ရန်"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"အဆက်အသွယ်များသို့ ထည့်ရန်"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"နောက်ထပ် ရွေးစရာများ"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"အပိုမီနူးကို ပိတ်ရန်"</string>
<string name="abc_share" msgid="7091841667818715717">"မျှဝေရန်"</string>
diff --git a/textclassifier/src/main/res/values-nb/strings.xml b/textclassifier/src/main/res/values-nb/strings.xml
index 31bac6e..1959f52 100644
--- a/textclassifier/src/main/res/values-nb/strings.xml
+++ b/textclassifier/src/main/res/values-nb/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-post"</string>
+ <string name="email" msgid="5568050657313893478">"Send e-post"</string>
<string name="email_desc" msgid="6941280589171810022">"Send e-post til den valgte adressen"</string>
<string name="dial" msgid="7317293545368448453">"Ring"</string>
<string name="dial_desc" msgid="5129451396208040332">"Ring det valgte telefonnummeret"</string>
<string name="browse" msgid="3733970143542020945">"Åpne"</string>
<string name="browse_desc" msgid="3898254913938219011">"Åpne den valgte nettadressen"</string>
- <string name="sms" msgid="5495416906312064886">"Melding"</string>
+ <string name="sms" msgid="5495416906312064886">"Send melding"</string>
<string name="sms_desc" msgid="8293660783374489324">"Send melding til det valgte telefonnummeret"</string>
<string name="add_contact" msgid="9005634177208282449">"Legg til"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Legg til i kontakter"</string>
diff --git a/textclassifier/src/main/res/values-ne/strings.xml b/textclassifier/src/main/res/values-ne/strings.xml
index e33e441..34325fe 100644
--- a/textclassifier/src/main/res/values-ne/strings.xml
+++ b/textclassifier/src/main/res/values-ne/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"इमेल"</string>
+ <string name="email" msgid="5568050657313893478">"इमेल गर्नुहोस्"</string>
<string name="email_desc" msgid="6941280589171810022">"चयन गरिएको ठेगानामा इमेल पठाउनुहोस्"</string>
<string name="dial" msgid="7317293545368448453">"कल गर्नुहोस्"</string>
<string name="dial_desc" msgid="5129451396208040332">"चयन गरिएको फोन नम्बरमा कल गर्नुहोस्"</string>
<string name="browse" msgid="3733970143542020945">"खोल्नुहोस्"</string>
<string name="browse_desc" msgid="3898254913938219011">"चयन गरिएको URL खोल्नुहोस्"</string>
- <string name="sms" msgid="5495416906312064886">"सन्देश"</string>
+ <string name="sms" msgid="5495416906312064886">"सन्देश पठाउनुहोस्"</string>
<string name="sms_desc" msgid="8293660783374489324">"चयन गरिएको फोन नम्बरमा सन्देश पठाउनुहोस्"</string>
<string name="add_contact" msgid="9005634177208282449">"थप्नुहोस्"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"सम्पर्कहरूमा थप्नुहोस्"</string>
diff --git a/textclassifier/src/main/res/values-or/strings.xml b/textclassifier/src/main/res/values-or/strings.xml
index 3454944..4b3aa2c9 100644
--- a/textclassifier/src/main/res/values-or/strings.xml
+++ b/textclassifier/src/main/res/values-or/strings.xml
@@ -18,15 +18,15 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="email" msgid="5568050657313893478">"ଇମେଲ୍"</string>
<string name="email_desc" msgid="6941280589171810022">"ଚୟନିତ ଠିକଣାକୁ ଇମେଲ୍ ପଠାନ୍ତୁ"</string>
- <string name="dial" msgid="7317293545368448453">"କଲ୍ କରନ୍ତୁ"</string>
+ <string name="dial" msgid="7317293545368448453">"କଲ୍"</string>
<string name="dial_desc" msgid="5129451396208040332">"ଚୟନିତ ଫୋନ୍ ନମ୍ବର୍କୁ କଲ୍ କରନ୍ତୁ"</string>
<string name="browse" msgid="3733970143542020945">"ଖୋଲନ୍ତୁ"</string>
<string name="browse_desc" msgid="3898254913938219011">"ଚୟନିତ URL ଖୋଲନ୍ତୁ"</string>
<string name="sms" msgid="5495416906312064886">"ମେସେଜ୍"</string>
<string name="sms_desc" msgid="8293660783374489324">"ଚୟନିତ ଫୋନ୍ ନମ୍ବର୍କୁ ମେସେଜ୍ ପଠାନ୍ତୁ"</string>
- <string name="add_contact" msgid="9005634177208282449">"ଯୋଡ଼ନ୍ତୁ"</string>
- <string name="add_contact_desc" msgid="2475604767309086575">"ଯୋଗାଯୋଗରେ ଯୋଡ଼ନ୍ତୁ"</string>
+ <string name="add_contact" msgid="9005634177208282449">"ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"ଯୋଗାଯୋଗରେ ଯୋଗ କରନ୍ତୁ"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"ଅଧିକ ବିକଳ୍ପ"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"ଓଭରଫ୍ଲୋ ବନ୍ଦ କରନ୍ତୁ"</string>
- <string name="abc_share" msgid="7091841667818715717">"ଶେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="abc_share" msgid="7091841667818715717">"ସେୟାର୍ କରନ୍ତୁ"</string>
</resources>
diff --git a/textclassifier/src/main/res/values-pa/strings.xml b/textclassifier/src/main/res/values-pa/strings.xml
index 6831001..004bc9c 100644
--- a/textclassifier/src/main/res/values-pa/strings.xml
+++ b/textclassifier/src/main/res/values-pa/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ਈਮੇਲ"</string>
+ <string name="email" msgid="5568050657313893478">"ਈਮੇਲ ਖੋਲ੍ਹੋ"</string>
<string name="email_desc" msgid="6941280589171810022">"ਚੁਣੇ ਹੋਏ ਪਤੇ \'ਤੇ ਈਮੇਲ ਭੇਜੋ"</string>
<string name="dial" msgid="7317293545368448453">"ਕਾਲ ਕਰੋ"</string>
<string name="dial_desc" msgid="5129451396208040332">"ਚੁਣੇ ਗਏ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
<string name="browse" msgid="3733970143542020945">"ਖੋਲ੍ਹੋ"</string>
<string name="browse_desc" msgid="3898254913938219011">"ਚੁਣਿਆ ਗਿਆ URL ਖੋਲ੍ਹੋ"</string>
- <string name="sms" msgid="5495416906312064886">"ਸੁਨੇਹਾ"</string>
+ <string name="sms" msgid="5495416906312064886">"ਸੁਨੇਹਾ ਖੋਲ੍ਹੋ"</string>
<string name="sms_desc" msgid="8293660783374489324">"ਚੁਣੇ ਗਏ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
<string name="add_contact" msgid="9005634177208282449">"ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
diff --git a/textclassifier/src/main/res/values-pt-rPT/strings.xml b/textclassifier/src/main/res/values-pt-rPT/strings.xml
index 3eef4f1e..c1ff32b 100644
--- a/textclassifier/src/main/res/values-pt-rPT/strings.xml
+++ b/textclassifier/src/main/res/values-pt-rPT/strings.xml
@@ -22,7 +22,7 @@
<string name="dial_desc" msgid="5129451396208040332">"Ligar para o número de telefone selecionado"</string>
<string name="browse" msgid="3733970143542020945">"Abrir"</string>
<string name="browse_desc" msgid="3898254913938219011">"Abrir o URL selecionado"</string>
- <string name="sms" msgid="5495416906312064886">"Mensagem"</string>
+ <string name="sms" msgid="5495416906312064886">"Enviar mensagem"</string>
<string name="sms_desc" msgid="8293660783374489324">"Enviar uma mensagem para o número de telefone selecionado"</string>
<string name="add_contact" msgid="9005634177208282449">"Adicionar"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Adicionar aos contactos"</string>
diff --git a/textclassifier/src/main/res/values-ro/strings.xml b/textclassifier/src/main/res/values-ro/strings.xml
index d41f9b7..3656640 100644
--- a/textclassifier/src/main/res/values-ro/strings.xml
+++ b/textclassifier/src/main/res/values-ro/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-mail"</string>
+ <string name="email" msgid="5568050657313893478">"Trimiteți un e-mail"</string>
<string name="email_desc" msgid="6941280589171810022">"Trimiteți un e-mail la adresa selectată"</string>
- <string name="dial" msgid="7317293545368448453">"Apelați"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Apelați numărul de telefon selectat"</string>
+ <string name="dial" msgid="7317293545368448453">"Sunați"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Sunați la numărul de telefon selectat"</string>
<string name="browse" msgid="3733970143542020945">"Deschideți"</string>
<string name="browse_desc" msgid="3898254913938219011">"Deschideți adresa URL selectată"</string>
- <string name="sms" msgid="5495416906312064886">"Mesaj"</string>
+ <string name="sms" msgid="5495416906312064886">"Trimiteți mesaj"</string>
<string name="sms_desc" msgid="8293660783374489324">"Trimiteți un mesaj la numărul de telefon selectat"</string>
<string name="add_contact" msgid="9005634177208282449">"Adăugați"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Adăugați în agendă"</string>
diff --git a/textclassifier/src/main/res/values-ru/strings.xml b/textclassifier/src/main/res/values-ru/strings.xml
index a34d303..c3e4610 100644
--- a/textclassifier/src/main/res/values-ru/strings.xml
+++ b/textclassifier/src/main/res/values-ru/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Написать по почте"</string>
+ <string name="email" msgid="5568050657313893478">"Написать письмо"</string>
<string name="email_desc" msgid="6941280589171810022">"Отправить письмо выбранному адресату"</string>
<string name="dial" msgid="7317293545368448453">"Позвонить"</string>
<string name="dial_desc" msgid="5129451396208040332">"Позвонить по выбранному номеру"</string>
diff --git a/textclassifier/src/main/res/values-sl/strings.xml b/textclassifier/src/main/res/values-sl/strings.xml
index 7a9981f..9cf16f6 100644
--- a/textclassifier/src/main/res/values-sl/strings.xml
+++ b/textclassifier/src/main/res/values-sl/strings.xml
@@ -16,16 +16,16 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-pošta"</string>
- <string name="email_desc" msgid="6941280589171810022">"Pošiljanje e-poštnega sporočila na izbrani naslov"</string>
- <string name="dial" msgid="7317293545368448453">"Telefonski klic"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Klic izbrane telefonske številke"</string>
- <string name="browse" msgid="3733970143542020945">"Odpiranje"</string>
- <string name="browse_desc" msgid="3898254913938219011">"Odpiranje izbranega URL-ja"</string>
- <string name="sms" msgid="5495416906312064886">"Sporočilo"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Pošiljanje sporočila na izbrano telefonsko številko"</string>
- <string name="add_contact" msgid="9005634177208282449">"Dodajanje"</string>
- <string name="add_contact_desc" msgid="2475604767309086575">"Dodajanje med stike"</string>
+ <string name="email" msgid="5568050657313893478">"Odpri e-pošto"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Pošlji e-poštno sporočilo na izbrani naslov"</string>
+ <string name="dial" msgid="7317293545368448453">"Pokliči"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Pokliči izbrano telefonsko številko"</string>
+ <string name="browse" msgid="3733970143542020945">"Odpri"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"Odpri izbrani URL"</string>
+ <string name="sms" msgid="5495416906312064886">"Pošlji SMS"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Pošlji SMS na izbrano telefonsko številko"</string>
+ <string name="add_contact" msgid="9005634177208282449">"Dodaj"</string>
+ <string name="add_contact_desc" msgid="2475604767309086575">"Dodaj med stike"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Več možnosti"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Zapiranje dodatnih elementov"</string>
<string name="abc_share" msgid="7091841667818715717">"Skup. raba"</string>
diff --git a/textclassifier/src/main/res/values-sq/strings.xml b/textclassifier/src/main/res/values-sq/strings.xml
index 2735efc..90f6619 100644
--- a/textclassifier/src/main/res/values-sq/strings.xml
+++ b/textclassifier/src/main/res/values-sq/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Email"</string>
+ <string name="email" msgid="5568050657313893478">"Dërgo email"</string>
<string name="email_desc" msgid="6941280589171810022">"Dërgo email tek adresa e zgjedhur"</string>
<string name="dial" msgid="7317293545368448453">"Telefono"</string>
<string name="dial_desc" msgid="5129451396208040332">"Telefono në numrin e zgjedhur të telefonit"</string>
<string name="browse" msgid="3733970143542020945">"Hap"</string>
<string name="browse_desc" msgid="3898254913938219011">"Hap URL-në e zgjedhur"</string>
- <string name="sms" msgid="5495416906312064886">"Mesazh"</string>
+ <string name="sms" msgid="5495416906312064886">"Dërgo mesazh"</string>
<string name="sms_desc" msgid="8293660783374489324">"Dërgo mesazh te numri i zgjedhur i telefonit"</string>
<string name="add_contact" msgid="9005634177208282449">"Shto"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Shto te kontaktet"</string>
diff --git a/textclassifier/src/main/res/values-sv/strings.xml b/textclassifier/src/main/res/values-sv/strings.xml
index 483a79f..8a677c4 100644
--- a/textclassifier/src/main/res/values-sv/strings.xml
+++ b/textclassifier/src/main/res/values-sv/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-post"</string>
+ <string name="email" msgid="5568050657313893478">"Skicka e-post"</string>
<string name="email_desc" msgid="6941280589171810022">"Skicka e-post till vald adress"</string>
<string name="dial" msgid="7317293545368448453">"Ring"</string>
<string name="dial_desc" msgid="5129451396208040332">"Ring valt telefonnummer"</string>
diff --git a/textclassifier/src/main/res/values-sw/strings.xml b/textclassifier/src/main/res/values-sw/strings.xml
index 0171aa6..e940614 100644
--- a/textclassifier/src/main/res/values-sw/strings.xml
+++ b/textclassifier/src/main/res/values-sw/strings.xml
@@ -16,9 +16,9 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Barua pepe"</string>
+ <string name="email" msgid="5568050657313893478">"Tuma barua pepe"</string>
<string name="email_desc" msgid="6941280589171810022">"Tuma barua pepe kwa anwani uliyochagua"</string>
- <string name="dial" msgid="7317293545368448453">"Simu"</string>
+ <string name="dial" msgid="7317293545368448453">"Piga simu"</string>
<string name="dial_desc" msgid="5129451396208040332">"Piga simu kwa nambari uliyochagua"</string>
<string name="browse" msgid="3733970143542020945">"Fungua"</string>
<string name="browse_desc" msgid="3898254913938219011">"Fungua URL uliyochagua"</string>
diff --git a/textclassifier/src/main/res/values-ta/strings.xml b/textclassifier/src/main/res/values-ta/strings.xml
index 4f3123b..c90ac79 100644
--- a/textclassifier/src/main/res/values-ta/strings.xml
+++ b/textclassifier/src/main/res/values-ta/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"மின்னஞ்சல்"</string>
+ <string name="email" msgid="5568050657313893478">"மின்னஞ்சல் அனுப்பு"</string>
<string name="email_desc" msgid="6941280589171810022">"தேர்ந்தெடுத்த முகவரிக்கு மின்னஞ்சலை அனுப்பும்"</string>
<string name="dial" msgid="7317293545368448453">"அழை"</string>
<string name="dial_desc" msgid="5129451396208040332">"தேர்ந்தெடுத்த ஃபோன் எண்ணை அழைக்கும்"</string>
<string name="browse" msgid="3733970143542020945">"திற"</string>
<string name="browse_desc" msgid="3898254913938219011">"தேர்ந்தெடுத்த URLலைத் திறக்கும்"</string>
- <string name="sms" msgid="5495416906312064886">"மெசேஜ்"</string>
+ <string name="sms" msgid="5495416906312064886">"செய்தி அனுப்பு"</string>
<string name="sms_desc" msgid="8293660783374489324">"தேர்ந்தெடுத்த ஃபோன் எண்ணிற்கு மெசேஜ் அனுப்பும்"</string>
<string name="add_contact" msgid="9005634177208282449">"சேர்"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"தொடர்புகளில் சேர்க்கும்"</string>
diff --git a/textclassifier/src/main/res/values-te/strings.xml b/textclassifier/src/main/res/values-te/strings.xml
index 4adcfbf..25e41ff 100644
--- a/textclassifier/src/main/res/values-te/strings.xml
+++ b/textclassifier/src/main/res/values-te/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ఇమెయిల్"</string>
+ <string name="email" msgid="5568050657313893478">"ఇమెయిల్ పంపు"</string>
<string name="email_desc" msgid="6941280589171810022">"ఎంచుకున్న చిరునామాకు ఇమెయిల్ను పంపుతుంది"</string>
- <string name="dial" msgid="7317293545368448453">"కాల్"</string>
+ <string name="dial" msgid="7317293545368448453">"కాల్ చేయి"</string>
<string name="dial_desc" msgid="5129451396208040332">"ఎంచుకున్న ఫోన్ నంబర్కు కాల్ చేస్తుంది"</string>
<string name="browse" msgid="3733970143542020945">"తెరువు"</string>
<string name="browse_desc" msgid="3898254913938219011">"ఎంచుకున్న URLని తెరుస్తుంది"</string>
- <string name="sms" msgid="5495416906312064886">"సందేశం"</string>
+ <string name="sms" msgid="5495416906312064886">"సందేశం పంపు"</string>
<string name="sms_desc" msgid="8293660783374489324">"ఎంచుకున్న ఫోన్ నంబర్కి సందేశం పంపుతుంది"</string>
<string name="add_contact" msgid="9005634177208282449">"జోడించు"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"పరిచయాలకు జోడిస్తుంది"</string>
diff --git a/textclassifier/src/main/res/values-tl/strings.xml b/textclassifier/src/main/res/values-tl/strings.xml
index 734524e..f75b004 100644
--- a/textclassifier/src/main/res/values-tl/strings.xml
+++ b/textclassifier/src/main/res/values-tl/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Email"</string>
- <string name="email_desc" msgid="6941280589171810022">"Mag-email sa napiling address"</string>
- <string name="dial" msgid="7317293545368448453">"Tawag"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Tawagan ang napiling numero ng telepono"</string>
+ <string name="email" msgid="5568050657313893478">"Mag-email"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Mag-email sa piniling address"</string>
+ <string name="dial" msgid="7317293545368448453">"Tumawag"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Tawagan ang piniling numero ng telepono"</string>
<string name="browse" msgid="3733970143542020945">"Buksan"</string>
- <string name="browse_desc" msgid="3898254913938219011">"Buksan ang napiling URL"</string>
- <string name="sms" msgid="5495416906312064886">"Mensahe"</string>
- <string name="sms_desc" msgid="8293660783374489324">"Padalhan ng mensahe ang napiling numero ng telepono"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"Buksan ang piniling URL"</string>
+ <string name="sms" msgid="5495416906312064886">"Magmensahe"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"Padalhan ng mensahe ang piniling numero ng telepono"</string>
<string name="add_contact" msgid="9005634177208282449">"Magdagdag"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Idagdag sa mga contact"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Higit pang opsyon"</string>
diff --git a/textclassifier/src/main/res/values-tr/strings.xml b/textclassifier/src/main/res/values-tr/strings.xml
index be12836..044d43f 100644
--- a/textclassifier/src/main/res/values-tr/strings.xml
+++ b/textclassifier/src/main/res/values-tr/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="email" msgid="5568050657313893478">"E-posta"</string>
<string name="email_desc" msgid="6941280589171810022">"Seçilen adrese e-posta gönder"</string>
- <string name="dial" msgid="7317293545368448453">"Ara"</string>
+ <string name="dial" msgid="7317293545368448453">"Telefon et"</string>
<string name="dial_desc" msgid="5129451396208040332">"Seçilen telefon numarasını ara"</string>
<string name="browse" msgid="3733970143542020945">"Aç"</string>
<string name="browse_desc" msgid="3898254913938219011">"Seçilen URL\'yi aç"</string>
diff --git a/textclassifier/src/main/res/values-uk/strings.xml b/textclassifier/src/main/res/values-uk/strings.xml
index 241021a..a40df77 100644
--- a/textclassifier/src/main/res/values-uk/strings.xml
+++ b/textclassifier/src/main/res/values-uk/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"Електронна адреса"</string>
+ <string name="email" msgid="5568050657313893478">"Написати лист"</string>
<string name="email_desc" msgid="6941280589171810022">"Надіслати електронний лист на вибрану адресу"</string>
- <string name="dial" msgid="7317293545368448453">"Виклик"</string>
- <string name="dial_desc" msgid="5129451396208040332">"Набрати вибраний номер телефону"</string>
+ <string name="dial" msgid="7317293545368448453">"Телефонувати"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"Телефонувати за вибраним номером"</string>
<string name="browse" msgid="3733970143542020945">"Відкрити"</string>
<string name="browse_desc" msgid="3898254913938219011">"Відкрити вибрану URL-адресу"</string>
- <string name="sms" msgid="5495416906312064886">"Повідомлення"</string>
+ <string name="sms" msgid="5495416906312064886">"Написати SMS"</string>
<string name="sms_desc" msgid="8293660783374489324">"Надіслати повідомлення за вибраним номером телефону"</string>
<string name="add_contact" msgid="9005634177208282449">"Додати"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Додати в контакти"</string>
diff --git a/textclassifier/src/main/res/values-ur/strings.xml b/textclassifier/src/main/res/values-ur/strings.xml
index 55b2e6d..acdb424 100644
--- a/textclassifier/src/main/res/values-ur/strings.xml
+++ b/textclassifier/src/main/res/values-ur/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"ای میل"</string>
+ <string name="email" msgid="5568050657313893478">"ای میل بھیجیں"</string>
<string name="email_desc" msgid="6941280589171810022">"منتخب کردہ پتے پر ای میل کریں"</string>
- <string name="dial" msgid="7317293545368448453">"کال"</string>
+ <string name="dial" msgid="7317293545368448453">"کال کریں"</string>
<string name="dial_desc" msgid="5129451396208040332">"منتخب کردہ فون نمبر پر کال کریں"</string>
<string name="browse" msgid="3733970143542020945">"کھولیں"</string>
<string name="browse_desc" msgid="3898254913938219011">"منتخب کردہ URL کھولیں"</string>
- <string name="sms" msgid="5495416906312064886">"پیغام"</string>
+ <string name="sms" msgid="5495416906312064886">"پیغام بھیجیں"</string>
<string name="sms_desc" msgid="8293660783374489324">"منتخب کردہ فون نمبر پر پیغام بھیجیں"</string>
<string name="add_contact" msgid="9005634177208282449">"شامل کریں"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"رابطوں میں شامل کریں"</string>
diff --git a/textclassifier/src/main/res/values-uz/strings.xml b/textclassifier/src/main/res/values-uz/strings.xml
index 74d563d..9e31f76 100644
--- a/textclassifier/src/main/res/values-uz/strings.xml
+++ b/textclassifier/src/main/res/values-uz/strings.xml
@@ -16,15 +16,15 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"E-pochta"</string>
- <string name="email_desc" msgid="6941280589171810022">"Belgilangan manzilga xat yuborish"</string>
+ <string name="email" msgid="5568050657313893478">"Email"</string>
+ <string name="email_desc" msgid="6941280589171810022">"Belgilangan e-pochta manziliga xat yuborish"</string>
<string name="dial" msgid="7317293545368448453">"Chaqiruv"</string>
<string name="dial_desc" msgid="5129451396208040332">"Belgilangan raqamga telefon qilish"</string>
<string name="browse" msgid="3733970143542020945">"Ochish"</string>
<string name="browse_desc" msgid="3898254913938219011">"Belgilangan URL manzilini ochish"</string>
- <string name="sms" msgid="5495416906312064886">"Xabar"</string>
+ <string name="sms" msgid="5495416906312064886">"SMS yozish"</string>
<string name="sms_desc" msgid="8293660783374489324">"Belgilangan telefon raqamiga SMS yuborish"</string>
- <string name="add_contact" msgid="9005634177208282449">"Qo‘shish"</string>
+ <string name="add_contact" msgid="9005634177208282449">"Saqlab olish"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"Kontaktlarga saqlash"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"Yana"</string>
<string name="floating_toolbar_close_overflow_description" msgid="6243666280435354232">"Qalqib turuvchi asboblar panelini yopish"</string>
diff --git a/textclassifier/src/main/res/values-zh-rCN/strings.xml b/textclassifier/src/main/res/values-zh-rCN/strings.xml
index a990409..afa89ca 100644
--- a/textclassifier/src/main/res/values-zh-rCN/strings.xml
+++ b/textclassifier/src/main/res/values-zh-rCN/strings.xml
@@ -16,13 +16,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"电子邮件"</string>
+ <string name="email" msgid="5568050657313893478">"发送电子邮件"</string>
<string name="email_desc" msgid="6941280589171810022">"将电子邮件发送至所选地址"</string>
<string name="dial" msgid="7317293545368448453">"通话"</string>
<string name="dial_desc" msgid="5129451396208040332">"拨打所选电话号码"</string>
<string name="browse" msgid="3733970143542020945">"打开"</string>
<string name="browse_desc" msgid="3898254913938219011">"打开所选网址"</string>
- <string name="sms" msgid="5495416906312064886">"短信"</string>
+ <string name="sms" msgid="5495416906312064886">"发短信"</string>
<string name="sms_desc" msgid="8293660783374489324">"将短信发送至所选电话号码"</string>
<string name="add_contact" msgid="9005634177208282449">"添加"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"添加到通讯录"</string>
diff --git a/textclassifier/src/main/res/values-zh-rHK/strings.xml b/textclassifier/src/main/res/values-zh-rHK/strings.xml
index 946fd6c..2ada5ec 100644
--- a/textclassifier/src/main/res/values-zh-rHK/strings.xml
+++ b/textclassifier/src/main/res/values-zh-rHK/strings.xml
@@ -22,7 +22,7 @@
<string name="dial_desc" msgid="5129451396208040332">"打指定嘅電話號碼"</string>
<string name="browse" msgid="3733970143542020945">"開啟"</string>
<string name="browse_desc" msgid="3898254913938219011">"打開指定網址"</string>
- <string name="sms" msgid="5495416906312064886">"訊息"</string>
+ <string name="sms" msgid="5495416906312064886">"發短訊"</string>
<string name="sms_desc" msgid="8293660783374489324">"傳短訊去指定電話號碼"</string>
<string name="add_contact" msgid="9005634177208282449">"新增"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"加入聯絡人"</string>
diff --git a/textclassifier/src/main/res/values-zh-rTW/strings.xml b/textclassifier/src/main/res/values-zh-rTW/strings.xml
index 4fc184f..d2bd3ab 100644
--- a/textclassifier/src/main/res/values-zh-rTW/strings.xml
+++ b/textclassifier/src/main/res/values-zh-rTW/strings.xml
@@ -16,14 +16,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="email" msgid="5568050657313893478">"電子郵件"</string>
- <string name="email_desc" msgid="6941280589171810022">"將電子郵件寄到所選地址"</string>
- <string name="dial" msgid="7317293545368448453">"撥號"</string>
- <string name="dial_desc" msgid="5129451396208040332">"撥打所選電話號碼"</string>
+ <string name="email" msgid="5568050657313893478">"發送電子郵件"</string>
+ <string name="email_desc" msgid="6941280589171810022">"將電子郵件寄到選取的地址"</string>
+ <string name="dial" msgid="7317293545368448453">"撥號通話"</string>
+ <string name="dial_desc" msgid="5129451396208040332">"撥打選取的電話號碼"</string>
<string name="browse" msgid="3733970143542020945">"開啟"</string>
- <string name="browse_desc" msgid="3898254913938219011">"開啟所選網址"</string>
- <string name="sms" msgid="5495416906312064886">"訊息"</string>
- <string name="sms_desc" msgid="8293660783374489324">"將訊息傳送到所選電話號碼"</string>
+ <string name="browse_desc" msgid="3898254913938219011">"開啟選取的網址"</string>
+ <string name="sms" msgid="5495416906312064886">"發送訊息"</string>
+ <string name="sms_desc" msgid="8293660783374489324">"將訊息傳送到選取的電話號碼"</string>
<string name="add_contact" msgid="9005634177208282449">"新增"</string>
<string name="add_contact_desc" msgid="2475604767309086575">"新增至聯絡人"</string>
<string name="floating_toolbar_open_overflow_description" msgid="1187148927509077545">"更多選項"</string>
diff --git a/wear/res/values-bs/strings.xml b/wear/res/values-bs/strings.xml
index 82c990c..cf30702 100644
--- a/wear/res/values-bs/strings.xml
+++ b/wear/res/values-bs/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="ws_navigation_drawer_content_description" msgid="7216697245762194759">"Panel za navigaciju"</string>
- <string name="ws_action_drawer_content_description" msgid="1837365417701148489">"Panel za radnju"</string>
+ <string name="ws_navigation_drawer_content_description" msgid="7216697245762194759">"Ladica za navigaciju"</string>
+ <string name="ws_action_drawer_content_description" msgid="1837365417701148489">"Ladica za radnju"</string>
</resources>
diff --git a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
index 7219506..77b2ca9 100644
--- a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
+++ b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
@@ -134,8 +134,8 @@
private int reschedule(@NonNull String workSpecId) {
WorkDatabase workDatabase = mWorkManagerImpl.getWorkDatabase();
+ workDatabase.beginTransaction();
try {
- workDatabase.beginTransaction();
// Mark the workSpec as unscheduled. We are doing this explicitly here because
// there are many cases where WorkerWrapper may not have had a chance to update this
// flag. For e.g. this will happen if the Worker took longer than 10 minutes.
diff --git a/work/workmanager/build.gradle b/work/workmanager/build.gradle
index ee216a96..805f9af 100644
--- a/work/workmanager/build.gradle
+++ b/work/workmanager/build.gradle
@@ -55,9 +55,10 @@
implementation(ARCH_ROOM_RUNTIME)
androidTestImplementation(ARCH_ROOM_TESTING)
}
-
- api(ARCH_LIFECYCLE_EXTENSIONS)
api(GUAVA_LISTENABLE_FUTURE)
+ api(ARCH_LIFECYCLE_LIVEDATA)
+ implementation(ANDROIDX_CORE)
+ implementation(ARCH_LIFECYCLE_SERVICE)
androidTestImplementation(KOTLIN_STDLIB)
androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
androidTestImplementation(ANDROIDX_TEST_CORE)
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java b/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
index eb4e9b7..efa3b4c 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkerWrapper.java
@@ -314,8 +314,8 @@
void onWorkFinished() {
boolean isWorkFinished = false;
if (!tryCheckForInterruptionAndResolve()) {
+ mWorkDatabase.beginTransaction();
try {
- mWorkDatabase.beginTransaction();
WorkInfo.State state = mWorkSpecDao.getState(mWorkSpecId);
if (state == null) {
// state can be null here with a REPLACE on beginUniqueWork().
@@ -409,6 +409,7 @@
}
private void resolve(final boolean needsReschedule) {
+ mWorkDatabase.beginTransaction();
try {
// IMPORTANT: We are using a transaction here as to ensure that we have some guarantees
// about the state of the world before we disable RescheduleReceiver.
@@ -416,7 +417,6 @@
// Check to see if there is more work to be done. If there is no more work, then
// disable RescheduleReceiver. Using a transaction here, as there could be more than
// one thread looking at the list of eligible WorkSpecs.
- mWorkDatabase.beginTransaction();
List<String> unfinishedWork = mWorkDatabase.workSpecDao().getAllUnfinishedWork();
boolean noMoreWork = unfinishedWork == null || unfinishedWork.isEmpty();
if (noMoreWork) {
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
index 2253cf0..7a6dc44 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
@@ -80,25 +80,26 @@
for (WorkSpec workSpec : workSpecs) {
workDatabase.beginTransaction();
try {
- // It is possible that this WorkSpec got cancelled/pruned since this isn't part of
- // the same database transaction as marking it enqueued (for example, if we using
- // any of the synchronous operations). For now, handle this gracefully by exiting
- // the loop. When we plumb ListenableFutures all the way through, we can remove the
- // *sync methods and return ListenableFutures, which will block on an operation on
- // the background task thread so all database operations happen on the same thread.
- // See b/114705286.
WorkSpec currentDbWorkSpec = workDatabase.workSpecDao().getWorkSpec(workSpec.id);
if (currentDbWorkSpec == null) {
Logger.get().warning(
TAG,
"Skipping scheduling " + workSpec.id
+ " because it's no longer in the DB");
+
+ // Marking this transaction as successful, as we don't want this transaction
+ // to affect transactions for unrelated WorkSpecs.
+ workDatabase.setTransactionSuccessful();
continue;
} else if (currentDbWorkSpec.state != WorkInfo.State.ENQUEUED) {
Logger.get().warning(
TAG,
"Skipping scheduling " + workSpec.id
+ " because it is no longer enqueued");
+
+ // Marking this transaction as successful, as we don't want this transaction
+ // to affect transactions for unrelated WorkSpecs.
+ workDatabase.setTransactionSuccessful();
continue;
}
diff --git a/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java b/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
index 6dc3b3f..3804e1ba 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
@@ -82,8 +82,8 @@
} else {
WorkDatabase workDatabase = mWorkManager.getWorkDatabase();
WorkSpecDao workSpecDao = workDatabase.workSpecDao();
+ workDatabase.beginTransaction();
try {
- workDatabase.beginTransaction();
List<WorkSpec> workSpecs = workSpecDao.getEnqueuedWork();
if (workSpecs != null && !workSpecs.isEmpty()) {
Logger.get().debug(TAG, "Found unfinished work, scheduling it.");