Merge "Convert invalid crop to display bounds for captureDisplay"
diff --git a/apct-tests/perftests/core/jni/Android.bp b/apct-tests/perftests/core/jni/Android.bp
index 1e4405de..b92b13b 100644
--- a/apct-tests/perftests/core/jni/Android.bp
+++ b/apct-tests/perftests/core/jni/Android.bp
@@ -9,7 +9,6 @@
cc_library_shared {
name: "libperftestscore_jni",
- sdk_version: "21",
srcs: ["SystemPerfTest.cpp"],
@@ -20,4 +19,10 @@
"-Wunreachable-code",
],
header_libs: ["jni_headers"],
+
+ shared_libs: [
+ "libandroid_runtime",
+ "liblog",
+ "libnativehelper",
+ ],
}
diff --git a/apct-tests/perftests/core/jni/SystemPerfTest.cpp b/apct-tests/perftests/core/jni/SystemPerfTest.cpp
index f102e3e..e7d451d 100644
--- a/apct-tests/perftests/core/jni/SystemPerfTest.cpp
+++ b/apct-tests/perftests/core/jni/SystemPerfTest.cpp
@@ -16,6 +16,9 @@
#include <jni.h>
+#include "nativehelper/JNIHelp.h"
+#include "core_jni_helpers.h"
+
#define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
static void jintarrayArgumentNoop(JNIEnv*, jclass, jintArray, jint) {
@@ -48,11 +51,38 @@
return ret;
}
+static jint jintFastNativeAccess(JNIEnv*, jclass, jint number) {
+ return number;
+}
+
+static jint jintCriticalNativeAccess(CRITICAL_JNI_PARAMS_COMMA jint number) {
+ return number;
+}
+
+static jint jintFastNativeCheckNullPointer(JNIEnv* env, jclass, jint number) {
+ if (number == 0) {
+ jniThrowNullPointerException(env, NULL);
+ return -1;
+ }
+ return number;
+}
+
+static jint jintCriticalNativeCheckNullPointer(CRITICAL_JNI_PARAMS_COMMA jint number) {
+ if (number == 0) {
+ return -1;
+ }
+ return number;
+}
+
static const JNINativeMethod sMethods[] = {
{"jintarrayArgumentNoop", "([II)V", (void *) jintarrayArgumentNoop},
{"jintarrayGetLength", "([I)I", (void *) jintarrayGetLength},
{"jintarrayCriticalAccess", "([II)I", (void *) jintarrayCriticalAccess},
{"jintarrayBasicAccess", "([II)I", (void *) jintarrayBasicAccess},
+ {"jintFastNativeAccess", "(I)I", (void *) jintFastNativeAccess},
+ {"jintCriticalNativeAccess", "(I)I", (void *) jintCriticalNativeAccess},
+ {"jintFastNativeCheckNullPointer", "(I)I", (void *) jintFastNativeCheckNullPointer},
+ {"jintCriticalNativeCheckNullPointer", "(I)I", (void *) jintCriticalNativeCheckNullPointer},
};
static int registerNativeMethods(JNIEnv* env, const char* className,
diff --git a/apct-tests/perftests/core/src/android/perftests/SystemPerfTest.java b/apct-tests/perftests/core/src/android/perftests/SystemPerfTest.java
index 4f0d108..c636be9 100644
--- a/apct-tests/perftests/core/src/android/perftests/SystemPerfTest.java
+++ b/apct-tests/perftests/core/src/android/perftests/SystemPerfTest.java
@@ -22,8 +22,10 @@
import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
+import dalvik.annotation.optimization.CriticalNative;
import dalvik.annotation.optimization.FastNative;
+import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -106,6 +108,93 @@
}
}
+ /** this result should be compared with {@link #testJniCriticalNativeAccess()}. */
+ @Test
+ public void testJniFastNativeAccess() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ jintFastNativeAccess(50);
+ }
+ }
+
+ /**
+ * This result should be compared with {@link #testJniFastNativeAccess()}.
+ *
+ * <p>In theory, the result should be better than {@link #testJniFastNativeAccess()}.
+ */
+ @Test
+ public void testJniCriticalNativeAccess() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ jintCriticalNativeAccess(50);
+ }
+ }
+
+ /** The result should be compared with {@link #testJniCriticalNativeCheckNullPointer()}. */
+ @Test
+ public void testJniFastNativeCheckNullPointer() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ final int echoNumber = jintFastNativeCheckNullPointer(50);
+ }
+ }
+
+ /**
+ * The result should be compared with {@link #testJniFastNativeCheckNullPointer()}.
+ *
+ * <p>CriticalNative can't reference JavaEnv in native layer. It means it should check the null
+ * pointer in java layer. It's a comparison between native layer and java layer.
+ */
+ @Test
+ public void testJniCriticalNativeCheckNullPointer() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ final int echoNumber = jintCriticalNativeCheckNullPointer(50);
+ if (echoNumber == -1) {
+ Assert.fail("It shouldn't be here");
+ }
+ }
+ }
+
+ /**
+ * The result should be compared with {@link #testJniCriticalNativeThrowNullPointerException()}.
+ */
+ @Test
+ public void testJniFastNativeThrowNullPointerException() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ try {
+ jintFastNativeCheckNullPointer(0);
+ } catch (NullPointerException e) {
+ continue;
+ }
+ Assert.fail("It shouldn't be here");
+ }
+ }
+
+ /**
+ * The result should be compared with {@link #testJniFastNativeThrowNullPointerException()}.
+ *
+ * <p>CriticalNative can't reference JavaEnv in native layer. It means it should check the null
+ * pointer in java layer. It's a comparison between native layer and java layer.
+ */
+ @Test
+ public void testJniCriticalNativeThrowNullPointerException() {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ while (state.keepRunning()) {
+ try {
+ final int echoNumber = jintCriticalNativeCheckNullPointer(0);
+ if (echoNumber == -1) {
+ throw new NullPointerException();
+ }
+ } catch (NullPointerException e) {
+ continue;
+ }
+ Assert.fail("It shouldn't be here");
+ }
+ }
+
+ // ----------- @FastNative ------------------
@FastNative
private static native void jintarrayArgumentNoop(int[] array, int length);
@FastNative
@@ -114,4 +203,17 @@
private static native int jintarrayCriticalAccess(int[] array, int index);
@FastNative
private static native int jintarrayBasicAccess(int[] array, int index);
+
+ @FastNative
+ private static native int jintFastNativeAccess(int echoNumber);
+
+ @FastNative
+ private static native int jintFastNativeCheckNullPointer(int echoNumber);
+
+ // ----------- @CriticalNative ------------------
+ @CriticalNative
+ private static native int jintCriticalNativeAccess(int echoNumber);
+
+ @CriticalNative
+ private static native int jintCriticalNativeCheckNullPointer(int echoNumber);
}
diff --git a/api/Android.bp b/api/Android.bp
index e9930e3..29eaec6 100644
--- a/api/Android.bp
+++ b/api/Android.bp
@@ -38,23 +38,9 @@
pluginFor: ["soong_build"],
}
-python_defaults {
- name: "python3_version_defaults",
- version: {
- py2: {
- enabled: false,
- },
- py3: {
- enabled: true,
- embedded_launcher: false,
- },
- },
-}
-
python_binary_host {
name: "api_versions_trimmer",
srcs: ["api_versions_trimmer.py"],
- defaults: ["python3_version_defaults"],
}
python_test_host {
@@ -64,7 +50,6 @@
"api_versions_trimmer_unittests.py",
"api_versions_trimmer.py",
],
- defaults: ["python3_version_defaults"],
test_options: {
unit_test: true,
},
@@ -73,7 +58,6 @@
python_binary_host {
name: "merge_annotation_zips",
srcs: ["merge_annotation_zips.py"],
- defaults: ["python3_version_defaults"],
}
python_test_host {
@@ -83,7 +67,6 @@
"merge_annotation_zips.py",
"merge_annotation_zips_test.py",
],
- defaults: ["python3_version_defaults"],
test_options: {
unit_test: true,
},
diff --git a/core/api/current.txt b/core/api/current.txt
index 8c84662..19713cf 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -41577,7 +41577,7 @@
field public static final String KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL = "show_signal_strength_in_sim_status_bool";
field public static final String KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL = "show_video_call_charges_alert_dialog_bool";
field public static final String KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL = "show_wfc_location_privacy_policy_bool";
- field public static final String KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool";
+ field @Deprecated public static final String KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool";
field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
field public static final String KEY_SMDP_SERVER_ADDRESS_STRING = "smdp_server_address_string";
field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool";
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 9282b02..7fd4283 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -10381,6 +10381,7 @@
field public static final String NAMESPACE_LOCATION = "location";
field public static final String NAMESPACE_MEDIA = "media";
field public static final String NAMESPACE_MEDIA_NATIVE = "media_native";
+ field public static final String NAMESPACE_NEARBY = "nearby";
field public static final String NAMESPACE_NETD_NATIVE = "netd_native";
field public static final String NAMESPACE_NNAPI_NATIVE = "nnapi_native";
field public static final String NAMESPACE_ON_DEVICE_PERSONALIZATION = "on_device_personalization";
diff --git a/core/java/android/content/res/ResourceTimer.java b/core/java/android/content/res/ResourceTimer.java
new file mode 100644
index 0000000..13f0b72
--- /dev/null
+++ b/core/java/android/content/res/ResourceTimer.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2022 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 android.content.res;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.ParcelFileDescriptor;
+import android.os.Process;
+import android.os.SystemClock;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.FastPrintWriter;
+
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+/**
+ * Provides access to the resource timers without intruding on other classes.
+ * @hide
+ */
+public final class ResourceTimer {
+ private static final String TAG = "ResourceTimer";
+
+ // Enable metrics in this process. The flag may be set false in some processes. The flag is
+ // never set true at runtime, so setting it false here disables the feature entirely.
+ private static boolean sEnabled = true;
+
+ // Set true for incremental metrics (the counters are reset after every fetch). Set false for
+ // cumulative metrics (the counters are never reset and accumulate values for the lifetime of
+ // the process).
+ private static boolean sIncrementalMetrics = true;
+
+ // Set true to enable some debug behavior.
+ private static boolean ENABLE_DEBUG = false;
+
+ // The global lock.
+ private static final Object sLock = new Object();
+
+ // The singleton cache manager
+ private static ResourceTimer sManager;
+
+ // The handler for the timeouts.
+ private static Handler mHandler;
+
+ // The time at which the process started.
+ private final static long sProcessStart = SystemClock.uptimeMillis();
+
+ // Metrics are published at offsets from the process start. Processes publish at five minutes
+ // and one hour. Thereafter, metrics are published every 12 hours. The values in this array
+ // are in units of minutes.
+ private static final long[] sPublicationPoints = new long[]{ 5, 60, 60 * 12 };
+
+ // The index of the latest publication point.
+ private static int sCurrentPoint;
+
+ /**
+ * The runtime timer configuration.
+ */
+ private static class Config {
+ // The number of timers in the runtime
+ int maxTimer;
+ // The number of histogram buckets per timer.
+ int maxBuckets;
+ // The number of "largest" values per timer.
+ int maxLargest;
+ // A string label for each timer. This array has maxTimer elements.
+ String[] timers;
+ }
+
+ /**
+ * The timer information that is pulled from the native runtime. All times have units of ns.
+ */
+ private static class Timer {
+ int count;
+ long total;
+ int mintime;
+ int maxtime;
+ int[] largest;
+ int[] percentile;
+ @Override
+ public String toString() {
+ return TextUtils.formatSimple("%d:%d:%d:%d", count, total, mintime, maxtime);
+ }
+ }
+
+ /**
+ * A singleton Config. This is initialized when the timers are started.
+ */
+ @GuardedBy("sLock")
+ private static Config sConfig;
+
+ /**
+ * A singleton Summary object that is refilled from the native side. The length of the array
+ * is the number of timers that can be fetched. nativeGetTimers() will fill the array to the
+ * smaller of the length of the array or the actual number of timers in the runtime. The
+ * actual number of timers in the run time is returned by the function.
+ */
+ @GuardedBy("sLock")
+ private static Timer[] sTimers;
+
+ /**
+ * The time at which the local timer array was last updated. This has the same units as
+ * sProcessStart; the difference is the process run time.
+ */
+ @GuardedBy("sLock")
+ private static long sLastUpdated = 0;
+
+ // The constructor is private. Use the factory to get a hold of the manager.
+ private ResourceTimer() {
+ throw new RuntimeException("ResourceTimer constructor");
+ }
+
+ /**
+ * Start the manager. This runs a periodic job that collects and publishes timer values.
+ * This is not part of the constructor only because the looper failicities might not be
+ * available at the beginning of time.
+ */
+ public static void start() {
+ synchronized (sLock) {
+ if (!sEnabled) {
+ return;
+ }
+ if (mHandler != null) {
+ // Nothing to be done. The job has already been started.
+ return;
+ }
+ if (Looper.getMainLooper() == null) {
+ throw new RuntimeException("ResourceTimer started too early");
+ }
+ mHandler = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ ResourceTimer.handleMessage(msg);
+ }
+ };
+
+ // Initialize the container that holds information from the native runtime. The
+ // container is built according to the dimensions returned by the native layer.
+ sConfig = new Config();
+ nativeEnableTimers(sConfig);
+ sTimers = new Timer[sConfig.maxTimer];
+ for (int i = 0; i < sTimers.length; i++) {
+ sTimers[i] = new Timer();
+ sTimers[i].percentile = new int[sConfig.maxBuckets];
+ sTimers[i].largest = new int[sConfig.maxLargest];
+ }
+
+ sCurrentPoint = 0;
+ startTimer();
+ }
+ }
+
+ /**
+ * Handle a refresh message. Publish the metrics and start a timer for the next publication.
+ * The message parameter is unused.
+ */
+ private static void handleMessage(Message msg) {
+ synchronized (sLock) {
+ publish();
+ startTimer();
+ }
+ }
+
+ /**
+ * Start a timer to the next publication point. Publication points are referenced from
+ * process start.
+ */
+ @GuardedBy("sLock")
+ private static void startTimer() {
+ // The delay is in minutes.
+ long delay;
+ if (sCurrentPoint < sPublicationPoints.length) {
+ delay = sPublicationPoints[sCurrentPoint];
+ } else {
+ // Repeat with the final publication point.
+ delay = sCurrentPoint * sPublicationPoints[sPublicationPoints.length - 1];
+ }
+ // Convert minutes to milliseconds.
+ delay *= 60 * 1000;
+ // If debug is enabled, convert hours down to minutes.
+ if (ENABLE_DEBUG) {
+ delay /= 60;
+ }
+ mHandler.sendEmptyMessageAtTime(0, sProcessStart + delay);
+ }
+
+ /**
+ * Update the local copy of the timers. The current time is saved as well.
+ */
+ @GuardedBy("sLock")
+ private static void update(boolean reset) {
+ nativeGetTimers(sTimers, reset);
+ sLastUpdated = SystemClock.uptimeMillis();
+ }
+
+ /**
+ * Retrieve the accumulated timer information, reset the native counters, and advance the
+ * publication point.
+ */
+ @GuardedBy("sLock")
+ private static void publish() {
+ update(true);
+ // Log the number of records read. This happens a few times a day.
+ for (int i = 0; i < sTimers.length; i++) {
+ if (sTimers[i].count > 0) {
+ Log.i(TAG, TextUtils.formatSimple("%s count=%d pvalues=%s",
+ sConfig.timers[i], sTimers[i].count,
+ packedString(sTimers[i].percentile)));
+ }
+ }
+ sCurrentPoint++;
+ }
+
+ /**
+ * Given an int[], return a string that is formatted as "a,b,c" with no spaces.
+ */
+ private static String packedString(int[] a) {
+ return Arrays.toString(a).replaceAll("[\\]\\[ ]", "");
+ }
+
+ /**
+ * Update the metrics information and dump it.
+ * @hide
+ */
+ public static void dumpTimers(@NonNull ParcelFileDescriptor pfd, @Nullable String[] args) {
+ FileOutputStream fout = new FileOutputStream(pfd.getFileDescriptor());
+ PrintWriter pw = new FastPrintWriter(fout);
+ synchronized (sLock) {
+ if (!sEnabled || (sConfig == null)) {
+ pw.println(" Timers are not enabled in this process");
+ pw.flush();
+ return;
+ }
+ }
+
+ // Look for the --refresh switch. If the switch is present, then sTimers is updated.
+ // Otherwise, the current value of sTimers is displayed.
+ boolean refresh = Arrays.asList(args).contains("-refresh");
+
+ synchronized (sLock) {
+ update(refresh);
+ long runtime = sLastUpdated - sProcessStart;
+ pw.format(" config runtime=%d proc=%s\n", runtime, Process.myProcessName());
+ for (int i = 0; i < sTimers.length; i++) {
+ Timer t = sTimers[i];
+ if (t.count != 0) {
+ String name = sConfig.timers[i];
+ pw.format(" stats timer=%s cnt=%d avg=%d min=%d max=%d pval=%s "
+ + "largest=%s\n",
+ name, t.count, t.total / t.count, t.mintime, t.maxtime,
+ packedString(t.percentile),
+ packedString(t.largest));
+ }
+ }
+ }
+ pw.flush();
+ }
+
+ // Enable (or disabled) the runtime timers. Note that timers are disabled by default. This
+ // retrieves the runtime timer configuration that are taking effect
+ private static native int nativeEnableTimers(@NonNull Config config);
+
+ // Retrieve the timers from the native layer. If reset is true, the timers are reset after
+ // being fetched. The method returns the number of timers that are defined in the runtime
+ // layer. The stats array is filled out to the smaller of its actual size and the number of
+ // runtime timers; it never overflows.
+ private static native int nativeGetTimers(@NonNull Timer[] stats, boolean reset);
+}
diff --git a/core/java/android/net/Ikev2VpnProfile.java b/core/java/android/net/Ikev2VpnProfile.java
index 3979c6c..10ce3bf 100644
--- a/core/java/android/net/Ikev2VpnProfile.java
+++ b/core/java/android/net/Ikev2VpnProfile.java
@@ -483,9 +483,6 @@
final VpnProfile profile = new VpnProfile("" /* Key; value unused by IKEv2VpnProfile(s) */,
mIsRestrictedToTestNetworks, mExcludeLocalRoutes, mRequiresInternetValidation,
mIkeTunConnParams);
-
- profile.server = getServerAddr();
- profile.ipsecIdentifier = getUserIdentity();
profile.proxy = mProxyInfo;
profile.isBypassable = mIsBypassable;
profile.isMetered = mIsMetered;
@@ -499,6 +496,8 @@
}
profile.type = mType;
+ profile.server = getServerAddr();
+ profile.ipsecIdentifier = getUserIdentity();
profile.setAllowedAlgorithms(mAllowedAlgorithms);
switch (mType) {
case TYPE_IKEV2_IPSEC_USER_PASS:
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 113a640..a6b62b0 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -441,7 +441,7 @@
* different penalties for different detected actions.
*/
public static final class ThreadPolicy {
- /** The default, lax policy which doesn't catch anything. */
+ /** The lax policy which doesn't catch anything. */
public static final ThreadPolicy LAX = new ThreadPolicy(0, null, null);
@UnsupportedAppUsage
@@ -728,7 +728,7 @@
* <p>The policy is enabled by {@link #setVmPolicy}.
*/
public static final class VmPolicy {
- /** The default, lax policy which doesn't catch anything. */
+ /** The lax policy which doesn't catch anything. */
public static final VmPolicy LAX = new VmPolicy(0, EMPTY_CLASS_LIMIT_MAP, null, null);
@UnsupportedAppUsage
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index 760ed26..345486e 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -203,6 +203,15 @@
@SystemApi
public static final String NAMESPACE_TETHERING = "tethering";
+
+ /**
+ * Namespace for Nearby module.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String NAMESPACE_NEARBY = "nearby";
+
/**
* Namespace for content capture feature used by on-device machine intelligence
* to provide suggestions in a privacy-safe manner.
diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java
index f900558..8efc5eb 100644
--- a/core/java/android/security/keymaster/KeymasterDefs.java
+++ b/core/java/android/security/keymaster/KeymasterDefs.java
@@ -68,6 +68,8 @@
public static final int KM_TAG_RSA_PUBLIC_EXPONENT = Tag.RSA_PUBLIC_EXPONENT; // KM_ULONG | 200;
public static final int KM_TAG_INCLUDE_UNIQUE_ID = Tag.INCLUDE_UNIQUE_ID; // KM_BOOL | 202;
+ public static final int KM_TAG_RSA_OAEP_MGF_DIGEST = Tag.RSA_OAEP_MGF_DIGEST;
+ // KM_ENUM_REP | 203;
public static final int KM_TAG_ACTIVE_DATETIME = Tag.ACTIVE_DATETIME; // KM_DATE | 400;
public static final int KM_TAG_ORIGINATION_EXPIRE_DATETIME =
diff --git a/core/java/android/view/ImeFocusController.java b/core/java/android/view/ImeFocusController.java
index a5ac948..d4875d4 100644
--- a/core/java/android/view/ImeFocusController.java
+++ b/core/java/android/view/ImeFocusController.java
@@ -43,8 +43,21 @@
private final ViewRootImpl mViewRootImpl;
private boolean mHasImeFocus = false;
+
+ /**
+ * This is the view that should currently be served by an input method,
+ * regardless of the state of setting that up.
+ * @see InputMethodManagerDelegate#getLockObject()
+ */
private View mServedView;
+
+ /**
+ * This is the next view that will be served by the input method, when
+ * we get around to updating things.
+ * @see InputMethodManagerDelegate#getLockObject()
+ */
private View mNextServedView;
+
private InputMethodManagerDelegate mDelegate;
@UiThread
@@ -123,45 +136,52 @@
boolean forceFocus = false;
final InputMethodManagerDelegate immDelegate = getImmDelegate();
- if (immDelegate.isRestartOnNextWindowFocus(true /* reset */)) {
- if (DEBUG) Log.v(TAG, "Restarting due to isRestartOnNextWindowFocus as true");
- forceFocus = true;
+ synchronized (immDelegate.getLockObject()) {
+ // Update mNextServedView when focusedView changed.
+ onViewFocusChanged(viewForWindowFocus, true);
+
+ // Starting new input when the next focused view is same as served view but the
+ // currently active connection (if any) is not associated with it.
+ final boolean nextFocusIsServedView = mServedView == viewForWindowFocus;
+
+ if (nextFocusIsServedView && !immDelegate.hasActiveConnection(viewForWindowFocus)) {
+ forceFocus = true;
+ }
}
- // Update mNextServedView when focusedView changed.
- onViewFocusChanged(viewForWindowFocus, true);
-
- // Starting new input when the next focused view is same as served view but the currently
- // active connection (if any) is not associated with it.
- final boolean nextFocusIsServedView = mServedView == viewForWindowFocus;
- if (nextFocusIsServedView && !immDelegate.hasActiveConnection(viewForWindowFocus)) {
- forceFocus = true;
- }
-
- immDelegate.startInputAsyncOnWindowFocusGain(viewForWindowFocus,
+ immDelegate.startInputOnWindowFocusGain(viewForWindowFocus,
windowAttribute.softInputMode, windowAttribute.flags, forceFocus);
}
+ /**
+ * @see InputMethodManager#checkFocus()
+ */
public boolean checkFocus(boolean forceNewFocus, boolean startInput) {
final InputMethodManagerDelegate immDelegate = getImmDelegate();
- if (!immDelegate.isCurrentRootView(mViewRootImpl)
- || (mServedView == mNextServedView && !forceNewFocus)) {
- return false;
+ synchronized (immDelegate.getLockObject()) {
+ if (!immDelegate.isCurrentRootView(mViewRootImpl)) {
+ return false;
+ }
+ if (mServedView == mNextServedView && !forceNewFocus) {
+ return false;
+ }
+ if (DEBUG) {
+ Log.v(TAG, "checkFocus: view=" + mServedView
+ + " next=" + mNextServedView
+ + " force=" + forceNewFocus
+ + " package="
+ + (mServedView != null ? mServedView.getContext().getPackageName()
+ : "<none>"));
+ }
+ // Close the connection when no next served view coming.
+ if (mNextServedView == null) {
+ immDelegate.finishInput();
+ immDelegate.closeCurrentIme();
+ return false;
+ }
+ mServedView = mNextServedView;
+ immDelegate.finishComposingText();
}
- if (DEBUG) Log.v(TAG, "checkFocus: view=" + mServedView
- + " next=" + mNextServedView
- + " force=" + forceNewFocus
- + " package="
- + (mServedView != null ? mServedView.getContext().getPackageName() : "<none>"));
-
- // Close the connection when no next served view coming.
- if (mNextServedView == null) {
- immDelegate.finishInput();
- immDelegate.closeCurrentIme();
- return false;
- }
- mServedView = mNextServedView;
- immDelegate.finishComposingText();
if (startInput) {
immDelegate.startInput(StartInputReason.CHECK_FOCUS, null /* focusedView */,
@@ -175,51 +195,61 @@
if (view == null || view.isTemporarilyDetached()) {
return;
}
- if (!getImmDelegate().isCurrentRootView(view.getViewRootImpl())) {
- return;
- }
- if (!view.hasImeFocus() || !view.hasWindowFocus()) {
- return;
- }
- if (DEBUG) Log.d(TAG, "onViewFocusChanged, view=" + InputMethodDebug.dumpViewInfo(view)
- + ", mServedView=" + InputMethodDebug.dumpViewInfo(mServedView));
+ final InputMethodManagerDelegate immDelegate = getImmDelegate();
+ synchronized (immDelegate.getLockObject()) {
+ if (!immDelegate.isCurrentRootView(view.getViewRootImpl())) {
+ return;
+ }
+ if (!view.hasImeFocus() || !view.hasWindowFocus()) {
+ return;
+ }
+ if (DEBUG) {
+ Log.d(TAG, "onViewFocusChanged, view=" + InputMethodDebug.dumpViewInfo(view)
+ + ", mServedView=" + InputMethodDebug.dumpViewInfo(mServedView));
+ }
- // We don't need to track the next served view when the view lost focus here because:
- // 1) The current view focus may be cleared temporary when in touch mode, closing input
- // at this moment isn't the right way.
- // 2) We only care about the served view change when it focused, since changing input
- // connection when the focus target changed is reasonable.
- // 3) Setting the next served view as null when no more served view should be handled in
- // other special events (e.g. view detached from window or the window dismissed).
- if (hasFocus) {
- mNextServedView = view;
+ // We don't need to track the next served view when the view lost focus here because:
+ // 1) The current view focus may be cleared temporary when in touch mode, closing input
+ // at this moment isn't the right way.
+ // 2) We only care about the served view change when it focused, since changing input
+ // connection when the focus target changed is reasonable.
+ // 3) Setting the next served view as null when no more served view should be handled in
+ // other special events (e.g. view detached from window or the window dismissed).
+ if (hasFocus) {
+ mNextServedView = view;
+ }
}
mViewRootImpl.dispatchCheckFocus();
}
@UiThread
void onViewDetachedFromWindow(View view) {
- if (!getImmDelegate().isCurrentRootView(view.getViewRootImpl())) {
- return;
- }
- if (mNextServedView == view) {
- mNextServedView = null;
- }
- if (mServedView == view) {
- mViewRootImpl.dispatchCheckFocus();
+ final InputMethodManagerDelegate immDelegate = getImmDelegate();
+ synchronized (immDelegate.getLockObject()) {
+ if (!immDelegate.isCurrentRootView(view.getViewRootImpl())) {
+ return;
+ }
+ if (mNextServedView == view) {
+ mNextServedView = null;
+ }
+ if (mServedView == view) {
+ mViewRootImpl.dispatchCheckFocus();
+ }
}
}
@UiThread
void onWindowDismissed() {
final InputMethodManagerDelegate immDelegate = getImmDelegate();
- if (!immDelegate.isCurrentRootView(mViewRootImpl)) {
- return;
+ synchronized (immDelegate.getLockObject()) {
+ if (!immDelegate.isCurrentRootView(mViewRootImpl)) {
+ return;
+ }
+ if (mServedView != null) {
+ immDelegate.finishInput();
+ }
+ immDelegate.setCurrentRootView(null);
}
- if (mServedView != null) {
- immDelegate.finishInput();
- }
- immDelegate.setCurrentRootView(null);
mHasImeFocus = false;
}
@@ -270,10 +300,22 @@
* @hide
*/
public interface InputMethodManagerDelegate {
+ /**
+ * Starts the input connection.
+ * Note that this method must not hold the {@link InputMethodManager} lock with
+ * {@link InputMethodManagerDelegate#getLockObject()} while {@link InputMethodManager}
+ * calling into app-code in different threads.
+ */
boolean startInput(@StartInputReason int startInputReason, View focusedView,
@StartInputFlags int startInputFlags,
@WindowManager.LayoutParams.SoftInputModeFlags int softInputMode, int windowFlags);
- void startInputAsyncOnWindowFocusGain(View rootView,
+ /**
+ * Starts the input connection when gaining the window focus.
+ * Note that this method must not hold the {@link InputMethodManager} lock with
+ * {@link InputMethodManagerDelegate#getLockObject()} while {@link InputMethodManager}
+ * calling into app-code in different threads.
+ */
+ void startInputOnWindowFocusGain(View rootView,
@WindowManager.LayoutParams.SoftInputModeFlags int softInputMode, int windowFlags,
boolean forceNewFocus);
void finishInput();
@@ -282,24 +324,53 @@
void finishComposingText();
void setCurrentRootView(ViewRootImpl rootView);
boolean isCurrentRootView(ViewRootImpl rootView);
- boolean isRestartOnNextWindowFocus(boolean reset);
boolean hasActiveConnection(View view);
+
+ /**
+ * Returns the {@code InputMethodManager#mH} lock object.
+ * Used for {@link ImeFocusController} to guard the served view being accessed by
+ * {@link InputMethodManager} in different threads.
+ */
+ Object getLockObject();
}
- public View getServedView() {
+ /**
+ * Returns The current IME served view for {@link InputMethodManager}.
+ * Used to start input connection or check the caller's validity when calling
+ * {@link InputMethodManager} APIs.
+ * Note that this method requires to be called inside {@code InputMethodManager#mH} lock for
+ * data consistency.
+ */
+ public View getServedViewLocked() {
return mServedView;
}
- public View getNextServedView() {
+ /**
+ * Returns The next incoming IME served view for {@link InputMethodManager}.
+ * Note that this method requires to be called inside {@code InputMethodManager#mH} lock for
+ * data consistency.
+ */
+ public View getNextServedViewLocked() {
return mNextServedView;
}
- public void setServedView(View view) {
- mServedView = view;
- }
-
- public void setNextServedView(View view) {
- mNextServedView = view;
+ /**
+ * Clears the served & the next served view when the controller triggers
+ * {@link InputMethodManagerDelegate#finishInput()} or
+ * {@link InputMethodManagerDelegate#finishInputAndReportToIme()}.
+ * Note that this method requires to be called inside {@code InputMethodManager#mH} lock for
+ * data consistency.
+ *
+ * @return The {@code mServedView} that has cleared, or {@code null} means nothing to clear.
+ */
+ public View clearServedViewsLocked() {
+ View clearedView = null;
+ mNextServedView = null;
+ if (mServedView != null) {
+ clearedView = mServedView;
+ mServedView = null;
+ }
+ return clearedView;
}
/**
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index 8d75072..a72f0d5 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -879,11 +879,8 @@
Context context;
if (mTargetView != null) {
context = mTargetView.getContext();
- } else if (mIMM.mCurRootView != null) {
- final View servedView = mIMM.mCurRootView.getImeFocusController().getServedView();
- context = servedView != null ? servedView.getContext() : null;
} else {
- context = null;
+ context = mIMM.getFallbackContextFromServedView();
}
if (context != null) {
TypedArray ta = context.getTheme()
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index c966e93..7794b7c 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -677,6 +677,21 @@
return fallbackImm;
}
+ /**
+ * An internal API that returns the {@link Context} of the current served view connected to
+ * an input method.
+ * @hide
+ */
+ Context getFallbackContextFromServedView() {
+ synchronized (mH) {
+ if (mCurRootView == null) {
+ return null;
+ }
+ final View servedView = mCurRootView.getImeFocusController().getServedViewLocked();
+ return servedView != null ? servedView.getContext() : null;
+ }
+ }
+
private static boolean canStartInput(View servedView) {
// We can start input ether the servedView has window focus
// or the activity is showing autofill ui.
@@ -756,10 +771,10 @@
}
/**
- * For {@link ImeFocusController} to start input asynchronously when focus gain.
+ * For {@link ImeFocusController} to start input when gaining the window focus.
*/
@Override
- public void startInputAsyncOnWindowFocusGain(View focusedView,
+ public void startInputOnWindowFocusGain(View focusedView,
@SoftInputModeFlags int softInputMode, int windowFlags, boolean forceNewFocus) {
int startInputFlags = getStartInputFlags(focusedView, 0);
startInputFlags |= StartInputFlags.WINDOW_GAINED_FOCUS;
@@ -772,6 +787,15 @@
if (controller == null) {
return;
}
+
+ synchronized (mH) {
+ if (mRestartOnNextWindowFocus) {
+ if (DEBUG) Log.v(TAG, "Restarting due to mRestartOnNextWindowFocus as true");
+ mRestartOnNextWindowFocus = false;
+ forceNewFocus = true;
+ }
+ }
+
if (controller.checkFocus(forceNewFocus, false)) {
// We need to restart input on the current focus view. This
// should be done in conjunction with telling the system service
@@ -786,7 +810,7 @@
synchronized (mH) {
// For some reason we didn't do a startInput + windowFocusGain, so
// we'll just do a window focus gain and call it a day.
- View servedView = controller.getServedView();
+ View servedView = controller.getServedViewLocked();
boolean nextFocusHasConnection = servedView != null && servedView == focusedView
&& hasActiveInputConnectionInternal(focusedView);
if (DEBUG) {
@@ -845,20 +869,6 @@
}
/**
- * For {@link ImeFocusController#checkFocus} if needed to force check new focus.
- */
- @Override
- public boolean isRestartOnNextWindowFocus(boolean reset) {
- synchronized (mH) {
- final boolean result = mRestartOnNextWindowFocus;
- if (reset) {
- mRestartOnNextWindowFocus = false;
- }
- return result;
- }
- }
-
- /**
* Checks whether the active input connection (if any) is for the given view.
*
* @see #hasActiveInputConnectionInternal(View)}
@@ -867,6 +877,16 @@
public boolean hasActiveConnection(View view) {
return hasActiveInputConnectionInternal(view);
}
+
+ /**
+ * Returns the {@link InputMethodManager#mH} lock object.
+ * Used for {@link ImeFocusController} to guard the served view being accessed by
+ * {@link InputMethodManager} in different threads.
+ */
+ @Override
+ public Object getLockObject() {
+ return mH;
+ }
}
/** @hide */
@@ -907,27 +927,14 @@
@GuardedBy("mH")
private View getServedViewLocked() {
- return mCurRootView != null ? mCurRootView.getImeFocusController().getServedView() : null;
- }
-
- @GuardedBy("mH")
- private View getNextServedViewLocked() {
- return mCurRootView != null ? mCurRootView.getImeFocusController().getNextServedView()
+ return mCurRootView != null ? mCurRootView.getImeFocusController().getServedViewLocked()
: null;
}
@GuardedBy("mH")
- private void setServedViewLocked(View view) {
- if (mCurRootView != null) {
- mCurRootView.getImeFocusController().setServedView(view);
- }
- }
-
- @GuardedBy("mH")
- private void setNextServedViewLocked(View view) {
- if (mCurRootView != null) {
- mCurRootView.getImeFocusController().setNextServedView(view);
- }
+ private View getNextServedViewLocked() {
+ return mCurRootView != null ? mCurRootView.getImeFocusController().getNextServedViewLocked()
+ : null;
}
private ImeFocusController getFocusController() {
@@ -1776,13 +1783,13 @@
@GuardedBy("mH")
void finishInputLocked() {
mVirtualDisplayToScreenMatrix = null;
- setNextServedViewLocked(null);
- if (getServedViewLocked() != null) {
+ final ImeFocusController controller = getFocusController();
+ final View clearedView = controller != null ? controller.clearServedViewsLocked() : null;
+ if (clearedView != null) {
if (DEBUG) {
Log.v(TAG, "FINISH INPUT: mServedView="
- + InputMethodDebug.dumpViewInfo(getServedViewLocked()));
+ + InputMethodDebug.dumpViewInfo(clearedView));
}
- setServedViewLocked(null);
mCompletions = null;
mServedConnecting = false;
clearConnectionLocked();
diff --git a/core/java/com/android/internal/os/TimeoutRecord.java b/core/java/com/android/internal/os/TimeoutRecord.java
index a8885f9..be3f172 100644
--- a/core/java/com/android/internal/os/TimeoutRecord.java
+++ b/core/java/com/android/internal/os/TimeoutRecord.java
@@ -20,6 +20,8 @@
import android.annotation.NonNull;
import android.os.SystemClock;
+import com.android.internal.os.anr.AnrLatencyTracker;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -40,7 +42,7 @@
TimeoutKind.APP_REGISTERED})
@Retention(RetentionPolicy.SOURCE)
- private @interface TimeoutKind {
+ public @interface TimeoutKind {
int INPUT_DISPATCH_NO_FOCUSED_WINDOW = 1;
int INPUT_DISPATCH_WINDOW_UNRESPONSIVE = 2;
int BROADCAST_RECEIVER = 3;
@@ -66,12 +68,16 @@
*/
public final boolean mEndTakenBeforeLocks;
+ /** Latency tracker associated with this instance. */
+ public final AnrLatencyTracker mLatencyTracker;
+
private TimeoutRecord(@TimeoutKind int kind, @NonNull String reason, long endUptimeMillis,
boolean endTakenBeforeLocks) {
this.mKind = kind;
this.mReason = reason;
this.mEndUptimeMillis = endUptimeMillis;
this.mEndTakenBeforeLocks = endTakenBeforeLocks;
+ this.mLatencyTracker = new AnrLatencyTracker(kind, endUptimeMillis);
}
private static TimeoutRecord endingNow(@TimeoutKind int kind, String reason) {
diff --git a/core/java/com/android/internal/os/anr/AnrLatencyTracker.java b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
new file mode 100644
index 0000000..a182920
--- /dev/null
+++ b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
@@ -0,0 +1,456 @@
+/*
+ * Copyright (C) 2022 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 com.android.internal.os.anr;
+
+import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
+
+import static com.android.internal.os.TimeoutRecord.TimeoutKind;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__BROADCAST_OF_INTENT;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__CONTENT_PROVIDER_NOT_RESPONDING;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__EXECUTING_SERVICE;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__START_FOREGROUND_SERVICE;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__UNKNOWN_ANR_TYPE;
+
+import android.os.SystemClock;
+import android.os.Trace;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.FrameworkStatsLog;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Store different latencies from the ANR flow and trace functions, it records latency breakdown
+ * for key methods, lock acquisition and other potentially expensive operations in the ANR
+ * reporting flow and exports the data as comma separated text on calling
+ * dumpAsCommaSeparatedArrayWithHeader and as an atom to statsd on being closed.
+ */
+public class AnrLatencyTracker implements AutoCloseable {
+
+ private static final AtomicInteger sNextAnrRecordPlacedOnQueueCookieGenerator =
+ new AtomicInteger();
+
+ private long mAnrTriggerUptime;
+ private long mEndUptime;
+
+ private long mAppNotRespondingStartUptime;
+ private long mAnrRecordPlacedOnQueueUptime;
+ private long mAnrProcessingStartedUptime;
+ private long mDumpStackTracesStartUptime;
+
+ private long mUpdateCpuStatsNowLastCallUptime;
+ private long mUpdateCpuStatsNowTotalLatency = 0;
+ private long mCurrentPsiStateLastCallUptime;
+ private long mCurrentPsiStateTotalLatency = 0;
+ private long mProcessCpuTrackerMethodsLastCallUptime;
+ private long mProcessCpuTrackerMethodsTotalLatency = 0;
+ private long mCriticalEventLoglastCallUptime;
+ private long mCriticalEventLogTotalLatency = 0;
+
+ private long mGlobalLockLastTryAcquireStart;
+ private long mGlobalLockTotalContention = 0;
+ private long mPidLockLastTryAcquireStart;
+ private long mPidLockTotalContention = 0;
+ private long mAMSLockLastTryAcquireStart;
+ private long mAMSLockTotalContention = 0;
+ private long mProcLockLastTryAcquireStart;
+ private long mProcLockTotalContention = 0;
+ private long mAnrRecordLastTryAcquireStart;
+ private long mAnrRecordLockTotalContention = 0;
+
+ private int mAnrQueueSize;
+ private int mAnrType;
+ private int mDumpedProcessesCount = 0;
+
+ private long mFirstPidsDumpingStart;
+ private long mFirstPidsDumpingDuration = 0;
+ private long mNativePidsDumpingStart;
+ private long mNativePidsDumpingDuration = 0;
+ private long mExtraPidsDumpingStart;
+ private long mExtraPidsDumpingDuration = 0;
+
+ private boolean mIsPushed = false;
+ private boolean mIsSkipped = false;
+
+
+ private final int mAnrRecordPlacedOnQueueCookie =
+ sNextAnrRecordPlacedOnQueueCookieGenerator.incrementAndGet();
+
+ public AnrLatencyTracker(@TimeoutKind int timeoutKind, long anrTriggerUptime) {
+ mAnrTriggerUptime = anrTriggerUptime;
+ mAnrType = timeoutKindToAnrType(timeoutKind);
+
+ }
+
+ /** Records the start of AnrHelper#appNotResponding. */
+ public void appNotRespondingStarted() {
+ mAppNotRespondingStartUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ "AnrHelper#appNotResponding()");
+ }
+
+ /** Records the end of AnrHelper#appNotResponding. */
+ public void appNotRespondingEnded() {
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the placing of the AnrHelper.AnrRecord instance on the processing queue. */
+ public void anrRecordPlacingOnQueueWithSize(int queueSize) {
+ mAnrRecordPlacedOnQueueUptime = getUptimeMillis();
+ Trace.asyncTraceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ "anrRecordPlacedOnQueue", mAnrRecordPlacedOnQueueCookie);
+ mAnrQueueSize = queueSize;
+ // Since we are recording the anr record queue size after pushing the current
+ // record, we need to increment the current queue size by 1
+ Trace.traceCounter(TRACE_TAG_ACTIVITY_MANAGER, "anrRecordsQueueSize", queueSize + 1);
+ }
+
+ /** Records the start of ProcessErrorStateRecord#appNotResponding. */
+ public void anrProcessingStarted() {
+ mAnrProcessingStartedUptime = getUptimeMillis();
+ Trace.asyncTraceEnd(TRACE_TAG_ACTIVITY_MANAGER,
+ "anrRecordPlacedOnQueue", mAnrRecordPlacedOnQueueCookie);
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ "anrProcessing");
+ }
+
+ /** Records the end of ProcessErrorStateRecord#appNotResponding, the tracker is closed here. */
+ public void anrProcessingEnded() {
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ close();
+ }
+
+ /** Records the start of ActivityManagerService#dumpStackTraces. */
+ public void dumpStackTracesStarted() {
+ mDumpStackTracesStartUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER,
+ "dumpStackTraces()");
+ }
+
+ /** Records the end of ActivityManagerService#dumpStackTraces. */
+ public void dumpStackTracesEnded() {
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of ActivityManagerService#updateCpuStatsNow. */
+ public void updateCpuStatsNowCalled() {
+ mUpdateCpuStatsNowLastCallUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "updateCpuStatsNow()");
+ }
+
+ /** Records the return of ActivityManagerService#updateCpuStatsNow. */
+ public void updateCpuStatsNowReturned() {
+ mUpdateCpuStatsNowTotalLatency +=
+ getUptimeMillis() - mUpdateCpuStatsNowLastCallUptime;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of ResourcePressureUtil#currentPsiState. */
+ public void currentPsiStateCalled() {
+ mCurrentPsiStateLastCallUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "currentPsiState()");
+ }
+
+ /** Records the return of ResourcePressureUtil#currentPsiState. */
+ public void currentPsiStateReturned() {
+ mCurrentPsiStateTotalLatency += getUptimeMillis() - mCurrentPsiStateLastCallUptime;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of ProcessCpuTracker methods. */
+ public void processCpuTrackerMethodsCalled() {
+ mProcessCpuTrackerMethodsLastCallUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "processCpuTracker");
+ }
+
+ /** Records the return of ProcessCpuTracker methods. */
+ public void processCpuTrackerMethodsReturned() {
+ mProcessCpuTrackerMethodsTotalLatency +=
+ getUptimeMillis() - mProcessCpuTrackerMethodsLastCallUptime;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of ANR headers dumping to file (subject and criticalEventSection). */
+ public void criticalEventLogStarted() {
+ mCriticalEventLoglastCallUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "criticalEventLog");
+ }
+
+ /** Records the end of ANR headers dumping to file (subject and criticalEventSection). */
+ public void criticalEventLogEnded() {
+ mCriticalEventLogTotalLatency +=
+ getUptimeMillis() - mCriticalEventLoglastCallUptime;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of native pid collection. */
+ public void nativePidCollectionStarted() {
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "nativePidCollection");
+ }
+
+ /** Records the end of native pid collection. */
+ public void nativePidCollectionEnded() {
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingPidStarted(int pid) {
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingPid#" + pid);
+ }
+
+ /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingPidEnded() {
+ mDumpedProcessesCount++;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingFirstPidsStarted() {
+ mFirstPidsDumpingStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingFirstPids");
+ }
+
+ /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingFirstPidsEnded() {
+ mFirstPidsDumpingDuration = getUptimeMillis() - mFirstPidsDumpingStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingNativePidsStarted() {
+ mNativePidsDumpingStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingNativePids");
+ }
+
+ /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingNativePidsEnded() {
+ mNativePidsDumpingDuration = getUptimeMillis() - mNativePidsDumpingStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingExtraPidsStarted() {
+ mExtraPidsDumpingStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingExtraPids");
+ }
+
+ /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ public void dumpingExtraPidsEnded() {
+ mExtraPidsDumpingDuration = getUptimeMillis() - mExtraPidsDumpingStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of contention on ActivityManagerService.mGlobalLock. */
+ public void waitingOnGlobalLockStarted() {
+ mGlobalLockLastTryAcquireStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "globalLock");
+ }
+
+ /** Records the end of contention on ActivityManagerService.mGlobalLock. */
+ public void waitingOnGlobalLockEnded() {
+ mGlobalLockTotalContention += getUptimeMillis() - mGlobalLockLastTryAcquireStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of contention on ActivityManagerService.mPidsSelfLocked. */
+ public void waitingOnPidLockStarted() {
+ mPidLockLastTryAcquireStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "pidLockContention");
+ }
+
+ /** Records the end of contention on ActivityManagerService.mPidsSelfLocked. */
+ public void waitingOnPidLockEnded() {
+ mPidLockTotalContention += getUptimeMillis() - mPidLockLastTryAcquireStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of contention on ActivityManagerService. */
+ public void waitingOnAMSLockStarted() {
+ mAMSLockLastTryAcquireStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "AMSLockContention");
+ }
+
+ /** Records the end of contention on ActivityManagerService. */
+ public void waitingOnAMSLockEnded() {
+ mAMSLockTotalContention += getUptimeMillis() - mAMSLockLastTryAcquireStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of contention on ActivityManagerService.mProcLock. */
+ public void waitingOnProcLockStarted() {
+ mProcLockLastTryAcquireStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "procLockContention");
+ }
+
+ /** Records the start of contention on ActivityManagerService.mProcLock. */
+ public void waitingOnProcLockEnded() {
+ mProcLockTotalContention += getUptimeMillis() - mProcLockLastTryAcquireStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of contention on AnrHelper.mAnrRecords. */
+ public void waitingOnAnrRecordLockStarted() {
+ mAnrRecordLastTryAcquireStart = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "anrRecordLockContention");
+ }
+
+ /** Records the end of contention on AnrHelper.mAnrRecords. */
+ public void waitingOnAnrRecordLockEnded() {
+ mAnrRecordLockTotalContention +=
+ getUptimeMillis() - mAnrRecordLastTryAcquireStart;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Counts the number of records in the records queue when the ANR record is popped. */
+ public void anrRecordsQueueSizeWhenPopped(int queueSize) {
+ Trace.traceCounter(TRACE_TAG_ACTIVITY_MANAGER, "anrRecordsQueueSize", queueSize);
+ }
+
+ /** Records a skipped ANR in ProcessErrorStateRecord#appNotResponding. */
+ public void anrSkippedProcessErrorStateRecordAppNotResponding() {
+ anrSkipped("appNotResponding");
+ }
+
+ /** Records a skipped ANR in ActivityManagerService#dumpStackTraces. */
+ public void anrSkippedDumpStackTraces() {
+ anrSkipped("dumpStackTraces");
+ }
+
+ /**
+ * Returns latency data as a comma separated value string for inclusion in ANR report.
+ */
+ public String dumpAsCommaSeparatedArrayWithHeader() {
+ return "DurationsV1: " + mAnrTriggerUptime
+ /* triggering_to_app_not_responding_duration = */
+ + "," + (mAppNotRespondingStartUptime - mAnrTriggerUptime)
+ /* app_not_responding_duration = */
+ + "," + (mAnrRecordPlacedOnQueueUptime - mAppNotRespondingStartUptime)
+ /* anr_record_placed_on_queue_duration = */
+ + "," + (mAnrProcessingStartedUptime - mAnrRecordPlacedOnQueueUptime)
+ /* anr_processing_duration = */
+ + "," + (mDumpStackTracesStartUptime - mAnrProcessingStartedUptime)
+
+ /* update_cpu_stats_now_total_duration = */
+ + "," + mUpdateCpuStatsNowTotalLatency
+ /* current_psi_state_total_duration = */
+ + "," + mCurrentPsiStateTotalLatency
+ /* process_cpu_tracker_methods_total_duration = */
+ + "," + mProcessCpuTrackerMethodsTotalLatency
+ /* critical_event_log_duration = */
+ + "," + mCriticalEventLogTotalLatency
+
+ /* global_lock_total_contention = */
+ + "," + mGlobalLockTotalContention
+ /* pid_lock_total_contention = */
+ + "," + mPidLockTotalContention
+ /* ams_lock_total_contention = */
+ + "," + mAMSLockTotalContention
+ /* proc_lock_total_contention = */
+ + "," + mProcLockTotalContention
+ /* anr_record_lock_total_contention = */
+ + "," + mAnrRecordLockTotalContention
+
+ /* anr_queue_size_when_pushed = */
+ + "," + mAnrQueueSize
+ /* dumped_processes_count = */
+ + "," + mDumpedProcessesCount
+ + "\n\n";
+
+ }
+
+ /**
+ * Closes the ANR latency instance by writing the atom to statsd, this method is idempotent.
+ */
+ @Override
+ public void close() {
+ if (!mIsSkipped && !mIsPushed) {
+ mEndUptime = getUptimeMillis();
+ pushAtom();
+ mIsPushed = true;
+ }
+ }
+
+ private static int timeoutKindToAnrType(@TimeoutKind int timeoutKind) {
+ switch (timeoutKind) {
+ case TimeoutKind.INPUT_DISPATCH_NO_FOCUSED_WINDOW:
+ return ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW;
+ case TimeoutKind.INPUT_DISPATCH_WINDOW_UNRESPONSIVE:
+ return ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT;
+ case TimeoutKind.BROADCAST_RECEIVER:
+ return ANRLATENCY_REPORTED__ANR_TYPE__BROADCAST_OF_INTENT;
+ case TimeoutKind.SERVICE_START:
+ return ANRLATENCY_REPORTED__ANR_TYPE__START_FOREGROUND_SERVICE;
+ case TimeoutKind.SERVICE_EXEC:
+ return ANRLATENCY_REPORTED__ANR_TYPE__EXECUTING_SERVICE;
+ case TimeoutKind.CONTENT_PROVIDER:
+ return ANRLATENCY_REPORTED__ANR_TYPE__CONTENT_PROVIDER_NOT_RESPONDING;
+ default:
+ return ANRLATENCY_REPORTED__ANR_TYPE__UNKNOWN_ANR_TYPE;
+ }
+ }
+
+ /** @hide */
+ @VisibleForTesting
+ public long getUptimeMillis() {
+ return SystemClock.uptimeMillis();
+ }
+
+ /** @hide */
+ @VisibleForTesting
+ public void pushAtom() {
+ FrameworkStatsLog.write(
+ FrameworkStatsLog.ANR_LATENCY_REPORTED,
+
+ /* total_duration = */ mEndUptime - mAnrTriggerUptime,
+ /* triggering_to_stack_dump_duration = */
+ mFirstPidsDumpingStart - mAnrTriggerUptime,
+ /* triggering_to_app_not_responding_duration = */
+ mAppNotRespondingStartUptime - mAnrTriggerUptime,
+ /* app_not_responding_duration = */
+ mAnrRecordPlacedOnQueueUptime - mAppNotRespondingStartUptime,
+ /* anr_record_placed_on_queue_duration = */
+ mAnrProcessingStartedUptime - mAnrRecordPlacedOnQueueUptime,
+ /* anr_processing_duration = */
+ mDumpStackTracesStartUptime - mAnrProcessingStartedUptime,
+ /* dump_stack_traces_duration = */ mFirstPidsDumpingDuration
+ + mNativePidsDumpingDuration
+ + mExtraPidsDumpingDuration,
+
+ /* update_cpu_stats_now_total_duration = */ mUpdateCpuStatsNowTotalLatency,
+ /* current_psi_state_total_duration = */ mCurrentPsiStateTotalLatency,
+ /* process_cpu_tracker_methods_total_duration = */
+ mProcessCpuTrackerMethodsTotalLatency,
+ /* critical_event_log_duration = */ mCriticalEventLogTotalLatency,
+
+ /* global_lock_total_contention = */ mGlobalLockTotalContention,
+ /* pid_lock_total_contention = */ mPidLockTotalContention,
+ /* ams_lock_total_contention = */ mAMSLockTotalContention,
+ /* proc_lock_total_contention = */ mProcLockTotalContention,
+ /* anr_record_lock_total_contention = */ mAnrRecordLockTotalContention,
+
+ /* anr_queue_size_when_pushed = */ mAnrQueueSize,
+ /* anr_type = */ mAnrType,
+ /* dumped_processes_count = */ mDumpedProcessesCount);
+ }
+
+ private void anrSkipped(String method) {
+ Trace.instant(TRACE_TAG_ACTIVITY_MANAGER, "AnrSkipped@" + method);
+ mIsSkipped = true;
+ }
+}
diff --git a/core/java/com/android/internal/util/TypedProperties.java b/core/java/com/android/internal/util/TypedProperties.java
index 5613999..c10dbe7 100644
--- a/core/java/com/android/internal/util/TypedProperties.java
+++ b/core/java/com/android/internal/util/TypedProperties.java
@@ -264,29 +264,29 @@
// Ensure that the type can hold this value, and return.
int width = (type >> 8) & 0xff;
switch (width) {
- case 1:
- if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
- throw new ParseException(st, "8-bit integer constant");
- }
- return new Byte((byte)value);
- case 2:
- if (value < Short.MIN_VALUE || value > Short.MAX_VALUE) {
- throw new ParseException(st, "16-bit integer constant");
- }
- return new Short((short)value);
- case 4:
- if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
- throw new ParseException(st, "32-bit integer constant");
- }
- return new Integer((int)value);
- case 8:
- if (value < Long.MIN_VALUE || value > Long.MAX_VALUE) {
- throw new ParseException(st, "64-bit integer constant");
- }
- return new Long(value);
- default:
- throw new IllegalStateException(
- "Internal error; unexpected integer type width " + width);
+ case 1:
+ if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
+ throw new ParseException(st, "8-bit integer constant");
+ }
+ return Byte.valueOf((byte) value);
+ case 2:
+ if (value < Short.MIN_VALUE || value > Short.MAX_VALUE) {
+ throw new ParseException(st, "16-bit integer constant");
+ }
+ return Short.valueOf((short) value);
+ case 4:
+ if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
+ throw new ParseException(st, "32-bit integer constant");
+ }
+ return Integer.valueOf((int) value);
+ case 8:
+ if (value < Long.MIN_VALUE || value > Long.MAX_VALUE) {
+ throw new ParseException(st, "64-bit integer constant");
+ }
+ return Long.valueOf(value);
+ default:
+ throw new IllegalStateException(
+ "Internal error; unexpected integer type width " + width);
}
} else if ((type & 0xff) == 'F') {
if (token != StreamTokenizer.TT_WORD) {
@@ -317,10 +317,10 @@
throw new ParseException(st, "32-bit float constant");
}
}
- return new Float((float)value);
+ return Float.valueOf((float) value);
} else {
// This property is a double; no need to truncate.
- return new Double(value);
+ return Double.valueOf(value);
}
} else if (type == TYPE_STRING) {
// Expect a quoted string or the word "null".
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 26d0be1..d59a51a 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -209,6 +209,7 @@
"android_content_res_ApkAssets.cpp",
"android_content_res_ObbScanner.cpp",
"android_content_res_Configuration.cpp",
+ "android_content_res_ResourceTimer.cpp",
"android_security_Scrypt.cpp",
"com_android_internal_content_om_OverlayConfig.cpp",
"com_android_internal_net_NetworkUtilsInternal.cpp",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 11cb64c..68db603 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -117,6 +117,7 @@
extern int register_android_content_StringBlock(JNIEnv* env);
extern int register_android_content_XmlBlock(JNIEnv* env);
extern int register_android_content_res_ApkAssets(JNIEnv* env);
+extern int register_android_content_res_ResourceTimer(JNIEnv* env);
extern int register_android_graphics_BLASTBufferQueue(JNIEnv* env);
extern int register_android_graphics_SurfaceTexture(JNIEnv* env);
extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
@@ -1506,6 +1507,7 @@
REG_JNI(register_android_content_StringBlock),
REG_JNI(register_android_content_XmlBlock),
REG_JNI(register_android_content_res_ApkAssets),
+ REG_JNI(register_android_content_res_ResourceTimer),
REG_JNI(register_android_text_AndroidCharacter),
REG_JNI(register_android_text_Hyphenator),
REG_JNI(register_android_view_InputDevice),
diff --git a/core/jni/android_content_res_ResourceTimer.cpp b/core/jni/android_content_res_ResourceTimer.cpp
new file mode 100644
index 0000000..91e3c921
--- /dev/null
+++ b/core/jni/android_content_res_ResourceTimer.cpp
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022, 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.
+ */
+
+#include <jni.h>
+#include <core_jni_helpers.h>
+#include <utils/misc.h>
+#include <androidfw/ResourceTimer.h>
+
+namespace android {
+
+// ----------------------------------------------------------------------------
+
+static struct {
+ jfieldID maxTimer;
+ jfieldID maxBuckets;
+ jfieldID maxLargest;
+ jfieldID timers;
+} gConfigOffsets;
+
+static struct {
+ jfieldID count;
+ jfieldID total;
+ jfieldID mintime;
+ jfieldID maxtime;
+ jfieldID largest;
+ jfieldID percentile;
+} gTimerOffsets;
+
+// ----------------------------------------------------------------------------
+
+
+static int NativeGetTimers(JNIEnv* env, jobject /*clazz*/, jobjectArray timer, jboolean reset) {
+ size_t size = ResourceTimer::counterSize;
+ if (jsize st = env->GetArrayLength(timer); st < size) {
+ // Shrink the size to the minimum of the available counters and the available space.
+ size = st;
+ }
+ for (size_t i = 0; i < size; i++) {
+ ResourceTimer::Timer src;
+ ResourceTimer::copy(i, src, reset);
+ jobject dst = env->GetObjectArrayElement(timer, i);
+ env->SetIntField(dst, gTimerOffsets.count, src.count);
+ if (src.count == 0) {
+ continue;
+ }
+
+ src.compute();
+ env->SetIntField(dst, gTimerOffsets.count, src.count);
+ env->SetLongField(dst, gTimerOffsets.total, src.total);
+ env->SetIntField(dst, gTimerOffsets.mintime, src.mintime);
+ env->SetIntField(dst, gTimerOffsets.maxtime, src.maxtime);
+ jintArray percentile =
+ reinterpret_cast<jintArray>(env->GetObjectField(dst, gTimerOffsets.percentile));
+ env->SetIntArrayRegion(percentile, 0, 1, &src.pvalues.p50.nominal);
+ env->SetIntArrayRegion(percentile, 1, 1, &src.pvalues.p90.nominal);
+ env->SetIntArrayRegion(percentile, 2, 1, &src.pvalues.p95.nominal);
+ env->SetIntArrayRegion(percentile, 3, 1, &src.pvalues.p99.nominal);
+ jintArray largest =
+ reinterpret_cast<jintArray>(env->GetObjectField(dst, gTimerOffsets.largest));
+ env->SetIntArrayRegion(largest, 0, ResourceTimer::Timer::MaxLargest, src.largest);
+ }
+ return size;
+}
+
+static jstring counterName(JNIEnv *env, int counter) {
+ char const *s = ResourceTimer::toString(static_cast<ResourceTimer::Counter>(counter));
+ return env->NewStringUTF(s);
+}
+
+static int NativeEnableTimers(JNIEnv* env, jobject /*clazz*/, jobject config) {
+ ResourceTimer::enable();
+
+ env->SetIntField(config, gConfigOffsets.maxTimer, ResourceTimer::counterSize);
+ env->SetIntField(config, gConfigOffsets.maxBuckets, 4); // Number of ints in PValues
+ env->SetIntField(config, gConfigOffsets.maxLargest, ResourceTimer::Timer::MaxLargest);
+
+ jclass str = env->FindClass("java/lang/String");
+ jstring empty = counterName(env, 0);
+ jobjectArray timers = env->NewObjectArray(ResourceTimer::counterSize, str, empty);
+ for (int i = 0; i < ResourceTimer::counterSize; i++) {
+ env->SetObjectArrayElement(timers, i, counterName(env, i));
+ }
+ env->SetObjectField(config, gConfigOffsets.timers, timers);
+ return 0;
+}
+
+// ----------------------------------------------------------------------------
+
+// JNI registration.
+static const JNINativeMethod gResourceTimerMethods[] = {
+ {"nativeEnableTimers", "(Landroid/content/res/ResourceTimer$Config;)I",
+ (void *) NativeEnableTimers},
+ {"nativeGetTimers", "([Landroid/content/res/ResourceTimer$Timer;Z)I",
+ (void *) NativeGetTimers},
+};
+
+int register_android_content_res_ResourceTimer(JNIEnv* env) {
+ jclass config = FindClassOrDie(env, "android/content/res/ResourceTimer$Config");
+ gConfigOffsets.maxTimer = GetFieldIDOrDie(env, config, "maxTimer", "I");
+ gConfigOffsets.maxBuckets = GetFieldIDOrDie(env, config, "maxBuckets", "I");
+ gConfigOffsets.maxLargest = GetFieldIDOrDie(env, config, "maxLargest", "I");
+ gConfigOffsets.timers = GetFieldIDOrDie(env, config, "timers", "[Ljava/lang/String;");
+
+ jclass timers = FindClassOrDie(env, "android/content/res/ResourceTimer$Timer");
+ gTimerOffsets.count = GetFieldIDOrDie(env, timers, "count", "I");
+ gTimerOffsets.total = GetFieldIDOrDie(env, timers, "total", "J");
+ gTimerOffsets.mintime = GetFieldIDOrDie(env, timers, "mintime", "I");
+ gTimerOffsets.maxtime = GetFieldIDOrDie(env, timers, "maxtime", "I");
+ gTimerOffsets.largest = GetFieldIDOrDie(env, timers, "largest", "[I");
+ gTimerOffsets.percentile = GetFieldIDOrDie(env, timers, "percentile", "[I");
+
+ return RegisterMethodsOrDie(env, "android/content/res/ResourceTimer", gResourceTimerMethods,
+ NELEM(gResourceTimerMethods));
+}
+
+}; // namespace android
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 746f88c..77317d1 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -2937,13 +2937,14 @@
for (const auto &audioProfile : audioProfiles) {
jobject jAudioProfile;
- jStatus = convertAudioProfileFromNative(env, &jAudioProfile, &audioProfile, false);
- if (jStatus == AUDIO_JAVA_BAD_VALUE) {
+ jint jConvertProfileStatus = convertAudioProfileFromNative(
+ env, &jAudioProfile, &audioProfile, false);
+ if (jConvertProfileStatus == AUDIO_JAVA_BAD_VALUE) {
// skipping Java layer unsupported audio formats
continue;
}
- if (jStatus != AUDIO_JAVA_SUCCESS) {
- return jStatus;
+ if (jConvertProfileStatus != AUDIO_JAVA_SUCCESS) {
+ return jConvertProfileStatus;
}
env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile);
env->DeleteLocalRef(jAudioProfile);
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 9b997bf..0b9386c3 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gebruik skermslot"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Voer jou skermslot in om voort te gaan"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Druk ferm op die sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kon nie vingerafdruk verwerk nie. Probeer asseblief weer."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Kan nie vingerafdruk herken nie. Probeer weer."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Maak vingerafdruksensor skoon en probeer weer"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Maak sensor skoon en probeer weer"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Druk ferm op sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vinger is te stadig beweer. Probeer asseblief weer."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probeer \'n ander vingerafdruk"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Te helder"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Druk van aan/af-skakelaar bespeur"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Probeer om dit te verstel"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Verander elke keer die posisie van jou vinger so effens"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesig is gestaaf; druk asseblief bevestig"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Vingerafdrukhardeware is nie beskikbaar nie."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Kan nie vingerafdruk opstel nie"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Vingerafdrukuittelling is bereik. Probeer weer."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vingerafdrukopstelling het uitgetel. Probeer weer."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Vingerafdrukhandeling is gekanselleer."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Vingerafdrukhandeling is deur gebruiker gekanselleer."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Te veel pogings. Probeer later weer."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Te veel pogings. Gebruik eerder skermslot."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Te veel pogings. Gebruik eerder skermslot."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probeer weer."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Kan nie vingerafdruk verwerk nie. Probeer weer."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Geen vingerafdrukke is geregistreer nie."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Hierdie toetstel het nie \'n vingerafdruksensor nie."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor is tydelik gedeaktiveer."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Besoek \'n verskaffer wat herstelwerk doen."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan nie jou gesigmodel skep nie. Probeer weer."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Te helder. Probeer sagter beligting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nie genoeg lig nie"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Beweeg foon verder weg"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Beweeg foon nader"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Beweeg foon hoër op"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Begin programme."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Voltooi herlaai."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Jy het die aan/af-skakelaar gedruk – dit skakel gewoonlik die skerm af.\n\nProbeer liggies tik terwyl jy jou vingerafdruk opstel."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tik om skerm af te skakel"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Skakel skerm af"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Skakel skerm af om opstelling te stop"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Skakel af"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Gaan voort met vingerafdrukverifiëring?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Jy het die aan/af-skakelaar gedruk – dit skakel gewoonlik die skerm af.\n\nProbeer liggies tik om jou vingerafdruk te verifieer."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Skakel skerm af"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Foon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dokluidsprekers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Eksterne toestel"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Oorfone"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Stelsel"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 698bce4..1e8d681 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"የማያ ገጽ መቆለፊን ይጠቀሙ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ለመቀጠል የማያ ገጽ ቁልፍዎን ያስገቡ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ዳሳሹን በደንብ ይጫኑት"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ጣት አሻራን መስራት አልተቻለም። እባክዎ እንደገና ይሞክሩ።"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"የጣት አሻራን መለየት አልተቻለም። እንደገና ይሞክሩ።"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"የጣት አሻራ ዳሳሽን ያጽዱ እና እንደገና ይሞክሩ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ዳሳሹን ያጽዱ እና እንደገና ይሞክሩ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ዳሳሹን ጠበቅ አድርገው ይጫኑት"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ጣት ከልክ በላይ ተንቀራፎ ተንቀሳቅሷል። እባክዎ እንደገና ይሞክሩ።"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ሌላ የጣት አሻራ ይሞክሩ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"በጣም ብርሃናማ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"በኃይል መጫን እንዳለ ታውቋል"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ለማስተካከል ይሞክሩ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"በእያንዳንዱ ጊዜ የጣትዎን ቦታ በትንሹ ይለዋውጡ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ፊት ተረጋግጧል፣ እባክዎ አረጋግጥን ይጫኑ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"የጣት አሻራ ሃርድዌር አይገኝም።"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"የጣት አሻራን ማዋቀር አልተቻለም"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"የጣት አሻራ ማብቂያ ጊዜ ደርሷል። እንደገና ይሞክሩ።"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"የጣት አሻራ ውቅረት ጊዜው አብቅቷል። እንደገና ይሞክሩ።"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"የጣት አሻራ ስርዓተ ክወና ተትቷል።"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"የጣት አሻራ ክወና በተጠቃሚ ተሰርዟል።"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ከልክ በላይ ብዙ ሙከራዎች። በኋላ ላይ እንደገና ይሞክሩ።"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ይጠቀሙ።"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ይጠቀሙ።"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"እንደገና ይሞክሩ።"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"የጣት አሻራን ማሰናዳት አልተቻለም። እንደገና ይሞክሩ።"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ምንም የጣት አሻራዎች አልተመዘገቡም።"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ይህ መሣሪያ የጣት አሻራ ዳሳሽ የለውም።"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ዳሳሽ ለጊዜው ተሰናክሏል።"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"የጥገና አገልግሎት ሰጪን ይጎብኙ።"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"የመልክዎን ሞዴል መፍጠር አልተቻለም። እንደገና ይሞክሩ።"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ከልክ በላይ ፈካ ያለ። ይበልጥ ረጋ ያለ ብርሃን አጠቃቀምን ይሞክሩ።"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"በቂ ብርሃን የለም"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ስልኩን ያርቁት"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ስልኩን ያቅርቡት"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ስልኩን ከፍ ወዳለ ቦታ ይውሰዱት"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"መተግበሪያዎችን በማስጀመር ላይ፡፡"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"አጨራረስ ማስነሻ፡፡"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"የማብሪያ/ማጥፊያ ቁልፉን ተጭነዋል — ይህ ብዙውን ጊዜ ማያ ገጹን ያጠፋል።\n\nየጣት አሻራዎን በሚያዋቅሩበት ጊዜ በትንሹ መታ ለማድረግ ይሞክሩ።"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ማያ ገጽን ለማጥፋት መታ ያድርጉ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ማያ ገጽን አጥፋ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ውቅረትን ለመጨረስ ማያ ገጽን ያጥፉ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"አጥፋ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"የጣት አሻራዎን ማረጋገጥ ይቀጥሉ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"የማብሪያ/ማጥፊያ ቁልፉን ተጭነዋል - ይህ ብዙውን ጊዜ ማያ ገጹን ያጠፋል። \n\n የጣት አሻራዎን ለማረጋገጥ በትንሹ መታ ለማድረግ ይሞክሩ።"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ማያ ገጽን አጥፋ"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ቴሌቪዥን"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ስልክ"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"የትከል ድምፅ ማጉያዎች"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"ኤችዲኤምአይ"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"የውጪ መሣሪያ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"የጆሮ ማዳመጫዎች"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"ዩ ኤስ ቢ"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ስርዓት"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 82fc943..1529b0d 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -587,13 +587,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"استخدام قفل الشاشة"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"أدخِل قفل الشاشة للمتابعة"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"اضغط بقوة على المستشعر"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"تعذرت معالجة بصمة الإصبع. يُرجى إعادة المحاولة."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"يتعذّر التعرّف على بصمة الإصبع. يُرجى إعادة المحاولة."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"يُرجى تنظيف مستشعر بصمات الإصبع ثم إعادة المحاولة."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"تنظيف المستشعر ثم إعادة المحاولة"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"اضغط بقوة على المستشعر"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"تم تحريك الإصبع ببطء شديد. يُرجى إعادة المحاولة."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"يمكنك تجربة بصمة إصبع أخرى."</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"الصورة ساطعة للغاية."</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"تم رصد الضغط على زر التشغيل."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"حاوِل تعديل بصمة الإصبع."</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -605,12 +606,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"تمّت مصادقة الوجه، يُرجى الضغط على \"تأكيد\"."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"جهاز بصمة الإصبع غير متاح."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"يتعذّر إعداد بصمة الإصبع."</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"تم بلوغ مهلة إدخال بصمة الإصبع. أعد المحاولة."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"انتهت مهلة إعداد بصمة الإصبع. يُرجى إعادة المحاولة."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"تم إلغاء تشغيل بصمة الإصبع."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"تم إلغاء تشغيل بصمة الإصبع بواسطة المستخدم."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"تم إجراء عدد كبير من المحاولات. أعد المحاولة لاحقًا."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"تم إجراء عدد كبير جدًا من المحاولات. عليك استخدام قفل الشاشة بدلاً من ذلك."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"تم إجراء عدد كبير جدًا من المحاولات. عليك استخدام قفل الشاشة بدلاً من ذلك."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"أعد المحاولة."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"تتعذّر معالجة بصمة الإصبع. يُرجى إعادة المحاولة."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ليست هناك بصمات إصبع مسجَّلة."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"لا يحتوي هذا الجهاز على مستشعِر بصمات إصبع."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"تم إيقاف جهاز الاستشعار مؤقتًا."</string>
@@ -638,8 +639,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"يُرجى التواصل مع مقدِّم خدمات إصلاح."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ساطع للغاية. تجربة مستوى سطوع أقلّ."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"الإضاءة غير كافية."</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"يُرجى إبعاد الهاتف عنك."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"يُرجى تقريب الهاتف منك."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى."</string>
@@ -1253,8 +1253,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"بدء التطبيقات."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"جارٍ إعادة التشغيل."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة أثناء إعداد بصمتك."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"النقر لإيقاف الشاشة"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"إيقاف الشاشة"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"لإنهاء عملية الإعداد، أوقِف الشاشة."</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"إيقاف"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"هل تريد مواصلة تأكيد بصمة إصبعك؟"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة لتأكيد بصمة إصبعك."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"إيقاف الشاشة"</string>
@@ -1615,7 +1615,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"التلفزيون"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"الهاتف"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"مكبرات صوت للإرساء"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"جهاز خارجي"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"سماعات رأس"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"النظام"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 93957e5..a854ea6 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"স্ক্ৰীন ল\'ক ব্যৱহাৰ কৰক"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"অব্যাহত ৰাখিবলৈ আপোনাৰ স্ক্ৰীন লক দিয়ক"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ছেন্সৰটোত ভালকৈ টিপক"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ফিগাৰপ্ৰিণ্টৰ প্ৰক্ৰিয়া সম্পাদন কৰিবপৰা নগ\'ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ফিংগাৰপ্ৰিণ্ট চিনাক্ত কৰিব পৰা নাই। পুনৰ চেষ্টা কৰক।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো মচি পুনৰ চেষ্টা কৰক"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ছেন্সৰটো মচি পুনৰ চেষ্টা কৰক"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ছেন্সৰটোত ভালকৈ টিপক"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"আঙুলিৰ গতি অতি মন্থৰ আছিল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"অন্য এটা ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰি চাওক"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"অতি উজ্জ্বল"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"পাৱাৰ বুটাম টিপাটো চিনাক্ত কৰা হৈছে"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"মিলাই চাওক"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্ৰতিবাৰতে আপোনাৰ আঙুলিটোৰ স্থান সামান্য সলনি কৰক"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"মুখমণ্ডলৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল, অনুগ্ৰহ কৰি ‘নিশ্চিত কৰক’ বুটামটো টিপক"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ নাই।"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ফিংগাৰপ্ৰিণ্ট ছেট আপ কৰিব নোৱাৰি"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ফিংগাৰপ্ৰিণ্ট গ্ৰহণৰ সময়সীমা উকলি গৈছে। আকৌ চেষ্টা কৰক।"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ফিংগাৰপ্ৰিণ্ট ছেটআপ কৰাৰ সময় উকলি গৈছে। পুনৰ চেষ্টা কৰক।"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ফিংগাৰপ্ৰিণ্ট কাৰ্য বাতিল কৰা হ’ল।"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ব্যৱহাৰকাৰীয়ে ফিংগাৰপ্ৰিণ্ট ক্ৰিয়া বাতিল কৰিছে।"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"অত্যধিক ভুল প্ৰয়াস। কিছুসময়ৰ পাছত আকৌ চেষ্টা কৰক।"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"অতি বেছিসংখ্যক প্ৰয়াস। ইয়াৰ সলনি স্ক্ৰীন লক ব্যৱহাৰ কৰক।"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"অতি বেছিসংখ্যক প্ৰয়াস। ইয়াৰ সলনি স্ক্ৰীন লক ব্যৱহাৰ কৰক।"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"আকৌ চেষ্টা কৰক।"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ফিংগাৰপ্ৰিণ্ট চিনাক্তকৰণ প্ৰক্ৰিয়া কৰিব পৰা নাই। পুনৰ চেষ্টা কৰক।"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"কোনো ফিংগাৰপ্ৰিণ্ট যোগ কৰা নহ\'ল।"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইচটোত ফিংগাৰপ্ৰিণ্ট ছেন্সৰ নাই।"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ছেন্সৰটো সাময়িকভাৱে অক্ষম হৈ আছে।"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"মেৰামতি সেৱা প্ৰদানকাৰী কোনো প্ৰতিষ্ঠানলৈ যাওক।"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"মুখাৱয়বৰ মডেল সৃষ্টি কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"অতি উজ্জ্বল। ইয়াতকৈ কম পোহৰৰ উৎস ব্যৱহাৰ কৰক।"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"পৰ্যাপ্ত পোহৰ নাই"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ফ’নটো আৰু আঁতৰলৈ নিয়ক"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ফ’নটো ওচৰলৈ আনক"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ফ’নটো ওপৰলৈ নিয়ক"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"আৰম্ভ হৈ থকা এপসমূহ।"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"বুট কাৰ্য সমাপ্ত কৰিছে।"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"আপুনি পাৱাৰ বুটামটো টিপিছে — এইটোৱে সাধাৰণতে স্ক্ৰীনখন অফ কৰে।\n\nআপোনাৰ ফিংগাৰপ্ৰিণ্টটো ছেট আপ কৰাৰ সময়ত লাহেকৈ টিপি চাওক।"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"স্ক্ৰীন অফ কৰিবলৈ টিপক"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"স্ক্ৰীন অফ কৰক"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ছেটআপ সমাপ্ত কৰিবলৈ স্ক্ৰীন অফ কৰক"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"অফ কৰক"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ফিংগাৰপ্ৰিণ্ট সত্যাপন কৰা জাৰি ৰাখিবনে?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"আপুনি পাৱাৰ বুটামটো টিপিছে — এইটোৱে সাধাৰণতে স্ক্ৰীনখন অফ কৰে।\n\nআপোনাৰ ফিংগাৰপ্ৰিণ্টটো সত্যাপন কৰিবলৈ লাহেকৈ টিপি চাওক।"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"স্ক্ৰীন অফ কৰক"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"টিভি"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ফ\'ন"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ড\'ক স্পীকাৰসমূহ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"বাহ্যিক ডিভাইচ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"হেডফ\'নবোৰ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"ইউএছবি"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ছিষ্টেম"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index c4f3d75..1449500 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran kilidindən istifadə edin"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Davam etmək üçün ekran kilidinizi daxil edin"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Sensora basıb saxlayın"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmaq izi tanınmadı. Lütfən, yenidən cəhd edin."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Barmaq izini tanımaq olmur. Yenidən cəhd edin."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Barmaq izi sensorunu silib yenidən cəhd edin"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensoru silib yenidən cəhd edin"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensora basıb saxlayın"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Barmağınızı çox yavaş hərəkət etdirdiniz. Lütfən, yenidən cəhd edin."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Başqa bir barmaq izini sınayın"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çox işıqlıdır"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Qidalanma düyməsi basılıb"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Tənzimləməyə çalışın"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Hər dəfə barmağınızın yerini bir az dəyişdirin"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Üz təsdiq edildi, təsdiq düyməsinə basın"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Barmaq izi üçün avadanlıq yoxdur."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Barmaq izini ayarlamaq mümkün deyil"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Barmaq izinin vaxtı başa çatdı. Yenidən cəhd edin."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Barmaq izi ayarlama vaxtı bitib. Yenidən cəhd edin."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Barmaq izi əməliyyatı ləğv edildi."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Barmaq izi əməliyyatı istifadəçi tərəfindən ləğv edildi."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Cəhdlər çox oldu. Sonraya saxlayın."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Həddindən çox cəhd edilib. Əvəzində ekran kilidindən istifadə edin."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Həddindən çox cəhd edilib. Əvəzində ekran kilidindən istifadə edin."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Yenidən cəhd edin."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Barmaq izini emal etmək mümkün deyil. Yenidən cəhd edin."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Barmaq izi qeydə alınmayıb."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda barmaq izi sensoru yoxdur."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor müvəqqəti deaktivdir."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Təmir provayderini ziyarət edin."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Üz modelinizi yaratmaq olmur. Yenə cəhd edin."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Çox işıqlıdır. Daha az işıqlı şəkli sınayın."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Kifayət qədər İşıq yoxdur"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaq tutun"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaxına tutun"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu yuxarı tutun"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Tətbiqlər başladılır."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Yükləmə başa çatır."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Qidalanma düyməsini basdınız — adətən bu, ekranı söndürür.\n\nBarmaq izini ayarlayarkən yüngülcə toxunmağa çalışın."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ekranı söndürmək üçün toxunun"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Ekranı söndürün"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ayarlamanı bitirmək üçün ekranı söndürün"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Söndürün"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Barmaq izini doğrulamağa davam edilsin?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Qidalanma düyməsini basdınız — adətən bu, ekranı söndürür.\n\nBarmaq izini doğrulamaq üçün yüngülcə toxunmağa çalışın."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Ekranı söndürün"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dok spikerlər"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Xarici Cihaz"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Qulaqlıq"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index bf9c57b..bcaea5d 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristite zaključavanje ekrana"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Upotrebite zaključavanje ekrana da biste nastavili"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Jako pritisnite senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nije uspela obrada otiska prsta. Probajte ponovo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Prepoznavanje otiska prsta nije uspelo. Probajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Obrišite senzor za otisak prsta i probajte ponovo"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Obrišite senzor i probajte ponovo"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Jako pritisnite senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Previše sporo ste pomerili prst. Probajte ponovo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probajte sa drugim otiskom prsta"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Previše je svetlo"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Otkriven je pritisak dugmeta za uključivanje"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Probajte da prilagodite"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Svaki put pomalo promenite položaj prsta"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je potvrđeno. Pritisnite Potvrdi"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardver za otiske prstiju nije dostupan."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Podešavanje otiska prsta nije uspelo"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Vremensko ograničenje za otisak prsta je isteklo. Probajte ponovo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vreme za podešavanje otiska prsta je isteklo. Probajte ponovo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Radnja sa otiskom prsta je otkazana."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Korisnik je otkazao radnju sa otiskom prsta."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Previše pokušaja. Probajte ponovo kasnije."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Previše pokušaja. Koristite zaključavanje ekrana umesto toga."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Previše pokušaja. Koristite zaključavanje ekrana umesto toga."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probajte ponovo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Obrađivanje otiska prsta nije uspelo. Probajte ponovo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije registrovan nijedan otisak prsta."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posetite dobavljača za popravke."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Pravljenje modela lica nije uspelo. Probajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše je svetlo. Probajte sa slabijim osvetljenjem."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nema dovoljno svetla"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Udaljite telefon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Približite telefon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Pomerite telefon nagore"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Pokretanje aplikacija."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Završavanje pokretanja."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete dok podešavate otisak prsta."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Dodirnite da biste isključili ekran"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Isključi ekran"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Završite podešavanje isključivanjem ekrana"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Isključi"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Nastavljate verifikaciju otiska prsta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete da biste verifikovali otisak prsta."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Isključi ekran"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvučnici bazne stanice"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Spoljni uređaj"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalice"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 1af3c7d..48dd891 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ужываць блакіроўку экрана"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Каб працягнуць, скарыстайце свой сродак блакіроўкі экрана"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Моцна націсніце на сканер"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не атрымалася апрацаваць адбітак пальца. Паспрабуйце яшчэ раз."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не ўдалося распазнаць адбітак пальца. Паўтарыце спробу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Ачысціце сканер адбіткаў пальцаў і паўтарыце спробу"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Ачысціце сканер і паўтарыце спробу"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Моцна націсніце на сканер"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Палец рухаўся занадта павольна. Паспрабуйце яшчэ раз."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Паспрабуйце іншы адбітак пальца"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Занадта светла"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Выяўлена моцнае націсканне"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Паспрабуйце наладзіць"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Кожны раз крыху мяняйце пазіцыю пальца"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Твар распазнаны. Націсніце, каб пацвердзіць"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Апаратныя сродкі адбіткаў пальцаў недаступныя."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Не ўдалося захаваць адбітак пальца"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Час чакання выйшаў. Паспрабуйце яшчэ раз."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Наладжванне адбітка пальца не завершана. Паўтарыце спробу."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Аперацыя з адбіткамі пальцаў скасавана."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Аўтэнтыфікацыя па адбітках пальцаў скасавана карыстальнікам."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Занадта шмат спроб. Паспрабуйце яшчэ раз пазней."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Занадта шмат спроб. Скарыстайце блакіроўку экрана."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Занадта шмат спроб. Скарыстайце блакіроўку экрана."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Паўтарыце спробу."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Не ўдалося апрацаваць адбітак пальца. Паўтарыце спробу."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Адбіткі пальцаў не зарэгістраваны."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На гэтай прыладзе няма сканера адбіткаў пальцаў."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчык часова выключаны."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Звярніцеся ў сэрвісны цэнтр."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Не ўдалося стварыць мадэль твару. Паўтарыце."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадта светла. Прыглушыце асвятленне."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Недастаткова святла"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Перамясціце тэлефон далей"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Перамясціце тэлефон бліжэй"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Перамясціце тэлефон вышэй"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Запуск прыкладанняў."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Завяршэнне загрузкі."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Вы націснулі кнопку сілкавання. Звычайна ў выніку гэтага дзеяння выключаецца экран.\n\nПадчас наладжвання адбітка пальца злёгку дакраніцеся да кнопкі."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Націсніце, каб выключыць экран"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Выключыць экран"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Каб завяршыць наладку, выключыце экран"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Выключыць"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Працягнуць спраўджанне адбітка пальца?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Вы націснулі кнопку сілкавання. Звычайна ў выніку гэтага дзеяння выключаецца экран.\n\nКаб спраўдзіць адбітак пальца, злёгку дакраніцеся да кнопкі."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Выключыць экран"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ТБ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Тэлефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Дынамікі станцыi"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Знешняя прылада"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Навушнікі"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Сістэма"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 4ae1f21..9304969 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ползване на заключв. на екрана"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Въведете опцията си за заключване на екрана, за да продължите"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Натиснете добре върху сензора"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатъкът не бе обработен. Моля, опитайте отново."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Отпечатъкът не може да бъде разпознат. Опитайте отново."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Почистете сензора за отпечатъци и опитайте отново"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Почистете сензора и опитайте отново"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Натиснете добре върху сензора"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Преместихте пръста си твърде бавно. Моля, опитайте отново."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Опитайте с друг отпечатък"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Твърде светло е"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Установено е натискане на бутона за захранване"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Опитайте да коригирате"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Всеки път променяйте леко позицията на пръста си"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е удостоверено. Моля, натиснете „Потвърждаване“"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Хардуерът за отпечатъци не е налице."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Не може да се настрои отпечатък"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Времето за изчакване за отпечатък изтече. Опитайте отново."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Настройването на отпечатък не завърши навреме. Опитайте отново."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Операцията за отпечатък е анулирана."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Операцията за удостоверяване чрез отпечатък бе анулирана от потребителя."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Твърде много опити. Пробвайте отново по-късно."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Твърде много опити. Вместо това използвайте опция за заключване на екрана."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Твърде много опити. Вместо това използвайте опция за заключване на екрана."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Опитайте отново."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Отпечатъкът не може да бъде обработен. Опитайте отново."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Няма регистрирани отпечатъци."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Това устройство няма сензор за отпечатъци."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензорът е временно деактивиран."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Посетете оторизиран сервиз."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Моделът на лицето ви не бе създаден. Опитайте пак."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Твърде светло е. Опитайте при по-слабо осветление."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Няма достатъчно светлина"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Отдалечете телефона"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете телефона"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Преместете телефона по-високо"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Приложенията се стартират."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Зареждането завършва."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Натиснахте бутона за включване/изключване – това обикновено изключва екрана.\n\nОпитайте да докоснете леко, докато настройвате отпечатъка си."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Докоснете за изключване на екрана"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Изключване на екрана"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Изключете екрана за изход от настройката"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Изключване"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Напред с потвърждаването на отпечатъка?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Натиснахте бутона за включване/изключване – това обикновено изключва екрана.\n\nОпитайте да докоснете леко, за да потвърдите отпечатъка си."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Изключване на екрана"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевизор"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Докинг станц.: Високогов."</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Външно устройство"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Слушалки"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Система"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 2aac0c9..09033e9 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"স্ক্রিন লক ব্যবহার করুন"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"চালিয়ে যেতে আপনার স্ক্রিন লক ব্যবহার করুন"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"সেন্সর জোরে প্রেস করুন"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"আঙ্গুলের ছাপ প্রক্রিয়া করা যায়নি৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি। আবার চেষ্টা করুন।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"আঙ্গুলের ছাপের সেন্সর পরিষ্কার করে আবার চেষ্টা করুন"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"সেন্সর পরিষ্কার করে আবার চেষ্টা করুন"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"সেন্সর জোরে প্রেস করুন"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"আঙ্গুল খুব ধীরে সরানো হয়েছে৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"অন্য আঙ্গুলের ছাপ দিয়ে চেষ্টা করুন"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"অত্যন্ত উজ্জ্বল"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"পাওয়ার বোতাম প্রেস করার বিষয়টি শনাক্ত করা হয়েছে"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"অ্যাডজাস্ট করার চেষ্টা করুন"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্রতিবার আঙ্গুলের ছাপ সেটআপ করার সময় আপনার আঙ্গুলের অবস্থান সামান্য পরিবর্তন করুন"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ফেস যাচাই করা হয়েছে, \'কনফার্ম করুন\' বোতাম প্রেস করুন"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার অনুপলব্ধ৷"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"আঙ্গুলের ছাপ সেট-আপ করতে পারছি না"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"আঙ্গুলের ছাপ নেওয়ার সময়সীমা শেষ হযেছে৷ আবার চেষ্টা করুন৷"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ফিঙ্গারপ্রিন্ট সেট-আপ করার সময় সীমা পেরিয়ে গেছে। আবার চেষ্টা করুন।"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"আঙ্গুলের ছাপ অপারেশন বাতিল করা হয়েছে৷"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ব্যবহারকারী আঙ্গুলের ছাপের অপারেশনটি বাতিল করেছেন।"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"অনেকবার প্রচেষ্টা করা হয়েছে৷ পরে আবার চেষ্টা করুন৷"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"অনেকবার চেষ্টা করেছেন। পরিবর্তে স্ক্রিন লক ব্যবহার করুন।"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"অনেকবার চেষ্টা করেছেন। পরিবর্তে স্ক্রিন লক ব্যবহার করুন।"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"আবার চেষ্টা করুন৷"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ফিঙ্গারপ্রিন্ট প্রসেস করা যায়নি। আবার চেষ্টা করুন।"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"কোনও আঙ্গুলের ছাপ নথিভুক্ত করা হয়নি।"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইসে আঙ্গুলের ছাপ নেওয়ার সেন্সর নেই।"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"সেন্সর অস্থায়ীভাবে বন্ধ করা আছে।"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"একজন মেরামতি মিস্ত্রির কাছে যান।"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ফেস মডেল তৈরি করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"খুব উজ্জ্বল। আলো কমিয়ে চেষ্টা করে দেখুন।"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"পর্যাপ্ত আলো নেই"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ফোন আরও দূরে নিয়ে যান"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ফোন আরও কাছে নিয়ে আসুন"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ফোন আরও উঁচুতে তুলুন"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"অ্যাপ্লিকেশানগুলি শুরু করা হচ্ছে৷"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"চালু করা সম্পূর্ণ হচ্ছে৷"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"আপনি \'পাওয়ার\' বোতাম প্রেস করেছেন — এর ফলে সাধারণত স্ক্রিন বন্ধ হয়ে যায়।\n\nআঙ্গুলের ছাপ সেট-আপ করার সময় হালকাভাবে ট্যাপ করে দেখুন।"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"স্ক্রিন বন্ধ করতে ট্যাপ করুন"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"স্ক্রিন বন্ধ করুন"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"সেট-আপ সম্পূর্ণ করতে, স্ক্রিন বন্ধ করুন"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"বন্ধ করুন"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"আঙ্গুলের ছাপ যাচাই করা চালিয়ে যাবেন?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"আপনি \'পাওয়ার\' বোতাম প্রেস করেছেন — এর ফলে সাধারণত স্ক্রিন বন্ধ হয়ে যায়।\n\nআঙ্গুলের ছাপ যাচাই করতে হালকাভাবে ট্যাপ করে দেখুন।"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"স্ক্রিন বন্ধ করুন"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"টিভি"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ফোন"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ডক স্পিকার"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"এক্সটার্নাল ডিভাইস"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"হেডফোন"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"সিস্টেম"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 3c87b0d..d741095 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristi zaključavanje ekrana"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Unesite zaključavanje ekrana da nastavite"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Čvrsto pritisnite senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nije moguće prepoznati otisak prsta. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Očistite senzor za otisak prsta i pokušajte ponovo"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Očistite senzor i pokušajte ponovo"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Čvrsto pritisnite senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Presporo ste pomjerili prst. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Pokušajte s drugim otiskom prsta"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvijetlo"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Otkriveno je pritiskanje dugmeta za uključivanje"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Pokušajte podesiti"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Svaki put pomalo promijenite položaj prsta"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je provjereno, pritisnite dugme za potvrdu"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardver za otisak prsta nije dostupan."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nije moguće postaviti otisak prsta"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Vrijeme za prepoznavanje otiska prsta je isteklo. Pokušajte ponovo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vrijeme za postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Radnja s otiskom prsta je otkazana."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Korisnik je otkazao radnju s otiskom prsta."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Previše pokušaja. Umjesto toga koristite zaključavanje ekrana."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Previše pokušaja. Umjesto toga koristite zaključavanje ekrana."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Pokušajte ponovo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nije moguće obraditi otisak prsta. Pokušajte ponovo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije prijavljen nijedan otisak prsta."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posjetite pružaoca usluga za popravke."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nije moguće kreirati model lica. Pokušajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše svijetlo. Probajte s blažim osvjetljenjem."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nema dovoljno svjetlosti"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Odmaknite telefon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Primaknite telefon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Pomjerite telefon naviše"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Pokretanje aplikacija."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Pokretanje pri kraju."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnuli ste dugme za uključivanje. Tako se obično isključuje ekran.\n\nPokušajte ga lagano dodirnuti dok postavljate otisak prsta."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Dodirnite da isključite ekran"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Isključi ekran"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Da završite postavljanje, isključite ekran"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Isključi"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Nastaviti s potvrđivanjem otiska prsta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnuli ste dugme za uključivanje. Tako se obično isključuje ekran.\n\nPokušajte ga lagano dodirnuti da potvrdite otisak prsta."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Isključi ekran"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvučnici priključne stanice"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Vanjski uređaj"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalice"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 317c004..a334461 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utilitza el bloqueig de pantalla"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introdueix el teu bloqueig de pantalla per continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Prem el sensor de manera ferma"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"No es pot reconèixer l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Neteja el sensor d\'empremtes digitals i torna-ho a provar"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Neteja el sensor i torna-ho a provar"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prem el sensor de manera ferma"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"El dit s\'ha mogut massa lentament. Torna-ho a provar."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prova una altra empremta digital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hi ha massa llum"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"S\'ha premut el botó d\'engegada"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prova d\'ajustar l\'empremta digital"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit en cada intent"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Cara autenticada; prem el botó per confirmar"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"El maquinari d\'empremtes digitals no està disponible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"No es pot configurar l\'empremta digital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"S\'ha esgotat el temps d\'espera per a l\'empremta digital. Torna-ho a provar."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Temps d\'espera esgotat per configurar l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"S\'ha cancel·lat l\'operació d\'empremta digital."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"L\'usuari ha cancel·lat l\'operació d\'empremta digital."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"S\'han produït massa intents. Torna-ho a provar més tard."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Massa intents. Utilitza el bloqueig de pantalla."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Massa intents. Utilitza el bloqueig de pantalla."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Torna-ho a provar."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"No es pot processar l\'empremta digital. Torna-ho a provar."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No s\'ha registrat cap empremta digital."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aquest dispositiu no té sensor d\'empremtes digitals."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"El sensor està desactivat temporalment."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un proveïdor de reparacions."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"No es pot crear el model facial. Torna-ho a provar."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Massa brillant Prova una il·luminació més suau."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"No hi ha prou llum"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Allunya\'t del telèfon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Apropa el telèfon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mou el telèfon més amunt"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"S\'estan iniciant les aplicacions."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"S\'està finalitzant l\'actualització."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Has premut el botó d\'engegada, fet que sol apagar la pantalla.\n\nProva de tocar-lo lleugerament en configurar l\'empremta digital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toca per apagar la pantalla"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Apaga la pantalla"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Per finalitzar, apaga la pantalla"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desactiva"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Vols continuar verificant l\'empremta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Has premut el botó d\'engegada, fet que sol apagar la pantalla.\n\nProva de tocar-lo lleugerament per verificar l\'empremta digital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Apaga la pantalla"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televisor"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telèfon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altaveus de la base"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositiu extern"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auriculars"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index cbd2df6..831ccab 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použít zámek obrazovky"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Pokračujte zadáním zámku obrazovky"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevně zatlačte na senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Otisk prstu se nepodařilo rozpoznat. Zkuste to znovu."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Vyčistěte snímač otisků prstů a zkuste to znovu"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vyčistěte senzor a zkuste to znovu"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Zatlačte silně na senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zkuste jiný otisk prstu"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Je příliš světlo"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Bylo zjištěno stisknutí vypínače"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Zkuste provést úpravu"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Pokaždé lehce změňte polohu prstu"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Obličej byl ověřen, stiskněte tlačítko pro potvrzení"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Není k dispozici hardware ke snímání otisků prstů."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Otisk prstu se nepodařilo nastavit"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Časový limit sejmutí otisku prstu vypršel. Zkuste to znovu."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Časový limit nastavení otisku prstu vypršel. Zkuste to znovu."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operace otisku prstu byla zrušena."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Uživatel operaci s otiskem prstu zrušil."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Příliš mnoho pokusů. Zkuste to později."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Příliš mnoho pokusů. Použijte zámek obrazovky."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Příliš mnoho pokusů. Použijte zámek obrazovky."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Zkuste to znovu."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Otisk prstu nelze zpracovat. Zkuste to znovu."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nejsou zaregistrovány žádné otisky prstů."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zařízení nemá snímač otisků prstů."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je dočasně deaktivován."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Navštivte servis"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Model se nepodařilo vytvořit. Zkuste to znovu."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Je příliš světlo. Zmírněte osvětlení."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nedostatečné osvětlení"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Umístěte telefon dál"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Umístěte telefon blíž"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Umístěte telefon výš"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Spouštění aplikací."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Dokončování inicializace."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Stiskli jste vypínač – tím se obvykle vypíná obrazovka.\n\nPři nastavování otisku prstu je třeba klepat lehce."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Klepnutím vypnete obrazovku"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Vypnout obrazovku"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"K dokončení nastavení je nutné vypnout obrazovku"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Vypnout"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Pokračovat v ověřování otisku prstu?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Stiskli jste vypínač – tím se obvykle vypíná obrazovka.\n\nZkuste lehkým klepnutím ověřit svůj otisk prstu."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Vypnout obrazovku"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televize"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Reproduktory doku"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Externí zařízení"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Sluchátka"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Systém"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 083c42c..b35719d 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Brug skærmlås"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Angiv din skærmlås for at fortsætte"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Hold fingeren nede på læseren"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingeraftrykket kunne ikke behandles. Prøv igen."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingeraftrykket kan ikke genkendes. Prøv igen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengør fingeraftrykslæseren, og prøv igen"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengør læseren, og prøv igen"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Hold fingeren nede på læseren"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du bevægede fingeren for langsomt. Prøv igen."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prøv med et andet fingeraftryk"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Der er for lyst"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Et tryk på afbryderknappen er blevet registreret"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prøv at justere den"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Flyt fingeren en smule hver gang"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansigtet er godkendt. Tryk på Bekræft."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardwaren til fingeraftryk er ikke tilgængelig."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Fingeraftrykket kan ikke gemmes"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Registrering af fingeraftryk fik timeout. Prøv igen."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Konfigurationen af fingeraftryk fik timeout. Prøv igen."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingeraftrykshandlingen blev annulleret."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingeraftrykshandlingen blev annulleret af brugeren."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Du har prøvet for mange gange. Prøv igen senere."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Du har brugt for mange forsøg. Brug skærmlåsen i stedet."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Du har brugt for mange forsøg. Brug skærmlåsen i stedet."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Prøv igen."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Fingeraftrykket kan ikke behandles. Prøv igen."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Der er ikke registreret nogen fingeraftryk."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enhed har ingen fingeraftrykslæser."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensoren er midlertidigt deaktiveret."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Få den repareret."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Din ansigtsmodel kan ikke oprettes. Prøv igen."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Der er for lyst. Prøv en mere dæmpet belysning."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Der er ikke nok lys"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Flyt telefonen længere væk"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Flyt telefonen tættere på"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Løft telefonen højere op"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Åbner dine apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Gennemfører start."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Du har trykket på afbryderknappen, hvilket som regel slukker skærmen.\n\nPrøv at trykke let på knappen, mens du konfigurerer dit fingeraftryk."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tryk for at slukke skærmen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Sluk skærm"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Sluk skærmen for at afslutte konfigurationen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Deaktiver"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Vil du bekræfte dit fingeraftryk?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Du har trykket på afbryderknappen, hvilket som regel slukker skærmen.\n\nPrøv at trykke let på knappen for at bekræfte dit fingeraftryk."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Sluk skærm"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Tv"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dockstationens højttalere"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Ekstern enhed"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Hovedtelefoner"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index fc8eadaf..2d151d9 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Displaysperre verwenden"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Displaysperre eingeben, um fortzufahren"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Drücke fest auf den Sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingerabdruck konnte nicht verarbeitet werden. Bitte versuche es noch einmal."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingerabdruck wurde nicht erkannt. Versuch es noch einmal."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Reinige den Fingerabdrucksensor und versuch es noch einmal"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Reinige den Sensor und versuche es noch einmal"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Drücke fest auf den Sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger zu langsam bewegt. Bitte versuche es noch einmal."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Anderen Fingerabdruck verwenden"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Zu hell"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Drücken der Ein-/Aus-Taste erkannt"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Versuche, den Finger anders aufzulegen"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ändere jedes Mal leicht die Position deines Fingers"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesicht authentifiziert, bitte bestätigen"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerabdruckhardware nicht verfügbar"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Fingerabdruck konnte nicht eingerichtet werden"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Zeitüberschreitung bei Fingerabdruck. Bitte versuche es noch einmal."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Zeitüberschreitung bei Fingerabdruckeinrichtung. Versuch es noch einmal."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerabdruckvorgang abgebrochen"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Vorgang der Fingerabdruckauthentifizierung vom Nutzer abgebrochen."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Zu viele Versuche, bitte später noch einmal versuchen"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Zu viele Versuche. Verwende stattdessen die Displaysperre."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Zu viele Versuche. Verwende stattdessen die Displaysperre."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Bitte versuche es noch einmal."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Fingerabdruck kann nicht verarbeitet werden. Versuch es noch einmal."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Keine Fingerabdrücke erfasst."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dieses Gerät hat keinen Fingerabdrucksensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Der Sensor ist vorübergehend deaktiviert."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Suche einen Reparaturdienstleister auf."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Kein Gesichtsmodell möglich. Versuche es erneut."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Zu hell. Schwächere Beleuchtung ausprobieren."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nicht genug Licht"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Bewege das Smartphone weiter weg"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Bewege das Smartphone näher heran"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Bewege das Smartphone nach oben"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Apps werden gestartet..."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Start wird abgeschlossen..."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Du hast die Ein-/Aus-Taste gedrückt — damit wird der Bildschirm ausgeschaltet.\n\nTippe die Taste leicht an, um deinen Fingerabdruck einzurichten."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tippen, um Display auszuschalten"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Display ausschalten"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Zum Beenden der Einrichtung Bildschirm deaktivieren"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Deaktivieren"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Mit der Fingerabdruckprüfung fortfahren?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Du hast die Ein-/Aus-Taste gedrückt — damit wird der Bildschirm ausgeschaltet.\n\nTippe die Taste leicht an, um mit deinem Fingerabdruck deine Identität zu bestätigen."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Ausschalten"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock-Lautsprecher"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Externes Gerät"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Kopfhörer"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index c76b2b0..d3a9c17 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Χρήση κλειδώματος οθόνης"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Χρησιμοποιήστε το κλείδωμα οθόνης για να συνεχίσετε"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Πιέστε σταθερά τον αισθητήρα"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Δεν ήταν δυνατή η επεξεργασία του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Καθαρίστε τον αισθητήρα δακτυλικών αποτυπωμάτων και δοκιμάστε ξανά"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Καθαρίστε τον αισθητήρα και δοκιμάστε ξανά"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Πιέστε σταθερά τον αισθητήρα"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Πολύ αργή κίνηση δαχτύλου. Δοκιμάστε ξανά."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Δοκιμάστε άλλο δακτυλικό αποτύπωμα"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Υπερβολικά έντονος φωτισμός"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Εντοπίστηκε πάτημα του κουμπιού λειτουργίας"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Δοκιμάστε να το προσαρμόσετε"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Έγινε έλεγχος ταυτότητας προσώπου, πατήστε \"Επιβεβαίωση\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Ο εξοπλισμός δακτυλικού αποτυπώματος δεν είναι διαθέσιμος."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Δεν είναι δυνατή η ρύθμιση του δακτυλικού αποτυπώματος"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Λήξη χρονικού ορίου δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Λήξη χρονικού ορίου ρύθμισης δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Η λειτουργία δακτυλικού αποτυπώματος ακυρώθηκε."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Η λειτουργία δακτυλικού αποτυπώματος ακυρώθηκε από τον χρήστη."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Πάρα πολλές προσπάθειες. Δοκιμάστε ξανά αργότερα."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Υπερβολικά πολλές προσπάθειες. Χρησιμοποιήστε εναλλακτικά το κλείδωμα οθόνης."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Υπερβολικά πολλές προσπάθειες. Χρησιμοποιήστε εναλλακτικά το κλείδωμα οθόνης."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Δοκιμάστε ξανά."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Δεν είναι δυνατή η επεξεργασία του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Δεν έχουν καταχωριστεί δακτυλικά αποτυπώματα."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Αυτή η συσκευή δεν διαθέτει αισθητήρα δακτυλικού αποτυπώματος."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Ο αισθητήρας απενεργοποιήθηκε προσωρινά."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Επισκεφτείτε έναν πάροχο υπηρεσιών επισκευής."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Αδύν. η δημιουρ. του μοντ. προσώπ. Δοκιμάστε ξανά."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Υπερβολικά έντονος φωτισμός. Δοκιμάστε πιο ήπιο."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Δεν υπάρχει αρκετό φως"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Απομακρύνετε περισσότερο το τηλέφωνο"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Φέρτε πιο κοντά το τηλέφωνό σας"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Μετακινήστε το τηλέφωνο πιο ψηλά"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Έναρξη εφαρμογών."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Ολοκλήρωση εκκίνησης."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Πατήσατε το κουμπί λειτουργίας. Αυτό συνήθως απενεργοποιεί την οθόνη.\n\nΔοκιμάστε να πατήσετε απαλά κατά τη ρύθμιση του δακτυλικού σας αποτυπώματος."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Πατήστε για απενεργοποίηση οθόνης"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Απενεργοπ. οθόνης"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Απενεργ. την οθόνη για ολοκλήρ. ρύθμισης"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Απενεργοποίηση"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Συνέχιση επαλήθευσης δακτ. αποτυπώματος;"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Πατήσατε το κουμπί λειτουργίας. Αυτό συνήθως απενεργοποιεί την οθόνη.\n\nΔοκιμάστε να πατήστε απαλά για να επαληθεύσετε το δακτυλικό σας αποτύπωμα."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Απενεργοπ. οθόνης"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Τηλεόραση"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Τηλέφωνο"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Ηχεία βάσης σύνδεσης"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Εξωτερική συσκευή"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Ακουστικά"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Σύστημα"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 8591467..fcc6cdd 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Enter your screen lock to continue"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Press firmly on the sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Can’t recognise fingerprint. Try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Clean fingerprint sensor and try again"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Clean sensor and try again"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Press firmly on the sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger moved too slow. Please try again."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Try another fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Too bright"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Power press detected"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Try adjusting"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Change the position of your finger slightly each time"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerprint hardware not available."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Can’t set up fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Fingerprint timeout reached. Try again."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingerprint setup timed out. Try again."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerprint operation cancelled."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingerprint operation cancelled by user."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Too many attempts. Try again later."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Too many attempts. Use screen lock instead."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Too many attempts. Use screen lock instead."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Can’t process fingerprint. Try again."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Not enough light"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starting apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finishing boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly while setting up your fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tap to turn off screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Turn off screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"To end setup, turn off screen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Turn off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continue verifying your fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly to verify your fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Turn off screen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Phone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock speakers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphones"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 08097a5..de1516c 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Enter your screen lock to continue"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Press firmly on the sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Can’t recognise fingerprint. Try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Clean fingerprint sensor and try again"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Clean sensor and try again"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Press firmly on the sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger moved too slow. Please try again."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Try another fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Too bright"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Power press detected"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Try adjusting"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Change the position of your finger slightly each time"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerprint hardware not available."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Can’t set up fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Fingerprint timeout reached. Try again."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingerprint setup timed out. Try again."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerprint operation cancelled."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingerprint operation cancelled by user."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Too many attempts. Try again later."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Too many attempts. Use screen lock instead."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Too many attempts. Use screen lock instead."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Can’t process fingerprint. Try again."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Not enough light"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starting apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finishing boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly while setting up your fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tap to turn off screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Turn off screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"To end setup, turn off screen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Turn off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continue verifying your fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly to verify your fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Turn off screen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Phone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock speakers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphones"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index bf82587..ef91ac2 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Enter your screen lock to continue"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Press firmly on the sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Can’t recognise fingerprint. Try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Clean fingerprint sensor and try again"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Clean sensor and try again"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Press firmly on the sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger moved too slow. Please try again."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Try another fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Too bright"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Power press detected"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Try adjusting"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Change the position of your finger slightly each time"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerprint hardware not available."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Can’t set up fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Fingerprint timeout reached. Try again."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingerprint setup timed out. Try again."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerprint operation cancelled."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingerprint operation cancelled by user."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Too many attempts. Try again later."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Too many attempts. Use screen lock instead."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Too many attempts. Use screen lock instead."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Can’t process fingerprint. Try again."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Not enough light"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starting apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finishing boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly while setting up your fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tap to turn off screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Turn off screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"To end setup, turn off screen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Turn off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continue verifying your fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly to verify your fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Turn off screen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Phone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock speakers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphones"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 110e68f..6d7f422 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Enter your screen lock to continue"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Press firmly on the sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Can’t recognise fingerprint. Try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Clean fingerprint sensor and try again"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Clean sensor and try again"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Press firmly on the sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger moved too slow. Please try again."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Try another fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Too bright"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Power press detected"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Try adjusting"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Change the position of your finger slightly each time"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerprint hardware not available."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Can’t set up fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Fingerprint timeout reached. Try again."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingerprint setup timed out. Try again."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerprint operation cancelled."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingerprint operation cancelled by user."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Too many attempts. Try again later."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Too many attempts. Use screen lock instead."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Too many attempts. Use screen lock instead."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Can’t process fingerprint. Try again."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visit a repair provider."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Can’t create your face model. Try again."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Too bright. Try gentler lighting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Not enough light"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Move phone further away"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Move phone closer"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Move phone higher"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starting apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finishing boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly while setting up your fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tap to turn off screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Turn off screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"To end setup, turn off screen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Turn off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continue verifying your fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"You pressed the power button – this usually turns off the screen.\n\nTry tapping lightly to verify your fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Turn off screen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Phone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock speakers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphones"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index ddb93a8..4fee71d 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Enter your screen lock to continue"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Press firmly on the sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Can’t recognize fingerprint. Try again."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Clean fingerprint sensor and try again"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Clean sensor and try again"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Press firmly on the sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Finger moved too slow. Please try again."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Try another fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Too bright"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Power press detected"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Try adjusting"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Change the position of your finger slightly each time"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated, please press confirm"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingerprint hardware not available."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Can’t set up fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Fingerprint time out reached. Try again."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingerprint setup timed out. Try again."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingerprint operation canceled."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingerprint operation canceled by user."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Too many attempts. Try again later."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Too many attempts. Use screen lock instead."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Too many attempts. Use screen lock instead."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Try again."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Can’t process fingerprint. Try again."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No fingerprints enrolled."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
@@ -1248,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starting apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finishing boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"You pressed the power button — this usually turns off the screen.\n\nTry tapping lightly while setting up your fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tap to turn off screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Turn off screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"To end setup, turn off screen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Turn off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continue verifying your fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"You pressed the power button — this usually turns off the screen.\n\nTry tapping lightly to verify your fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Turn off screen"</string>
@@ -1610,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Phone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dock speakers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External Device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphones"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 933ccfb..efaaa97 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueo de pantalla"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ingresa tu bloqueo de pantalla para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Presiona con firmeza el sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se pudo procesar la huella dactilar. Vuelve a intentarlo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"No se reconoce la huella dactilar. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpia el sensor de huellas dactilares y vuelve a intentarlo"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpia el sensor y vuelve a intentarlo"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Presiona con firmeza el sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moviste el dedo muy lento. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prueba con otra huella dactilar"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Demasiada luz"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Se detectó una presión del botón de encendido"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prueba ajustarla"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia un poco la posición del dedo cada vez"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se autenticó el rostro; presiona Confirmar"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"El hardware para detectar huellas dactilares no está disponible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"No se puede configurar la huella dactilar"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Finalizó el tiempo de espera para la huella dactilar. Vuelve a intentarlo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Se agotó el tiempo de espera para configurar la huella dactilar. Vuelve a intentarlo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Se canceló la operación de huella dactilar."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"El usuario canceló la operación de huella dactilar."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Demasiados intentos. Vuelve a intentarlo más tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Demasiados intentos. Utiliza el bloqueo de pantalla en su lugar."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Demasiados intentos. Utiliza el bloqueo de pantalla en su lugar."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Vuelve a intentarlo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"No se puede procesar la huella dactilar. Vuelve a intentarlo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No se registraron huellas digitales."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas dactilares."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Se inhabilitó temporalmente el sensor."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Consulta a un proveedor de reparaciones."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"No se puede crear modelo de rostro. Reinténtalo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado brillante. Prueba con menos iluminación."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"No hay suficiente luz"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Aleja el teléfono un poco más"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Acerca el teléfono"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mueve el teléfono hacia arriba"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando aplicaciones"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finalizando el inicio"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Presionaste el botón de encendido. Por lo general, esta acción apaga la pantalla.\n\nPresiona suavemente mientras configuras tu huella dactilar."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Presiona para apagar la pantalla"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Apagar pantalla"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Para finalizar, apaga la pantalla"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Apagar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"¿Verificar huella dactilar?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Presionaste el botón de encendido. Por lo general, esta acción apaga la pantalla.\n\nPresiona suavemente para verificar tu huella dactilar."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Apagar pantalla"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Dispositivo"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altavoces del conector"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auriculares"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 9795e23..e6c088f 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueo de pantalla"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduce tu bloqueo de pantalla para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Mantén pulsado firmemente el sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"No se puede reconocer la huella digital. Inténtalo de nuevo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpia el sensor de huellas digitales e inténtalo de nuevo"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpia el sensor e inténtalo de nuevo"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Mantén pulsado firmemente el sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Has movido el dedo demasiado despacio. Vuelve a intentarlo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prueba con otra huella digital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Demasiada luz"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Se ha pulsado el botón de encendido"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prueba a mover el dedo"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia ligeramente el dedo de posición cada vez"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se ha autenticado la cara, pulsa para confirmar"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"El hardware de huella digital no está disponible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"No se puede configurar la huella digital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Se ha alcanzado el tiempo de espera de la huella digital. Vuelve a intentarlo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Tiempo de espera para configurar la huella digital agotado. Inténtalo de nuevo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Se ha cancelado la operación de huella digital."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"El usuario ha cancelado la operación de huella digital."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Demasiados intentos. Vuelve a intentarlo más tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Demasiados intentos. Usa el bloqueo de pantalla."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Demasiados intentos. Usa el bloqueo de pantalla."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Vuelve a intentarlo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"No se puede procesar la huella digital. Inténtalo de nuevo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No se ha registrado ninguna huella digital."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas digitales."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"El sensor está inhabilitado en estos momentos."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un proveedor de reparaciones."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"No se puede crear tu modelo. Inténtalo de nuevo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Hay demasiada luz. Busca un sitio menos iluminado."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"No hay suficiente luz"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Aleja el teléfono"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Acerca el teléfono"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Sube el teléfono"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando aplicaciones"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finalizando inicio..."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Has pulsado el botón de encendido, lo que suele apagar la pantalla.\n\nPrueba a apoyar el dedo ligeramente para verificar tu huella digital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toca para apagar la pantalla"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Apagar pantalla"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Apaga la pantalla para finalizar"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Apagar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"¿Seguir verificando tu huella digital?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Has pulsado el botón de encendido, lo que suele apagar la pantalla.\n\nPrueba a apoyar el dedo ligeramente para verificar tu huella digital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Apagar pantalla"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Teléfono"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altavoces de la base"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auriculares"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index fe7549e..7f761c4 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekraaniluku kasutamine"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jätkamiseks sisestage oma ekraanilukk"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Vajutage tugevalt andurile"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sõrmejälge ei õnnestunud töödelda. Proovige uuesti."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Sõrmejälge ei õnnestu tuvastada. Proovige uuesti."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhastage sõrmejäljeandur ja proovige uuesti"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhastage andur ja proovige uuesti"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Vajutage tugevalt andurile"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Sõrm liikus liiga aeglaselt. Proovige uuesti."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Proovige teist sõrmejälge"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liiga ere"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Tuvastati toitenupu vajutamine"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Proovige kohandada"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Muutke iga kord pisut oma sõrme asendit"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Nägu on autenditud, vajutage käsku Kinnita"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Sõrmejälje riistvara pole saadaval."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Sõrmejälge ei saa seadistada"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Sõrmejälje riistvara taimeri ajalõpp. Proovige uuesti."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Sõrmejälje seadistamine aegus. Proovige uuesti."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Sõrmejälje toiming tühistati."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Kasutaja tühistas sõrmejälje kasutamise."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Liiga palju katseid. Proovige hiljem uuesti."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Liiga palju katseid. Kasutage selle asemel ekraanilukku."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Liiga palju katseid. Kasutage selle asemel ekraanilukku."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Proovige uuesti."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Sõrmejälge ei õnnestu töödelda. Proovige uuesti."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ühtegi sõrmejälge pole registreeritud."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Selles seadmes pole sõrmejäljeandurit."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Andur on ajutiselt keelatud."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Külastage remonditeenuse pakkujat."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Teie näomudelit ei saa luua. Proovige uuesti."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Liiga ere. Proovige hämaramat valgust."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Pole piisavalt valgust"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Liigutage telefoni kaugemale"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Liigutage telefoni lähemale"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Liigutage telefoni kõrgemale"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Rakenduste käivitamine."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Käivitamise lõpuleviimine."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Vajutasite toitenuppu – tavaliselt lülitab see ekraani välja.\n\nPuudutage õrnalt ja seadistage oma sõrmejälg."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Puudutage ekraani väljalülitamiseks"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Lülita ekraan välja"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Seadistuse lõpet. lülitage ekraan välja"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Lülita välja"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Kas jätkata sõrmejälje kinnitamist?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Vajutasite toitenuppu – tavaliselt lülitab see ekraani välja.\n\nPuudutage õrnalt, et oma sõrmejälg kinnitada."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Lülita ekraan välja"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Teler"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Doki kõlarid"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Väline seade"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Kõrvaklapid"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Süsteem"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 7f424eb..ee07ce1 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Erabili pantailaren blokeoa"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Aurrera egiteko, desblokeatu pantailaren blokeoa"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Sakatu irmo sentsorea"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ezin izan da prozesatu hatz-marka. Saiatu berriro."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Ezin da hauteman hatz-marka. Saiatu berriro."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Garbitu hatz-marken sentsorea eta saiatu berriro"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Garbitu sentsorea eta saiatu berriro"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sakatu irmo sentsorea"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Mantsoegi mugitu duzu hatza. Saiatu berriro."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Erabili beste hatz-marka bat"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Argi gehiegi dago"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Hauteman egin da etengailua sakatu dela"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Saiatu doituta"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Aldi bakoitzean, aldatu hatzaren posizioa apur bat"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hatz-marken hardwarea ez dago erabilgarri."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Ezin da konfiguratu hatz-marka"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Hatz-markak prozesatzeko denbora-muga gainditu da. Saiatu berriro."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Gainditu egin da hatz-marka konfiguratzeko denbora-muga. Saiatu berriro."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Hatz-markaren eragiketa bertan behera utzi da."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Erabiltzaileak bertan behera utzi du hatz-marka bidezko eragiketa."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Saiakera gehiegi egin dituzu. Saiatu berriro geroago."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Saiakera gehiegi egin dira. Erabili pantailaren blokeoa."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Saiakera gehiegi egin dira. Erabili pantailaren blokeoa."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Saiatu berriro."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Ezin da prozesatu hatz-marka. Saiatu berriro."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ez da erregistratu hatz-markarik."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Gailu honek ez du hatz-marken sentsorerik."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sentsorea aldi baterako desgaitu da."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Jarri harremanetan konponketak egiten dituen hornitzaile batekin."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Ezin da sortu aurpegi-eredua. Saiatu berriro."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Argi gehiegi dago. Joan toki ilunago batera."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ilunegi dago"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Urrundu telefonoa"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Hurbildu telefonoa"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Igo telefonoa"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Aplikazioak abiarazten."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Bertsio-berritzea amaitzen."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Etengailua sakatu duzu; pantaila itzaltzeko balio du horrek.\n\nUki ezazu arin, hatz-marka konfiguratu bitartean."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Pantaila itzaltzeko, sakatu hau"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Itzali pantaila"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Konfiguratzen amaitzeko, itzali pantaila"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Itzali"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Hatz-marka egiaztatzen jarraitu nahi duzu?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Etengailua sakatu duzu; pantaila itzaltzeko balio du horrek.\n\nUki ezazu arin, hatz-marka egiaztatzeko."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Itzali pantaila"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Telebista"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefonoa"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Konektatu bozgorailuak oinarrira"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Kanpoko gailua"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Entzungailuak"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 83821a3..82c716f 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"از قفل صفحه استفاده کنید"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"برای ادامه، قفل صفحهتان را وارد کنید"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"محکم روی حسگر فشار دهید"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"اثر انگشت شناسایی نشد. دوباره امتحان کنید."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"حسگر اثر انگشت را تمیز و دوباره امتحان کنید"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"حسگر را تمیز و دوباره امتحان کنید"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"محکم روی حسگر فشار دهید"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"حرکت انگشت خیلی آهسته بود. لطفاً دوباره امتحان کنید."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"اثر انگشت دیگری را امتحان کنید"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"خیلی روشن است"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"فشردن دکمه روشن/ خاموش شناسایی شد"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"اثر انگشت را تنظیم کنید"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"هربار موقعیت انگشتتان را کمی تغییر دهید"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چهره اصالتسنجی شد، لطفاً تأیید را فشار دهید"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"سختافزار اثرانگشت در دسترس نیست."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"اثر انگشت راهاندازی نشد"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"مهلت ثبت اثر انگشت بهپایان رسید. دوباره امتحان کنید."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"مهلت راهاندازی اثر انگشت بهپایان رسید. دوباره امتحان کنید."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"عملکرد اثر انگشت لغو شد."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"کاربر عملیات اثر انگشت را لغو کرد"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"تلاشهای زیادی انجام شده است. بعداً دوباره امتحان کنید."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"تلاشها از حد مجاز بیشتر شده است. بهجای آن از قفل صفحه استفاده کنید."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"تلاشهای بیشازحد. حالا از قفل صفحه استفاده کنید."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"دوباره امتحان کنید."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"اثر انگشت پردازش نشد. دوباره امتحان کنید."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"اثر انگشتی ثبت نشده است."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"این دستگاه حسگر اثر انگشت ندارد."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"حسگر بهطور موقت غیرفعال است."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"به ارائهدهنده خدمات تعمیر مراجعه کنید."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"مدل چهره ایجاد نشد. دوباره امتحان کنید."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"خیلی روشن است. روشناییاش را ملایمتر کنید."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"نور کافی نیست"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"تلفن را دورتر ببرید"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"تلفن را نزدیکتر بیاورید"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"تلفن را بالاتر ببرید"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"درحال آغاز کردن برنامهها."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"درحال اتمام راهاندازی."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"دکمه روشن/ خاموش را فشار دادید — این کار معمولاً صفحهنمایش را خاموش میکند.\n\nهنگام راهاندازی اثر انگشت، آرام ضربه بزنید."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"برای خاموش کردن صفحهنمایش، ضربه بزنید"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"خاموش کردن صفحه"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"برای اتمام راهاندازی، صفحه را خاموش کنید"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"خاموش کردن"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"تأیید اثر انگشت را ادامه میدهید؟"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"دکمه روشن/ خاموش را فشار دادید — این کار معمولاً صفحهنمایش را خاموش میکند.\n\nبرای تأیید اثر انگشتتان، آرام ضربه بزنید."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"خاموش کردن صفحه"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"تلویزیون"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"تلفن"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"بلندگوهای جایگاه"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"دستگاه خارجی"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"هدفونها"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"سیستم"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 8798ffc..5988783 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Käytä näytön lukitusta"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jatka lisäämällä näytön lukituksen avaustapa"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Paina anturia voimakkaasti"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sormenjäljen prosessointi epäonnistui. Yritä uudelleen."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Sormenjälkeä ei voi tunnistaa. Yritä uudelleen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhdista sormenjälkitunnistin ja yritä uudelleen"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhdista anturi ja yritä uudelleen"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina anturia voimakkaasti"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Kokeile toista sormenjälkeä"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liian kirkas"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Virtapainikkeen painaminen havaittu"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Kokeile muuttaa asentoa"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Liikuta sormeasi hieman joka kerralla"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Kasvot tunnistettu, valitse Vahvista"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Sormenjälkilaitteisto ei ole käytettävissä."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Sormenjälkeä ei voi ottaa käyttöön"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Sormenjälkitunnistimen toiminta aikakatkaistiin. Yritä uudelleen."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Sormenjäljen käyttöönotto aikakatkaistu. Yritä uudelleen."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Sormenjälkitoiminto peruutettiin."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Käyttäjä peruutti sormenjälkitoiminnon."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Liian monta yritystä. Yritä myöhemmin uudelleen."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Liian monta yritystä. Käytä näytön lukituksen avaustapaa."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Liian monta yritystä. Käytä näytön lukituksen avaustapaa."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Yritä uudelleen."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Sormenjälkeä ei voida käsitellä. Yritä uudelleen."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Sormenjälkiä ei ole otettu käyttöön."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Laitteessa ei ole sormenjälkitunnistinta."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Tunnistin poistettu väliaikaisesti käytöstä."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Ota yhteys korjauspalveluun."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Kasvomallia ei voi luoda. Yritä uudelleen."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Liian kirkasta. Kokeile pehmeämpää valaistusta."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ei tarpeeksi valoa"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Vie puhelin kauemmas"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Tuo puhelin lähemmäs"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Siirrä puhelinta ylemmäs"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Käynnistetään sovelluksia."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Viimeistellään päivitystä."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Painoit virtapainiketta, mikä yleensä sammuttaa näytön.\n\nKosketa painiketta kevyesti tallentaessasi sormenjälkeä."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Sammuta näyttö napauttamalla"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Sammuta näyttö"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Lopeta käyttöönotto sammuttamalla näyttö"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Laita pois päältä"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Jatketaanko sormenjäljen vahvistamista?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Painoit virtapainiketta, mikä yleensä sammuttaa näytön.\n\nVahvista sormenjälki koskettamalla painiketta kevyesti."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Sammuta näyttö"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Puhelin"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Telineen kaiuttimet"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Ulkoinen laite"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Kuulokkeet"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Järjestelmä"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 87861ae..75ec39a 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utiliser le verrouillage de l\'écran"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Entrez votre verrouillage d\'écran pour continuer"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Appuyez fermement sur le capteur"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Empreinte digitale non reconnue. Réessayez."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nettoyez le capteur d\'empreintes digitales et réessayez"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nettoyez le capteur et réessayez"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez fermement sur le capteur"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Essayez une autre empreinte digitale"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Trop lumineux"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Forte pression détectée"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Essayez de l\'ajuster"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Modifiez légèrement la position de votre doigt chaque fois"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur le bouton Confirmer"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Lecteur d\'empreintes digitales indisponible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Impossible de configurer l\'empreinte digitale"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Le temps attribué pour lire l\'empreinte digitale est écoulé. Veuillez réessayer."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Délai dépassé pour configurer l\'empreinte digitale. Réessayez."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Opération d\'empreinte digitale numérique annulée."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"L\'opération d\'empreinte digitale a été annulée par l\'utilisateur."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Trop de tentatives. Veuillez réessayer plus tard."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Trop de tentatives. Utilisez plutôt le verrouillage de l\'écran."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Trop de tentatives. Utilisez plutôt le verrouillage de l\'écran."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Réessayer."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Empreinte digitale non traitable. Réessayez."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Aucune empreinte digitale enregistrée."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Cet appareil ne possède pas de capteur d\'empreintes digitales."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Le capteur a été désactivé temporairement."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Consultez un fournisseur de services de réparation."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossible de créer votre modèle facial. Réessayez."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Trop lumineux. Essayez un éclairage plus faible."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Éclairage insuffisant"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Tenez le téléphone plus haut"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Lancement des applications…"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finalisation de la mise à jour."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Vous avez appuyé sur le l\'interrupteur – cette action éteint habituellement l\'écran.\n\nEssayez de toucher légèrement pendant la configuration de votre empreinte digitale."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toucher pour éteindre l\'écran"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Éteindre l\'écran"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Pour terminer, éteignez l\'écran"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Désactiver"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Poursuivre vérifica. empreinte digitale?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Vous avez appuyé sur le l\'interrupteur – cette action éteint habituellement l\'écran.\n\nEssayez de toucher légèrement pour vérifier votre empreinte digitale."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Éteindre l\'écran"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Télévision"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Téléphone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleurs de la station d\'accueil"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Appareil externe"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Oreillettes"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Système"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index a9dccbc..427ae2d 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utiliser verrouillage écran"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Utilisez le verrouillage de l\'écran pour continuer"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Appuyez bien sur le lecteur"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impossible de reconnaître l\'empreinte digitale. Réessayez."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nettoyez le lecteur d\'empreinte digitale et réessayez"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nettoyez le lecteur et réessayez"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez bien sur le lecteur"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Essayez une autre empreinte"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Trop de lumière"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Utilisation du bouton Marche/Arrêt détectée"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Essayez de repositionner le doigt"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Changez légèrement de position à chaque fois"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur \"Confirmer\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Matériel d\'empreinte digitale indisponible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Impossible de configurer l\'empreinte"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Délai de détection de l\'empreinte digitale expiré. Veuillez réessayer."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Délai de configuration de l\'empreinte dépassé. Réessayez."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Opération d\'empreinte digitale annulée."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Opération d\'authentification par empreinte digitale annulée par l\'utilisateur."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Trop de tentatives. Veuillez réessayer plus tard."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Trop de tentatives. Utilisez plutôt le verrouillage de l\'écran."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Trop de tentatives. Utilisez plutôt le verrouillage de l\'écran."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Veuillez réessayer."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Impossible de reconnaître l\'empreinte digitale. Réessayez."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Aucune empreinte digitale enregistrée."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aucun lecteur d\'empreinte digitale n\'est installé sur cet appareil."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Capteur temporairement désactivé."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Contactez un réparateur."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossible de créer l\'empreinte faciale. Réessayez."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Trop lumineux. Essayez de baisser la lumière."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Lumière insuffisante"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Déplacez le téléphone vers le haut"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Lancement des applications…"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Finalisation de la mise à jour."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Vous avez appuyé sur le bouton Marche/Arrêt, ce qui éteint généralement l\'écran.\n\nEssayez d\'appuyer doucement pendant la configuration de votre empreinte digitale."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Appuyer pour éteindre l\'écran"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Éteindre l\'écran"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Éteindre l\'écran pour achever la config."</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Éteindre"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuer de valider votre empreinte ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Vous avez appuyé sur le bouton Marche/Arrêt, ce qui éteint généralement l\'écran.\n\nPour valider votre empreinte digitale, appuyez plus doucement."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Éteindre l\'écran"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Téléviseur"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Téléphone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleurs de la station d\'accueil"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Appareil externe"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Écouteurs"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Système"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index ae29e50..f99b755b 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar credencial do dispositivo"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Desbloquea a pantalla para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Preme o sensor con firmeza"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Non se puido procesar a impresión dixital. Téntao de novo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Non se puido recoñecer a impresión dixital. Téntao de novo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpa o sensor de impresión dixital e téntao de novo"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpa o sensor e téntao de novo"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Preme o sensor con firmeza"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O dedo moveuse demasiado lento. Téntao de novo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Proba con outra impresión dixital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hai demasiada luz"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Premeuse o botón de acendido"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Proba a axustar a impresión dixital"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia lixeiramente a posición do dedo en cada intento"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autenticouse a cara, preme Confirmar"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impresión dixital non dispoñible."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Non se puido configurar a impresión dixital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Esgotouse o tempo de espera da impresión dixital. Téntao de novo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Esgotouse o tempo para configurar a impresión dixital Téntao de novo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Cancelouse a operación da impresión dixital."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"O usuario cancelou a operación da impresión dixital."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Demasiados intentos. Téntao de novo máis tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Houbo demasiados intentos. Mellor usa o bloqueo de pantalla."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Demasiados intentos. Mellor usa o bloqueo de pantalla."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Téntao de novo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Non se pode procesar a impresión dixital Téntao de novo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Non se rexistraron impresións dixitais."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo non ten sensor de impresión dixital."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Desactivouse o sensor temporalmente."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visita un provedor de reparacións."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Non se puido crear o modelo facial. Téntao de novo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Hai demasiada iluminación. Proba cunha máis suave."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Non hai luz suficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Afasta o teléfono"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Achega o teléfono"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Sube o teléfono"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando aplicacións."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Está finalizando o arranque"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Premiches o botón de acendido, o que adoita facer que se apague a pantalla.\n\nProba a dar un toque suave namentres configuras a impresión dixital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toca para desactivar a pantalla"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Desactivar pantalla"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Apaga a pantalla e acaba a configuración"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desactivar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Queres seguir verificando a impresión?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Premiches o botón de acendido, o que adoita facer que se apague a pantalla.\n\nProba a dar un toque suave para verificar a impresión dixital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desactivar pantalla"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televisión"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Teléfono"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Conectar altofalantes á base"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auriculares"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 36812e8..96b9e0f 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"આગળ વધવા માટે તમારું સ્ક્રીન લૉક દાખલ કરો"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"સેન્સર પર જોરથી દબાવો"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ફિંગરપ્રિન્ટ પ્રક્રિયા કરી શકાઈ નથી. કૃપા કરીને ફરી પ્રયાસ કરો."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ફિંગરપ્રિન્ટ ઓળખી શકતા નથી. ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ફિંગરપ્રિન્ટ સેન્સર સાફ કરો અને ફરી પ્રયાસ કરો"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"સેન્સર સાફ કરો અને ફરી પ્રયાસ કરો"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"સેન્સર પર જોરથી દબાવો"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"આંગળી બહુ જ ધીમેથી ખસેડી. કૃપા કરીને ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"અન્ય ફિંગરપ્રિન્ટ અજમાવી જુઓ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"અતિશય પ્રકાશિત"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"પાવર બટન દબાવ્યું હોવાની જાણ થઈ છે"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ગોઠવણી કરી જુઓ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"દરેક વખતે સ્કૅનર પર તમારી આંગળીની સ્થિતિ સહેજ બદલતા રહો"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ચહેરા પ્રમાણિત, કૃપા કરીને કન્ફર્મ કરો"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ફિંગરપ્રિન્ટ હાર્ડવેર ઉપલબ્ધ નથી."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ફિંગરપ્રિન્ટનું સેટઅપ કરી શકતા નથી"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ફિંગરપ્રિન્ટનો સમય બાહ્ય થયો. ફરી પ્રયાસ કરો."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ફિંગરપ્રિન્ટનું સેટઅપ કરવાનો સમય સમાપ્ત થઈ ગયો. ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ફિંગરપ્રિન્ટ ઓપરેશન રદ કર્યું."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ફિંગરપ્રિન્ટ ચકાસવાની પ્રક્રિયા વપરાશકર્તાએ રદ કરી."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ઘણા બધા પ્રયત્નો. પછીથી ફરી પ્રયાસ કરો."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ઘણા બધા પ્રયાસો. તેને બદલે સ્ક્રીન લૉકનો ઉપયોગ કરો."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ઘણા બધા પ્રયાસો. વિકલ્પ તરીકે સ્ક્રીન લૉકનો ઉપયોગ કરો."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ફરી પ્રયાસ કરો."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ફિંગરપ્રિન્ટની પ્રક્રિયા કરી શકતા નથી. ફરી પ્રયાસ કરો."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"કોઈ ફિંગરપ્રિન્ટની નોંધણી કરવામાં આવી નથી."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"આ ડિવાઇસમાં કોઈ ફિંગરપ્રિન્ટ સેન્સર નથી."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"સેન્સર હંગામી રૂપે બંધ કર્યું છે."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"રિપેર કરવાની સેવા આપતા પ્રદાતાની મુલાકાત લો."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"તમારા ચહેરાનું મૉડલ ન બનાવી શકાય. ફરી પ્રયાસ કરો."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"અતિશય પ્રકાશિત. થોડો હળવો પ્રકાશ અજમાવી જુઓ."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"પૂરતો પ્રકાશ નથી"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ફોનને વધુ દૂર લઈ જાઓ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ફોનને વધુ નજીક લાવો"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ફોનને વધુ ઊંચે લઈ જાઓ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ઍપ્લિકેશનો શરૂ કરી રહ્યાં છે."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"બૂટ સમાપ્ત કરી રહ્યાં છે."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"તમે પાવર બટન દબાવ્યું છે — જેનાથી સામાન્ય રીતે સ્ક્રીન બંધ થઈ જાય છે.\n\nતમારી ફિંગરપ્રિન્ટનું સેટઅપ કરતી વખતે હળવેથી ટૅપ કરવાનો પ્રયાસ કરો."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"સ્ક્રીન બંધ કરવા માટે ટૅપ કરો"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"સ્ક્રીન બંધ કરો"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"સેટઅપ સમાપ્ત કરવા માટે, સ્ક્રીન બંધ કરો"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"બંધ કરો"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"શું તમારી ફિંગરપ્રિન્ટની ચકાસણી કરીએ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"તમે પાવર બટન દબાવ્યું છે — જેનાથી સામાન્ય રીતે સ્ક્રીન બંધ થઈ જાય છે.\n\nતમારી ફિંગરપ્રિન્ટની ચકાસણી કરવા માટે, તેને હળવેથી ટૅપ કરવાનો પ્રયાસ કરો."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"સ્ક્રીન બંધ કરો"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ફોન"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"સ્પીકર્સ ડૉક કરો"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"બહારનું ડિવાઇસ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"હેડફોન"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"સિસ્ટમ"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 2a9a44a..4e05cd4 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"जारी रखने के लिए, अपने स्क्रीन लॉक की पुष्टि करें"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"सेंसर को उंगली से ज़ोर से दबाएं"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फ़िंगरप्रिंट प्रोसेस नहीं हो सका. कृपया दोबारा कोशिश करें."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"फ़िंगरप्रिंट की पहचान नहीं की जा सकी. फिर से कोशिश करें."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से ज़ोर से दबाएं"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"उंगली बहुत धीरे चलाई गई. कृपया फिर से कोशिश करें."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"किसी दूसरे फ़िंगरप्रिंट से कोशिश करें"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"बहुत रोशनी है"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"पावर बटन दबाया गया"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"सेंसर पर सही तरीके से उंगली लगाने की कोशिश करें"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार थोड़ी अलग स्थिति में रखें"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरे की पहचान की गई, कृपया पुष्टि बटन दबाएं"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"फ़िंगरप्रिंट हार्डवेयर उपलब्ध नहीं है."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"फ़िंगरप्रिंट सेट अप नहीं किया जा सका"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"फ़िंगरप्रिंट का समय खत्म हो गया. फिर से कोशिश करें."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फ़िंगरप्रिंट सेटअप करने का समय खत्म हो गया. फिर से कोशिश करें."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"फ़िंगरप्रिंट ऑपरेशन रोक दिया गया."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"उपयोगकर्ता ने फिंगरप्रिंट की पुष्टि की कार्रवाई रद्द कर दी है."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"बहुत ज़्यादा प्रयास कर लिए गए हैं. बाद में फिर से प्रयास करें."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"कई बार कोशिश की जा चुकी है. इसके बजाय, स्क्रीन लॉक का इस्तेमाल करें."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"इससे ज़्यादा बार कोशिश नहीं की जा सकती. इसके बजाय, स्क्रीन लॉक का इस्तेमाल करें."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"फिर से कोशिश करें."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"फ़िंगरप्रिंट की पहचान नहीं की जा सकी. फिर से कोशिश करें."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कोई फ़िंगरप्रिंट रजिस्टर नहीं किया गया है."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"इस डिवाइस में फ़िंगरप्रिंट सेंसर नहीं है."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"सेंसर कुछ समय के लिए बंद कर दिया गया है."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"फ़िंगरप्रिंट सेंसर को रिपेयर करने की सेवा देने वाली कंपनी से संपर्क करें."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"चेहरे का माॅडल नहीं बन सका. फिर से कोशिश करें."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"बहुत रोशनी है. हल्की रोशनी आज़माएं."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ज़रूरत के मुताबिक रोशनी नहीं है"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"फ़ोन को दूर ले जाएं"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"फ़ोन को नज़दीक लाएं"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"फ़ोन को थोड़ा और ऊपर ले जाएं"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ऐप्स प्रारंभ होने वाले हैं"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"बूट खत्म हो रहा है."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"आपने पावर बटन दबाया - आम तौर पर, इससे स्क्रीन बंद हो जाती है.\n\nअपना फ़िंगरप्रिंट सेट अप करते समय, बटन को हल्के से टैप करके देखें."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"स्क्रीन बंद करने के लिए टैप करें"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"स्क्रीन बंद करें"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"सेटअप पूरा होने पर, स्क्रीन बंद करें"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"बंद करें"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"फ़िंगरप्रिंट की पुष्टि करना जारी रखना है?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"आपने पावर बटन दबाया - आम तौर पर, इससे स्क्रीन बंद हो जाती है.\n\nअपने फ़िंगरप्रिंट की पुष्टि करने के लिए, बटन पर हल्के से टैप करके देखें."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"स्क्रीन बंद करें"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"टीवी"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"फ़ोन"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"डॉक स्पीकर"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"बाहरी डिवाइस"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"हेडफ़ोन"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"यूएसबी"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"सिस्टम"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 0a2702a..0a557d6 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Upotreba zaključavanja zaslona"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Upotrijebite zaključavanje zaslona da biste nastavili"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Čvrsto pritisnite senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Prepoznavanje otiska prsta nije uspjelo. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Očistite senzor otiska prsta i pokušajte ponovno"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Očistite senzor i pokušajte ponovno"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Čvrsto pritisnite senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Presporo pomicanje prsta. Pokušajte ponovo."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Isprobajte drugi otisak prsta"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvijetlo"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Detektiran je pritisak na tipku za uključivanje"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Pokušajte ga prilagoditi"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Svaki put lagano promijenite položaj prsta"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je autentificirano, pritisnite Potvrdi"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardver za otisak prsta nije dostupan."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Postavljanje otiska prsta nije uspjelo"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Isteklo je vrijeme čekanja za otisak prsta. Pokušajte ponovo."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vrijeme za postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Radnja otiska prsta otkazana je."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Radnju s otiskom prsta otkazao je korisnik."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Previše pokušaja. Umjesto toga upotrijebite zaključavanje zaslona."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Previše pokušaja. Umjesto toga upotrijebite zaključavanje zaslona."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Pokušajte ponovo."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nije registriran nijedan otisak prsta."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor otiska prsta."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Posjetite davatelja usluga popravaka."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Izrada modela lica nije uspjela. Pokušajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Presvijetlo je. Pokušajte sa slabijim svjetlom."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nema dovoljno svjetla"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Udaljite telefon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Približite telefon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Pomaknite telefon prema gore"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Pokretanje aplikacija."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Završetak inicijalizacije."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnuli ste tipku za uključivanje/isključivanje, čime se obično isključuje zaslon.\n\nPokušajte lagano dodirnuti dok postavljate svoj otisak prsta."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Dodirnite da biste isključili zaslon"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Isključi zaslon"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Za prekid postavljanja isključite zaslon"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Isključi"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Nastaviti s potvrđivanjem otiska prsta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnuli ste tipku za uključivanje/isključivanje, čime se obično isključuje zaslon.\n\nPokušajte lagano dodirnuti da biste potvrdili svoj otisak prsta."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Isključi zaslon"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televizor"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvučnici postolja"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Vanjski uređaj"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalice"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sustav"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 01b6f90..f1388f6 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Képernyőzár használata"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"A folytatáshoz adja meg a képernyőzár hitelesítési adatait"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Nyomja meg határozottan az érzékelőt"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nem sikerült feldolgozni az ujjlenyomatot. Próbálkozzon újra."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Az ujjlenyomat nem ismerhető fel. Próbálkozzon újra."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Tisztítsa meg az ujjlenyomat-érzékelőt, majd próbálja újra"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Tisztítsa meg az érzékelőt, majd próbálja újra"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Nyomja meg határozottan az érzékelőt"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Túl lassan húzta az ujját. Próbálkozzon újra."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Próbálkozzon másik ujjlenyomattal"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Túl világos"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Bekapcsológomb lenyomása észlelve"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Próbálja beállítani"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Módosítsa minden alkalommal kis mértékben ujja helyzetét."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Arc hitelesítve; nyomja meg a Megerősítés lehetőséget"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Az ujjlenyomathoz szükséges hardver nem érhető el."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nem sikerült beállítani az ujjlenyomatot"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Az ujjlenyomat-beolvasási műveletkor időtúllépés történt. Próbálkozzon újra."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Lejárt az ujjlenyomat-beállítás időkorlátja. Próbálkozzon újra."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Ujjlenyomattal kapcsolatos művelet megszakítva"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Az ujjlenyomattal kapcsolatos műveletet a felhasználó megszakította."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Túl sok próbálkozás. Próbálja újra később."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Túl sokszor próbálkozott. Használja inkább a képernyőzárat."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Túl sok próbálkozás. Használja inkább a képernyőzárat."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Próbálkozzon újra."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nem sikerült feldolgozni az ujjlenyomatot. Próbálkozzon újra."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nincsenek regisztrált ujjlenyomatok."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ez az eszköz nem rendelkezik ujjlenyomat-érzékelővel."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Az érzékelő átmenetileg le van tiltva."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Keresse fel a szervizt."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nem lehet létrehozni az arcmodellt. Próbálja újra."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Túl világos. Próbálja kevésbé erős világítással."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nincs elég fény"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Tartsa távolabb a telefont"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Tartsa közelebb a telefont"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Emelje magasabbra a telefont"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Kezdő alkalmazások."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Rendszerindítás befejezése."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Megnyomta a bekapcsológombot — ezzel általában kikapcsol a képernyő.\n\nPróbáljon finoman rákoppintani az ujjlenyomat beállítása közben."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Koppintson a képernyő kikapcsolásához"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Képernyő kikapcsolása"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"A képernyő kikapcsolása befejezi a beállítást"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Kikapcsolás"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Folytatja az ujjlenyomat ellenőrzését?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Megnyomta a bekapcsológombot — ezzel általában kikapcsol a képernyő.\n\nPróbáljon finoman rákoppintani az ujjlenyomat ellenőrzéséhez."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Kikapcsolom"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dokkolóegység hangszórója"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Külső eszköz"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Fejhallgató"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Rendszer"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 86560be..14fb55c 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Էկրանի կողպում"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Շարունակելու համար ապակողպեք էկրանը"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Մատը ուժեղ սեղմեք սկաների վրա"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Չհաջողվեց մշակել մատնահետքը: Նորից փորձեք:"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Մատնահետքը չի հաջողվում ճանաչել։ Նորից փորձեք։"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Մաքրեք մատնահետքերի սկաները և նորից փորձեք"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Մաքրեք սկաները և նորից փորձեք"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Մատը ուժեղ սեղմեք սկաների վրա"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Շատ դանդաղ անցկացրիք մատը: Փորձեք նորից:"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Փորձեք մեկ այլ մատնահետք"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Շատ լուսավոր է"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Հայտնաբերվել է սնուցման կոճակի սեղմում"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Փորձեք փոխել մատի դիրքը"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ամեն անգամ թեթևակի փոխեք մատի դիրքը"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Դեմքը ճանաչվեց: Սեղմեք «Հաստատել»:"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Մատնահետքի սարքն անհասանելի է:"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Հնարավոր չէ կարգավորել մատնահետքը"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Մատնահետքի գրանցման ժամանակը սպառվել է: Փորձեք նորից:"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Մատնահետքի կարգավորման ժամանակը սպառվել է։ Նորից փորձեք։"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Իսկորոշումը մատնահետքի միջոցով չեղարկվեց:"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Մատնահետքով նույնականացման գործողությունը չեղարկվել է օգտատիրոջ կողմից:"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Չափից շատ փորձ եք կատարել: Փորձեք նորից քիչ հետո:"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Չափազանց շատ փորձեր են արվել։ Օգտագործեք էկրանի կողպումը։"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Չափազանց շատ փորձեր են արվել։ Օգտագործեք էկրանի կողպումը։"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Փորձեք նորից:"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Չի հաջողվում մշակել մատնահետքը։ Նորից փորձեք։"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Գրանցված մատնահետք չկա:"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Այս սարքը չունի մատնահետքերի սկաներ։"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Տվիչը ժամանակավորապես անջատված է:"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Այցելեք սպասարկման կենտրոն։"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Չհաջողվեց ստեղծել ձեր դեմքի մոդելը։ Նորից փորձեք։"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Շատ լուսավոր է։ Փորձեք ավելի թեթև լուսավորություն։"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Թույլ լուսավորություն"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Փոքր-ինչ հեռու պահեք հեռախոսը"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Մոտեցրեք հեռախոսը"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Բարձրացրեք հեռախոսը"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Հավելվածները մեկնարկում են:"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Բեռնումն ավարտվում է:"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Դուք սեղմել եք սնուցման կոճակը։ Սովորաբար դրա արդյունքում էկրանն անջատվում է։\n\nՄատնահետքը ավելացնելու համար թեթևակի հպեք կոճակին։"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Հպեք՝ էկրանն անջատելու համար"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Անջատել էկրանը"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ավարտեք կարգավորումը՝ անջատելով էկրանը"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Անջատել"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Շարունակե՞լ մատնահետքի սկանավորումը"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Դուք սեղմել եք սնուցման կոճակը։ Սովորաբար դրա արդյունքում էկրանն անջատվում է։\n\nՄատնահետքը սկանավորելու համար թեթևակի հպեք կոճակին։"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Անջատել էկրանը"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Հեռուստացույց"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Հեռախոս"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Դոկ-կայանի բարձրախոսներ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Արտաքին սարք"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Ականջակալներ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Համակարգ"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index b145e20..58d91c8 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gunakan kunci layar"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Masukkan kunci layar untuk melanjutkan"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tekan sensor dengan kuat"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses sidik jari. Coba lagi."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Tidak dapat mengenali sidik jari. Coba lagi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Bersihkan sensor sidik jari lalu coba lagi"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Bersihkan sensor lalu coba lagi"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan sensor dengan kuat"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Jari digerakkan terlalu lambat. Coba lagi."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Coba sidik jari lain"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Penekanan tombol daya terdeteksi"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Coba sesuaikan"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ubah sedikit posisi jari di setiap percobaan"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah diautentikasi, silakan tekan konfirmasi"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware sidik jari tidak tersedia."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Tidak dapat menyiapkan sidik jari"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Waktu sidik jari habis. Coba lagi."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Waktu penyiapan sidik jari habis. Coba lagi."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operasi sidik jari dibatalkan."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operasi sidik jari dibatalkan oleh pengguna."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Terlalu banyak upaya. Coba lagi nanti."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Terlalu banyak upaya gagal. Gunakan kunci layar."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Terlalu banyak upaya gagal. Gunakan kunci layar."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Coba lagi."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Tidak dapat memproses sidik jari. Coba lagi."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Tidak ada sidik jari yang terdaftar."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Perangkat ini tidak memiliki sensor sidik jari."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor dinonaktifkan untuk sementara."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Kunjungi penyedia reparasi."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Tidak dapat membuat model wajah Anda. Coba lagi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Coba cahaya yang lebih lembut."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Cahaya tidak cukup"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan ponsel"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan ponsel"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Gerakkan ponsel ke atas"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Memulai aplikasi."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Menyelesaikan boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Anda menekan tombol daya; tindakan ini biasanya akan menonaktifkan layar.\n\nCoba ketuk lembut saat menyiapkan sidik jari Anda."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ketuk untuk menonaktifkan layar"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Nonaktifkan layar"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Untuk mengakhiri penyiapan, nonaktifkan layar"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Nonaktifkan"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Lanjutkan verifikasi sidik jari?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Anda menekan tombol daya; tindakan ini biasanya akan menonaktifkan layar.\n\nCoba ketuk lembut untuk memverifikasi sidik jari Anda."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Nonaktifkan layar"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Ponsel"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Pengeras suara dok"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Perangkat Eksternal"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphone"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 6f48de2..7466295 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Nota skjálás"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Sláðu inn skjálásinn þinn til að halda áfram"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Ýttu ákveðið á lesarann"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ekki var hægt að vinna úr fingrafarinu. Reyndu aftur."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingrafar þekkist ekki. Reyndu aftur."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hreinsaðu fingrafaralesarann og reyndu aftur"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Hreinsaðu lesarann og reyndu aftur"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Ýttu ákveðið á lesarann"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Fingurinn hreyfðist of hægt. Reyndu aftur."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prófaðu annað fingrafar"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Of bjart"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Þrýstingur á aflrofa greindist"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prófaðu að breyta stöðu fingursins"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Breyttu stöðu fingursins örlítið í hvert skipti"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Andlit staðfest, ýttu til að staðfesta"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Fingrafarsvélbúnaður ekki til staðar."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Ekki er hægt að setja upp fingrafar"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Tímamörk runnu út fyrir fingrafar. Reyndu aftur."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingrafarsuppsetning rann út á tíma. Reyndu aftur."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Hætt við fingrafarsaðgerð."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Notandi hætti við að nota fingrafar."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Of margar tilraunir. Reyndu aftur síðar."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Of margar tilraunir. Notaðu skjálás í staðinn."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Of margar tilraunir. Notaðu skjálás í staðinn."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Reyndu aftur."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Ekki tekst að vinna úr fingrafari. Reyndu aftur."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Engin fingraför hafa verið skráð."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Þetta tæki er ekki með fingrafaralesara."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Slökkt tímabundið á skynjara."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Þú verður að fara á verkstæði."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Ekki tekst að búa til andlitslíkan. Reyndu aftur."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Of bjart. Prófaðu mýkri lýsingu."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Of lítið ljós"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Færðu símann lengra frá"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Færðu símann nær"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Færðu símann hærra"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Ræsir forrit."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Lýkur ræsingu."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Þú ýttir á aflrofann. Yfirleitt slekkur það á skjánum.\n\nPrófaðu að ýta laust þegar þú setur upp fingrafarið."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ýttu til að slökkva á skjá"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Slökkva á skjá"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Slökktu á skjá til að ljúka uppsetningu"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Slökkva"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Halda áfram að staðfesta fingrafarið?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Þú ýttir á aflrofann. Yfirleitt slekkur það á skjánum.\n\nPrófaðu að ýta laust til að staðfesta fingrafarið þitt."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Slökkva á skjá"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Sjónvarp"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Sími"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dokkuhátalarar"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Ytra tæki"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Heyrnartól"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Kerfi"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index fb7763a..3484165 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usa il blocco schermo"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Inserisci il blocco schermo per continuare"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Premi con decisione sul sensore"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossibile elaborare l\'impronta. Riprova."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impossibile riconoscere l\'impronta. Riprova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Pulisci il sensore di impronte digitali e riprova"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Pulisci il sensore e riprova"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Premi con decisione sul sensore"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Movimento del dito troppo lento. Riprova."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prova con un\'altra impronta"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Troppa luce"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Rilevata pressione tasto di accensione"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prova a regolare"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia leggermente la posizione del dito ogni volta"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Volto autenticato, premi Conferma"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware per l\'impronta non disponibile."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Impossibile configurare l\'impronta"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Timeout impronta. Riprova."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Timeout configurazione impronta. Riprova."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operazione associata all\'impronta annullata."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operazione di autenticazione dell\'impronta annullata dall\'utente."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Troppi tentativi. Riprova più tardi."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Troppi tentativi. Usa il blocco schermo."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Troppi tentativi. Usa il blocco schermo."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Riprova."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Impossibile elaborare l\'impronta. Riprova."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nessuna impronta digitale registrata."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Questo dispositivo non dispone di sensore di impronte."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensore temporaneamente disattivato."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Contatta un fornitore di servizi di riparazione."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossibile creare il modello del volto. Riprova."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Troppa luce. Prova con una luce più soft."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Luce insufficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Allontana il telefono"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Avvicina il telefono"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Sposta il telefono più in alto"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Avvio app."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Conclusione dell\'avvio."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Hai premuto il tasto di accensione; in genere questa azione disattiva lo schermo.\n\nProva a toccare leggermente il tasto di accensione durante la configurazione della tua impronta."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tocca per disattivare lo schermo"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Disattiva lo schermo"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Per terminare, disattiva lo schermo"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Disattiva"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Vuoi continuare a verificare l\'impronta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Hai premuto il tasto di accensione; in genere questa azione disattiva lo schermo.\n\nProva a toccare leggermente il tasto di accensione per verificare la tua impronta."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Disattiva lo schermo"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefono"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altoparlanti dock"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo esterno"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Cuffie audio"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 7a460a3..0c62ea2 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"שימוש בנעילת מסך"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"יש לבטל את נעילת המסך כדי להמשיך"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"לוחצים לחיצה חזקה על החיישן"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"לא ניתן היה לעבד את טביעת האצבע. אפשר לנסות שוב."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"לא ניתן לזהות את טביעת האצבע. יש לנסות שוב."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"עליך לנקות את חיישן טביעות האצבע ולנסות שוב"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"עליך לנקות את החיישן ולנסות שוב"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"לוחצים לחיצה חזקה על החיישן"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"הזזת את האצבע לאט מדי. יש לנסות שוב."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"יש להשתמש בטביעת אצבע אחרת"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"בהיר מדי"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"זוהתה לחיצה על לחצן ההפעלה"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"יש לנסות ולשנות את תנוחת האצבע"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"צריך לשנות מעט את תנוחת האצבע בכל פעם"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"זיהוי הפנים בוצע. יש ללחוץ על אישור"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"החומרה לזיהוי טביעות אצבעות אינה זמינה."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"לא ניתן להגדיר טביעת אצבע"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"נגמר הזמן הקצוב לטביעת אצבע. אפשר לנסות שוב."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"הזמן שהוקצב להגדרה של טביעת האצבע פג. יש לנסות שוב."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"פעולת טביעת האצבע בוטלה."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"פעולת טביעת האצבע בוטלה על ידי המשתמש."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"יותר מדי ניסיונות. יש לנסות שוב מאוחר יותר."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"בוצעו יותר מדי ניסיונות. יש להשתמש בנעילת המסך במקום זאת."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"בוצעו יותר מדי ניסיונות. יש להשתמש בנעילת המסך במקום זאת."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"כדאי לנסות שוב."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"לא ניתן לעבד את טביעת האצבע. יש לנסות שוב."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"לא נסרקו טביעות אצבע."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"במכשיר הזה אין חיישן טביעות אצבע."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"החיישן מושבת באופן זמני."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"צריך ליצור קשר עם ספק תיקונים."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"לא ניתן ליצור את התבנית לזיהוי הפנים. יש לנסות שוב."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"בהירה מדי. צריך תאורה עדינה יותר."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"אין מספיק אור"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"צריך להרחיק את הטלפון"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"צריך לקרב את הטלפון"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"צריך להגביה את הטלפון"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"מתבצעת הפעלה של אפליקציות."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"תהליך האתחול בשלבי סיום."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"לחצת על לחצן ההפעלה – בדרך כלל הפעולה הזו מכבה את המסך.\n\nעליך לנסות להקיש בעדינות במהלך ההגדרה של טביעת האצבע שלך."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"יש להקיש כדי לכבות את המסך"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"כיבוי המסך"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"כדי לסיים את ההגדרה צריך לכבות את המסך"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"השבתה"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"להמשיך לאמת את טביעת האצבע שלך?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"לחצת על לחצן ההפעלה – בדרך כלל הפעולה הזו מכבה את המסך.\n\nעליך לנסות להקיש בעדינות כדי לאמת את טביעת האצבע שלך."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"כיבוי המסך"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"טלוויזיה"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"טלפון"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"רמקולים של מעגן"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"מכשיר חיצוני"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"אוזניות"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"מערכת"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index cf8521f..94c6bb0 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"画面ロックの使用"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"続行するには画面ロックを入力してください"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"センサーにしっかりと押し当ててください"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"指紋を処理できませんでした。もう一度お試しください。"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"指紋を認識できません。もう一度お試しください。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"指紋認証センサーの汚れを取り除いて、もう一度お試しください"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"センサーの汚れを取り除いて、もう一度お試しください"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"センサーにしっかりと押し当ててください"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"指の動きが遅すぎました。もう一度お試しください。"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"別の指紋をお試しください"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"明るすぎます"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"電源ボタンが押されました"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"調整してみてください"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"毎回、指を置く位置を少し変えてください"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"顔を認証しました。[確認] を押してください"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"指紋認証ハードウェアは使用できません。"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"指紋を設定できません"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"指紋の読み取りがタイムアウトになりました。もう一度お試しください。"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"指紋の設定がタイムアウトしました。もう一度お試しください。"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"指紋の操作をキャンセルしました。"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"指紋の操作がユーザーによりキャンセルされました。"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"所定の回数以上間違えました。しばらくしてからもう一度お試しください。"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"試行回数が上限を超えました。代わりに画面ロックを使用してください。"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"試行回数が上限を超えました。代わりに画面ロックを使用してください。"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"もう一度お試しください。"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"指紋を処理できません。もう一度お試しください。"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"指紋が登録されていません。"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"このデバイスには指紋認証センサーがありません。"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"センサーが一時的に無効になっています。"</string>
@@ -1248,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"アプリを起動しています。"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ブートを終了しています。"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"電源ボタンを押しました。通常、この操作で画面が OFF になります。\n\n指紋を設定する場合は電源ボタンに軽く触れてみましょう。"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"タップして画面を OFF にする"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"画面を OFF にする"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"設定を終了するには画面を OFF にします"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"OFF にする"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"指紋の確認を続行しますか?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"電源ボタンを押しました。通常、この操作で画面が OFF になります。\n\n指紋を確認するには、電源ボタンに軽く触れてみましょう。"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"画面を OFF にする"</string>
@@ -1610,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"テレビ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"モバイル デバイス"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ホルダーのスピーカー"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"外部デバイス"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ヘッドホン"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"システム"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index ae14cc9..576c61e 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"გამოიყენეთ ეკრანის დაბლოკვა"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"გასაგრძელებლად შედით ეკრანის დაბლოკვაში"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"მაგრად დააჭირეთ სენსორს"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"თითის ანაბეჭდის დამუშავება ვერ მოხერხდა. გთხოვთ, ცადოთ ხელახლა."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"თითის ანაბეჭდის ამოცნობა ვერ ხერხდება. ცადეთ ხელახლა."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"გაწმინდეთ თითის ანაბეჭდის სენსორი და ხელახლა ცადეთ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"გაწმინდეთ სენსორი და ხელახლა ცადეთ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"მაგრად დააჭირეთ სენსორს"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"თითის აღება მეტისმეტად ნელა მოხდა. გთხოვთ, სცადოთ ხელახლა."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ცადეთ სხვა თითის ანაბეჭდი"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ზედმეტად ნათელია"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"აღმოჩენილია Ძლიერი დაჭერა"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ცადეთ დარეგულირება"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ოდნავ შეცვალეთ თითის დაჭერის ადგილი ყოველ ჯერზე"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"სახე ავტორიზებულია, დააჭირეთ დადასტურებას"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"თითის ანაბეჭდის აპარატურა არ არის ხელმისაწვდომი."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"თითის ანაბეჭდის დაყენება ვერ ხერხდება"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"თითის ანაბეჭდის ლოდინის დრო ამოიწურა. სცადეთ ხელახლა."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"თითის ანაბეჭდის დაყენების დრო ამოიწურა. ცადეთ ხელახლა."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"თითის ანაბეჭდის აღების ოპერაცია გაუქმდა."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"თითის ანაბეჭდის ოპერაცია გააუქმა მომხმარებელმა."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ძალიან ბევრი მცდელობა იყო. სცადეთ მოგვიანებით."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"მეტისმეტად ბევრი მცდელობა იყო. სანაცვლოდ გამოიყენეთ ეკრანის დაბლოკვა."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"მეტისმეტად ბევრი მცდელობა იყო. სანაცვლოდ გამოიყენეთ ეკრანის დაბლოკვა."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ხელახლა სცადეთ"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"თითის ანაბეჭდის დამუშავება შეუძლებელია. ცადეთ ხელახლა."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"თითის ანაბეჭდები რეგისტრირებული არ არის."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ამ მოწყობილობას არ აქვს თითის ანაბეჭდის სენსორი."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"სენსორი დროებით გათიშულია."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ეწვიეთ შეკეთების სერვისის პროვაიდერს."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"თქვენი სახის მოდელი ვერ იქმნება. ცადეთ ხელახლა."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"მეტისმეტად ნათელია. ცადეთ უფრო სუსტი განათება."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"განათება არასაკმარისია"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"გაწიეთ ტელეფონი უფრო შორს"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"მიიტანეთ ტელეფონი უფრო ახლოს"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"აწიეთ ტელეფონი ზემოთ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"აპების ჩართვა"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ჩატვირთვის დასასრული."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"თქვენ დააჭირეთ ჩართვის ღილაკს — ჩვეულებრივ, ის ეკრანს გამორთავს.\n\nთქვენი თითის ანაბეჭდის დაყენებისას ცადეთ მსუბუქად შეხება."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"შეეხეთ ეკრანის გამოსართავად"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ეკრანის გამორთვა"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"დაყენების დასასრულებლად გამორთეთ ეკრანი"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"გამორთვა"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"გსურთ ანაბეჭდის დადასტურების გაგრძელება?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"თქვენ დააჭირეთ ჩართვის ღილაკს — ჩვეულებრივ, ის ეკრანს გამორთავს.\n\nთქვენი თითის ანაბეჭდის დასადასტურებლად ცადეთ მსუბუქად შეხება."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ეკრანის გამორთვა"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ტელევიზია"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ტელეფონი"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"სპიკერების მიმაგრება"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"გარე მოწყობილობა"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ყურსასმენები"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"სისტემა"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 54edba3..535996f 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран құлпын пайдалану"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Жалғастыру үшін экран құлпын енгізіңіз."</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сканерді қатты басыңыз."</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Саусақ ізін өңдеу мүмкін емес. Әрекетті қайталаңыз."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Саусақ ізін тану мүмкін емес. Қайталап көріңіз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Саусақ ізін оқу сканерін тазалап, әрекетті қайталаңыз."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сканерді тазалап, әрекетті қайталаңыз."</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сканерді қатты басыңыз."</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Саусағыңызды тым баяу қозғалттыңыз. Әрекетті қайталап көріңіз."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Басқа саусақ ізін байқап көріңіз."</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Тым жарық."</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Қуат түймесін басу әрекеті анықталды."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Дұрыстап қойып көріңіз."</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың қалпын аздап өзгертіп тұрыңыз."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,13 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Бет танылды, \"Растау\" түймесін басыңыз"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Саусақ ізі жабдығы қолжетімді емес."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Саусақ ізін орнату мүмкін емес."</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Саусақ ізін күту уақыты бітті. Әрекетті қайталаңыз."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Саусақ ізін реттеу уақыты өтіп кетті. Қайталап көріңіз."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Саусақ ізі операциясынан бас тартылған."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Пайдаланушы саусақ ізі операциясынан бас тартты."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Талпыныстар тым көп. Кейінірек қайталап көріңіз."</string>
- <!-- no translation found for fingerprint_error_lockout_permanent (9060651300306264843) -->
- <skip />
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Әрекетті қайталаңыз."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Тым көп әрекет жасалды. Орнына экран құлпын пайдаланыңыз."</string>
+ <string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Тым көп әрекет жасалды. Орнына экран құлпын пайдаланыңыз."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Саусақ ізін өңдеу мүмкін емес. Қайталап көріңіз."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Саусақ іздері тіркелмеген."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бұл құрылғыда саусақ ізін оқу сканері жоқ."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчик уақытша өшірулі."</string>
@@ -635,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Жөндеу қызметіне барыңыз."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Бет үлгісі жасалмады. Қайталап көріңіз."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Тым ашық. Күңгірттеу жарық керек."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарық жеткіліксіз"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонды алшақ ұстаңыз."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонды жақынырақ ұстаңыз."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонды жоғарырақ ұстаңыз."</string>
@@ -1250,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Қолданбалар іске қосылуда."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Қосуды аяқтауда."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Қуат түймесін бастыңыз. Бұл әдетте экранды өшіреді.\n\nСаусақ ізін реттеу үшін, оны жайлап түртіп көріңіз."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Экранды өшіру үшін түртіңіз"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Экранды өшіру"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Реттеуді аяқтау үшін экранды өшіріңіз"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Өшіру"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Саусақ ізін растауды жалғастырасыз ба?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Қуат түймесін бастыңыз. Бұл әдетте экранды өшіреді.\n\nСаусақ ізін растау үшін, оны жайлап түртіп көріңіз."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Экранды өшіру"</string>
@@ -1612,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ТД"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Үндеткіштерді қондыру"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Сыртқы құрылғы"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Құлақаспаптар"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Жүйе"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 0d3d07d..09c4478 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ប្រើការចាក់សោអេក្រង់"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"បញ្ចូលការចាក់សោអេក្រង់របស់អ្នក ដើម្បីបន្ត"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"សង្កត់លើឧបករណ៍ចាប់សញ្ញាឱ្យណែន"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"មិនអាចដំណើរការស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្តងទៀត។"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"មិនអាចសម្គាល់ស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"សម្អាតឧបករណ៍ចាប់ស្នាមម្រាមដៃ រួចព្យាយាមម្ដងទៀត"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"សម្អាតឧបករណ៍ចាប់សញ្ញា រួចព្យាយាមម្ដងទៀត"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"សង្កត់លើឧបករណ៍ចាប់សញ្ញាឱ្យណែន"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ចលនាម្រាមដៃយឺតពេកហើយ។ សូមព្យាយាមម្តងទៀត។"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"សាកល្បងប្រើស្នាមម្រាមដៃផ្សេងទៀត"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ភ្លឺពេក"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ចាប់ដឹងថាចុចប៊ូតុងថាមពល"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"សាកល្បងកែតម្រូវ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ប្ដូរទីតាំងម្រាមដៃរបស់អ្នកតិចៗគ្រប់ពេល"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"បានផ្ទៀងផ្ទាត់មុខ សូមចុចបញ្ជាក់"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ផ្នែករឹងស្នាមម្រាមដៃមិនមានទេ។"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"មិនអាចរៀបចំស្នាមម្រាមដៃបានទេ"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ស្នាមម្រាមដៃបានអស់ម៉ោង។ សូមព្យាយាមម្តងទៀត។"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ការរៀបចំស្នាមម្រាមដៃបានអស់ម៉ោង។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"បានបោះបង់ប្រតិបត្តិការស្នាមម្រាមដៃ។"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ប្រតិបត្តិការស្នាមម្រាមដៃត្រូវបានបោះបង់ដោយអ្នកប្រើប្រាស់។"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ព្យាយាមចូលច្រើនពេកហើយ។ សូមព្យាយាមម្តងទៀតពេលក្រោយ។"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ព្យាយាមច្រើនដងពេក។ សូមប្រើការចាក់សោអេក្រង់ជំនួសវិញ។"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ព្យាយាមច្រើនដងពេក។ សូមប្រើការចាក់សោអេក្រង់ជំនួសវិញ។"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ព្យាយាមម្ដងទៀត។"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"មិនអាចដំណើរការស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"មិនមានការចុះឈ្មោះស្នាមម្រាមដៃទេ។"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ឧបករណ៍នេះមិនមានឧបករណ៍ចាប់ស្នាមម្រាមដៃទេ។"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"បានបិទឧបករណ៍ចាប់សញ្ញាជាបណ្តោះអាសន្ន។"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ទាក់ទងក្រុមហ៊ុនផ្ដល់ការជួសជុល។"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ភ្លឺពេក។ សូមសាកល្បងប្រើពន្លឺស្រាលជាងនេះ។"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"មិនមានពន្លឺគ្រប់គ្រាន់"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ដាក់ទូរសព្ទឱ្យឆ្ងាយជាងមុន"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ដាក់ទូរសព្ទឱ្យជិតជាងមុន"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ដាក់ទូរសព្ទឱ្យខ្ពស់ជាងមុន"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ចាប់ផ្ដើមកម្មវិធី។"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"បញ្ចប់ការចាប់ផ្ដើម។"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"អ្នកបានចុចប៊ូតុងថាមពល — ជាធម្មតាការធ្វើបែបនេះនឹងបិទអេក្រង់។\n\nសាកល្បងចុចថ្នមៗ ខណៈពេលកំពុងរៀបចំស្នាមម្រាមដៃរបស់អ្នក។"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ចុច ដើម្បីបិទអេក្រង់"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"បិទអេក្រង់"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ដើម្បីបញ្ចប់ការរៀបចំ សូមបិទអេក្រង់"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"បិទ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"បន្តផ្ទៀងផ្ទាត់ស្នាមម្រាមដៃរបស់អ្នកឬ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"អ្នកបានចុចប៊ូតុងថាមពល — ជាធម្មតាការធ្វើបែបនេះនឹងបិទអេក្រង់។\n\nសាកល្បងចុចថ្នមៗ ដើម្បីផ្ទៀងផ្ទាត់ស្នាមម្រាមដៃរបស់អ្នក។"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"បិទអេក្រង់"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ទូរទស្សន៍"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ទូរសព្ទ"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ភ្ជាប់អូប៉ាល័រ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ឧបករណ៍ខាងក្រៅ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"កាស"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ប្រព័ន្ធ"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 9925a26..7fd8aef 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಬಳಸಿ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ಮುಂದುವರಿಯಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ಸೆನ್ಸರ್ ಮೇಲೆ ದೃಢವಾಗಿ ಒತ್ತಿರಿ"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ಸೆನ್ಸರ್ ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ಸೆನ್ಸರ್ ಮೇಲೆ ದೃಢವಾಗಿ ಒತ್ತಿರಿ"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ಬೆರಳನ್ನು ತುಂಬಾ ನಿಧಾನವಾಗಿ ಸರಿಸಲಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ಮತ್ತೊಂದು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ತುಂಬಾ ಪ್ರಕಾಶಮಾನವಾಗಿದೆ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ಪವರ್ ಬಟನ್ ಒತ್ತುವುದು ಪತ್ತೆಯಾಗಿದೆ"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮ್ಮ ಬೆರಳಿನ ಸ್ಥಾನವನ್ನು ಸ್ವಲ್ಪ ಮಟ್ಟಿಗೆ ಬದಲಾಯಿಸಿ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ, ದೃಢೀಕರಣವನ್ನು ಒತ್ತಿ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಹಾರ್ಡ್ವೇರ್ ಲಭ್ಯವಿಲ್ಲ."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅವಧಿ ಮೀರಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಸೆಟಪ್ ಮಾಡುವ ಅವಧಿ ಮುಗಿದಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ರದ್ದುಮಾಡಲಾಗಿದೆ."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ಬಳಕೆದಾರರು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ರದ್ದುಪಡಿಸಿದ್ದಾರೆ."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ಹಲವಾರು ಪ್ರಯತ್ನಗಳು. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಬದಲಾಗಿ ಸ್ಕ್ರೀನ್ಲಾಕ್ ಬಳಸಿ."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಬದಲಾಗಿ ಪರದೆಲಾಕ್ ಬಳಸಿ."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ಯಾವುದೇ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ನೋಂದಣಿ ಮಾಡಿಲ್ಲ."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ಈ ಸಾಧನವು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಅನ್ನು ಹೊಂದಿಲ್ಲ."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ಸೆನ್ಸಾರ್ ಅನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ರಿಪೇರಿ ಮಾಡುವವರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ಫೇಸ್ ಮಾಡೆಲ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ತುಂಬಾ ಪ್ರಕಾಶಮಾನವಾಗಿದೆ ಮಂದ ಪ್ರಕಾಶಮಾನವಿರುವ ಲೈಟ್ ಬಳಸಿ"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ಸಾಕಷ್ಟು ಬೆಳಕು ಇಲ್ಲ"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ಫೋನ್ ಅನ್ನು ದೂರಕ್ಕೆ ಸರಿಸಿ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ಫೋನ್ ಅನ್ನು ಸಮೀಪಕ್ಕೆ ತನ್ನಿ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ಫೋನ್ ಅನ್ನು ಮೇಲಕ್ಕೆ ಎತ್ತಿ ಹಿಡಿಯಿರಿ."</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ಬೂಟ್ ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಹೊಂದಿಸುವಾಗ ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಿ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಲು, ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಿ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ಆಫ್ ಮಾಡಿ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಪರಿಶೀಲನೆ ಮುಂದುವರಿಸುವುದೇ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ಸ್ಕ್ರೀನ್ ಆಫ್ ಮಾಡಿ"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ಟಿವಿ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ಫೋನ್"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ಡಾಕ್ ಸ್ಪೀಕರ್ಗಳು"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ಬಾಹ್ಯ ಸಾಧನ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ಹೆಡ್ಫೋನ್ಗಳು"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ಸಿಸ್ಟಂ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 40c545f..35e9e85 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"화면 잠금 사용"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"계속하려면 화면 잠금용 사용자 인증 정보를 입력하세요"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"지문 센서를 닦은 후 다시 시도해 보세요."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"센서를 닦은 후 다시 시도해 보세요."</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"다른 지문으로 시도"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"너무 밝음"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"전원 누름이 감지되었습니다."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"조정 시도"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"지문을 등록할 때마다 손가락을 조금씩 이동하세요"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"얼굴이 인증되었습니다. 확인을 누르세요"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"지문 인식 하드웨어를 사용할 수 없습니다."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"지문을 설정할 수 없음"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"지문 인식 시간이 초과되었습니다. 다시 시도하세요."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"지문 설정 시간이 초과되었습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"지문 인식 작업이 취소되었습니다."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"사용자가 지문 인식 작업을 취소했습니다."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"시도 횟수가 너무 많습니다. 나중에 다시 시도하세요."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"시도 횟수가 너무 많습니다. 화면 잠금을 대신 사용하세요."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"시도 횟수가 너무 많습니다. 화면 잠금을 대신 사용하세요."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"다시 시도해 보세요."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"지문을 처리할 수 없습니다. 다시 시도해 주세요."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"등록된 지문이 없습니다."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"기기에 지문 센서가 없습니다."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"센서가 일시적으로 사용 중지되었습니다."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"수리업체에 방문하세요."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"너무 밝습니다. 조명 밝기를 조금 낮춰보세요."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"조명이 부족합니다."</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"휴대전화를 얼굴에서 더 멀리 떨어뜨려 주세요."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"휴대전화를 얼굴에 더 가까이 가져와 주세요."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위로 이동하세요"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"앱을 시작하는 중입니다."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"부팅 완료"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"전원 버튼을 눌렀습니다. 이러면 보통 화면이 꺼집니다.\n\n지문 설정 중에 가볍게 탭하세요."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"탭하여 화면 끄기"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"화면 끄기"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"설정을 완료하려면 화면을 끄세요"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"사용 중지"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"지문 인증을 계속할까요?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"전원 버튼을 눌렀습니다. 이러면 보통 화면이 꺼집니다.\n\n지문을 인식하려면 화면을 가볍게 탭하세요."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"화면 끄기"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"휴대전화"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"도크 스피커"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"외부 기기"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"헤드폰"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"시스템"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index f27b0d6..176a49d 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран кулпусун колдонуу"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Улантуу үчүн экрандын кулпусун киргизиңиз"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сенсорду катуу басыңыз"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Манжа изи иштелбей койду. Кайталап көрүңүз."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Манжа изи таанылбай жатат. Кайра аракет кылыңыз."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Манжа изинин сенсорун тазалап, кайра аракет кылыңыз"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сенсорду тазалап, кайра аракет кылыңыз"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сенсорду катуу басыңыз"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Манжа өтө жай жылды. Кайталап көрүңүз."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Башка манжа изин байкап көрүңүз"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Өтө жарык"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Кубат баскычы басылганы аныкталды"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Тууралап көрүңүз"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын ар жолкусунда бир аз өзгөртүп туруңуз"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Жүздүн аныктыгы текшерилди, эми \"Ырастоону\" басыңыз"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Манжа изинин аппараттык камсыздоосу жеткиликтүү эмес."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Манжа изи жөндөлбөй жатат"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Манжа изин күтүү мөөнөтү бүттү. Кайталап көрүңүз."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Манжа изин тууралоо убакыты бүтүп калды. Кайра аракет кылыңыз."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Манжа изи иш-аракети жокко чыгарылды."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Манжа изи операциясын колдонуучу жокко чыгарды."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Аракеттер өтө көп болду. Бир аздан кийин кайталап көрүңүз."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Өтө көп жолу аракет кылдыңыз. Экранды кулпулоо функциясын колдонуңуз."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Өтө көп жолу аракет кылдыңыз. Экранды кулпулоо функциясын колдонуңуз."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Кайра бир аракеттениңиз."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Манжа изи иштетилген жок. Кайра аракет кылыңыз."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Бир да манжа изи катталган эмес."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бул түзмөктө манжа изинин сенсору жок."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сенсор убактылуу өчүрүлгөн."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Тейлөө кызматына кайрылыңыз."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Жүзүңүздүн үлгүсү түзүлгөн жок. Кайталаңыз."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Өтө жарык. Жарыктыкты азайтып көрүңүз."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарык жетишсиз"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонду алыстатыңыз"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонду жакындатыңыз"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду жогору жылдырыңыз"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Колдонмолорду иштетип баштоо"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Жүктөлүүдө"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин жөндөп жатканда аны акырын басып көрүңүз."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Экранды өчүрүү үчүн таптаңыз"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Экранды өчүрүү"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Тууралап бүтүрүү үчүн экранды өчүрүңүз"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Өчүрүү"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Манжаңыздын изин ырастоону улантасызбы?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин ырастоо үчүн аны акырын басып көрүңүз."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Экранды өчүрүү"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Сыналгы"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Аудио док бекет"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Тышкы түзмөк"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Кулакчын"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Тутум"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 7c9f815..7ca4b56 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ໃຊ້ການລັອກໜ້າຈໍ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ໃສ່ການລັອກໜ້າຈໍຂອງທ່ານເພື່ອສືບຕໍ່"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ກົດຢູ່ເຊັນເຊີໃຫ້ແໜ້ນ"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ບໍ່ສາມາດດຳເນີນການລາຍນີ້ວມືໄດ້. ກະລຸນາລອງໃໝ່ອີກ."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ບໍ່ສາມາດຈຳແນກລາຍນິ້ວມືໄດ້. ກະລຸນາລອງໃໝ່."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ໃຫ້ອະນາໄມເຊັນເຊີລາຍນິ້ວມືແລ້ວລອງໃໝ່"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ໃຫ້ອະນາໄມເຊັນເຊີແລ້ວລອງໃໝ່"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ກົດຢູ່ເຊັນເຊີໃຫ້ແໜ້ນ"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ຍ້າຍນີ້ວມືໄປຊ້າເກີນໄປ. ກະລຸນາລອງໃໝ່ອີກ."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ລອງໃຊ້ລາຍນິ້ວມືອື່ນ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ແຈ້ງເກີນໄປ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ກວດພົບແຮງກົດ"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ກະລຸນາລອງປັບແກ້"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ປ່ຽນຕຳແໜ່ງຂອງນິ້ວມືຂອງທ່ານເລັກນ້ອຍໃນແຕ່ລະເທື່ອ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ພິສູດຢືນຢັນໃບໜ້າແລ້ວ, ກະລຸນາກົດຢືນຢັນ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ບໍ່ມີຮາດແວລາຍນີ້ວມືໃຫ້ຢູ່."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ບໍ່ສາມາດຕັ້ງຄ່າລາຍນິ້ວມືໄດ້"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ເວລາລາຍນີ້ວມືບໍ່ເຂົ້າເຖິງໄດ້. ລອງໃໝ່ອີກ."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ໝົດເວລາຕັ້ງຄ່າລາຍນິ້ວມື. ກະລຸນາລອງໃໝ່."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ຍົກເລີກການດຳເນີນການລາຍນີ້ວມືແລ້ວ."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ຜູ້ໃຊ້ໄດ້ຍົກເລີກຄຳສັ່ງລາຍນິ້ວມືແລ້ວ."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ມີຄວາມພະຍາຍາມຫຼາຍຄັ້ງເກີນໄປ. ລອງໃໝ່ພາຍຫຼັງ."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ກະລຸນາໃຊ້ການລອກໜ້າຈໍແທນ."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ກະລຸນາໃຊ້ການລອກໜ້າຈໍແທນ."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ລອງໃໝ່ອີກຄັ້ງ."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ບໍ່ສາມາດປະມວນຜົນລາຍນິ້ວມືໄດ້. ກະລຸນາລອງໃໝ່."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ບໍ່ມີການລົງທະບຽນລາຍນິ້ວມື."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ອຸປະກອນນີ້ບໍ່ມີເຊັນເຊີລາຍນິ້ວມື."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ປິດການເຮັດວຽກຂອງເຊັນເຊີໄວ້ຊົ່ວຄາວແລ້ວ."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ກະລຸນາໄປຫາຜູ້ໃຫ້ບໍລິການສ້ອມແປງ."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ບໍ່ສາມາດສ້າງຮູບແບບໃບໜ້າຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ແຈ້ງເກີນໄປ. ລອງຄ່ອຍແສງໄຟລົງ."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ແສງບໍ່ພໍ"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ເລື່ອນໂທລະສັບອອກໄປໄກຂຶ້ນ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ເລື່ອນໂທລະສັບເຂົ້າໄປໃກ້ຂຶ້ນ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ຍົກໂທລະສັບໃຫ້ສູງຂຶ້ນ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ກຳລັງເປີດແອັບຯ."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ກຳລັງສຳເລັດການເປີດລະບົບ."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ທ່ານກົດປຸ່ມເປີດປິດ, ປົກກະຕິນີ້ຈະປິດໜ້າຈໍ.\n\nລອງແຕະຄ່ອຍໆໃນລະຫວ່າງຕັ້ງຄ່າລາຍນິ້ວມືຂອງທ່ານ."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ແຕະເພື່ອປິດໜ້າຈໍ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ປິດໜ້າຈໍ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ເພື່ອສິ້ນສຸດການຕັ້ງຄ່າ, ໃຫ້ປິດໜ້າຈໍ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ປິດໄວ້"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ສືບຕໍ່ການຢັ້ງຢືນລາຍນິ້ວມືຂອງທ່ານບໍ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ທ່ານກົດປຸ່ມເປີດປິດ, ປົກກະຕິນີ້ຈະເປັນການປິດໜ້າຈໍ.\n\nໃຫ້ລອງແຕະຄ່ອຍໆເພື່ອຢັ້ງຢືນລາຍນິ້ວມືຂອງທ່ານ."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ປິດໜ້າຈໍ"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ໂທລະພາບ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ໂທລະສັບ"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ບ່ອນຕັ້ງລຳໂພງ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ອຸປະກອນພາຍນອກ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ຫູຟັງ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ລະບົບ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 2954f9c..9f646f0 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Naudoti ekrano užraktą"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jei norite tęsti, įveskite ekrano užraktą"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tvirtai paspauskite jutiklį"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nepavyko apdoroti piršto antspaudo. Bandykite dar kartą."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nepavyko atpažinti kontrolinio kodo. Bandykite dar kartą."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nuvalykite kontrolinio kodo jutiklį ir bandykite dar kartą"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nuvalykite jutiklį ir bandykite dar kartą"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tvirtai paspauskite jutiklį"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Per lėtai judinate pirštą. Bandykite dar kartą."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Pabandykite kitą kontrolinį kodą"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Per šviesu"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Aptiktas maitinimo mygtuko paspaudimas"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Pabandykite koreguoti"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Kaskart šiek tiek pakeiskite piršto poziciją"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Veidas autentifikuotas, paspauskite patvirtinimo mygtuką"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Piršto antspaudo aparatinė įranga nepasiekiama."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nepavyko nustatyti kontrolinio kodo"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Baigėsi piršto antspaudo nustatymo skirtasis laikas. Bandykite dar kartą."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Baigėsi kontrolinio kodo sąrankos skirtasis laikas. Bandykite dar kartą."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Piršto antspaudo operacija atšaukta."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Piršto antspaudo operaciją atšaukė naudotojas."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Per daug bandymų. Vėliau bandykite dar kartą."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Per daug bandymų. Naudokite ekrano užraktą."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Per daug bandymų. Naudokite ekrano užraktą."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Bandykite dar kartą."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nepavyko apdoroti kontrolinio kodo. Bandykite dar kartą."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Neužregistruota jokių kontrolinių kodų."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šiame įrenginyje nėra kontrolinio kodo jutiklio."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Jutiklis laikinai išjungtas."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Apsilankykite pas taisymo paslaugos teikėją."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nepavyko sukurti veido modelio. Band. dar kartą."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Per šviesu. Išbandykite mažesnį apšvietimą."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nepakanka apšvietimo"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Laikykite telefoną toliau"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Laikykite telefoną arčiau"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Laikykite telefoną aukščiau"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Paleidžiamos programos."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Užbaigiamas paleidimas."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Paspaudėte maitinimo mygtuką, taip paprastai išjungiamas ekranas.\n\nNustatydami kontrolinį kodą, pabandykite jį švelniai paliesti."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Palieskite, kad išjungtumėte ekraną"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Išjungti ekraną"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Sąrankos užbaigimas išjungus ekraną"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Išjungti"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Tęsti kontrolinio kodo patvirtinimą?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Paspaudėte maitinimo mygtuką, taip paprastai išjungiamas ekranas.\n\nNorėdami patvirtinti kontrolinį kodą, pabandykite jį švelniai paliesti."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Išjungti ekraną"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefonas"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Doko garsiakalbiai"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Išorinis įrenginys"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Ausinės"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 853a490..3a078db 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekrāna bloķēšanas metodes izmantošana"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Lai turpinātu, ievadiet ekrāna bloķēšanas informāciju"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Stingri spiediet pirkstu pie sensora"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nevarēja apstrādāt pirksta nospiedumu. Lūdzu, mēģiniet vēlreiz."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nevar atpazīt pirksta nospiedumu. Mēģiniet vēlreiz."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Notīriet pirkstu nospiedumu sensoru un mēģiniet vēlreiz"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Notīriet sensoru un mēģiniet vēlreiz"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Stingri spiediet pirkstu pie sensora"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pārāk lēna pirksta kustība. Lūdzu, mēģiniet vēlreiz."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Izmēģiniet citu pirksta nospiedumu"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Pārāk spilgts"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Konstatēta barošanas pogas nospiešana"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Mēģiniet mainīt pozīciju"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Katru reizi mazliet mainiet pirksta pozīciju."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Seja ir autentificēta. Nospiediet pogu Apstiprināt."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Nospieduma aparatūra nav pieejama."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nevar iestatīt pirksta nospiedumu"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Pirkstu nospiedumu nolasīšanas aparatūras noildze. Mēģiniet vēlreiz."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Iestatot pirksta nospiedumu, iestājās noildze. Mēģiniet vēlreiz."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Nospieduma darbība neizdevās."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Lietotājs atcēla pirksta nospieduma darbību."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Pārāk daudz mēģinājumu. Vēlāk mēģiniet vēlreiz."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Pārāk daudz mēģinājumu. Izmantojiet ekrāna bloķēšanu."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Pārāk daudz mēģinājumu. Izmantojiet ekrāna bloķēšanu."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Mēģiniet vēlreiz."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nevar apstrādāt pirksta nospiedumu. Mēģiniet vēlreiz."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nav reģistrēts neviens pirksta nospiedums."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šajā ierīcē nav pirksta nospieduma sensora."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensors ir īslaicīgi atspējots."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Sazinieties ar remonta pakalpojumu sniedzēju."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nevar izveidot sejas modeli. Mēģiniet vēlreiz."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Pārāk spilgts. Izmēģiniet maigāku apgaismojumu."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nepietiekams apgaismojums"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Pārvietojiet tālruni tālāk."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Pārvietojiet tālruni tuvāk."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Paceliet tālruni augstāk."</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Notiek lietotņu palaišana."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Tiek pabeigta sāknēšana."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Jūs nospiedāt barošanas pogu — tādējādi parasti tiek izslēgts ekrāns.\n\nMēģiniet viegli pieskarties, iestatot pirksta nospiedumu."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Pieskarieties, lai izslēgtu ekrānu"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Izslēgt ekrānu"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Lai beigtu iestatīt, izslēdziet ekrānu"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Izslēgt"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Vai apstiprināt pirksta nospiedumu?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Jūs nospiedāt barošanas pogu — tādējādi parasti tiek izslēgts ekrāns.\n\nMēģiniet viegli pieskarties, lai apstiprinātu pirksta nospiedumu."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Izslēgt ekrānu"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Tālrunis"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Doka skaļruņi"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Ārēja ierīce"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Austiņas"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistēma"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 9ce43d1..c67819e 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Користи заклучување екран"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Внесете го заклучувањето на екранот за да продолжите"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Цврсто притиснете на сензорот"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатокот не може да се обработи. Обидете се повторно."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не се препознава отпечатокот. Обидете се повторно."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Исчистете го сензорот за отпечатоци и обидете се повторно"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Исчистете го сензорот и обидете се повторно"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Цврсто притиснете на сензорот"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Прстот се движеше премногу бавно. Обидете се повторно."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Пробајте со друг отпечаток"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Премногу светло"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Откриено е притискање на копчето за вклучување"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Пробајте да го приспособите прстот"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот по малку секој пат"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицето е проверено, притиснете го копчето „Потврди“"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Хардверот за отпечатоци не е достапен."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Не може да се постави отпечаток"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Се достигна времето на истекување на отпечатокот. Обидете се повторно."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Времето за поставување отпечаток истече. Обидете се повторно."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Операцијата со отпечаток се откажа."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Корисникот ја откажа потврдата со отпечаток."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Премногу обиди. Обидете се повторно подоцна."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Премногу обиди. Користете заклучување екран."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Премногу обиди. Користете заклучување екран."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Обидете се повторно."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Не може да се обработи отпечатокот од прст. Обидете се повторно."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Не се запишани отпечатоци."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Уредов нема сензор за отпечатоци."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензорот е привремено оневозможен."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Однесете го на поправка."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Не може да создаде модел на лик. Обидете се пак."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Премногу светла. Пробајте со послабо осветлување."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Нема доволно светлина"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Оддалечете го телефонот"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете го телефонот"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Кренете го телефонот погоре"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Се стартуваат апликациите."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Подигањето завршува."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Го притиснавте копчето за вклучување — така обично се исклучува екранот.\n\nДопрете лесно додека го поставувате отпечатокот."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Допрете за да го исклучите екранот"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Исклучи го екранот"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"За да завршите со поставувањето, исклучете го екранот."</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Исклучи"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Да продолжи потврдувањето на отпечаток?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Го притиснавте копчето за вклучување — така обично се исклучува екранот.\n\nДопрете лесно за да го потврдите отпечатокот."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Исклучи го екранот"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевизор"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Приклучи звучници"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Надворешен уред"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Слушалки"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Систем"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index c71047d..63a5e0d 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"തുടരാൻ നിങ്ങളുടെ സ്ക്രീൻ ലോക്ക് നൽകുക"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ഫിംഗർപ്രിന്റ് പ്രോസസ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ഫിംഗർപ്രിന്റ് സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"വിരൽ വളരെ പതുക്കെ നീക്കി. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"മറ്റൊരു ഫിംഗർപ്രിന്റ് ഉപയോഗിച്ച് നോക്കുക"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"തെളിച്ചം വളരെയധികമാണ്"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"പവർ ബട്ടൺ അമർത്തിയത് തിരിച്ചറിഞ്ഞു"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"അൽപ്പം നീക്കി നോക്കൂ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ഓരോ തവണയും നിങ്ങളുടെ വിരലിന്റെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"മുഖം പരിശോധിച്ചുറപ്പിച്ചു, സ്ഥിരീകരിക്കുക അമർത്തുക"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ഫിംഗർപ്രിന്റ് ഹാർഡ്വെയർ ലഭ്യമല്ല."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ഫിംഗർപ്രിന്റ് സജ്ജീകരിക്കാനാകില്ല"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ഫിംഗർപ്രിന്റ് നൽകേണ്ട സമയം കഴിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ഫിംഗർപ്രിന്റ് സജ്ജീകരണം ടൈംഔട്ടായി. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ഫിംഗർപ്രിന്റ് പ്രവർത്തനം റദ്ദാക്കി."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ഉപയോക്താവ് റദ്ദാക്കിയ ഫിംഗർപ്രിന്റ് പ്രവർത്തനം."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"നിരവധി തവണ ശ്രമിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"നിരവധി ശ്രമങ്ങൾ. പകരം സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"നിരവധി ശ്രമങ്ങൾ. പകരം സ്ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"വീണ്ടും ശ്രമിക്കൂ."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ഫിംഗർപ്രിന്റ് പ്രോസസ് ചെയ്യാനാകില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"വിരലടയാളങ്ങൾ എൻറോൾ ചെയ്തിട്ടില്ല."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ഈ ഉപകരണത്തിൽ ഫിംഗർപ്രിന്റ് സെൻസറില്ല."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"സെൻസർ താൽക്കാലികമായി പ്രവർത്തനരഹിതമാക്കി."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"റിപ്പയർ കേന്ദ്രം സന്ദർശിക്കുക."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"മുഖ മോഡൽ സൃഷ്ടിക്കാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"വളരെയധികം തെളിച്ചം. സൗമ്യതയേറിയ പ്രകാശം ശ്രമിക്കൂ."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"വേണ്ടത്ര പ്രകാശമില്ല"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ഫോൺ കൂടുതൽ ദൂരേയ്ക്ക് നീക്കുക"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ഫോൺ അടുത്തേക്ക് നീക്കുക"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ഫോൺ മുകളിലേക്ക് ഉയർത്തുക"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"അപ്ലിക്കേഷനുകൾ ആരംഭിക്കുന്നു."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ബൂട്ട് ചെയ്യൽ പൂർത്തിയാകുന്നു."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"നിങ്ങൾ പവർ ബട്ടൺ അമർത്തി — സാധാരണയായി ഇത് സ്ക്രീൻ ഓഫാകുന്നതിന് കാരണമാകും.\n\nനിങ്ങളുടെ ഫിംഗർപ്രിന്റ് സജ്ജീകരിക്കുമ്പോൾ മൃദുവായി ടാപ്പ് ചെയ്ത് നോക്കുക."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"സ്ക്രീൻ ഓഫാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"സ്ക്രീൻ ഓഫാക്കുക"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"സജ്ജീകരണം നിർത്താൻ, സ്ക്രീൻ ഓഫാക്കുക"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ഓഫാക്കുക"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ഫിംഗർപ്രിന്റ് പരിശോധിച്ചുറപ്പിക്കൽ തുടരണോ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"നിങ്ങൾ പവർ ബട്ടൺ അമർത്തി — സാധാരണയായി ഇത് സ്ക്രീൻ ഓഫാകുന്നതിന് കാരണമാകും.\n\nനിങ്ങളുടെ ഫിംഗർപ്രിന്റ് പരിശോധിച്ചുറപ്പിക്കാൻ മൃദുവായി ടാപ്പ് ചെയ്ത് നോക്കുക."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"സ്ക്രീൻ ഓഫാക്കുക"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ടിവി"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ഫോണ്"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ഡോക്ക് സ്പീക്കറുകൾ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ബാഹ്യ ഉപകരണം"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ഹെഡ്ഫോണുകൾ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"സിസ്റ്റം"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 417500d..9be2b2c 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Дэлгэцийн түгжээг ашиглах"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Үргэлжлүүлэхийн тулд дэлгэцийн түгжээгээ оруулна уу"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Мэдрэгч дээр чанга дарна уу"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Хурууны хээ боловсруулж чадахгүй байна. Дахин оролдоно уу."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Хурууны хээг таних боломжгүй. Дахин оролдоно уу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Хурууны хээ мэдрэгчийг цэвэрлээд, дахин оролдоно уу"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Мэдрэгчийг цэвэрлээд, дахин оролдоно уу"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Мэдрэгч дээр чанга дарна уу"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Хуруу хэт удаан хөдөлгөсөн байна. Дахин оролдоно уу."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Өөр хурууны хээ туршина уу"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Хэт гэрэлтэй байна"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Цахилгаан даралтыг илрүүлсэн"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Тохируулж үзнэ үү"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Хурууныхаа байрлалыг тухай бүрд бага зэрэг өөрчилнө үү"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Царайг баталгаажууллаа. Баталгаажуулах товчлуурыг дарна уу"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Хурууны хээний төхөөрөмж бэлэн бус байна."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Хурууны хээ тохируулах боломжгүй"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Хурууны хээ оруулах хугацаа өнгөрсөн байна. Дахин оруулна уу."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Хурууны хээний тохируулга завсарласан. Дахин оролдоно уу."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Хурууны хээний бүртгэл амжилтгүй боллоо."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Хэрэглэгч хурууны хээний баталгаажуулалтыг цуцалсан байна."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Хэтэрхий олон оролдлоо. Түр хүлээгээд дахин оролдоно уу."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Хэт олон удаа оролдлоо. Оронд нь дэлгэцийн түгжээ ашиглана уу."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Хэт олон удаа оролдлоо. Оронд нь дэлгэцийн түгжээ ашиглана уу."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Дахин оролдно уу."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Хурууны хээг боловсруулах боломжгүй. Дахин оролдоно уу."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Бүртгүүлсэн хурууны хээ алга."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Энэ төхөөрөмжид хурууны хээ мэдрэгч алга."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Мэдрэгчийг түр хугацаанд идэвхгүй болгосон."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Засварын үйлчилгээ үзүүлэгчид зочилно уу."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Нүүрний загвар үүсгэж чадсангүй. Дахин оролдоно уу."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Хэт цайвар байна. Гэрэл багатай газар оролдоно уу."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Гэрэл хангалтгүй байна"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Утсаа холдуулна уу"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Утсаа ойртуулна уу"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Утсаа дээшлүүлнэ үү"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Апп-г эхлүүлж байна."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Эхлэлийг дуусгаж байна."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Та асаах/унтраах товчийг дарсан байна — энэ нь ихэвчлэн дэлгэцийг унтраадаг.\n\nХурууны хээгээ тохируулж байх үедээ зөөлөн товшиж үзнэ үү."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Дэлгэцийг унтраахын тулд товшино уу"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Дэлгэцийг унтраах"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Тохиргоог дуусгахын тулд дэлгэцийг унтраана уу"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Унтраах"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Хурууны хээгээ үргэлжлүүлэн баталгаажуулах уу?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Та асаах/унтраах товчийг дарсан байна — энэ нь ихэвчлэн дэлгэцийг унтраадаг.\n\nХурууны хээгээ баталгаажуулахын тулд зөөлөн товшиж үзнэ үү."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Дэлгэцийг унтраах"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Tелевиз"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Утас"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Чанга яригчийг суулгах"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Гадаад төхөөрөмж"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Чихэвч"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Систем"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index f91a18f..5729355b 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रीन लॉक वापरा"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"पुढे सुरू ठेवण्यासाठी तुमचे स्क्रीन लॉक एंटर करा"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"सेन्सरवर जोरात दाबा"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फिंगरप्रिंटवर प्रक्रिया करणे शक्य झाले नाही. कृपया पुन्हा प्रयत्न करा."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"फिंगरप्रिंट ओळखता आली नाही. पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फिंगरप्रिंट सेन्सर स्वच्छ करा आणि पुन्हा प्रयत्न करा"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"सेन्सर स्वच्छ करा आणि पुन्हा प्रयत्न करा"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेन्सरवर जोरात दाबा"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"बोट खूप सावकाश हलविले. कृपया पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"दुसरी फिंगरप्रिंट वापरून पहा"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"खूप प्रखर"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"पॉवर बटण दाबले गेल्याचे डिटेक्ट केले"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"अॅडजस्ट करण्याचा प्रयत्न करा"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"तुमच्या बोटाची स्थिती प्रत्येक वेळी थोडीशी बदला"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरा ऑथेंटिकेशन केलेला आहे, कृपया कंफर्म दाबा"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"फिंगरप्रिंट हार्डवेअर उपलब्ध नाही."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"फिंगरप्रिंट सेट करता आली नाही"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"फिंगरप्रिंट टाइमआउट झाले. पुन्हा प्रयत्न करा."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिट सेट करण्याची वेळ संपली आहे. पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"फिंगरप्रिंट ऑपरेशन रद्द झाले."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"वापरकर्त्याने फिंगरप्रिंट ऑपरेशन रद्द केले."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"खूप प्रयत्न केले. नंतर पुन्हा प्रयत्न करा."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"खूप जास्त प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"खूप जास्त प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"पुन्हा प्रयत्न करा."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"फिंगरप्रिंटवर प्रक्रिया करू शकत नाही. पुन्हा प्रयत्न करा."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कोणत्याही फिंगरप्रिंटची नोंद झाली नाही"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"या डिव्हाइसमध्ये फिंगरप्रिंट सेन्सर नाही."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"सेन्सर तात्पुरता बंद केला आहे."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"दुरुस्तीच्या सेवा पुरवठादाराला भेट द्या."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"फेस मॉडेल तयार करू शकत नाही. पुन्हा प्रयत्न करा."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"खूप प्रखर. आणखी सौम्य प्रकाश वापरून पहा."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"पुरेसा प्रकाश नाही"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"फोन आणखी दूर हलवा"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"फोन आणखी जवळ हलवा"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"फोन आणखी वर हलवा"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"अॅप्स सुरू करत आहे."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"बूट समाप्त होत आहे."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"तुम्ही पॉवर बटण दाबले — हे सहसा स्क्रीन बंद करते.\n\nतुमचे फिंगरप्रिंट सेट करताना हलके टॅप करून पहा."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"स्क्रीन बंद करण्यासाठी टॅप करा"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"स्क्रीन बंद करा"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"सेटअप संपवण्यासाठी, स्क्रीन बंद करा"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"बंद करा"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"फिंगरप्रिंट पडताळणी सुरू ठेवायची का?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"तुम्ही पॉवर बटण दाबले — हे सहसा स्क्रीन बंद करते.\n\nतुमच्या फिंगरप्रिंटची पडताळणी करण्यासाठी हलके टॅप करून पहा."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"स्क्रीन बंद करा"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"टीव्ही"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"फोन"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"स्पीकर डॉक करा"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"बाह्य डिव्हाइस"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"हेडफोन"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"सिस्टम"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 9b76a16..3595acc 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gunakan kunci skrin"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Masukkan kunci skrin untuk teruskan"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tekan dengan kuat pada penderia"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses cap jari. Sila cuba lagi."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Tidak dapat mengecam cap jari. Cuba lagi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Bersihkan penderia cap jari dan cuba lagi"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Bersihkan penderia dan cuba lagi"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan dengan kuat pada penderia"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Jari digerakkan terlalu perlahan. Sila cuba lagi."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Cuba cap jari lain"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Penekanan Kuasa dikesan"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Cuba selaraskan"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Tukar sedikit kedudukan jari anda setiap kali pergerakan dilakukan"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah disahkan, sila tekan sahkan"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Perkakasan cap jari tidak tersedia."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Tidak dapat menyediakan cap jari"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Sudah tamat masa untuk cap jari. Cuba lagi"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Persediaan cap jari telah tamat masa. Cuba lagi."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Pengendalian cap jari dibatalkan."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Pengendalian cap jari dibatalkan oleh pengguna."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Terlalu banyak percubaan. Cuba sebentar lagi."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Terlalu banyak percubaan. Gunakan kunci skrin."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Terlalu banyak percubaan. Gunakan kunci skrin."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Cuba lagi."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Tidak dapat memproses cap jari. Cuba lagi."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Tiada cap jari didaftarkan."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Peranti ini tiada penderia cap jari."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Penderia dilumpuhkan sementara."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Lawati penyedia pembaikan."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Tidak dapat membuat model wajah anda. Cuba lagi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Cuba pencahayaan yang lebih lembut."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Cahaya tidak mencukupi"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan telefon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan telefon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Tinggikan lagi telefon"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Memulakan apl."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"But akhir."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Anda menekan butang kuasa — tindakan ini biasanya mematikan skrin.\n\nCuba ketik dengan perlahan semasa menetapkan cap jari anda."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ketik untuk mematikan skrin"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Matikan skrin"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Untuk tamatkan persediaan, matikan skrin"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Matikan"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Terus mengesahkan cap jari anda?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Anda menekan butang kuasa — tindakan ini biasanya mematikan skrin.\n\nCuba ketik dengan perlahan untuk mengesahkan cap jari anda."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Matikan skrin"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Pembesar suara dok"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Peranti Luar"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Fon kepala"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 87916c4..da34c95 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ရှေ့ဆက်ရန် သင်၏ဖန်သားပြင် လော့ခ်ချခြင်းကို ထည့်ပါ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"အာရုံခံကိရိယာပေါ်တွင် သေချာဖိပါ"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"လက်ဗွေယူ၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"လက်ဗွေကို မမှတ်မိပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"လက်ဗွေ အာရုံခံကိရိယာကို သန့်ရှင်းပြီး ထပ်စမ်းကြည့်ပါ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"အာရုံခံကိရိယာကို သန့်ရှင်းပြီး ထပ်စမ်းကြည့်ပါ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"အာရုံခံကိရိယာပေါ်တွင် သေချာဖိပါ"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"လက်ညှိုးအလွန်နှေးကွေးစွာ ရွေ့ခဲ့သည်။ ကျေးဇူးပြု၍ ထပ်မံကြိုးစားပါ။"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"အခြားလက်ဗွေဖြင့် စမ်းကြည့်ပါ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"အလွန် လင်းသည်"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ဖွင့်ပိတ်ခလုတ် နှိပ်လိုက်သည်"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ပြင်ဆင်ကြည့်ပါ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"အကြိမ်တိုင်း သင့်လက်ချောင်း၏ အနေအထားကို အနည်းငယ်ပြောင်းပါ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ၊ အတည်ပြုရန်ကို နှိပ်ပါ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"လက်ဗွေ စက်ပစ္စည်းမရနိုင်ပါ။"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"လက်ဗွေကို စနစ်ထည့်သွင်း၍ မရပါ"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"လက်ဗွေယူချိန်ကုန် သွားပါသည်။ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"လက်ဗွေစနစ်ထည့်သွင်းချိန် ကုန်သွားပါပြီ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"လက်ဗွေယူခြင်း ပယ်ဖျက်လိုက်သည်။"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"လက်ဗွေဖြင့် အထောက်အထားစိစစ်ခြင်းကို အသုံးပြုသူက ပယ်ဖျက်ထားသည်။"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ကြိုးစာမှု အကြိမ်များနေ၏။ နောက်မှ ထပ်မံကြိုးစားပါ။"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ ဖန်သားပြင်လော့ခ်ချခြင်းကို အစားထိုးသုံးပါ။"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ ဖန်သားပြင်လော့ခ်ချခြင်းကို အစားထိုးသုံးပါ။"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ပြန်ကြိုးစားပါ"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"လက်ဗွေကို လုပ်ဆောင်နိုင်ခြင်းမရှိပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"မည်သည့် လက်ဗွေကိုမျှ ထည့်သွင်းမထားပါ။"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ဤစက်တွင် လက်ဗွေအာရုံခံကိရိယာ မရှိပါ။"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"အာရုံခံကိရိယာကို ယာယီပိတ်ထားသည်။"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ပြုပြင်ရေး ဝန်ဆောင်မှုပေးသူထံသို့ သွားပါ။"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"သင့်မျက်နှာနမူနာ ပြုလုပ်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"အလွန် လင်းသည်။ အလင်းလျှော့ကြည့်ပါ။"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"အလင်းရောင် အားနည်းသည်"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ဖုန်းကို အဝေးသို့ခွာပါ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ဖုန်းကို အနားသို့ပိုတိုးပါ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ဖုန်းကို ပိုမြှင့်လိုက်ပါ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"အက်ပ်များကို စတင်နေ"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"လုပ်ငန်းစနစ်ထည့်သွင်း၍ ပြန်လည်စတင်ရန် ပြီးပါပြီ"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ဖွင့်ပိတ်ခလုတ်ကို သင်နှိပ်ခဲ့သည် — ၎င်းက ပုံမှန်အားဖြင့် စခရင်ကို ပိတ်စေသည်။\n\nသင့်လက်ဗွေကို ထည့်သွင်းသောအခါ ဖွဖွတို့ကြည့်ပါ။"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ဖန်သားပြင်ပိတ်ရန် တို့ပါ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ဖန်သားပြင် ပိတ်ရန်"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"စနစ်ထည့်သွင်းမှုရပ်ရန် ဖန်သားပြင်ပိတ်ပါ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ပိတ်ရန်"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"သင့်လက်ဗွေကို ဆက်၍ အတည်ပြုမလား။"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ဖွင့်ပိတ်ခလုတ်ကို သင်နှိပ်ခဲ့သည် — ၎င်းက ပုံမှန်အားဖြင့် စခရင်ကို ပိတ်စေသည်။\n\nသင့်လက်ဗွေကို အတည်ပြုရန် ဖွဖွတို့ကြည့်ပါ။"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"စခရင် ပိတ်ရန်"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ဖုန်း"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"အထိုင်ရှိသော စပီကာများ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ပြင်ပစက်"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"နားကြပ်"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"စနစ်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index e101548..87e206d 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Bruk skjermlås"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Skriv inn skjermlåsen for å fortsette"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Trykk godt på sensoren"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kunne ikke registrere fingeravtrykket. Prøv på nytt."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingeravtrykket gjenkjennes ikke. Prøv på nytt."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengjør fingeravtrykkssensoren og prøv igjen"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengjør sensoren og prøv igjen"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Trykk godt på sensoren"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du flyttet fingeren for sakte. Prøv på nytt."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prøv et annet fingeravtrykk"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"For lyst"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Trykk på av/på-knappen er registrert"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prøv å justere"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre posisjonen til fingeren litt hver gang"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet er autentisert. Trykk på Bekreft"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Maskinvare for fingeravtrykk er ikke tilgjengelig."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Kan ikke konfigurere fingeravtrykk"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Tidsavbrudd for fingeravtrykk er nådd. Prøv på nytt."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Konfigureringen av fingeravtrykk er tidsavbrutt. Prøv på nytt."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingeravtrykk-operasjonen ble avbrutt."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingeravtrykk-operasjonen ble avbrutt av brukeren."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"For mange forsøk. Prøv på nytt senere."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"For mange forsøk. Bruk skjermlås i stedet."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"For mange forsøk. Bruk skjermlås i stedet."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Prøv på nytt."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Kan ikke behandle fingeravtrykket. Prøv på nytt."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ingen fingeravtrykk er registrert."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enheten har ikke fingeravtrykkssensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensoren er midlertidig slått av."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Gå til en reparasjonsleverandør."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan ikke lage ansiktsmodell. Prøv på nytt."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"For lyst. Prøv svakere belysning."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ikke nok lys"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Flytt telefonen lengre unna"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Flytt telefonen nærmere"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Flytt telefonen høyere"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Starter apper."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Ferdigstiller oppstart."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Du har trykket på av/på-knappen – dette slår vanligvis av skjermen.\n\nPrøv å trykke lett mens du konfigurerer fingeravtrykket ditt."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Trykk for å slå av skjermen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Slå av skjermen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Slå av skjerm for å stoppe konfigurering"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Slå av"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Fortsett bekreftelse av fingeravtrykket?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Du har trykket på av/på-knappen – dette slår vanligvis av skjermen.\n\nPrøv å trykke lett for å bekrefte fingeravtrykket ditt."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Slå av skjermen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Google TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dokkhøyttalere"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Ekstern enhet"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Hodetelefoner"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index b2bf381..5df7009 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रिन लक प्रयोग गर्नुहोस्"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"जारी राख्न आफ्नो स्क्रिन लक हाल्नुहोस्"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"सेन्सरमा बेसरी थिच्नुहोस्"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फिंगरप्रिन्ट प्रशोधन गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्।"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"फिंगरप्रिन्ट पहिचान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फिंगरप्रिन्ट सेन्सर सफा गरेर फेरि प्रयास गर्नुहोस्"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"सेन्सर सफा गरेर फेरि प्रयास गर्नुहोस्"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेन्सरमा बेसरी थिच्नुहोस्"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"औंला निकै सुस्त सारियो। कृपया फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"अर्को फिंगरप्रिन्ट प्रयोग गरी हेर्नुहोस्"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ज्यादै उज्यालो छ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"पावर बटन प्रेस गरेको कुरा पत्ता लाग्यो"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"सेन्सरमा सही तरिकाले औँला राखेर हेर्नुहोस्"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"हरेक पटक आफ्नो औँला थोरै यताउता सार्नुहोस्"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"अनुहार प्रमाणीकरण गरियो, कृपया पुष्टि गर्नुहोस् थिच्नुहोस्"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"औँठाछाप हार्डवेयर उपलब्ध छैन।"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"फिंगरप्रिन्ट सेटअप गर्न सकिएन"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"फिंगरप्रिन्ट समय सकिएको छ। फेरि प्रयास गर्नुहोस्।"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिन्ट सेट अप गर्ने समय सकियो। फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"फिंगरप्रिन्ट सञ्चालन रद्द गरियो।"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"प्रयोगकर्ताले फिंगरप्रिन्टसम्बन्धी कारबाही रद्द गर्नुभयो।"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"धेरै प्रयासहरू। केहि समय पछि पुन: प्रयास गर्नुहोला"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"निकै धेरै पटक प्रयास गरिसकिएको छ। बरु स्क्रिन लक प्रयोग गर्नुहोस्।"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"निकै धेरै पटक प्रयास गरिसकिएको छ। बरु स्क्रिन लक प्रयोग गर्नुहोस्।"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"पुन: प्रयास गर्नुहोला।"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"फिंगरप्रिन्ट पहिचान गर्ने प्रक्रिया अघि बढाउन सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"कुनै पनि फिंगरप्रिन्ट दर्ता गरिएको छैन।"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"यो डिभाइसमा कुनै पनि फिंगरप्रिन्ट सेन्सर छैन।"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"केही समयका लागि सेन्सर असक्षम पारियो।"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"फिंगरप्रिन्ट सेन्सर मर्मत गर्ने सेवा प्रदायक कम्पनीमा सम्पर्क गर्नुहोस्।"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"तपाईंको फेस मोडेल सिर्जना गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ज्यादै चम्किलो। अझ मधुरो प्रकाश प्रयोग गरी हेर्नु…"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"पर्याप्त उज्यालो छैन"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"फोन अझै पर सार्नुहोस्"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"फोन अझै नजिक सार्नुहोस्"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"फोन अझ माथि उठाउनुहोस्"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"सुरुवात एपहरू।"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"बुट पुरा हुँदै।"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"तपाईंले पावर बटन थिच्नुभयो — सामान्यतया स्क्रिन अफ गर्न यो बटन थिच्ने गरिन्छ।\n\nफिंगरप्रिन्ट सेटअप भइन्जेल हल्का तरिकाले यो बटन ट्याप गर्नुहोस्।"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"स्क्रिन अफ गर्न ट्याप गर्नुहोस्"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"स्क्रिन अफ गर्नुहोस्"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"सेट अप गरिसक्न स्क्रिन अफ गर्नुहोस्"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"अफ गर्नुहोस्"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"फिंगरप्रिन्ट पुष्टि गर्ने क्रम जारी राख्ने हो?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"तपाईंले पावर बटन थिच्नुभयो — सामान्यतया स्क्रिन अफ गर्न यो बटन थिच्ने गरिन्छ।\n\nतपाईं आफ्नो फिंगरप्रिन्ट पुष्टि गर्न चाहनुहुन्छ भने हल्का तरिकाले यो बटन ट्याप गरी हेर्नुहोस्।"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"स्क्रिन अफ गर्नुहोस्"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"टिभी"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"फोन"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"डक स्पिकरहरू"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"बााह्य डिभाइस"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"हेडफोनहरू"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"प्रणाली"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 9811e27..f89bc78 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Schermvergrendeling gebruiken"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Voer je schermvergrendeling in om door te gaan"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Druk stevig op de sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kan vingerafdruk niet verwerken. Probeer het opnieuw."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Vingerafdruk niet herkend. Probeer het opnieuw."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Reinig de vingerafdruksensor en probeer het opnieuw"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Reinig de sensor en probeer het opnieuw"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Druk stevig op de sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vinger te langzaam bewogen. Probeer het opnieuw."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probeer een andere vingerafdruk"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Te veel licht"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Druk op aan/uit-knop waargenomen"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Verplaats je vinger"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Verander de positie van je vinger steeds een beetje"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gezicht geverifieerd. Druk op Bevestigen."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware voor vingerafdruk niet beschikbaar."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Kan vingerafdruk niet instellen"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Time-out bereikt voor vingerafdruk. Probeer het opnieuw."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Time-out bij instellen van vingerafdruk. Probeer het opnieuw."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Vingerafdrukbewerking geannuleerd."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Vingerafdrukverificatie geannuleerd door gebruiker."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Te veel pogingen. Probeer het later opnieuw."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Te veel pogingen. Gebruik in plaats daarvan de schermvergrendeling."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Te veel pogingen. Gebruik in plaats daarvan de schermvergrendeling."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probeer het opnieuw."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Kan vingerafdruk niet verwerken. Probeer het opnieuw."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Geen vingerafdrukken geregistreerd."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dit apparaat heeft geen vingerafdruksensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor staat tijdelijk uit."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Ga naar een reparateur."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Kan gezichtsmodel niet maken. Probeer het opnieuw."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Overbelicht. Probeer een minder felle belichting."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Te weinig licht"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Houd de telefoon verder weg"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Houd de telefoon dichterbij"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Houd de telefoon hoger"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Apps starten."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Opstarten afronden."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Je hebt op de aan/uit-knop gedrukt. Zo zet je meestal het scherm uit.\n\nRaak de knop voorzichtig aan terwijl je je vingerafdruk instelt."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tik om het scherm uit te zetten"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Scherm uitzetten"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Zet het scherm uit om het instellen te beëindigen"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Uitzetten"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Doorgaan met verificatie van je vingerafdruk?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Je hebt op de aan/uit-knop gedrukt. Zo zet je meestal het scherm uit.\n\nRaak de knop voorzichtig aan om je vingerafdruk te verifiëren."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Scherm uitzetten"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Tv"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefoon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dockluidsprekers"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Extern apparaat"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Hoofdtelefoon"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Systeem"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index d3cbaec..9b38ea8 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନ୍ ଲକ୍ ଏଣ୍ଟର୍ କରନ୍ତୁ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ସେନ୍ସର ଉପରେ ଦୃଢ଼ ଭାବେ ଦବାନ୍ତୁ"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ଟିପଚିହ୍ନ ପ୍ରୋସେସ୍ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ଟିପଚିହ୍ନକୁ ଚିହ୍ନଟ କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ପରିଷ୍କାର କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ସେନ୍ସରକୁ ପରିଷ୍କାର କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ସେନ୍ସର ଉପରେ ଦୃଢ଼ ଭାବେ ଦବାନ୍ତୁ"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ଆଙ୍ଗୁଠି ଖୁବ୍ ଧୀରେ ନିଆଗଲା। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ଅନ୍ୟ ଏକ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ବହୁତ ଉଜ୍ଜ୍ୱଳ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ପାୱାର ବଟନ ଦବାଇବା ଚିହ୍ନଟ କରାଯାଇଛି"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ଆଡଜଷ୍ଟ କରି ଦେଖନ୍ତୁ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ପ୍ରତି ଥର ଆପଣଙ୍କ ଆଙ୍ଗୁଠିର ସ୍ଥାନ ସାମାନ୍ୟ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ମୁହଁ ଚିହ୍ନଟ ହୋଇଛି, ଦୟାକରି ସୁନିଶ୍ଚିତ ଦବାନ୍ତୁ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ଟିପଚିହ୍ନ ହାର୍ଡୱେର୍ ଉପଲବ୍ଧ ନାହିଁ।"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ଟିପଚିହ୍ନକୁ ସେଟ୍ ଅପ୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ଟିପଚିହ୍ନର ସମୟ ଶେଷ ହେଲା । ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସେଟଅପର ସମୟସୀମା ସମାପ୍ତ ହୋଇଯାଇଛି। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ଟିପଚିହ୍ନ କାର୍ଯ୍ୟ ବାତିଲ୍ କରାଗଲା।"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ଉପଯୋଗକର୍ତ୍ତା ଟିପଚିହ୍ନ କାର୍ଯ୍ୟ ବାତିଲ୍ କରିଛନ୍ତି।"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ବହୁତ ପ୍ରୟାସ କରାଗଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଏହା ପରିବର୍ତ୍ତେ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଏହା ପରିବର୍ତ୍ତେ ସ୍କ୍ରିନ ଲକ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ଟିପଚିହ୍ନକୁ ପ୍ରକ୍ରିୟାନ୍ୱିତ କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"କୌଣସି ଆଙ୍ଗୁଠି ଚିହ୍ନ ପଞ୍ଜୀକୃତ ହୋଇନାହିଁ।"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ଏହି ଡିଭାଇସ୍ରେ ଟିପଚିହ୍ନ ସେନ୍ସର୍ ନାହିଁ।"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ସେନ୍ସରକୁ ଅସ୍ଥାୟୀ ଭାବେ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ଏକ ମରାମତି କେନ୍ଦ୍ରକୁ ଭିଜିଟ୍ କରନ୍ତୁ।"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ଫେସର ମଡେଲ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କର।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ଅତ୍ୟଧିକ ଉଜ୍ଵଳ। କମ୍ ଉଜ୍ବଳକରଣରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ଯଥେଷ୍ଟ ଆଲୋକ ନାହିଁ"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ଫୋନକୁ ଟିକେ ଦୂରକୁ ନିଅନ୍ତୁ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ଫୋନକୁ ପାଖକୁ ଆଣନ୍ତୁ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ଫୋନକୁ ଉପରକୁ ମୁଭ କରନ୍ତୁ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ଆପ୍ ଆରମ୍ଭ କରାଯାଉଛି।"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ବୁଟ୍ ସମାପ୍ତ କରୁଛି।"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ଆପଣ ପାୱାର ବଟନ ଦବାଇଛନ୍ତି — ଏହା ସାଧାରଣତଃ ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ ବନ୍ଦ କରିଥାଏ।\n\nଆପଣଙ୍କ ଟିପଚିହ୍ନ ସେଟ ଅପ କରିବା ସମୟରେ ଧୀରେ ଟାପ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ସ୍କ୍ରିନ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ସ୍କ୍ରିନ ବନ୍ଦ କରନ୍ତୁ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ସେଟଅପ ସମାପ୍ତ କରିବାକୁ ସ୍କ୍ରିନ ବନ୍ଦ କରନ୍ତୁ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ଆପଣଙ୍କ ଟିପଚିହ୍ନ ଯାଞ୍ଚ କରିବା ଜାରି ରଖିବେ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ଆପଣ ପାୱାର ବଟନ ଦବାଇଛନ୍ତି — ଏହା ସାଧାରଣତଃ ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ ବନ୍ଦ କରିଥାଏ।\n\nଆପଣଙ୍କ ଟିପଚିହ୍ନ ଯାଞ୍ଚ କରିବା ପାଇଁ ଧୀରେ ଟାପ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ସ୍କ୍ରିନ ବନ୍ଦ କରନ୍ତୁ"</string>
@@ -1273,7 +1273,7 @@
<string name="volume_ringtone" msgid="134784084629229029">"ରିଙ୍ଗର୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_music" msgid="7727274216734955095">"ମିଡିଆ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="2614142915948898228">"ବ୍ଲୁଟୂଥ୍ ମାଧ୍ୟମରେ ଚାଲୁଛି"</string>
- <string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"ରିଙ୍ଗଟୋନ୍କୁ ନିରବ ଭାବେ ସେଟ୍ କରାଯାଇଛି"</string>
+ <string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"ସାଇଲେଣ୍ଟ ରିଂଟୋନ ସେଟ ହୋଇଛି"</string>
<string name="volume_call" msgid="7625321655265747433">"ଇନ୍-କଲ୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"ବ୍ଲୁଟୂଥ୍ ଇନ୍-କଲ୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_alarm" msgid="4486241060751798448">"ଆଲାରାମ୍ ଭଲ୍ୟୁମ୍"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ଫୋନ"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ଡକ୍ ସ୍ପିକର୍"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ଏକ୍ସଟର୍ନଲ ଡିଭାଇସ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ହେଡଫୋନ୍"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ସିଷ୍ଟମ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 2ffeef4..ed8278b 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣਾ ਸਕ੍ਰੀਨ ਲਾਕ ਦਾਖਲ ਕਰੋ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ਸੈਂਸਰ ਨੂੰ ਜ਼ੋਰ ਨਾਲ ਦਬਾਓ"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ਫਿੰਗਰਪ੍ਰਿੰਟ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਨਹੀਂ ਹੋ ਸਕੀ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ਸੈਂਸਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ਸੈਂਸਰ ਨੂੰ ਜ਼ੋਰ ਨਾਲ ਦਬਾਓ"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ਉਂਗਲ ਕਾਫ਼ੀ ਹੌਲੀ ਮੂਵ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ਕੋਈ ਹੋਰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤ ਕੇ ਦੇਖੋ"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਚਮਕ"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ਪਾਵਰ ਬਟਨ ਦਬਾਏ ਜਾਣ ਦਾ ਪਤਾ ਲੱਗਿਆ ਹੈ"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ਵਿਵਸਥਿਤ ਕਰਕੇ ਦੇਖੋ"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ਹਰ ਵਾਰ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਥੋੜ੍ਹਾ ਹਿਲਾਓ"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ਚਿਹਰਾ ਪੁਸ਼ਟੀਕਰਨ, ਕਿਰਪਾ ਕਰਕੇ \'ਪੁਸ਼ਟੀ ਕਰੋ\' ਦਬਾਓ"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ ਸਮਾਂ ਸਮਾਪਤ ਹੋਇਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਓਪਰੇਸ਼ਨ ਰੱਦ ਕੀਤਾ ਗਿਆ।"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਓਪਰੇਸ਼ਨ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਰੱਦ ਕੀਤਾ ਗਿਆ।"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ. ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸਦੀ ਬਜਾਏ ਸਕ੍ਰੀਨ ਲਾਕ ਵਰਤੋ।"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸਦੀ ਬਜਾਏ ਸਕ੍ਰੀਨ ਲਾਕ ਵਰਤੋ।"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ਫਿੰਗਰਪ੍ਰਿੰਟ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ਕੋਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਰਜ ਨਹੀਂ ਕੀਤੇ ਗਏ।"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨਹੀਂ ਹੈ।"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ਸੈਂਸਰ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ਮੁਰੰਮਤ ਪ੍ਰਦਾਨਕ \'ਤੇ ਜਾਓ।"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਨਹੀਂ ਬਣਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਚਮਕ। ਹਲਕੀ ਚਮਕ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ਲੋੜੀਂਦੀ ਰੋਸ਼ਨੀ ਨਹੀਂ ਹੈ"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ਫ਼ੋਨ ਨੂੰ ਦੂਰ ਲਿਜਾਓ"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ਫ਼ੋਨ ਨੇੜੇ ਲਿਜਾਓ"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ਫ਼ੋਨ ਨੂੰ ਥੋੜ੍ਹਾ ਉੱਤੇ ਲਿਜਾਓ"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ਐਪਸ ਚਾਲੂ ਕਰ ਰਿਹਾ ਹੈ।"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ਬੂਟ ਪੂਰਾ ਕਰ ਰਿਹਾ ਹੈ।"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ਤੁਸੀਂ ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਇਆ ਹੈ — ਇਹ ਆਮ ਤੌਰ \'ਤੇ ਸਕ੍ਰੀਨ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ।\n\nਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰਦੇ ਸਮੇਂ ਹਲਕਾ ਜਿਹਾ ਟੈਪ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"ਸਕ੍ਰੀਨ ਬੰਦ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ਸਕ੍ਰੀਨ ਬੰਦ ਕਰੋ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ਸੈੱਟਅੱਪ ਸਮਾਪਤ ਕਰਨ ਲਈ, ਸਕ੍ਰੀਨ ਨੂੰ ਬੰਦ ਕਰੋ"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ਬੰਦ ਕਰੋ"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ਕੀ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ਤੁਸੀਂ ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਇਆ ਹੈ — ਇਹ ਆਮ ਤੌਰ \'ਤੇ ਸਕ੍ਰੀਨ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ।\n\nਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਹਲਕਾ ਜਿਹਾ ਟੈਪ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ਸਕ੍ਰੀਨ ਬੰਦ ਕਰੋ"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ਫ਼ੋਨ ਕਰੋ"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ਡੌਕ ਸਪੀਕਰਸ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ਬਾਹਰੀ ਡੀਵਾਈਸ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ਹੈੱਡਫ਼ੋਨ"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ਸਿਸਟਮ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 88b54b0..a3fbbad 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Używaj blokady ekranu"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Użyj blokady ekranu, aby kontynuować"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Mocno naciśnij czujnik"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nie udało się przetworzyć odcisku palca. Spróbuj ponownie."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nie rozpoznaję odcisku palca. Spróbuj ponownie."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Wyczyść czytnik linii papilarnych i spróbuj ponownie"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Wyczyść czujnik i spróbuj ponownie"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Mocno naciśnij czujnik"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Palec został obrócony zbyt wolno. Spróbuj ponownie."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Użyj odcisku innego palca"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Zbyt jasno"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Wykryto naciśnięcie przycisku zasilania"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Popraw"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Za każdym razem lekko zmieniaj ułożenie palca"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Twarz rozpoznana, kliknij Potwierdź"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Czytnik linii papilarnych nie jest dostępny."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nie można skonfigurować odcisku palca"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Osiągnięto limit czasu odczytu odcisków palców. Spróbuj ponownie."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Upłynął limit czasu konfiguracji odcisku palca. Spróbuj ponownie."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Odczyt odcisku palca został anulowany."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Odczyt odcisku palca został anulowany przez użytkownika."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Zbyt wiele prób. Spróbuj ponownie później."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Zbyt wiele prób. Użyj blokady ekranu."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Zbyt wiele prób. Użyj blokady ekranu."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Spróbuj ponownie."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nie udało się przetworzyć odcisku palca. Spróbuj ponownie."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nie zarejestrowano odcisków palców."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"To urządzenie nie jest wyposażone w czytnik linii papilarnych."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Czujnik jest tymczasowo wyłączony."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Odwiedź serwis."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Nie można utworzyć modelu twarzy. Spróbuj ponownie."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Zbyt jasno. Spróbuj przy słabszym świetle."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Za mało światła"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Odsuń telefon"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Przybliż telefon"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Przesuń telefon wyżej"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Uruchamianie aplikacji."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Kończenie uruchamiania."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Naciśnięto przycisk zasilania — zwykle powoduje to wyłączenie ekranu.\n\nKlikaj delikatnie podczas konfigurowania odcisku palca."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Kliknij, aby wyłączyć ekran"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Wyłącz ekran"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Aby zakończyć konfigurację, wyłącz ekran"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Wyłącz"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Kontynuować weryfikację odcisku palca?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Naciśnięto przycisk zasilania — zwykle powoduje to wyłączenie ekranu.\n\nKliknij delikatnie, aby zweryfikować odcisk palca."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Wyłącz ekran"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Telewizor"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Głośniki stacji dokującej"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Urządzenie zewnętrzne"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Słuchawki"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 7d5721a..55f5bcf 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pressione o sensor com firmeza"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não foi possível reconhecer a impressão digital. Tente de novo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O movimento do dedo está muito lento. Tente novamente."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Use outra impressão digital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impressão digital não disponível."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Não foi possível configurar a impressão digital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Tempo máximo para captura da impressão digital atingido. Tente novamente."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"A configuração da impressão digital expirou. Tente de novo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operação de impressão digital cancelada."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operação de impressão digital cancelada pelo usuário."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Excesso de tentativas. Tente novamente mais tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Excesso de tentativas. Use o bloqueio de tela."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Excesso de tentativas. Use o bloqueio de tela."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Não foi possível processar a impressão digital. Tente de novo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registrada."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor desativado temporariamente."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Entre em contato com uma assistência técnica."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Falha ao criar o modelo de rosto. Tente de novo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Muito iluminado. Diminua a iluminação."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Não há luz suficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste o smartphone"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o smartphone do seu rosto"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o smartphone para cima"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Concluindo a inicialização."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela durante a configuração da impressão digital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toque para desligar a tela"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Desligar a tela"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a verificação da digital?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela para verificar sua impressão digital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desligar a tela"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Alto-falantes na base"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Fones de ouvido"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 1fe0db7a..2938b96 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -53,7 +53,7 @@
<string name="imei" msgid="2157082351232630390">"IMEI"</string>
<string name="meid" msgid="3291227361605924674">"MEID"</string>
<string name="ClipMmi" msgid="4110549342447630629">"ID do Autor da Chamada"</string>
- <string name="ClirMmi" msgid="6752346475055446417">"Ocultar identificação do autor da chamada efetuada"</string>
+ <string name="ClirMmi" msgid="6752346475055446417">"Ocultar identificação do autor da chamada feita"</string>
<string name="ColpMmi" msgid="4736462893284419302">"ID de linha ligada"</string>
<string name="ColrMmi" msgid="5889782479745764278">"Restrição de ID de linha ligada"</string>
<string name="CfMmi" msgid="8390012691099787178">"Encaminhamento de chamadas"</string>
@@ -350,7 +350,7 @@
<string name="permlab_uninstall_shortcut" msgid="295263654781900390">"desinstalar atalhos"</string>
<string name="permdesc_uninstall_shortcut" msgid="1924735350988629188">"Permite que a app remova atalhos do Ecrã principal sem a intervenção do utilizador."</string>
<string name="permlab_processOutgoingCalls" msgid="4075056020714266558">"redirecionar as chamadas efetuadas"</string>
- <string name="permdesc_processOutgoingCalls" msgid="7833149750590606334">"Permite que a app veja o número que é marcado durante uma chamada efetuada, com a opção de redirecionar a chamada para um número diferente ou terminar a chamada."</string>
+ <string name="permdesc_processOutgoingCalls" msgid="7833149750590606334">"Permite que a app veja o número que é marcado durante uma chamada feita, com a opção de redirecionar a chamada para um número diferente ou terminar a chamada."</string>
<string name="permlab_answerPhoneCalls" msgid="4131324833663725855">"atender chamadas telefónicas"</string>
<string name="permdesc_answerPhoneCalls" msgid="894386681983116838">"Permite que a app atenda chamadas recebidas."</string>
<string name="permlab_receiveSms" msgid="505961632050451881">"receber mensagens de texto (SMS)"</string>
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utilizar o bloqueio de ecrã"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduza o bloqueio de ecrã para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Prima firmemente o sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não é possível reconhecer a impressão digital. Tente novamente."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressões digitais e tente novamente"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prima firmemente o sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moveu o dedo demasiado lentamente. Tente novamente."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Experimente outra impressão digital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Está demasiado claro"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Detetou-se que o botão ligar/desligar foi premido"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Experimente ajustar"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Altere a posição do seu dedo ligeiramente de cada vez"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado. Prima Confirmar."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impressão digital não disponível."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Não é possível configurar a impressão digital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Foi atingido o limite de tempo da impressão digital. Tente novamente."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"A configuração da impressão digital expirou. Tente novamente."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operação de impressão digital cancelada."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operação de impressão digital cancelada pelo utilizador."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Demasiadas tentativas. Tente novamente mais tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Demasiadas tentativas. Em alternativa, use o bloqueio de ecrã."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Demasiadas tentativas. Em alternativa, use o bloqueio de ecrã."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Não é possível processar a impressão digital. Tente novamente."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registada."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem sensor de impressões digitais."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporariamente desativado."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visite um fornecedor de serviços de reparação."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossível criar modelo de rosto. Tente novamente."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado clara. Experimente uma luz mais suave."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Não há luz suficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste ainda mais o telemóvel"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o telemóvel do rosto"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o telemóvel mais para cima"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"A iniciar aplicações"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"A concluir o arranque."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Premiu o botão ligar/desligar. Geralmente, esta ação desliga o ecrã.\n\nExperimente tocar levemente ao configurar a sua impressão digital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toque para desligar o ecrã"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Desligar ecrã"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Termine a configuração ao desligar ecrã"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a validar a impressão digital?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Premiu o botão ligar/desligar. Geralmente, esta ação desliga o ecrã.\n\nExperimente tocar levemente para validar a sua impressão digital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desligar ecrã"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telemóvel"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altif. estação ancoragem"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auscultadores"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 7d5721a..55f5bcf 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pressione o sensor com firmeza"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não foi possível reconhecer a impressão digital. Tente de novo."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"O movimento do dedo está muito lento. Tente novamente."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Use outra impressão digital"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impressão digital não disponível."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Não foi possível configurar a impressão digital"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Tempo máximo para captura da impressão digital atingido. Tente novamente."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"A configuração da impressão digital expirou. Tente de novo."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operação de impressão digital cancelada."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operação de impressão digital cancelada pelo usuário."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Excesso de tentativas. Tente novamente mais tarde."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Excesso de tentativas. Use o bloqueio de tela."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Excesso de tentativas. Use o bloqueio de tela."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tente novamente."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Não foi possível processar a impressão digital. Tente de novo."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nenhuma impressão digital registrada."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor desativado temporariamente."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Entre em contato com uma assistência técnica."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Falha ao criar o modelo de rosto. Tente de novo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Muito iluminado. Diminua a iluminação."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Não há luz suficiente"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste o smartphone"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o smartphone do seu rosto"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o smartphone para cima"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Concluindo a inicialização."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela durante a configuração da impressão digital."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Toque para desligar a tela"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Desligar a tela"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a verificação da digital?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela para verificar sua impressão digital."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desligar a tela"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Alto-falantes na base"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Fones de ouvido"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistema"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 27b04d6..7c34345 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -40,10 +40,10 @@
<string name="badPin" msgid="888372071306274355">"Codul PIN vechi introdus nu este corect."</string>
<string name="badPuk" msgid="4232069163733147376">"Codul PUK introdus nu este corect."</string>
<string name="mismatchPin" msgid="2929611853228707473">"Codurile PIN introduse nu se potrivesc."</string>
- <string name="invalidPin" msgid="7542498253319440408">"Introduceți un cod PIN alcătuit din 4 până la 8 cifre."</string>
- <string name="invalidPuk" msgid="8831151490931907083">"Introduceți un cod PUK care să aibă 8 cifre sau mai mult."</string>
- <string name="needPuk" msgid="7321876090152422918">"Cardul SIM este blocat cu codul PUK. Introduceți codul PUK pentru a-l debloca."</string>
- <string name="needPuk2" msgid="7032612093451537186">"Introduceți codul PUK2 pentru a debloca cardul SIM."</string>
+ <string name="invalidPin" msgid="7542498253319440408">"Introdu un cod PIN alcătuit din 4 până la 8 cifre."</string>
+ <string name="invalidPuk" msgid="8831151490931907083">"Introdu un cod PUK care să aibă 8 cifre sau mai mult."</string>
+ <string name="needPuk" msgid="7321876090152422918">"Cardul SIM este blocat cu codul PUK. Introdu codul PUK pentru a-l debloca."</string>
+ <string name="needPuk2" msgid="7032612093451537186">"Introdu codul PUK2 pentru a debloca cardul SIM."</string>
<string name="enablePin" msgid="2543771964137091212">"Operațiunea nu a reușit. Activați blocarea cardului SIM/RUIM."</string>
<plurals name="pinpuk_attempts" formatted="false" msgid="1619867269012213584">
<item quantity="few">V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări până la blocarea cardului SIM.</item>
@@ -53,7 +53,7 @@
<string name="imei" msgid="2157082351232630390">"IMEI"</string>
<string name="meid" msgid="3291227361605924674">"MEID"</string>
<string name="ClipMmi" msgid="4110549342447630629">"ID apelant de primire"</string>
- <string name="ClirMmi" msgid="6752346475055446417">"Ascundeți ID-ul apelantului"</string>
+ <string name="ClirMmi" msgid="6752346475055446417">"Ascunde ID-ul apelantului"</string>
<string name="ColpMmi" msgid="4736462893284419302">"ID-ul liniei conectate"</string>
<string name="ColrMmi" msgid="5889782479745764278">"Restricționarea ID-ului liniei conectate"</string>
<string name="CfMmi" msgid="8390012691099787178">"Redirecționarea apelurilor"</string>
@@ -159,7 +159,7 @@
<string name="httpErrorAuth" msgid="469553140922938968">"Nu s-a realizat autentificarea."</string>
<string name="httpErrorProxyAuth" msgid="7229662162030113406">"Autentificarea prin intermediul serverului proxy nu a reușit."</string>
<string name="httpErrorConnect" msgid="3295081579893205617">"Nu s-a putut stabili conexiunea cu serverul."</string>
- <string name="httpErrorIO" msgid="3860318696166314490">"Nu s-a putut efectua comunicarea cu serverul. Încercați din nou mai târziu."</string>
+ <string name="httpErrorIO" msgid="3860318696166314490">"Nu s-a putut efectua comunicarea cu serverul. Încearcă din nou mai târziu."</string>
<string name="httpErrorTimeout" msgid="7446272815190334204">"Conexiunea la server a expirat."</string>
<string name="httpErrorRedirectLoop" msgid="8455757777509512098">"Pagina conține prea multe redirecționări de server."</string>
<string name="httpErrorUnsupportedScheme" msgid="2664108769858966374">"Protocolul nu este acceptat."</string>
@@ -167,15 +167,15 @@
<string name="httpErrorBadUrl" msgid="754447723314832538">"Pagina nu a putut fi deschisă, deoarece adresa URL nu este validă."</string>
<string name="httpErrorFile" msgid="3400658466057744084">"Fișierul nu a putut fi accesat."</string>
<string name="httpErrorFileNotFound" msgid="5191433324871147386">"Nu s-a putut găsi fișierul solicitat."</string>
- <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"Există prea multe solicitări în curs de procesare. Încercați din nou mai târziu."</string>
+ <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"Există prea multe solicitări în curs de procesare. Încearcă din nou mai târziu."</string>
<string name="notification_title" msgid="5783748077084481121">"Eroare de conectare pentru <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
<string name="contentServiceSync" msgid="2341041749565687871">"Sincronizare"</string>
<string name="contentServiceSyncNotificationTitle" msgid="5766411446676388623">"Nu se poate sincroniza"</string>
<string name="contentServiceTooManyDeletesNotificationDesc" msgid="4562226280528716090">"Ați încercat să ștergeți prea multe <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
- <string name="low_memory" product="tablet" msgid="5557552311566179924">"Stocarea pe tabletă este plină. Ștergeți câteva fișiere pentru a elibera spațiu."</string>
- <string name="low_memory" product="watch" msgid="3479447988234030194">"Spațiul de stocare de pe ceas este plin! Ștergeți câteva fișiere pentru a elibera spațiu."</string>
- <string name="low_memory" product="tv" msgid="6663680413790323318">"Spațiul de stocare de pe dispozitivul Android TV este plin. Ștergeți câteva fișiere pentru a elibera spațiu."</string>
- <string name="low_memory" product="default" msgid="2539532364144025569">"Stocarea pe telefon este plină. Ștergeți câteva fișiere pentru a elibera spațiu."</string>
+ <string name="low_memory" product="tablet" msgid="5557552311566179924">"Stocarea pe tabletă este plină. Șterge câteva fișiere pentru a elibera spațiu."</string>
+ <string name="low_memory" product="watch" msgid="3479447988234030194">"Spațiul de stocare de pe ceas este plin! Șterge câteva fișiere pentru a elibera spațiu."</string>
+ <string name="low_memory" product="tv" msgid="6663680413790323318">"Spațiul de stocare de pe dispozitivul Android TV este plin. Șterge câteva fișiere pentru a elibera spațiu."</string>
+ <string name="low_memory" product="default" msgid="2539532364144025569">"Stocarea pe telefon este plină. Șterge câteva fișiere pentru a elibera spațiu."</string>
<string name="ssl_ca_cert_warning" msgid="7233573909730048571">"{count,plural, =1{S-a instalat o autoritate de certificare}few{S-au instalat autorități de certificare}other{S-au instalat autorități de certificare}}"</string>
<string name="ssl_ca_cert_noti_by_unknown" msgid="4961102218216815242">"De o terță parte necunoscută"</string>
<string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"De administratorul profilului dvs. de serviciu"</string>
@@ -213,7 +213,7 @@
<string name="turn_on_radio" msgid="2961717788170634233">"Activați funcția wireless"</string>
<string name="turn_off_radio" msgid="7222573978109933360">"Dezactivați funcția wireless"</string>
<string name="screen_lock" msgid="2072642720826409809">"Blocați ecranul"</string>
- <string name="power_off" msgid="4111692782492232778">"Opriți"</string>
+ <string name="power_off" msgid="4111692782492232778">"Oprește"</string>
<string name="silent_mode_silent" msgid="5079789070221150912">"Sonerie dezactivată"</string>
<string name="silent_mode_vibrate" msgid="8821830448369552678">"Vibrare sonerie"</string>
<string name="silent_mode_ring" msgid="6039011004781526678">"Sonerie activată"</string>
@@ -229,7 +229,7 @@
<string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"Ceasul dvs. se va închide."</string>
<string name="shutdown_confirm" product="default" msgid="136816458966692315">"Telefonul dvs. se va închide."</string>
<string name="shutdown_confirm_question" msgid="796151167261608447">"Doriți să închideți?"</string>
- <string name="reboot_safemode_title" msgid="5853949122655346734">"Reporniți în modul sigur"</string>
+ <string name="reboot_safemode_title" msgid="5853949122655346734">"Repornește în modul sigur"</string>
<string name="reboot_safemode_confirm" msgid="1658357874737219624">"Doriți să reporniți în modul sigur? Astfel vor fi dezactivate toate aplicațiile terță parte pe care le-ați instalat. Acestea vor fi restabilite când reporniți din nou."</string>
<string name="recent_tasks_title" msgid="8183172372995396653">"Recente"</string>
<string name="no_recent_tasks" msgid="9063946524312275906">"Nu există aplicații recente."</string>
@@ -237,9 +237,9 @@
<string name="global_actions" product="tv" msgid="3871763739487450369">"Opțiuni pentru Android TV"</string>
<string name="global_actions" product="default" msgid="6410072189971495460">"Opțiuni telefon"</string>
<string name="global_action_lock" msgid="6949357274257655383">"Blocați ecranul"</string>
- <string name="global_action_power_off" msgid="4404936470711393203">"Opriți"</string>
+ <string name="global_action_power_off" msgid="4404936470711393203">"Oprește"</string>
<string name="global_action_power_options" msgid="1185286119330160073">"Alimentare"</string>
- <string name="global_action_restart" msgid="4678451019561687074">"Reporniți"</string>
+ <string name="global_action_restart" msgid="4678451019561687074">"Repornește"</string>
<string name="global_action_emergency" msgid="1387617624177105088">"Urgență"</string>
<string name="global_action_bug_report" msgid="5127867163044170003">"Raport despre erori"</string>
<string name="global_action_logout" msgid="6093581310002476511">"Încheiați sesiunea"</string>
@@ -287,7 +287,7 @@
<string name="notification_channel_accessibility_security_policy" msgid="1727787021725251912">"Folosirea accesibilității"</string>
<string name="foreground_service_app_in_background" msgid="1439289699671273555">"<xliff:g id="APP_NAME">%1$s</xliff:g> folosește bateria"</string>
<string name="foreground_service_apps_in_background" msgid="7340037176412387863">"<xliff:g id="NUMBER">%1$d</xliff:g> aplicații folosesc bateria"</string>
- <string name="foreground_service_tap_for_details" msgid="9078123626015586751">"Atingeți pentru mai multe detalii privind bateria și utilizarea datelor"</string>
+ <string name="foreground_service_tap_for_details" msgid="9078123626015586751">"Atinge pentru mai multe detalii privind bateria și utilizarea datelor"</string>
<string name="foreground_service_multiple_separator" msgid="5002287361849863168">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string>
<string name="safeMode" msgid="8974401416068943888">"Mod sigur"</string>
<string name="android_system_label" msgid="5974767339591067210">"Sistemul Android"</string>
@@ -455,9 +455,9 @@
<string name="permdesc_camera" msgid="5240801376168647151">"Această aplicație poate să fotografieze și să înregistreze videoclipuri folosind camera foto când este în uz."</string>
<string name="permlab_backgroundCamera" msgid="7549917926079731681">"să fotografieze și să înregistreze videoclipuri în fundal"</string>
<string name="permdesc_backgroundCamera" msgid="1615291686191138250">"Această aplicație poate să fotografieze și să înregistreze videoclipuri folosind camera foto oricând."</string>
- <string name="permlab_systemCamera" msgid="3642917457796210580">"Permiteți unei aplicații sau unui serviciu accesul la camerele de sistem, ca să fotografieze și să înregistreze videoclipuri"</string>
+ <string name="permlab_systemCamera" msgid="3642917457796210580">"Permite unei aplicații sau unui serviciu accesul la camerele de sistem, ca să fotografieze și să înregistreze videoclipuri"</string>
<string name="permdesc_systemCamera" msgid="5938360914419175986">"Această aplicație de sistem privilegiată poate să fotografieze și să înregistreze videoclipuri folosind o cameră de sistem în orice moment. Necesită și permisiunea android.permission.CAMERA pentru aplicație"</string>
- <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permiteți unei aplicații sau unui serviciu să primească apeluri inverse atunci când sunt deschise sau închise dispozitive cu cameră."</string>
+ <string name="permlab_cameraOpenCloseListener" msgid="5548732769068109315">"Permite unei aplicații sau unui serviciu să primească apeluri inverse atunci când sunt deschise sau închise dispozitive cu cameră."</string>
<string name="permdesc_cameraOpenCloseListener" msgid="2002636131008772908">"Această aplicație poate primi apeluri inverse atunci când este deschis (de aplicație) sau închis orice dispozitiv cu cameră."</string>
<string name="permlab_vibrate" msgid="8596800035791962017">"controlează vibrarea"</string>
<string name="permdesc_vibrate" msgid="8733343234582083721">"Permite aplicației să controleze mecanismul de vibrare."</string>
@@ -471,7 +471,7 @@
<string name="permlab_readBasicPhoneState" msgid="3214853233263871347">"să citească informații de bază, precum activitatea și starea telefonului"</string>
<string name="permdesc_readBasicPhoneState" msgid="828185691675460520">"Permite ca aplicația să acceseze funcțiile de telefonie de bază ale dispozitivului."</string>
<string name="permlab_manageOwnCalls" msgid="9033349060307561370">"să direcționeze apelurile prin intermediul sistemului"</string>
- <string name="permdesc_manageOwnCalls" msgid="4431178362202142574">"Permiteți aplicației să direcționeze apelurile prin intermediul sistemului pentru a îmbunătăți calitatea apelurilor."</string>
+ <string name="permdesc_manageOwnCalls" msgid="4431178362202142574">"Permite aplicației să direcționeze apelurile prin intermediul sistemului pentru a îmbunătăți calitatea apelurilor."</string>
<string name="permlab_callCompanionApp" msgid="3654373653014126884">"Vedeți și controlați apelurile prin intermediul sistemului."</string>
<string name="permdesc_callCompanionApp" msgid="8474168926184156261">"Permite aplicației să vadă și să controleze apelurile în desfășurare pe dispozitiv. Aceasta include informații ca numerele pentru apeluri și starea apelurilor."</string>
<string name="permlab_exemptFromAudioRecordRestrictions" msgid="1164725468350759486">"scutită de restricțiile pentru înregistrarea conținutului audio"</string>
@@ -541,7 +541,7 @@
<string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"să transmită anunțuri pe dispozitive Bluetooth din apropiere"</string>
<string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"Permite aplicației să difuzeze anunțuri pe dispozitive Bluetooth din apropiere"</string>
<string name="permlab_uwb_ranging" msgid="8141915781475770665">"să stabilească poziția relativă dintre dispozitivele Ultra-Wideband din apropiere"</string>
- <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permiteți-i aplicației să stabilească poziția relativă dintre dispozitivele Ultra-Wideband din apropiere"</string>
+ <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"Permite-i aplicației să stabilească poziția relativă dintre dispozitivele Ultra-Wideband din apropiere"</string>
<string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"să interacționeze cu dispozitive Wi‑Fi din apropiere"</string>
<string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"Permite aplicației să se conecteze la dispozitive Wi-Fi din apropiere, să transmită anunțuri și să stabilească poziția relativă a acestora"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Informații despre serviciul de plăți NFC preferat"</string>
@@ -583,14 +583,15 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Eroare la autentificare"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Folosiți blocarea ecranului"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduceți blocarea ecranului ca să continuați"</string>
- <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Apăsați ferm pe senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Amprenta nu a putut fi procesată. Încercați din nou."</string>
+ <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Apasă ferm pe senzor"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Amprenta nu a fost recunoscută. Încearcă din nou."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Curățați senzorul de amprentă și încercați din nou"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Curățați senzorul și încercați din nou"</string>
- <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Apăsați ferm pe senzor"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Apasă ferm pe senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Ați mișcat degetul prea lent. Încercați din nou."</string>
- <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Încercați altă amprentă"</string>
+ <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Încearcă altă amprentă"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Prea luminos"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"S-a detectat apăsarea butonului de alimentare"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Încercați să ajustați"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Schimbați ușor poziția degetului de fiecare dată"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Chip autentificat, apăsați Confirmați"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware-ul pentru amprentă nu este disponibil."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nu se poate configura amprenta"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Timpul pentru amprentare a expirat. Încercați din nou."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Configurarea amprentei a expirat. Încearcă din nou."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operațiunea privind amprenta a fost anulată."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operațiunea privind amprenta a fost anulată de utilizator."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Prea multe încercări. Încercați din nou mai târziu."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Prea multe încercări. Folosește blocarea ecranului."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Prea multe încercări. Folosește blocarea ecranului."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Încercați din nou."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Nu putem procesa amprenta. Încearcă din nou."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nu au fost înregistrate amprente."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dispozitivul nu are senzor de amprentă."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzorul este dezactivat temporar."</string>
@@ -620,34 +621,33 @@
<string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"Folosiți amprenta sau blocarea ecranului pentru a continua"</string>
<string-array name="fingerprint_error_vendor">
</string-array>
- <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"A apărut o eroare. Încercați din nou."</string>
+ <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"A apărut o eroare. Încearcă din nou."</string>
<string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Pictograma amprentă"</string>
<string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Deblocare facială"</string>
<string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Problemă cu Deblocarea facială"</string>
<string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Atingeți pentru a șterge modelul facial, apoi adăugați din nou fața"</string>
- <string name="face_setup_notification_title" msgid="8843461561970741790">"Configurați Deblocarea facială"</string>
+ <string name="face_setup_notification_title" msgid="8843461561970741790">"Configurează Deblocarea facială"</string>
<string name="face_setup_notification_content" msgid="5463999831057751676">"Deblocați-vă telefonul uitându-vă la acesta"</string>
<string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Pentru a folosi Deblocarea facială, activați "<b>"Accesul la cameră"</b>" în Setări și confidențialitate"</string>
- <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configurați mai multe moduri de deblocare"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configurează mai multe moduri de deblocare"</string>
<string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Atingeți ca să adăugați o amprentă"</string>
<string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Deblocare cu amprenta"</string>
<string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Nu se poate folosi senzorul de amprentă"</string>
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vizitați un furnizor de servicii de reparații."</string>
- <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nu se poate crea modelul facial. Reîncercați."</string>
- <string name="face_acquired_too_bright" msgid="8070756048978079164">"Prea luminos. Încercați o lumină mai slabă."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
- <string name="face_acquired_too_close" msgid="4453646176196302462">"Mutați telefonul mai departe"</string>
- <string name="face_acquired_too_far" msgid="2922278214231064859">"Mutați telefonul mai aproape"</string>
- <string name="face_acquired_too_high" msgid="8278815780046368576">"Mutați telefonul mai sus"</string>
- <string name="face_acquired_too_low" msgid="4075391872960840081">"Mutați telefonul mai jos"</string>
- <string name="face_acquired_too_right" msgid="6245286514593540859">"Mutați telefonul spre stânga"</string>
- <string name="face_acquired_too_left" msgid="9201762240918405486">"Mutați telefonul spre dreapta"</string>
+ <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nu se poate crea modelul facial. Reîncearcă."</string>
+ <string name="face_acquired_too_bright" msgid="8070756048978079164">"Prea luminos. Încearcă o lumină mai slabă."</string>
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Lumină insuficientă"</string>
+ <string name="face_acquired_too_close" msgid="4453646176196302462">"Mută telefonul mai departe"</string>
+ <string name="face_acquired_too_far" msgid="2922278214231064859">"Mută telefonul mai aproape"</string>
+ <string name="face_acquired_too_high" msgid="8278815780046368576">"Mută telefonul mai sus"</string>
+ <string name="face_acquired_too_low" msgid="4075391872960840081">"Mută telefonul mai jos"</string>
+ <string name="face_acquired_too_right" msgid="6245286514593540859">"Mută telefonul spre stânga"</string>
+ <string name="face_acquired_too_left" msgid="9201762240918405486">"Mută telefonul spre dreapta"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Priviți mai direct spre dispozitiv."</string>
<string name="face_acquired_not_detected" msgid="1057966913397548150">"Nu vi se vede fața. Țineți telefonul la nivelul ochilor."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Prea multă mișcare. Țineți telefonul nemișcat."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Reînregistrați-vă chipul."</string>
- <string name="face_acquired_too_different" msgid="2520389515612972889">"Chipul nu a fost recunoscut. Reîncercați."</string>
+ <string name="face_acquired_too_different" msgid="2520389515612972889">"Chipul nu a fost recunoscut. Reîncearcă."</string>
<string name="face_acquired_too_similar" msgid="8882920552674125694">"Schimbați ușor poziția capului"</string>
<string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Priviți direct spre telefon"</string>
<string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Priviți direct spre telefon"</string>
@@ -658,20 +658,20 @@
<skip />
<!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
<skip />
- <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncercați."</string>
+ <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncearcă."</string>
<string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S-au detectat ochelari de culoare închisă. Chipul trebuie să fie vizibil în totalitate."</string>
<string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S-a detectat un articol care acoperă chipul. Chipul trebuie să fie vizibil în totalitate."</string>
<string-array name="face_acquired_vendor">
</string-array>
<string name="face_error_hw_not_available" msgid="5085202213036026288">"Nu se poate confirma fața. Hardware-ul nu este disponibil."</string>
- <string name="face_error_timeout" msgid="2598544068593889762">"Încercați din nou Deblocarea facială"</string>
- <string name="face_error_no_space" msgid="5649264057026021723">"Nu se pot stoca date faciale noi. Ștergeți întâi unele vechi."</string>
+ <string name="face_error_timeout" msgid="2598544068593889762">"Încearcă din nou Deblocarea facială"</string>
+ <string name="face_error_no_space" msgid="5649264057026021723">"Nu se pot stoca date faciale noi. Șterge întâi unele vechi."</string>
<string name="face_error_canceled" msgid="2164434737103802131">"Operațiunea privind chipul a fost anulată."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Deblocarea facială a fost anulată de utilizator"</string>
- <string name="face_error_lockout" msgid="7864408714994529437">"Prea multe încercări. Reîncercați mai târziu."</string>
+ <string name="face_error_lockout" msgid="7864408714994529437">"Prea multe încercări. Reîncearcă mai târziu."</string>
<string name="face_error_lockout_permanent" msgid="3277134834042995260">"Prea multe încercări. Deblocarea facială este dezactivată."</string>
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Prea multe încercări. Folosiți blocarea ecranului."</string>
- <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nu se poate confirma fața. Încercați din nou."</string>
+ <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nu se poate confirma fața. Încearcă din nou."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Nu ați configurat Deblocarea facială"</string>
<string name="face_error_hw_not_present" msgid="7940978724978763011">"Deblocarea facială nu este acceptată pe acest dispozitiv"</string>
<string name="face_error_security_update_required" msgid="5076017208528750161">"Senzorul este dezactivat temporar."</string>
@@ -682,7 +682,7 @@
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Folosiți-vă chipul sau blocarea ecranului pentru a continua"</string>
<string-array name="face_error_vendor">
</string-array>
- <string name="face_error_vendor_unknown" msgid="7387005932083302070">"A apărut o eroare. Încercați din nou."</string>
+ <string name="face_error_vendor_unknown" msgid="7387005932083302070">"A apărut o eroare. Încearcă din nou."</string>
<string name="face_icon_content_description" msgid="465030547475916280">"Pictograma chip"</string>
<string name="permlab_readSyncSettings" msgid="6250532864893156277">"citire setări sincronizare"</string>
<string name="permdesc_readSyncSettings" msgid="1325658466358779298">"Permite aplicației să citească setările de sincronizare ale unui cont. De exemplu, cu această permisiune aplicația poate determina dacă aplicația Persoane este sincronizată cu un anumit cont."</string>
@@ -770,16 +770,16 @@
<string name="policylab_forceLock" msgid="7360335502968476434">"Să blocheze ecranul"</string>
<string name="policydesc_forceLock" msgid="1008844760853899693">"Stabiliți modul și timpul în care se blochează ecranul."</string>
<string name="policylab_wipeData" msgid="1359485247727537311">"Să șteargă toate datele"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"Ștergeți datele de pe tabletă fără avertisment, efectuând resetarea configurării din fabrică."</string>
- <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"Ștergeți datele de pe dispozitivul Android TV fără avertisment, efectuând o revenire la setările din fabrică."</string>
- <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"Ștergeți datele din sistemul de infotainment fără avertisment, prin revenirea la setările din fabrică."</string>
- <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"Ștergeți datele din telefon fără avertisment, efectuând resetarea configurării din fabrică."</string>
- <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"Ștergeți datele de profil"</string>
- <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"Ștergeți datele utilizatorului"</string>
- <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"Ștergeți datele acestui utilizator de pe această tabletă fără avertisment."</string>
- <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2293713284515865200">"Ștergeți datele acestui utilizator de pe acest dispozitiv Android TV fără avertisment"</string>
- <string name="policydesc_wipeData_secondaryUser" product="automotive" msgid="4658832487305780879">"Ștergeți datele profilului din acest sistem de infotainment fără avertisment."</string>
- <string name="policydesc_wipeData_secondaryUser" product="default" msgid="2788325512167208654">"Ștergeți datele acestui utilizator de pe acest telefon fără avertisment."</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="7245372676261947507">"Șterge datele de pe tabletă fără avertisment, efectuând resetarea configurării din fabrică."</string>
+ <string name="policydesc_wipeData" product="tv" msgid="513862488950801261">"Șterge datele de pe dispozitivul Android TV fără avertisment, efectuând o revenire la setările din fabrică."</string>
+ <string name="policydesc_wipeData" product="automotive" msgid="660804547737323300">"Șterge datele din sistemul de infotainment fără avertisment, prin revenirea la setările din fabrică."</string>
+ <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"Șterge datele din telefon fără avertisment, efectuând resetarea configurării din fabrică."</string>
+ <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"Șterge datele de profil"</string>
+ <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"Șterge datele utilizatorului"</string>
+ <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"Șterge datele acestui utilizator de pe această tabletă fără avertisment."</string>
+ <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2293713284515865200">"Șterge datele acestui utilizator de pe acest dispozitiv Android TV fără avertisment"</string>
+ <string name="policydesc_wipeData_secondaryUser" product="automotive" msgid="4658832487305780879">"Șterge datele profilului din acest sistem de infotainment fără avertisment."</string>
+ <string name="policydesc_wipeData_secondaryUser" product="default" msgid="2788325512167208654">"Șterge datele acestui utilizator de pe acest telefon fără avertisment."</string>
<string name="policylab_setGlobalProxy" msgid="215332221188670221">"Setați serverul proxy global pentru dispozitiv"</string>
<string name="policydesc_setGlobalProxy" msgid="7149665222705519604">"Setați serverul proxy global pentru dispozitiv, care să fie utilizat cât timp politica este activă. Numai proprietarul dispozitivului poate seta serverul proxy global."</string>
<string name="policylab_expirePassword" msgid="6015404400532459169">"Setați expirarea parolei pentru blocarea ecranului"</string>
@@ -904,41 +904,41 @@
<string name="sipAddressTypeWork" msgid="7873967986701216770">"Serviciu"</string>
<string name="sipAddressTypeOther" msgid="6317012577345187275">"Altul"</string>
<string name="quick_contacts_not_available" msgid="1262709196045052223">"Nu s-a găsit nicio aplicație pentru a afișa această persoană de contact."</string>
- <string name="keyguard_password_enter_pin_code" msgid="6401406801060956153">"Introduceți codul PIN"</string>
- <string name="keyguard_password_enter_puk_code" msgid="3112256684547584093">"Introduceți codul PUK și noul cod PIN"</string>
+ <string name="keyguard_password_enter_pin_code" msgid="6401406801060956153">"Introdu codul PIN"</string>
+ <string name="keyguard_password_enter_puk_code" msgid="3112256684547584093">"Introdu codul PUK și noul cod PIN"</string>
<string name="keyguard_password_enter_puk_prompt" msgid="2825313071899938305">"Codul PUK"</string>
<string name="keyguard_password_enter_pin_prompt" msgid="5505434724229581207">"Noul cod PIN"</string>
<string name="keyguard_password_entry_touch_hint" msgid="4032288032993261520"><font size="17">"Atingeți ca să introduceți parola"</font></string>
- <string name="keyguard_password_enter_password_code" msgid="2751130557661643482">"Introduceți parola pentru a debloca"</string>
- <string name="keyguard_password_enter_pin_password_code" msgid="7792964196473964340">"Introduceți codul PIN pentru a debloca"</string>
+ <string name="keyguard_password_enter_password_code" msgid="2751130557661643482">"Introdu parola pentru a debloca"</string>
+ <string name="keyguard_password_enter_pin_password_code" msgid="7792964196473964340">"Introdu codul PIN pentru a debloca"</string>
<string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"Cod PIN incorect."</string>
<string name="keyguard_label_text" msgid="3841953694564168384">"Pentru a debloca, apăsați Meniu, apoi 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"Număr de urgență"</string>
<string name="lockscreen_carrier_default" msgid="6192313772955399160">"Fără semnal"</string>
<string name="lockscreen_screen_locked" msgid="7364905540516041817">"Ecranul este blocat."</string>
- <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Apăsați Meniu pentru a debloca sau pentru a efectua apeluri de urgență."</string>
- <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Apăsați Meniu pentru deblocare."</string>
+ <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Apasă Meniu pentru a debloca sau pentru a efectua apeluri de urgență."</string>
+ <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Apasă Meniu pentru deblocare."</string>
<string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Desenați modelul pentru a debloca"</string>
<string name="lockscreen_emergency_call" msgid="7500692654885445299">"Urgență"</string>
<string name="lockscreen_return_to_call" msgid="3156883574692006382">"Reveniți la apel"</string>
<string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Corect!"</string>
- <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Încercați din nou"</string>
- <string name="lockscreen_password_wrong" msgid="8605355913868947490">"Încercați din nou"</string>
+ <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Încearcă din nou"</string>
+ <string name="lockscreen_password_wrong" msgid="8605355913868947490">"Încearcă din nou"</string>
<string name="lockscreen_storage_locked" msgid="634993789186443380">"Deblocați pentru toate funcțiile și datele"</string>
<string name="faceunlock_multiple_failures" msgid="681991538434031708">"S-a depășit numărul maxim de încercări pentru Deblocare facială"</string>
<string name="lockscreen_missing_sim_message_short" msgid="1248431165144893792">"Fără SIM"</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="8596805728510570760">"Nu există card SIM în computerul tablet PC."</string>
<string name="lockscreen_missing_sim_message" product="tv" msgid="2582768023352171073">"Nu există un card SIM în dispozitivul Android TV."</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="1408695081255172556">"Telefonul nu are card SIM."</string>
- <string name="lockscreen_missing_sim_instructions" msgid="8473601862688263903">"Introduceți un card SIM."</string>
- <string name="lockscreen_missing_sim_instructions_long" msgid="3664999892038416334">"Cardul SIM lipsește sau nu poate fi citit. Introduceți un card SIM."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8473601862688263903">"Introdu un card SIM."</string>
+ <string name="lockscreen_missing_sim_instructions_long" msgid="3664999892038416334">"Cardul SIM lipsește sau nu poate fi citit. Introdu un card SIM."</string>
<string name="lockscreen_permanent_disabled_sim_message_short" msgid="3812893366715730539">"Card SIM inutilizabil."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="4358929052509450807">"Cardul dvs. SIM este dezactivat definitiv.\n Contactați furnizorul de servicii wireless pentru a obține un alt card SIM."</string>
<string name="lockscreen_transport_prev_description" msgid="2879469521751181478">"Melodia anterioară"</string>
<string name="lockscreen_transport_next_description" msgid="2931509904881099919">"Melodia următoare"</string>
<string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"Pauză"</string>
<string name="lockscreen_transport_play_description" msgid="106868788691652733">"Redați"</string>
- <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"Opriți"</string>
+ <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"Oprește"</string>
<string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"Derulați"</string>
<string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"Derulați rapid înainte"</string>
<string name="emergency_calls_only" msgid="3057351206678279851">"Numai apeluri de urgență"</string>
@@ -959,7 +959,7 @@
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a dispozitivului Android TV. Acesta va reveni la setările din fabrică."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Acesta va fi acum resetat la setările prestabilite din fabrică."</string>
- <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"Încercați din nou peste <xliff:g id="NUMBER">%d</xliff:g> secunde."</string>
+ <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"Încearcă din nou peste <xliff:g id="NUMBER">%d</xliff:g> secunde."</string>
<string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"Ați uitat modelul?"</string>
<string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"Deblocare cont"</string>
<string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"Prea multe încercări de desenare a modelului"</string>
@@ -980,7 +980,7 @@
<string name="lockscreen_access_pattern_detected" msgid="3931150554035194012">"Modelul a fost desenat"</string>
<string name="lockscreen_access_pattern_area" msgid="1288780416685002841">"Zonă model."</string>
<string name="keyguard_accessibility_widget_changed" msgid="7298011259508200234">"%1$s. Widget %2$d din %3$d."</string>
- <string name="keyguard_accessibility_add_widget" msgid="8245795023551343672">"Adăugați un widget."</string>
+ <string name="keyguard_accessibility_add_widget" msgid="8245795023551343672">"Adaugă un widget."</string>
<string name="keyguard_accessibility_widget_empty_slot" msgid="544239307077644480">"Gol"</string>
<string name="keyguard_accessibility_unlock_area_expanded" msgid="7768634718706488951">"Zona de deblocare a fost extinsă."</string>
<string name="keyguard_accessibility_unlock_area_collapsed" msgid="4729922043778400434">"Zona de deblocare a fost restrânsă."</string>
@@ -992,7 +992,7 @@
<string name="keyguard_accessibility_widget_reorder_start" msgid="7066213328912939191">"A început reordonarea widgeturilor."</string>
<string name="keyguard_accessibility_widget_reorder_end" msgid="1083806817600593490">"Reordonarea widgeturilor s-a încheiat."</string>
<string name="keyguard_accessibility_widget_deleted" msgid="1509738950119878705">"Widgetul <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> a fost eliminat."</string>
- <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"Extindeți zona de deblocare."</string>
+ <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"Extinde zona de deblocare."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"Deblocare prin glisare."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"Deblocare cu model."</string>
<string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Deblocare facială."</string>
@@ -1012,7 +1012,7 @@
<string name="factorytest_failed" msgid="3190979160945298006">"Testarea de fabrică nu a reușit"</string>
<string name="factorytest_not_system" msgid="5658160199925519869">"Acțiunea FACTORY_TEST este acceptată doar pentru pachetele instalate în /system/app."</string>
<string name="factorytest_no_action" msgid="339252838115675515">"Nu s-a găsit niciun pachet care să ofere acțiunea FACTORY_TEST."</string>
- <string name="factorytest_reboot" msgid="2050147445567257365">"Reporniți"</string>
+ <string name="factorytest_reboot" msgid="2050147445567257365">"Repornește"</string>
<string name="js_dialog_title" msgid="7464775045615023241">"La pagina de la „<xliff:g id="TITLE">%s</xliff:g>” apare:"</string>
<string name="js_dialog_title_default" msgid="3769524569903332476">"JavaScript"</string>
<string name="js_dialog_before_unload_title" msgid="7012587995876771246">"Confirmați părăsirea paginii"</string>
@@ -1074,12 +1074,12 @@
<string name="menu_space_shortcut_label" msgid="5949311515646872071">"spațiu"</string>
<string name="menu_enter_shortcut_label" msgid="6709499510082897320">"enter"</string>
<string name="menu_delete_shortcut_label" msgid="4365787714477739080">"delete"</string>
- <string name="search_go" msgid="2141477624421347086">"Căutați"</string>
- <string name="search_hint" msgid="455364685740251925">"Căutați…"</string>
- <string name="searchview_description_search" msgid="1045552007537359343">"Căutați"</string>
+ <string name="search_go" msgid="2141477624421347086">"Caută"</string>
+ <string name="search_hint" msgid="455364685740251925">"Caută…"</string>
+ <string name="searchview_description_search" msgid="1045552007537359343">"Caută"</string>
<string name="searchview_description_query" msgid="7430242366971716338">"Interogare de căutare"</string>
- <string name="searchview_description_clear" msgid="1989371719192982900">"Ștergeți interogarea"</string>
- <string name="searchview_description_submit" msgid="6771060386117334686">"Trimiteți interogarea"</string>
+ <string name="searchview_description_clear" msgid="1989371719192982900">"Șterge interogarea"</string>
+ <string name="searchview_description_submit" msgid="6771060386117334686">"Trimite interogarea"</string>
<string name="searchview_description_voice" msgid="42360159504884679">"Căutare vocală"</string>
<string name="enable_explore_by_touch_warning_title" msgid="5095399706284943314">"Activați Explorați prin atingere?"</string>
<string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> dorește să activeze funcția Explorați prin atingere. Când această funcție este activată, puteți auzi sau vedea descrieri pentru ceea ce se află sub degetul dvs. sau puteți efectua gesturi pentru a interacționa cu tableta."</string>
@@ -1132,22 +1132,22 @@
<string name="Midnight" msgid="8176019203622191377">"Miezul nopții"</string>
<string name="elapsed_time_short_format_mm_ss" msgid="8689459651807876423">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
<string name="elapsed_time_short_format_h_mm_ss" msgid="2302144714803345056">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
- <string name="selectAll" msgid="1532369154488982046">"Selectați-le pe toate"</string>
- <string name="cut" msgid="2561199725874745819">"Decupați"</string>
- <string name="copy" msgid="5472512047143665218">"Copiați"</string>
+ <string name="selectAll" msgid="1532369154488982046">"Selectează-le pe toate"</string>
+ <string name="cut" msgid="2561199725874745819">"Decupează"</string>
+ <string name="copy" msgid="5472512047143665218">"Copiază"</string>
<string name="failed_to_copy_to_clipboard" msgid="725919885138539875">"Eroare la copierea în clipboard"</string>
- <string name="paste" msgid="461843306215520225">"Inserați"</string>
- <string name="paste_as_plain_text" msgid="7664800665823182587">"Inserați ca text simplu"</string>
+ <string name="paste" msgid="461843306215520225">"Inserează"</string>
+ <string name="paste_as_plain_text" msgid="7664800665823182587">"Inserează ca text simplu"</string>
<string name="replace" msgid="7842675434546657444">"Înlocuiți..."</string>
- <string name="delete" msgid="1514113991712129054">"Ștergeți"</string>
- <string name="copyUrl" msgid="6229645005987260230">"Copiați adresa URL"</string>
- <string name="selectTextMode" msgid="3225108910999318778">"Selectați text"</string>
- <string name="undo" msgid="3175318090002654673">"Anulați"</string>
+ <string name="delete" msgid="1514113991712129054">"Șterge"</string>
+ <string name="copyUrl" msgid="6229645005987260230">"Copiază adresa URL"</string>
+ <string name="selectTextMode" msgid="3225108910999318778">"Selectează text"</string>
+ <string name="undo" msgid="3175318090002654673">"Anulează"</string>
<string name="redo" msgid="7231448494008532233">"Repetați"</string>
<string name="autofill" msgid="511224882647795296">"Completare automată"</string>
<string name="textSelectionCABTitle" msgid="5151441579532476940">"Selectare text"</string>
- <string name="addToDictionary" msgid="8041821113480950096">"Adăugați în dicționar"</string>
- <string name="deleteText" msgid="4200807474529938112">"Ștergeți"</string>
+ <string name="addToDictionary" msgid="8041821113480950096">"Adaugă în dicționar"</string>
+ <string name="deleteText" msgid="4200807474529938112">"Șterge"</string>
<string name="inputMethod" msgid="1784759500516314751">"Metodă de intrare"</string>
<string name="editTextMenuTitle" msgid="857666911134482176">"Acțiuni pentru text"</string>
<string name="input_method_nav_back_button_desc" msgid="3655838793765691787">"Înapoi"</string>
@@ -1156,11 +1156,11 @@
<string name="low_internal_storage_view_text" msgid="8172166728369697835">"Este posibil ca unele funcții de sistem să nu funcționeze"</string>
<string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"Spațiu de stocare insuficient pentru sistem. Asigurați-vă că aveți 250 MB de spațiu liber și reporniți."</string>
<string name="app_running_notification_title" msgid="8985999749231486569">"<xliff:g id="APP_NAME">%1$s</xliff:g> rulează acum"</string>
- <string name="app_running_notification_text" msgid="5120815883400228566">"Atingeți pentru mai multe informații sau pentru a opri aplicația."</string>
+ <string name="app_running_notification_text" msgid="5120815883400228566">"Atinge pentru mai multe informații sau pentru a opri aplicația."</string>
<string name="ok" msgid="2646370155170753815">"OK"</string>
- <string name="cancel" msgid="6908697720451760115">"Anulați"</string>
+ <string name="cancel" msgid="6908697720451760115">"Anulează"</string>
<string name="yes" msgid="9069828999585032361">"OK"</string>
- <string name="no" msgid="5122037903299899715">"Anulați"</string>
+ <string name="no" msgid="5122037903299899715">"Anulează"</string>
<string name="dialog_alert_title" msgid="651856561974090712">"Atenție"</string>
<string name="loading" msgid="3138021523725055037">"Se încarcă…"</string>
<string name="capital_on" msgid="2770685323900821829">"DA"</string>
@@ -1174,24 +1174,24 @@
<string name="whichApplication" msgid="5432266899591255759">"Finalizare acțiune utilizând"</string>
<string name="whichApplicationNamed" msgid="6969946041713975681">"Finalizați acțiunea utilizând %1$s"</string>
<string name="whichApplicationLabel" msgid="7852182961472531728">"Finalizați acțiunea"</string>
- <string name="whichViewApplication" msgid="5733194231473132945">"Deschideți cu"</string>
- <string name="whichViewApplicationNamed" msgid="415164730629690105">"Deschideți cu %1$s"</string>
- <string name="whichViewApplicationLabel" msgid="7367556735684742409">"Deschideți"</string>
- <string name="whichOpenHostLinksWith" msgid="7645631470199397485">"Deschideți linkurile <xliff:g id="HOST">%1$s</xliff:g> cu"</string>
- <string name="whichOpenLinksWith" msgid="1120936181362907258">"Deschideți linkurile cu"</string>
- <string name="whichOpenLinksWithApp" msgid="6917864367861910086">"Deschideți linkurile cu <xliff:g id="APPLICATION">%1$s</xliff:g>"</string>
- <string name="whichOpenHostLinksWithApp" msgid="2401668560768463004">"Deschideți linkurile <xliff:g id="HOST">%1$s</xliff:g> cu <xliff:g id="APPLICATION">%2$s</xliff:g>"</string>
- <string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"Permiteți accesul"</string>
+ <string name="whichViewApplication" msgid="5733194231473132945">"Deschide cu"</string>
+ <string name="whichViewApplicationNamed" msgid="415164730629690105">"Deschide cu %1$s"</string>
+ <string name="whichViewApplicationLabel" msgid="7367556735684742409">"Deschide"</string>
+ <string name="whichOpenHostLinksWith" msgid="7645631470199397485">"Deschide linkurile <xliff:g id="HOST">%1$s</xliff:g> cu"</string>
+ <string name="whichOpenLinksWith" msgid="1120936181362907258">"Deschide linkurile cu"</string>
+ <string name="whichOpenLinksWithApp" msgid="6917864367861910086">"Deschide linkurile cu <xliff:g id="APPLICATION">%1$s</xliff:g>"</string>
+ <string name="whichOpenHostLinksWithApp" msgid="2401668560768463004">"Deschide linkurile <xliff:g id="HOST">%1$s</xliff:g> cu <xliff:g id="APPLICATION">%2$s</xliff:g>"</string>
+ <string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"Permite accesul"</string>
<string name="whichEditApplication" msgid="6191568491456092812">"Editați cu"</string>
<string name="whichEditApplicationNamed" msgid="8096494987978521514">"Editați cu %1$s"</string>
<string name="whichEditApplicationLabel" msgid="1463288652070140285">"Editați"</string>
- <string name="whichSendApplication" msgid="4143847974460792029">"Trimiteți"</string>
+ <string name="whichSendApplication" msgid="4143847974460792029">"Trimite"</string>
<string name="whichSendApplicationNamed" msgid="4470386782693183461">"Distribuiți cu %1$s"</string>
- <string name="whichSendApplicationLabel" msgid="7467813004769188515">"Trimiteți"</string>
- <string name="whichSendToApplication" msgid="77101541959464018">"Trimiteți folosind"</string>
- <string name="whichSendToApplicationNamed" msgid="3385686512014670003">"Trimiteți folosind %1$s"</string>
- <string name="whichSendToApplicationLabel" msgid="3543240188816513303">"Trimiteți"</string>
- <string name="whichHomeApplication" msgid="8276350727038396616">"Selectați o aplicație de pe ecranul de pornire"</string>
+ <string name="whichSendApplicationLabel" msgid="7467813004769188515">"Trimite"</string>
+ <string name="whichSendToApplication" msgid="77101541959464018">"Trimite folosind"</string>
+ <string name="whichSendToApplicationNamed" msgid="3385686512014670003">"Trimite folosind %1$s"</string>
+ <string name="whichSendToApplicationLabel" msgid="3543240188816513303">"Trimite"</string>
+ <string name="whichHomeApplication" msgid="8276350727038396616">"Selectează o aplicație de pe ecranul de pornire"</string>
<string name="whichHomeApplicationNamed" msgid="5855990024847433794">"Utilizați %1$s ca ecran de pornire"</string>
<string name="whichHomeApplicationLabel" msgid="8907334282202933959">"Fotografiați"</string>
<string name="whichImageCaptureApplication" msgid="2737413019463215284">"Fotografiați cu"</string>
@@ -1199,20 +1199,20 @@
<string name="whichImageCaptureApplicationLabel" msgid="6505433734824988277">"Fotografiați"</string>
<string name="alwaysUse" msgid="3153558199076112903">"Se utilizează în mod prestabilit pentru această acțiune."</string>
<string name="use_a_different_app" msgid="4987790276170972776">"Utilizați altă aplicație"</string>
- <string name="clearDefaultHintMsg" msgid="1325866337702524936">"Ștergeți setările prestabilite din Setări de sistem > Aplicații > Descărcate."</string>
- <string name="chooseActivity" msgid="8563390197659779956">"Alegeți o acțiune"</string>
- <string name="chooseUsbActivity" msgid="2096269989990986612">"Alegeți o aplicație pentru dispozitivul USB"</string>
+ <string name="clearDefaultHintMsg" msgid="1325866337702524936">"Șterge setările prestabilite din Setări de sistem > Aplicații > Descărcate."</string>
+ <string name="chooseActivity" msgid="8563390197659779956">"Alege o acțiune"</string>
+ <string name="chooseUsbActivity" msgid="2096269989990986612">"Alege o aplicație pentru dispozitivul USB"</string>
<string name="noApplications" msgid="1186909265235544019">"Această acțiune nu poate fi efectuată de nicio aplicație."</string>
<string name="aerr_application" msgid="4090916809370389109">"<xliff:g id="APPLICATION">%1$s</xliff:g> s-a oprit"</string>
<string name="aerr_process" msgid="4268018696970966407">"<xliff:g id="PROCESS">%1$s</xliff:g> s-a oprit"</string>
<string name="aerr_application_repeated" msgid="7804378743218496566">"<xliff:g id="APPLICATION">%1$s</xliff:g> se oprește încontinuu"</string>
<string name="aerr_process_repeated" msgid="1153152413537954974">"<xliff:g id="PROCESS">%1$s</xliff:g> se oprește încontinuu"</string>
- <string name="aerr_restart" msgid="2789618625210505419">"Deschideți din nou aplicația"</string>
- <string name="aerr_report" msgid="3095644466849299308">"Trimiteți feedback"</string>
- <string name="aerr_close" msgid="3398336821267021852">"Închideți"</string>
+ <string name="aerr_restart" msgid="2789618625210505419">"Deschide din nou aplicația"</string>
+ <string name="aerr_report" msgid="3095644466849299308">"Trimite feedback"</string>
+ <string name="aerr_close" msgid="3398336821267021852">"Închide"</string>
<string name="aerr_mute" msgid="2304972923480211376">"Dezactivați până la repornirea dispozitivului"</string>
<string name="aerr_wait" msgid="3198677780474548217">"Așteptați"</string>
- <string name="aerr_close_app" msgid="8318883106083050970">"Închideți aplicația"</string>
+ <string name="aerr_close_app" msgid="8318883106083050970">"Închide aplicația"</string>
<string name="anr_title" msgid="7290329487067300120"></string>
<string name="anr_activity_application" msgid="8121716632960340680">"<xliff:g id="APPLICATION">%2$s</xliff:g> nu răspunde"</string>
<string name="anr_activity_process" msgid="3477362583767128667">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nu răspunde"</string>
@@ -1226,13 +1226,13 @@
<string name="launch_warning_replace" msgid="3073392976283203402">"<xliff:g id="APP_NAME">%1$s</xliff:g> funcționează acum."</string>
<string name="launch_warning_original" msgid="3332206576800169626">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost lansată inițial."</string>
<string name="screen_compat_mode_scale" msgid="8627359598437527726">"Scară"</string>
- <string name="screen_compat_mode_show" msgid="5080361367584709857">"Afișați întotdeauna"</string>
+ <string name="screen_compat_mode_show" msgid="5080361367584709857">"Afișează întotdeauna"</string>
<string name="screen_compat_mode_hint" msgid="4032272159093750908">"Reactivați acest mod din Setări de sistem > Aplicații > Descărcate."</string>
<string name="unsupported_display_size_message" msgid="7265211375269394699">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu acceptă setarea actuală pentru Dimensiunea afișării și este posibil să aibă un comportament neașteptat."</string>
<string name="unsupported_display_size_show" msgid="980129850974919375">"Afișează întotdeauna"</string>
<string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost concepută pentru o versiune incompatibilă de sistem de operare Android și este posibil să se comporte în mod neprevăzut. Poate fi disponibilă o versiune actualizată a aplicației."</string>
- <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Afișați întotdeauna"</string>
- <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Căutați actualizări"</string>
+ <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Afișează întotdeauna"</string>
+ <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Caută actualizări"</string>
<string name="smv_application" msgid="3775183542777792638">"Aplicația <xliff:g id="APPLICATION">%1$s</xliff:g> (procesul <xliff:g id="PROCESS">%2$s</xliff:g>) a încălcat propria politică StrictMode."</string>
<string name="smv_process" msgid="1398801497130695446">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> a încălcat propria politică StrictMode."</string>
<string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Se actualizează telefonul.…"</string>
@@ -1250,27 +1250,27 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Se pornesc aplicațiile."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Se finalizează pornirea."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Ați apăsat butonul de pornire. De obicei, această acțiune dezactivează ecranul.\n\nAtingeți ușor când vă configurați amprenta."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Atinge pentru a dezactiva ecranul"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Dezactivează ecranul"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ca să termini configurarea, dezactivează ecranul"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Dezactivează"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuați cu verificarea amprentei?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Ați apăsat butonul de pornire. De obicei, această acțiune dezactivează ecranul.\n\nAtingeți ușor pentru verificarea amprentei."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Dezactivați ecranul"</string>
<string name="fp_power_button_bp_negative_button" msgid="3971364246496775178">"Continuați"</string>
<string name="heavy_weight_notification" msgid="8382784283600329576">"Rulează <xliff:g id="APP">%1$s</xliff:g>"</string>
- <string name="heavy_weight_notification_detail" msgid="6802247239468404078">"Atingeți pentru a reveni la joc"</string>
- <string name="heavy_weight_switcher_title" msgid="3861984210040100886">"Alegeți jocul"</string>
+ <string name="heavy_weight_notification_detail" msgid="6802247239468404078">"Atinge pentru a reveni la joc"</string>
+ <string name="heavy_weight_switcher_title" msgid="3861984210040100886">"Alege jocul"</string>
<string name="heavy_weight_switcher_text" msgid="6814316627367160126">"Pentru o performanță mai bună, se poate deschide un singur joc odată."</string>
<string name="old_app_action" msgid="725331621042848590">"Reveniți la <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
- <string name="new_app_action" msgid="547772182913269801">"Deschideți <xliff:g id="NEW_APP">%1$s</xliff:g>"</string>
+ <string name="new_app_action" msgid="547772182913269801">"Deschide <xliff:g id="NEW_APP">%1$s</xliff:g>"</string>
<string name="new_app_description" msgid="1958903080400806644">"<xliff:g id="OLD_APP">%1$s</xliff:g> se va închide fără să salveze"</string>
<string name="dump_heap_notification" msgid="5316644945404825032">"<xliff:g id="PROC">%1$s</xliff:g> a depășit limita de memorie"</string>
<string name="dump_heap_ready_notification" msgid="2302452262927390268">"Datele privind memoria heap <xliff:g id="PROC">%1$s</xliff:g> sunt gata"</string>
- <string name="dump_heap_notification_detail" msgid="8431586843001054050">"Datele privind memoria au fost culese. Atingeți pentru a trimite."</string>
- <string name="dump_heap_title" msgid="4367128917229233901">"Trimiteți datele privind memoria?"</string>
+ <string name="dump_heap_notification_detail" msgid="8431586843001054050">"Datele privind memoria au fost culese. Atinge pentru a trimite."</string>
+ <string name="dump_heap_title" msgid="4367128917229233901">"Trimiți datele privind memoria?"</string>
<string name="dump_heap_text" msgid="1692649033835719336">"Procesul <xliff:g id="PROC">%1$s</xliff:g> și-a depășit limita de memorie de <xliff:g id="SIZE">%2$s</xliff:g>. Sunt disponibile datele privind memoria heap, pe care le puteți trimite dezvoltatorului. Atenție: aceste date privind memoria heap pot conține informații cu caracter personal la care aplicația are acces."</string>
<string name="dump_heap_system_text" msgid="6805155514925350849">"Procesul <xliff:g id="PROC">%1$s</xliff:g> a depășit limita de memorie de <xliff:g id="SIZE">%2$s</xliff:g>. Sunt disponibile datele privind memoria heap, pe care le puteți distribui. Atenție: aceste date privind memoria heap pot conține informații cu caracter personal sensibile la care procesul are acces și care pot include ceea ce tastați."</string>
<string name="dump_heap_ready_text" msgid="5849618132123045516">"Sunt disponibile datele privind memoria heap a procesului <xliff:g id="PROC">%1$s</xliff:g>, pe care le puteți distribui. Atenție: aceste date privind memoria heap pot conține informații cu caracter personal sensibile la care procesul are acces și care pot include ceea ce tastați."</string>
- <string name="sendText" msgid="493003724401350724">"Alegeți o acțiune pentru text"</string>
+ <string name="sendText" msgid="493003724401350724">"Alege o acțiune pentru text"</string>
<string name="volume_ringtone" msgid="134784084629229029">"Volum sonerie"</string>
<string name="volume_music" msgid="7727274216734955095">"Volum media"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="2614142915948898228">"Redare prin Bluetooth"</string>
@@ -1297,7 +1297,7 @@
<!-- no translation found for network_available_sign_in_detailed (7520423801613396556) -->
<skip />
<string name="wifi_no_internet" msgid="1386911698276448061">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> nu are acces la internet"</string>
- <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Atingeți pentru opțiuni"</string>
+ <string name="wifi_no_internet_detailed" msgid="634938444133558942">"Atinge pentru opțiuni"</string>
<string name="mobile_no_internet" msgid="4014455157529909781">"Rețeaua mobilă nu are acces la internet"</string>
<string name="other_networks_no_internet" msgid="6698711684200067033">"Rețeaua nu are acces la internet"</string>
<string name="private_dns_broken_detailed" msgid="3709388271074611847">"Serverul DNS privat nu poate fi accesat"</string>
@@ -1315,33 +1315,33 @@
</string-array>
<string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un tip de rețea necunoscut"</string>
<string name="accept" msgid="5447154347815825107">"Acceptați"</string>
- <string name="decline" msgid="6490507610282145874">"Refuzați"</string>
- <string name="select_character" msgid="3352797107930786979">"Introduceți caracterul"</string>
+ <string name="decline" msgid="6490507610282145874">"Refuz"</string>
+ <string name="select_character" msgid="3352797107930786979">"Introdu caracterul"</string>
<string name="sms_control_title" msgid="4748684259903148341">"Se trimit mesaje SMS"</string>
- <string name="sms_control_message" msgid="6574313876316388239">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> trimite un număr mare de mesaje SMS. Permiteți acestei aplicații să trimită în continuare mesaje?"</string>
- <string name="sms_control_yes" msgid="4858845109269524622">"Permiteți"</string>
- <string name="sms_control_no" msgid="4845717880040355570">"Refuzați"</string>
+ <string name="sms_control_message" msgid="6574313876316388239">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> trimite un număr mare de mesaje SMS. Permiți acestei aplicații să trimită în continuare mesaje?"</string>
+ <string name="sms_control_yes" msgid="4858845109269524622">"Permite"</string>
+ <string name="sms_control_no" msgid="4845717880040355570">"Refuz"</string>
<string name="sms_short_code_confirm_message" msgid="1385416688897538724">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> intenționează să trimită un mesaj la <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
<string name="sms_short_code_details" msgid="2723725738333388351">"Acest lucru "<b>"poate genera costuri"</b>" în contul dvs. mobil."</string>
<string name="sms_premium_short_code_details" msgid="1400296309866638111"><b>"Acest lucru va genera costuri în contul dvs. mobil."</b></string>
- <string name="sms_short_code_confirm_allow" msgid="920477594325526691">"Trimiteți"</string>
- <string name="sms_short_code_confirm_deny" msgid="1356917469323768230">"Anulați"</string>
+ <string name="sms_short_code_confirm_allow" msgid="920477594325526691">"Trimite"</string>
+ <string name="sms_short_code_confirm_deny" msgid="1356917469323768230">"Anulează"</string>
<string name="sms_short_code_remember_choice" msgid="1374526438647744862">"Doresc să se rețină opțiunea"</string>
<string name="sms_short_code_remember_undo_instruction" msgid="2620984439143080410">"Puteți modifica ulterior în Setări > Aplicații"</string>
- <string name="sms_short_code_confirm_always_allow" msgid="2223014893129755950">"Permiteți întotdeauna"</string>
+ <string name="sms_short_code_confirm_always_allow" msgid="2223014893129755950">"Permite întotdeauna"</string>
<string name="sms_short_code_confirm_never_allow" msgid="2688828813521652079">"Nu permiteți niciodată"</string>
<string name="sim_removed_title" msgid="5387212933992546283">"Card SIM eliminat"</string>
<string name="sim_removed_message" msgid="9051174064474904617">"Rețeaua mobilă va fi indisponibilă până când reporniți cu un card SIM valid introdus."</string>
<string name="sim_done_button" msgid="6464250841528410598">"Terminat"</string>
<string name="sim_added_title" msgid="7930779986759414595">"Card SIM adăugat"</string>
- <string name="sim_added_message" msgid="6602906609509958680">"Reporniți dispozitivul pentru a accesa rețeaua mobilă."</string>
- <string name="sim_restart_button" msgid="8481803851341190038">"Reporniți"</string>
+ <string name="sim_added_message" msgid="6602906609509958680">"Repornește dispozitivul pentru a accesa rețeaua mobilă."</string>
+ <string name="sim_restart_button" msgid="8481803851341190038">"Repornește"</string>
<string name="install_carrier_app_notification_title" msgid="5712723402213090102">"Activați serviciul mobil"</string>
<string name="install_carrier_app_notification_text" msgid="2781317581274192728">"Descărcați aplicația operatorului pentru a vă activa noul card SIM"</string>
<string name="install_carrier_app_notification_text_app_name" msgid="4086877327264106484">"Descărcați aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> pentru a vă activa noul card SIM"</string>
<string name="install_carrier_app_notification_button" msgid="6257740533102594290">"Descărcați aplicația"</string>
<string name="carrier_app_notification_title" msgid="5815477368072060250">"S-a introdus un card SIM nou"</string>
- <string name="carrier_app_notification_text" msgid="6567057546341958637">"Atingeți pentru a-l configura"</string>
+ <string name="carrier_app_notification_text" msgid="6567057546341958637">"Atinge pentru a-l configura"</string>
<string name="time_picker_dialog_title" msgid="9053376764985220821">"Setați ora"</string>
<string name="date_picker_dialog_title" msgid="5030520449243071926">"Setați data"</string>
<string name="date_time_set" msgid="4603445265164486816">"Setați"</string>
@@ -1358,16 +1358,16 @@
<string name="usb_tether_notification_title" msgid="8828527870612663771">"Tetheringul prin USB este activat"</string>
<string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI prin USB este activat"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"Accesoriu USB conectat"</string>
- <string name="usb_notification_message" msgid="4715163067192110676">"Atingeți pentru mai multe opțiuni."</string>
- <string name="usb_power_notification_message" msgid="7284765627437897702">"Se încarcă dispozitivul conectat. Atingeți pentru mai multe opțiuni."</string>
+ <string name="usb_notification_message" msgid="4715163067192110676">"Atinge pentru mai multe opțiuni."</string>
+ <string name="usb_power_notification_message" msgid="7284765627437897702">"Se încarcă dispozitivul conectat. Atinge pentru mai multe opțiuni."</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"S-a detectat un accesoriu audio analogic"</string>
- <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Dispozitivul atașat nu este compatibil cu acest telefon. Atingeți pentru a afla mai multe."</string>
+ <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Dispozitivul atașat nu este compatibil cu acest telefon. Atinge pentru a afla mai multe."</string>
<string name="adb_active_notification_title" msgid="408390247354560331">"Remedierea erorilor prin USB conectată"</string>
- <string name="adb_active_notification_message" msgid="5617264033476778211">"Atingeți pentru a dezactiva."</string>
- <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selectați pentru a dezactiva remedierea erorilor prin USB."</string>
+ <string name="adb_active_notification_message" msgid="5617264033476778211">"Atinge pentru a dezactiva."</string>
+ <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selectează pentru a dezactiva remedierea erorilor prin USB."</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Remedierea erorilor wireless este activă"</string>
<string name="adbwifi_active_notification_message" msgid="930987922852867972">"Atinge pentru a dezactiva remedierea erorilor wireless"</string>
- <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Selectați pentru a dezactiva remedierea erorilor wireless."</string>
+ <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Selectează pentru a dezactiva remedierea erorilor wireless."</string>
<string name="test_harness_mode_notification_title" msgid="2282785860014142511">"Modul Set de testare este activat"</string>
<string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Reveniți la setările din fabrică pentru a dezactiva modul Set de testare."</string>
<string name="console_running_notification_title" msgid="6087888939261635904">"Consola din serie este activată"</string>
@@ -1379,16 +1379,16 @@
<string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"Portul USB poate fi folosit"</string>
<string name="usb_contaminant_not_detected_message" msgid="892863190942660462">"Telefonul nu mai detectează lichide sau reziduuri."</string>
<string name="taking_remote_bugreport_notification_title" msgid="1582531382166919850">"Se creează un raport de eroare…"</string>
- <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"Trimiteți raportul de eroare?"</string>
+ <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"Trimiți raportul de eroare?"</string>
<string name="sharing_remote_bugreport_notification_title" msgid="3077385149217638550">"Se trimite raportul de eroare…"</string>
<string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"Administratorul dvs. a solicitat un raport de eroare pentru a remedia problemele acestui dispozitiv. Este posibil să se permită accesul la date și aplicații."</string>
<string name="share_remote_bugreport_action" msgid="7630880678785123682">"TRIMITEȚI"</string>
<string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REFUZAȚI"</string>
- <string name="select_input_method" msgid="3971267998568587025">"Alegeți metoda de introducere de text"</string>
+ <string name="select_input_method" msgid="3971267998568587025">"Alege metoda de introducere de text"</string>
<string name="show_ime" msgid="6406112007347443383">"Se păstrează pe ecran cât timp este activată tastatura fizică"</string>
- <string name="hardware" msgid="1800597768237606953">"Afișați tastatura virtuală"</string>
- <string name="select_keyboard_layout_notification_title" msgid="4427643867639774118">"Configurați tastatura fizică"</string>
- <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Atingeți pentru a selecta limba și aspectul"</string>
+ <string name="hardware" msgid="1800597768237606953">"Afișează tastatura virtuală"</string>
+ <string name="select_keyboard_layout_notification_title" msgid="4427643867639774118">"Configurează tastatura fizică"</string>
+ <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Atinge pentru a selecta limba și aspectul"</string>
<string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
<string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Afișare peste alte aplicații"</string>
@@ -1401,29 +1401,29 @@
<string name="ext_media_checking_notification_message" product="tv" msgid="7986154434946021415">"Se analizează spațiul de stocare media"</string>
<string name="ext_media_new_notification_title" msgid="3517407571407687677">"<xliff:g id="NAME">%s</xliff:g> nou"</string>
<string name="ext_media_new_notification_title" product="automotive" msgid="9085349544984742727">"<xliff:g id="NAME">%s</xliff:g> nu funcționează"</string>
- <string name="ext_media_new_notification_message" msgid="6095403121990786986">"Atingeți pentru a configura"</string>
- <string name="ext_media_new_notification_message" product="tv" msgid="216863352100263668">"Selectați pentru a configura"</string>
+ <string name="ext_media_new_notification_message" msgid="6095403121990786986">"Atinge pentru a configura"</string>
+ <string name="ext_media_new_notification_message" product="tv" msgid="216863352100263668">"Selectează pentru a configura"</string>
<string name="ext_media_new_notification_message" product="automotive" msgid="5140127881613227162">"Poate fi nevoie să reformatați dispozitivul. Atingeți pentru a-l scoate."</string>
<string name="ext_media_ready_notification_message" msgid="7509496364380197369">"Pentru stocarea de fotografii, videoclipuri, muzică și altele"</string>
<string name="ext_media_ready_notification_message" product="tv" msgid="8847134811163165935">"Răsfoiți fișierele media"</string>
<string name="ext_media_unmountable_notification_title" msgid="4895444667278979910">"Problemă cu <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="ext_media_unmountable_notification_title" product="automotive" msgid="3142723758949023280">"<xliff:g id="NAME">%s</xliff:g> nu funcționează"</string>
- <string name="ext_media_unmountable_notification_message" msgid="3256290114063126205">"Atingeți pentru a remedia"</string>
- <string name="ext_media_unmountable_notification_message" product="tv" msgid="3003611129979934633">"<xliff:g id="NAME">%s</xliff:g> este corupt. Selectați pentru a remedia."</string>
+ <string name="ext_media_unmountable_notification_message" msgid="3256290114063126205">"Atinge pentru a remedia"</string>
+ <string name="ext_media_unmountable_notification_message" product="tv" msgid="3003611129979934633">"<xliff:g id="NAME">%s</xliff:g> este corupt. Selectează pentru a remedia."</string>
<string name="ext_media_unmountable_notification_message" product="automotive" msgid="2274596120715020680">"Poate fi nevoie să reformatați dispozitivul. Atingeți pentru a-l scoate."</string>
<string name="ext_media_unsupported_notification_title" msgid="3487534182861251401">"S-a detectat <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="ext_media_unsupported_notification_title" product="automotive" msgid="6004193172658722381">"<xliff:g id="NAME">%s</xliff:g> nu funcționează"</string>
<string name="ext_media_unsupported_notification_message" msgid="8463636521459807981">"Atinge pentru a configura"</string>
- <string name="ext_media_unsupported_notification_message" product="tv" msgid="1595482802187036532">"Selectați pentru a configura <xliff:g id="NAME">%s</xliff:g> într-un format acceptat."</string>
+ <string name="ext_media_unsupported_notification_message" product="tv" msgid="1595482802187036532">"Selectează pentru a configura <xliff:g id="NAME">%s</xliff:g> într-un format acceptat."</string>
<string name="ext_media_unsupported_notification_message" product="automotive" msgid="3412494732736336330">"Poate fi nevoie să reformatați dispozitivul"</string>
<string name="ext_media_badremoval_notification_title" msgid="4114625551266196872">"<xliff:g id="NAME">%s</xliff:g> scos pe neașteptate"</string>
- <string name="ext_media_badremoval_notification_message" msgid="1986514704499809244">"Deconectați din setări dispozitivele media înainte de a le îndepărta, pentru a evita pierderea conținutului"</string>
+ <string name="ext_media_badremoval_notification_message" msgid="1986514704499809244">"Deconectează din setări dispozitivele media înainte de a le îndepărta, pentru a evita pierderea conținutului"</string>
<string name="ext_media_nomedia_notification_title" msgid="742671636376975890">"S-a eliminat <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="ext_media_nomedia_notification_message" msgid="2832724384636625852">"Funcționarea ar putea fi necorespunzătoare. Introduceți un dispozitiv de stocare nou."</string>
+ <string name="ext_media_nomedia_notification_message" msgid="2832724384636625852">"Funcționarea ar putea fi necorespunzătoare. Introdu un dispozitiv de stocare nou."</string>
<string name="ext_media_unmounting_notification_title" msgid="4147986383917892162">"Se deconectează <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="ext_media_unmounting_notification_message" msgid="5717036261538754203">"Nu scoateți"</string>
- <string name="ext_media_init_action" msgid="2312974060585056709">"Configurați"</string>
- <string name="ext_media_unmount_action" msgid="966992232088442745">"Scoateți"</string>
+ <string name="ext_media_init_action" msgid="2312974060585056709">"Configurează"</string>
+ <string name="ext_media_unmount_action" msgid="966992232088442745">"Scoate"</string>
<string name="ext_media_browse_action" msgid="344865351947079139">"Explorați"</string>
<string name="ext_media_seamless_action" msgid="8837030226009268080">"Schimbați ieșirea"</string>
<string name="ext_media_missing_title" msgid="3209472091220515046">"<xliff:g id="NAME">%s</xliff:g> lipsește"</string>
@@ -1458,11 +1458,11 @@
<string name="permdesc_requestIgnoreBatteryOptimizations" msgid="634260656917874356">"Permite unei aplicații să solicite permisiunea de a ignora optimizările bateriei pentru aplicația respectivă."</string>
<string name="permlab_queryAllPackages" msgid="2928450604653281650">"să interogheze toate pachetele"</string>
<string name="permdesc_queryAllPackages" msgid="5339069855520996010">"Permite unei aplicații să vadă toate pachetele instalate."</string>
- <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"Apăsați de două ori pentru a controla mărirea/micșorarea"</string>
+ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"Apasă de două ori pentru a controla mărirea/micșorarea"</string>
<string name="gadget_host_error_inflating" msgid="2449961590495198720">"Nu s-a putut adăuga widgetul."</string>
<string name="ime_action_go" msgid="5536744546326495436">"Accesați"</string>
- <string name="ime_action_search" msgid="4501435960587287668">"Căutați"</string>
- <string name="ime_action_send" msgid="8456843745664334138">"Trimiteți"</string>
+ <string name="ime_action_search" msgid="4501435960587287668">"Caută"</string>
+ <string name="ime_action_send" msgid="8456843745664334138">"Trimite"</string>
<string name="ime_action_next" msgid="4169702997635728543">"Înainte"</string>
<string name="ime_action_done" msgid="6299921014822891569">"Terminat"</string>
<string name="ime_action_previous" msgid="6548799326860401611">"Înapoi"</string>
@@ -1470,10 +1470,10 @@
<string name="dial_number_using" msgid="6060769078933953531">"Formați numărul\nutilizând <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="create_contact_using" msgid="6200708808003692594">"Creați contactul\nutilizând <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"Următoarele aplicații solicită permisiunea de a accesa contul dvs. acum și în viitor."</string>
- <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"Permiteți această solicitare?"</string>
+ <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"Permiți această solicitare?"</string>
<string name="grant_permissions_header_text" msgid="3420736827804657201">"Solicitare de acces"</string>
- <string name="allow" msgid="6195617008611933762">"Permiteți"</string>
- <string name="deny" msgid="6632259981847676572">"Refuzați"</string>
+ <string name="allow" msgid="6195617008611933762">"Permite"</string>
+ <string name="deny" msgid="6632259981847676572">"Refuz"</string>
<string name="permission_request_notification_title" msgid="1810025922441048273">"Permisiune solicitată"</string>
<string name="permission_request_notification_with_subtitle" msgid="3743417870360129298">"Permisiune solicitată\npentru contul <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
<string name="permission_request_notification_for_app_with_subtitle" msgid="1298704005732851350">"Permisiune solicitată de <xliff:g id="APP">%1$s</xliff:g>\npentru contul <xliff:g id="ACCOUNT">%2$s</xliff:g>."</string>
@@ -1490,22 +1490,22 @@
<string name="notification_ranker_binding_label" msgid="432708245635563763">"Serviciul de clasificare a notificărilor"</string>
<string name="vpn_title" msgid="5906991595291514182">"VPN activat"</string>
<string name="vpn_title_long" msgid="6834144390504619998">"VPN este activată de <xliff:g id="APP">%s</xliff:g>"</string>
- <string name="vpn_text" msgid="2275388920267251078">"Apăsați pentru a gestiona rețeaua."</string>
- <string name="vpn_text_long" msgid="278540576806169831">"Conectat la <xliff:g id="SESSION">%s</xliff:g>. Apăsați pentru a gestiona rețeaua."</string>
+ <string name="vpn_text" msgid="2275388920267251078">"Apasă pentru a gestiona rețeaua."</string>
+ <string name="vpn_text_long" msgid="278540576806169831">"Conectat la <xliff:g id="SESSION">%s</xliff:g>. Apasă pentru a gestiona rețeaua."</string>
<string name="vpn_lockdown_connecting" msgid="6096725311950342607">"Se efectuează conectarea la rețeaua VPN activată permanent…"</string>
<string name="vpn_lockdown_connected" msgid="2853127976590658469">"Conectat(ă) la rețeaua VPN activată permanent"</string>
<string name="vpn_lockdown_disconnected" msgid="5573611651300764955">"Deconectat de la rețeaua VPN activată permanent"</string>
<string name="vpn_lockdown_error" msgid="4453048646854247947">"Nu s-a putut conecta la rețeaua VPN activată permanent"</string>
<string name="vpn_lockdown_config" msgid="8331697329868252169">"Modificați setările de rețea sau VPN"</string>
- <string name="upload_file" msgid="8651942222301634271">"Alegeți un fișier"</string>
+ <string name="upload_file" msgid="8651942222301634271">"Alege un fișier"</string>
<string name="no_file_chosen" msgid="4146295695162318057">"Nu au fost găsite fișiere"</string>
- <string name="reset" msgid="3865826612628171429">"Resetați"</string>
- <string name="submit" msgid="862795280643405865">"Trimiteți"</string>
+ <string name="reset" msgid="3865826612628171429">"Resetează"</string>
+ <string name="submit" msgid="862795280643405865">"Trimite"</string>
<string name="car_mode_disable_notification_title" msgid="8450693275833142896">"Aplicația pentru condus rulează"</string>
<string name="car_mode_disable_notification_message" msgid="8954550232288567515">"Atingeți ca să ieșiți din aplicația pentru condus."</string>
<string name="back_button_label" msgid="4078224038025043387">"Înapoi"</string>
<string name="next_button_label" msgid="6040209156399907780">"Înainte"</string>
- <string name="skip_button_label" msgid="3566599811326688389">"Omiteți"</string>
+ <string name="skip_button_label" msgid="3566599811326688389">"Omite"</string>
<string name="no_matches" msgid="6472699895759164599">"Nicio potrivire"</string>
<string name="find_on_page" msgid="5400537367077438198">"Găsiți pe pagină"</string>
<string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# potrivire}few{# din {total}}other{# din {total}}}"</string>
@@ -1523,12 +1523,12 @@
<string name="gpsVerifNo" msgid="1671201856091564741">"Nu"</string>
<string name="sync_too_many_deletes" msgid="6999440774578705300">"Limita pentru ștergere a fost depășită"</string>
<string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"Există <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> elemente șterse pentru <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, contul <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Ce doriți să faceți?"</string>
- <string name="sync_really_delete" msgid="5657871730315579051">"Ștergeți elementele"</string>
- <string name="sync_undo_deletes" msgid="5786033331266418896">"Anulați aceste ștergeri"</string>
+ <string name="sync_really_delete" msgid="5657871730315579051">"Șterge elementele"</string>
+ <string name="sync_undo_deletes" msgid="5786033331266418896">"Anulează aceste ștergeri"</string>
<string name="sync_do_nothing" msgid="4528734662446469646">"Nu trebuie să luați nicio măsură deocamdată"</string>
- <string name="choose_account_label" msgid="5557833752759831548">"Alegeți un cont"</string>
- <string name="add_account_label" msgid="4067610644298737417">"Adăugați un cont"</string>
- <string name="add_account_button_label" msgid="322390749416414097">"Adăugați un cont"</string>
+ <string name="choose_account_label" msgid="5557833752759831548">"Alege un cont"</string>
+ <string name="add_account_label" msgid="4067610644298737417">"Adaugă un cont"</string>
+ <string name="add_account_button_label" msgid="322390749416414097">"Adaugă un cont"</string>
<string name="number_picker_increment_button" msgid="7621013714795186298">"Creșteți"</string>
<string name="number_picker_decrement_button" msgid="5116948444762708204">"Reduceți"</string>
<string name="number_picker_increment_scroll_mode" msgid="8403893549806805985">"<xliff:g id="VALUE">%s</xliff:g> atingeți lung."</string>
@@ -1548,16 +1548,16 @@
<string name="date_picker_prev_month_button" msgid="3418694374017868369">"Luna trecută"</string>
<string name="date_picker_next_month_button" msgid="4858207337779144840">"Luna viitoare"</string>
<string name="keyboardview_keycode_alt" msgid="8997420058584292385">"Alt"</string>
- <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Anulați"</string>
- <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Ștergeți"</string>
+ <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Anulează"</string>
+ <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Șterge"</string>
<string name="keyboardview_keycode_done" msgid="2524518019001653851">"Terminat"</string>
<string name="keyboardview_keycode_mode_change" msgid="2743735349997999020">"Schimbarea modului"</string>
<string name="keyboardview_keycode_shift" msgid="3026509237043975573">"Shift"</string>
<string name="keyboardview_keycode_enter" msgid="168054869339091055">"Enter"</string>
- <string name="activitychooserview_choose_application" msgid="3500574466367891463">"Alegeți o aplicație"</string>
+ <string name="activitychooserview_choose_application" msgid="3500574466367891463">"Alege o aplicație"</string>
<string name="activitychooserview_choose_application_error" msgid="6937782107559241734">"Nu s-a putut lansa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
- <string name="shareactionprovider_share_with" msgid="2753089758467748982">"Permiteți accesul pentru"</string>
- <string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"Permiteți accesul pentru <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+ <string name="shareactionprovider_share_with" msgid="2753089758467748982">"Permite accesul pentru"</string>
+ <string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"Permite accesul pentru <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="982510275422590757">"Mâner glisant. Atingeți și țineți apăsat."</string>
<string name="description_target_unlock_tablet" msgid="7431571180065859551">"Glisați pentru a debloca."</string>
<string name="action_bar_home_description" msgid="1501655419158631974">"Navigați la ecranul de pornire"</string>
@@ -1599,12 +1599,12 @@
<string name="fingerprints" msgid="148690767172613723">"Amprente:"</string>
<string name="sha256_fingerprint" msgid="7103976380961964600">"Amprentă SHA-256:"</string>
<string name="sha1_fingerprint" msgid="2339915142825390774">"Amprentă SHA-1:"</string>
- <string name="activity_chooser_view_see_all" msgid="3917045206812726099">"Afișați-le pe toate"</string>
- <string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"Alegeți activitatea"</string>
+ <string name="activity_chooser_view_see_all" msgid="3917045206812726099">"Afișează-le pe toate"</string>
+ <string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"Alege activitatea"</string>
<string name="share_action_provider_share_with" msgid="1904096863622941880">"Distribuiți pentru"</string>
<string name="sending" msgid="206925243621664438">"Se trimite..."</string>
<string name="launchBrowserDefault" msgid="6328349989932924119">"Lansați browserul?"</string>
- <string name="SetupCallDefault" msgid="5581740063237175247">"Acceptați apelul?"</string>
+ <string name="SetupCallDefault" msgid="5581740063237175247">"Accepți apelul?"</string>
<string name="activity_resolver_use_always" msgid="5575222334666843269">"Întotdeauna"</string>
<string name="activity_resolver_use_once" msgid="948462794469672658">"Numai o dată"</string>
<string name="activity_resolver_work_profiles_support" msgid="4071345609235361269">"%1$s nu acceptă profilul de serviciu"</string>
@@ -1612,18 +1612,18 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Difuz. dispozit. andocare"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispozitiv extern"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Căști"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="4214648773120426288">"Audio Bluetooth"</string>
<string name="wireless_display_route_description" msgid="8297563323032966831">"Ecran wireless"</string>
- <string name="media_route_button_content_description" msgid="2299223698196869956">"Trimiteți"</string>
+ <string name="media_route_button_content_description" msgid="2299223698196869956">"Trimite"</string>
<string name="media_route_chooser_title" msgid="6646594924991269208">"Conectați-vă la dispozitiv"</string>
<string name="media_route_chooser_title_for_remote_display" msgid="3105906508794326446">"Proiectați ecranul pe dispozitiv"</string>
<string name="media_route_chooser_searching" msgid="6119673534251329535">"Se caută dispozitive..."</string>
<string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"Setări"</string>
- <string name="media_route_controller_disconnect" msgid="7362617572732576959">"Deconectați-vă"</string>
+ <string name="media_route_controller_disconnect" msgid="7362617572732576959">"Deconectează-te"</string>
<string name="media_route_status_scanning" msgid="8045156315309594482">"Se scanează..."</string>
<string name="media_route_status_connecting" msgid="5845597961412010540">"Se conectează..."</string>
<string name="media_route_status_available" msgid="1477537663492007608">"Disponibilă"</string>
@@ -1639,15 +1639,15 @@
<string name="kg_wrong_password" msgid="2384677900494439426">"Parolă greșită"</string>
<string name="kg_wrong_pin" msgid="3680925703673166482">"Cod PIN greșit"</string>
<string name="kg_pattern_instructions" msgid="8366024510502517748">"Desenați modelul"</string>
- <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"Introduceți codul PIN al cardului SIM"</string>
- <string name="kg_pin_instructions" msgid="7355933174673539021">"Introduceți codul PIN"</string>
- <string name="kg_password_instructions" msgid="7179782578809398050">"Introduceți parola"</string>
+ <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"Introdu codul PIN al cardului SIM"</string>
+ <string name="kg_pin_instructions" msgid="7355933174673539021">"Introdu codul PIN"</string>
+ <string name="kg_password_instructions" msgid="7179782578809398050">"Introdu parola"</string>
<string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"Cardul SIM este acum dezactivat. Introduceți codul PUK pentru a continua. Contactați operatorul pentru mai multe detalii."</string>
- <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"Introduceți codul PIN dorit"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"Introdu codul PIN dorit"</string>
<string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"Confirmați codul PIN dorit"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8871937892678885545">"Se deblochează cardul SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="9013856346870572451">"Cod PIN incorect."</string>
- <string name="kg_invalid_sim_pin_hint" msgid="4821601451222564077">"Introduceți un cod PIN format din 4 până la 8 cifre."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="4821601451222564077">"Introdu un cod PIN format din 4 până la 8 cifre."</string>
<string name="kg_invalid_sim_puk_hint" msgid="2539364558870734339">"Codul PUK trebuie să conțină 8 numere."</string>
<string name="kg_invalid_puk" msgid="4809502818518963344">"Reintroduceți codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string>
<string name="kg_invalid_confirm_pin_hint" product="default" msgid="4705368340409816254">"Codurile PIN nu coincid"</string>
@@ -1691,11 +1691,11 @@
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Poate citi tot conținutul de pe ecran și poate afișa conținut peste alte aplicații."</string>
<string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Vă vede interacțiunile și le realizează"</string>
<string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Poate urmări interacțiunile dvs. cu o aplicație sau cu un senzor hardware și poate interacționa cu aplicații în numele dvs."</string>
- <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Permiteți"</string>
- <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Refuzați"</string>
+ <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Permite"</string>
+ <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Refuz"</string>
<string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"Atingeți o funcție ca să începeți să o folosiți:"</string>
<string name="accessibility_edit_shortcut_menu_button_title" msgid="239446795930436325">"Alegeți funcțiile pe care să le folosiți cu butonul de accesibilitate"</string>
- <string name="accessibility_edit_shortcut_menu_volume_title" msgid="1077294237378645981">"Alegeți funcțiile pentru comanda rapidă a butonului de volum"</string>
+ <string name="accessibility_edit_shortcut_menu_volume_title" msgid="1077294237378645981">"Alege funcțiile pentru comanda rapidă a butonului de volum"</string>
<string name="accessibility_uncheck_legacy_item_warning" msgid="8047830891064817447">"<xliff:g id="SERVICE_NAME">%s</xliff:g> a fost dezactivat"</string>
<string name="edit_accessibility_shortcut_menu_button" msgid="8885752738733772935">"Editați comenzile rapide"</string>
<string name="done_accessibility_shortcut_menu_button" msgid="3668407723770815708">"Gata"</string>
@@ -1707,7 +1707,7 @@
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Luminozitate redusă suplimentar"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"S-au apăsat lung tastele de volum. S-a activat <xliff:g id="SERVICE_NAME">%1$s</xliff:g>."</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"S-au apăsat lung tastele de volum. S-a dezactivat <xliff:g id="SERVICE_NAME">%1$s</xliff:g>."</string>
- <string name="accessibility_shortcut_spoken_feedback" msgid="4228997042855695090">"Apăsați ambele butoane de volum timp de trei secunde pentru a folosi <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="accessibility_shortcut_spoken_feedback" msgid="4228997042855695090">"Apasă ambele butoane de volum timp de trei secunde pentru a folosi <xliff:g id="SERVICE_NAME">%1$s</xliff:g>"</string>
<string name="accessibility_button_prompt_text" msgid="8343213623338605305">"Alegeți o funcție pe care să o folosiți când atingeți butonul de accesibilitate:"</string>
<string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"Alegeți o funcție pe care să o folosiți cu gestul de accesibilitate (glisați în sus cu două degete din partea de jos a ecranului):"</string>
<string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"Alegeți o funcție pe care să o folosiți cu gestul de accesibilitate (glisați în sus cu trei degete din partea de jos a ecranului):"</string>
@@ -1824,9 +1824,9 @@
<string name="reason_unknown" msgid="5599739807581133337">"necunoscut"</string>
<string name="reason_service_unavailable" msgid="5288405248063804713">"Serviciul de printare nu este activat"</string>
<string name="print_service_installed_title" msgid="6134880817336942482">"Serviciul <xliff:g id="NAME">%s</xliff:g> a fost instalat"</string>
- <string name="print_service_installed_message" msgid="7005672469916968131">"Atingeți pentru a activa"</string>
- <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"Introduceți codul PIN de administrator"</string>
- <string name="restr_pin_enter_pin" msgid="373139384161304555">"Introduceți codul PIN"</string>
+ <string name="print_service_installed_message" msgid="7005672469916968131">"Atinge pentru a activa"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"Introdu codul PIN de administrator"</string>
+ <string name="restr_pin_enter_pin" msgid="373139384161304555">"Introdu codul PIN"</string>
<string name="restr_pin_incorrect" msgid="3861383632940852496">"Incorect"</string>
<string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"Codul PIN actual"</string>
<string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"Codul PIN nou"</string>
@@ -1834,17 +1834,17 @@
<string name="restr_pin_create_pin" msgid="917067613896366033">"Creați un cod PIN pentru modificarea restricțiilor"</string>
<string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"Codurile PIN nu se potrivesc. Încercați din nou."</string>
<string name="restr_pin_error_too_short" msgid="1547007808237941065">"Codul PIN este prea scurt. Trebuie să aibă cel puțin 4 cifre."</string>
- <string name="restr_pin_try_later" msgid="5897719962541636727">"Reîncercați mai târziu"</string>
+ <string name="restr_pin_try_later" msgid="5897719962541636727">"Reîncearcă mai târziu"</string>
<string name="immersive_cling_title" msgid="2307034298721541791">"Vizualizare pe ecran complet"</string>
<string name="immersive_cling_description" msgid="7092737175345204832">"Pentru a ieși, glisați de sus în jos."</string>
<string name="immersive_cling_positive" msgid="7047498036346489883">"Am înțeles"</string>
<string name="done_label" msgid="7283767013231718521">"Terminat"</string>
<string name="hour_picker_description" msgid="5153757582093524635">"Selector circular pentru ore"</string>
<string name="minute_picker_description" msgid="9029797023621927294">"Selector circular pentru minute"</string>
- <string name="select_hours" msgid="5982889657313147347">"Selectați orele"</string>
- <string name="select_minutes" msgid="9157401137441014032">"Selectați minutele"</string>
- <string name="select_day" msgid="2060371240117403147">"Selectați luna și ziua"</string>
- <string name="select_year" msgid="1868350712095595393">"Selectați anul"</string>
+ <string name="select_hours" msgid="5982889657313147347">"Selectează orele"</string>
+ <string name="select_minutes" msgid="9157401137441014032">"Selectează minutele"</string>
+ <string name="select_day" msgid="2060371240117403147">"Selectează luna și ziua"</string>
+ <string name="select_year" msgid="1868350712095595393">"Selectează anul"</string>
<string name="deleted_key" msgid="9130083334943364001">"<xliff:g id="KEY">%1$s</xliff:g> a fost șters"</string>
<string name="managed_profile_label_badge" msgid="6762559569999499495">"<xliff:g id="LABEL">%1$s</xliff:g> de serviciu"</string>
<string name="managed_profile_label_badge_2" msgid="5673187309555352550">"<xliff:g id="LABEL">%1$s</xliff:g> pentru serviciu (2)"</string>
@@ -1875,7 +1875,7 @@
<string name="zen_mode_forever" msgid="740585666364912448">"Până când dezactivați"</string>
<string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Până când dezactivați „Nu deranja”"</string>
<string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
- <string name="toolbar_collapse_description" msgid="8009920446193610996">"Restrângeți"</string>
+ <string name="toolbar_collapse_description" msgid="8009920446193610996">"Restrânge"</string>
<string name="zen_mode_feature_name" msgid="3785547207263754500">"Nu deranja"</string>
<string name="zen_mode_downtime_feature_name" msgid="5886005761431427128">"Inactivitate"</string>
<string name="zen_mode_default_weeknights_name" msgid="7902108149994062847">"Nopțile din zilele lucrătoare"</string>
@@ -1897,16 +1897,16 @@
<string name="notification_work_profile_content_description" msgid="5296477955677725799">"Profil de serviciu"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"Notificat"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"Confirmat"</string>
- <string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"Extindeți"</string>
- <string name="expand_button_content_description_expanded" msgid="7484217944948667489">"Restrângeți"</string>
+ <string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"Extinde"</string>
+ <string name="expand_button_content_description_expanded" msgid="7484217944948667489">"Restrânge"</string>
<string name="expand_action_accessibility" msgid="1947657036871746627">"extindeți/restrângeți"</string>
<string name="usb_midi_peripheral_name" msgid="490523464968655741">"Port USB Android periferic"</string>
<string name="usb_midi_peripheral_manufacturer_name" msgid="7557148557088787741">"Android"</string>
<string name="usb_midi_peripheral_product_name" msgid="2836276258480904434">"Port USB periferic"</string>
<string name="floating_toolbar_open_overflow_description" msgid="2260297653578167367">"Mai multe opțiuni"</string>
- <string name="floating_toolbar_close_overflow_description" msgid="3949818077708138098">"Închideți meniul suplimentar"</string>
+ <string name="floating_toolbar_close_overflow_description" msgid="3949818077708138098">"Închide meniul suplimentar"</string>
<string name="maximize_button_text" msgid="4258922519914732645">"Maximizați"</string>
- <string name="close_button_text" msgid="10603510034455258">"Închideți"</string>
+ <string name="close_button_text" msgid="10603510034455258">"Închide"</string>
<string name="notification_messaging_title_template" msgid="772857526770251989">"<xliff:g id="CONVERSATION_TITLE">%1$s</xliff:g>: <xliff:g id="SENDER_NAME">%2$s</xliff:g>"</string>
<string name="call_notification_answer_action" msgid="5999246836247132937">"Răspundeți"</string>
<string name="call_notification_answer_video_action" msgid="2086030940195382249">"Video"</string>
@@ -1919,10 +1919,10 @@
<string name="importance_from_user" msgid="2782756722448800447">"Dvs. setați importanța acestor notificări."</string>
<string name="importance_from_person" msgid="4235804979664465383">"Notificarea este importantă având în vedere persoanele implicate."</string>
<string name="notification_history_title_placeholder" msgid="7748630986182249599">"Notificare de aplicație personalizată"</string>
- <string name="user_creation_account_exists" msgid="2239146360099708035">"Permiteți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>? (există deja un utilizator cu acest cont)"</string>
- <string name="user_creation_adding" msgid="7305185499667958364">"Permiteți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string>
- <string name="supervised_user_creation_label" msgid="6884904353827427515">"Adăugați un utilizator monitorizat"</string>
- <string name="language_selection_title" msgid="52674936078683285">"Adăugați o limbă"</string>
+ <string name="user_creation_account_exists" msgid="2239146360099708035">"Permiți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>? (există deja un utilizator cu acest cont)"</string>
+ <string name="user_creation_adding" msgid="7305185499667958364">"Permiți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string>
+ <string name="supervised_user_creation_label" msgid="6884904353827427515">"Adaugă un utilizator monitorizat"</string>
+ <string name="language_selection_title" msgid="52674936078683285">"Adaugă o limbă"</string>
<string name="country_selection_title" msgid="5221495687299014379">"Regiunea preferată"</string>
<string name="search_language_hint" msgid="7004225294308793583">"Numele limbii"</string>
<string name="language_picker_section_suggested" msgid="6556199184638990447">"Sugerate"</string>
@@ -1931,11 +1931,11 @@
<string name="region_picker_section_suggested_bilingual" msgid="704607569328224133">"Regiuni sugerate"</string>
<string name="language_picker_section_all" msgid="1985809075777564284">"Toate limbile"</string>
<string name="region_picker_section_all" msgid="756441309928774155">"Toate regiunile"</string>
- <string name="locale_search_menu" msgid="6258090710176422934">"Căutați"</string>
+ <string name="locale_search_menu" msgid="6258090710176422934">"Caută"</string>
<string name="app_suspended_title" msgid="888873445010322650">"Aplicația nu este disponibilă"</string>
<string name="app_suspended_default_message" msgid="6451215678552004172">"Momentan, aplicația <xliff:g id="APP_NAME_0">%1$s</xliff:g> nu este disponibilă. Aceasta este gestionată de <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
- <string name="app_suspended_more_details" msgid="211260942831587014">"Aflați mai multe"</string>
- <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Anulați întreruperea aplicației"</string>
+ <string name="app_suspended_more_details" msgid="211260942831587014">"Află mai multe"</string>
+ <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Anulează întreruperea aplicației"</string>
<string name="work_mode_off_title" msgid="961171256005852058">"Activați aplicațiile pentru lucru?"</string>
<string name="work_mode_off_message" msgid="7319580997683623309">"Obțineți acces la aplicațiile pentru lucru și notificări"</string>
<string name="work_mode_turn_on" msgid="3662561662475962285">"Activați"</string>
@@ -1950,28 +1950,28 @@
<string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Setările pentru Android TV sunt indisponibile"</string>
<string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Setările pentru tabletă sunt indisponibile"</string>
<string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Setările pentru telefon sunt indisponibile"</string>
- <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe dispozitivul Android TV."</string>
- <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe tabletă."</string>
- <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe telefon."</string>
- <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aplicația necesită securitate suplimentară. Încercați pe dispozitivul Android TV."</string>
- <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aplicația necesită securitate suplimentară. Încercați pe tabletă."</string>
- <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aplicația necesită securitate suplimentară. Încercați pe telefon."</string>
+ <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe dispozitivul Android TV."</string>
+ <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe tabletă."</string>
+ <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe telefon."</string>
+ <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aplicația necesită securitate suplimentară. Încearcă pe dispozitivul Android TV."</string>
+ <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aplicația necesită securitate suplimentară. Încearcă pe tabletă."</string>
+ <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aplicația necesită securitate suplimentară. Încearcă pe telefon."</string>
<string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"Nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încearcă pe dispozitivul Android TV."</string>
<string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încearcă pe tabletă."</string>
<string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încearcă pe telefon."</string>
<string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Această aplicație a fost creată pentru o versiune Android mai veche și este posibil să nu funcționeze corect. Încercați să căutați actualizări sau contactați dezvoltatorul."</string>
- <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Căutați actualizări"</string>
+ <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Caută actualizări"</string>
<string name="new_sms_notification_title" msgid="6528758221319927107">"Aveți mesaje noi"</string>
<string name="new_sms_notification_content" msgid="3197949934153460639">"Deschideți aplicația pentru SMS-uri ca să vizualizați"</string>
<string name="profile_encrypted_title" msgid="9001208667521266472">"Unele funcții ar putea fi limitate"</string>
<string name="profile_encrypted_detail" msgid="5279730442756849055">"Profil de serviciu blocat"</string>
<string name="profile_encrypted_message" msgid="1128512616293157802">"Atingeți ca să deblocați"</string>
<string name="usb_mtp_launch_notification_title" msgid="774319638256707227">"Conectat la <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string>
- <string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"Atingeți pentru a vedea fișierele"</string>
+ <string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"Atinge pentru a vedea fișierele"</string>
<string name="pin_target" msgid="8036028973110156895">"Fixați"</string>
<string name="pin_specific_target" msgid="7824671240625957415">"Fixați <xliff:g id="LABEL">%1$s</xliff:g>"</string>
- <string name="unpin_target" msgid="3963318576590204447">"Anulați fixarea"</string>
- <string name="unpin_specific_target" msgid="3859828252160908146">"Anulați fixarea pentru <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="unpin_target" msgid="3963318576590204447">"Anulează fixarea"</string>
+ <string name="unpin_specific_target" msgid="3859828252160908146">"Anulează fixarea pentru <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informații despre aplicație"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Se pornește demonstrația…"</string>
@@ -1993,28 +1993,28 @@
<string name="time_picker_hour_label" msgid="4208590187662336864">"oră"</string>
<string name="time_picker_minute_label" msgid="8307452311269824553">"minut"</string>
<string name="time_picker_header_text" msgid="9073802285051516688">"Setați ora"</string>
- <string name="time_picker_input_error" msgid="8386271930742451034">"Introduceți o oră validă"</string>
- <string name="time_picker_prompt_label" msgid="303588544656363889">"Introduceți ora"</string>
+ <string name="time_picker_input_error" msgid="8386271930742451034">"Introdu o oră validă"</string>
+ <string name="time_picker_prompt_label" msgid="303588544656363889">"Introdu ora"</string>
<string name="time_picker_text_input_mode_description" msgid="4761160667516611576">"Pentru a introduce ora, comutați la modul de introducere a textului."</string>
<string name="time_picker_radial_mode_description" msgid="1222342577115016953">"Pentru a introduce ora, comutați la modul ceas."</string>
<string name="autofill_picker_accessibility_title" msgid="4425806874792196599">"Opțiuni de completare automată"</string>
- <string name="autofill_save_accessibility_title" msgid="1523225776218450005">"Salvați pentru completare automată"</string>
+ <string name="autofill_save_accessibility_title" msgid="1523225776218450005">"Salvează pentru completare automată"</string>
<string name="autofill_error_cannot_autofill" msgid="6528827648643138596">"Conținutul nu poate fi completat automat"</string>
<string name="autofill_picker_no_suggestions" msgid="1076022650427481509">"Nicio sugestie de completare automată"</string>
<string name="autofill_picker_some_suggestions" msgid="5560549696296202701">"{count,plural, =1{O sugestie de completare automată}few{# sugestii de completare automată}other{# de sugestii de completare automată}}"</string>
- <string name="autofill_save_title" msgid="7719802414283739775">"Salvați în "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
- <string name="autofill_save_title_with_type" msgid="3002460014579799605">"Salvați <xliff:g id="TYPE">%1$s</xliff:g> în "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
- <string name="autofill_save_title_with_2types" msgid="3783270967447869241">"Salvați <xliff:g id="TYPE_0">%1$s</xliff:g> și <xliff:g id="TYPE_1">%2$s</xliff:g> în "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
- <string name="autofill_save_title_with_3types" msgid="6598228952100102578">"Salvați <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> și <xliff:g id="TYPE_2">%3$s</xliff:g> în "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>"?"</string>
- <string name="autofill_update_title" msgid="3630695947047069136">"Actualizați în "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
- <string name="autofill_update_title_with_type" msgid="5264152633488495704">"Actualizați <xliff:g id="TYPE">%1$s</xliff:g> în "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
- <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"Actualizați <xliff:g id="TYPE_0">%1$s</xliff:g> și <xliff:g id="TYPE_1">%2$s</xliff:g> în "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
- <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"Actualizați aceste articole în "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>": <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> și <xliff:g id="TYPE_2">%3$s</xliff:g>?"</string>
- <string name="autofill_save_yes" msgid="8035743017382012850">"Salvați"</string>
+ <string name="autofill_save_title" msgid="7719802414283739775">"Salvezi în "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_save_title_with_type" msgid="3002460014579799605">"Salvezi <xliff:g id="TYPE">%1$s</xliff:g> în "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_save_title_with_2types" msgid="3783270967447869241">"Salvezi <xliff:g id="TYPE_0">%1$s</xliff:g> și <xliff:g id="TYPE_1">%2$s</xliff:g> în "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_save_title_with_3types" msgid="6598228952100102578">"Salvezi <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> și <xliff:g id="TYPE_2">%3$s</xliff:g> în "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_update_title" msgid="3630695947047069136">"Actualizezi în "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_update_title_with_type" msgid="5264152633488495704">"Actualizezi <xliff:g id="TYPE">%1$s</xliff:g> în "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"Actualizezi <xliff:g id="TYPE_0">%1$s</xliff:g> și <xliff:g id="TYPE_1">%2$s</xliff:g> în "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
+ <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"Actualizezi aceste articole în "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>": <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> și <xliff:g id="TYPE_2">%3$s</xliff:g>?"</string>
+ <string name="autofill_save_yes" msgid="8035743017382012850">"Salvează"</string>
<string name="autofill_save_no" msgid="9212826374207023544">"Nu, mulțumesc"</string>
<string name="autofill_save_notnow" msgid="2853932672029024195">"Nu acum"</string>
<string name="autofill_save_never" msgid="6821841919831402526">"Niciodată"</string>
- <string name="autofill_update_yes" msgid="4608662968996874445">"Actualizați"</string>
+ <string name="autofill_update_yes" msgid="4608662968996874445">"Actualizează"</string>
<string name="autofill_continue_yes" msgid="7914985605534510385">"Continuați"</string>
<string name="autofill_save_type_password" msgid="5624528786144539944">"parolă"</string>
<string name="autofill_save_type_address" msgid="3111006395818252885">"adresă"</string>
@@ -2046,10 +2046,10 @@
<string name="shortcut_restore_unknown_issue" msgid="2478146134395982154">"Nu s-a putut restabili comanda rapidă"</string>
<string name="shortcut_disabled_reason_unknown" msgid="753074793553599166">"Comanda rapidă este dezactivată"</string>
<string name="harmful_app_warning_uninstall" msgid="6472912975664191772">"DEZINSTALAȚI"</string>
- <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"Deschideți oricum"</string>
+ <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"Deschide oricum"</string>
<string name="harmful_app_warning_title" msgid="8794823880881113856">"Aplicație dăunătoare detectată"</string>
- <string name="log_access_confirmation_title" msgid="2343578467290592708">"Permiteți ca <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> să acceseze toate jurnalele dispozitivului?"</string>
- <string name="log_access_confirmation_allow" msgid="5302517782599389507">"Permiteți accesul o dată"</string>
+ <string name="log_access_confirmation_title" msgid="2343578467290592708">"Permiți ca <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> să acceseze toate jurnalele dispozitivului?"</string>
+ <string name="log_access_confirmation_allow" msgid="5302517782599389507">"Permite accesul o dată"</string>
<string name="log_access_confirmation_deny" msgid="7685790957455099845">"Nu permiteți"</string>
<string name="log_access_confirmation_body" msgid="1806692062668620735">"Jurnalele dispozitivului înregistrează activitatea de pe dispozitivul tău. Aplicațiile pot folosi aceste jurnale pentru a identifica și a remedia probleme.\n\nUnele jurnale pot să conțină informații sensibile, prin urmare permite accesul la toate jurnalele dispozitivului doar aplicațiilor în care ai încredere. \n\nDacă nu permiți accesul aplicației la toate jurnalele dispozitivului, aceasta poate în continuare să acceseze propriile jurnale. Este posibil ca producătorul dispozitivului să acceseze în continuare unele jurnale sau informații de pe dispozitiv."</string>
<string name="log_access_do_not_show_again" msgid="1058690599083091552">"Nu mai afișa"</string>
@@ -2062,26 +2062,26 @@
<string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"Funcția nouă Nu deranja ascunde notificările"</string>
<string name="zen_upgrade_notification_visd_content" msgid="3683314609114134946">"Atingeți ca să aflați mai multe și să modificați"</string>
<string name="zen_upgrade_notification_title" msgid="8198167698095298717">"Funcția Nu deranja s-a schimbat"</string>
- <string name="zen_upgrade_notification_content" msgid="5228458567180124005">"Atingeți pentru a verifica ce este blocat."</string>
+ <string name="zen_upgrade_notification_content" msgid="5228458567180124005">"Atinge pentru a verifica ce este blocat."</string>
<string name="review_notification_settings_title" msgid="5102557424459810820">"Examinați setările pentru notificări"</string>
<string name="review_notification_settings_text" msgid="5916244866751849279">"Începând cu Android 13, aplicațiile pe care le instalați necesită permisiunea de a trimite notificări. Atingeți ca să modificați permisiunea pentru aplicațiile existente."</string>
<string name="review_notification_settings_remind_me_action" msgid="1081081018678480907">"Mai târziu"</string>
- <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"Închideți"</string>
+ <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"Închide"</string>
<string name="notification_app_name_system" msgid="3045196791746735601">"Sistem"</string>
<string name="notification_app_name_settings" msgid="9088548800899952531">"Setări"</string>
<string name="notification_appops_camera_active" msgid="8177643089272352083">"Cameră foto"</string>
<string name="notification_appops_microphone_active" msgid="581333393214739332">"Microfon"</string>
<string name="notification_appops_overlay_active" msgid="5571732753262836481">"se afișează peste alte aplicații de pe ecran"</string>
<string name="notification_feedback_indicator" msgid="663476517711323016">"Oferiți feedback"</string>
- <string name="notification_feedback_indicator_alerted" msgid="6552871804121942099">"Notificarea a fost promovată la Prestabilită. Atingeți pentru a oferi feedback."</string>
- <string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Notificarea a fost mutată în jos la Silențioasă. Atingeți pentru a oferi feedback."</string>
- <string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Notificarea a fost mutată la un nivel superior. Atingeți pentru a oferi feedback."</string>
- <string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Notificarea a fost mutată la un nivel inferior. Atingeți pentru a oferi feedback."</string>
+ <string name="notification_feedback_indicator_alerted" msgid="6552871804121942099">"Notificarea a fost promovată la Prestabilită. Atinge pentru a oferi feedback."</string>
+ <string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"Notificarea a fost mutată în jos la Silențioasă. Atinge pentru a oferi feedback."</string>
+ <string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"Notificarea a fost mutată la un nivel superior. Atinge pentru a oferi feedback."</string>
+ <string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"Notificarea a fost mutată la un nivel inferior. Atinge pentru a oferi feedback."</string>
<string name="nas_upgrade_notification_title" msgid="8436359459300146555">"Notificări optimizate"</string>
<string name="nas_upgrade_notification_content" msgid="5157550369837103337">"Acțiunile și răspunsurile sugerate sunt acum trimise prin notificări optimizate. Notificările adaptive Android nu mai sunt acceptate."</string>
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"OK"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Dezactivați"</string>
- <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Aflați mai multe"</string>
+ <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Află mai multe"</string>
<string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Notificările optimizate au înlocuit Notificările adaptive Android de pe Android 12. Această funcție afișează acțiuni și răspunsuri sugerate și vă organizează notificările.\n\nNotificările optimizate pot accesa conținutul notificărilor, inclusiv informații cu caracter personal, precum mesajele și numele persoanelor de contact. În plus, funcția poate să închidă sau să răspundă la notificări, de exemplu, să răspundă la apeluri telefonice și să gestioneze opțiunea Nu deranja."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificare pentru informații despre modul Rutină"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Economisirea bateriei este activată"</string>
@@ -2127,7 +2127,7 @@
<string name="accessibility_system_action_on_screen_a11y_shortcut_label" msgid="8488701469459210309">"Comandă rapidă de accesibilitate de pe ecran"</string>
<string name="accessibility_system_action_on_screen_a11y_shortcut_chooser_label" msgid="1057878690209817886">"Selector de comenzi rapide de accesibilitate de pe ecran"</string>
<string name="accessibility_system_action_hardware_a11y_shortcut_label" msgid="5764644187715255107">"Comandă rapidă de accesibilitate"</string>
- <string name="accessibility_system_action_dismiss_notification_shade" msgid="8931637495533770352">"Închideți fereastra de notificări"</string>
+ <string name="accessibility_system_action_dismiss_notification_shade" msgid="8931637495533770352">"Închide fereastra de notificări"</string>
<string name="accessibility_system_action_dpad_up_label" msgid="1029042950229333782">"Dpad sus"</string>
<string name="accessibility_system_action_dpad_down_label" msgid="3441918448624921461">"Dpad jos"</string>
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad stânga"</string>
@@ -2150,7 +2150,7 @@
<string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Acest conținut nu poate fi trimis cu aplicații personale"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Acest conținut nu poate fi deschis cu aplicații personale"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profilul de serviciu este întrerupt"</string>
- <string name="resolver_switch_on_work" msgid="463709043650610420">"Atingeți pentru a activa"</string>
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Atinge pentru a activa"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nicio aplicație pentru lucru"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nicio aplicație personală"</string>
<string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Deschideți <xliff:g id="APP">%s</xliff:g> în profilul personal?"</string>
@@ -2162,23 +2162,23 @@
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Codul PIN de deblocare SIM corporativă"</string>
<string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_ENTRY" msgid="973059024670737358">"Codul PIN de deblocare SIM privind furnizorul de servicii"</string>
<string name="PERSOSUBSTATE_SIM_SIM_ENTRY" msgid="4487435301206073787">"Codul PIN de deblocare SIM"</string>
- <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_ENTRY" msgid="768060297218652809">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_ENTRY" msgid="7129527319490548930">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_ENTRY" msgid="2876126640607573252">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_ENTRY" msgid="8952595089930109282">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_SIM_SIM_PUK_ENTRY" msgid="3013902515773728996">"Introduceți codul PUK"</string>
+ <string name="PERSOSUBSTATE_SIM_NETWORK_PUK_ENTRY" msgid="768060297218652809">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK_ENTRY" msgid="7129527319490548930">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_SIM_CORPORATE_PUK_ENTRY" msgid="2876126640607573252">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK_ENTRY" msgid="8952595089930109282">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_SIM_SIM_PUK_ENTRY" msgid="3013902515773728996">"Introdu codul PUK"</string>
<string name="PERSOSUBSTATE_RUIM_NETWORK1_ENTRY" msgid="2974411408893410289">"Codul PIN de deblocare RUIM Network1"</string>
<string name="PERSOSUBSTATE_RUIM_NETWORK2_ENTRY" msgid="687618528751880721">"Codul PIN de deblocare RUIM Network2"</string>
<string name="PERSOSUBSTATE_RUIM_HRPD_ENTRY" msgid="6810596579655575381">"Codul PIN de deblocare RUIM Hrpd"</string>
<string name="PERSOSUBSTATE_RUIM_CORPORATE_ENTRY" msgid="2715929642540980259">"Codul PIN de deblocare RUIM corporativă"</string>
<string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_ENTRY" msgid="8557791623303951590">"Codul PIN de deblocare RUIM privind furnizorii de servicii"</string>
<string name="PERSOSUBSTATE_RUIM_RUIM_ENTRY" msgid="7382468767274580323">"Codul PIN de deblocare RUIM"</string>
- <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_ENTRY" msgid="6730880791104286987">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_ENTRY" msgid="6432126539782267026">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_ENTRY" msgid="1730510161529488920">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_ENTRY" msgid="3369885925003346830">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_ENTRY" msgid="9129139686191167829">"Introduceți codul PUK"</string>
- <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_ENTRY" msgid="2869929685874615358">"Introduceți codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_NETWORK1_PUK_ENTRY" msgid="6730880791104286987">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_NETWORK2_PUK_ENTRY" msgid="6432126539782267026">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_HRPD_PUK_ENTRY" msgid="1730510161529488920">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK_ENTRY" msgid="3369885925003346830">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_RUIM_PUK_ENTRY" msgid="9129139686191167829">"Introdu codul PUK"</string>
+ <string name="PERSOSUBSTATE_RUIM_CORPORATE_PUK_ENTRY" msgid="2869929685874615358">"Introdu codul PUK"</string>
<string name="PERSOSUBSTATE_SIM_SPN_ENTRY" msgid="1238663472392741771">"Codul PIN de deblocare SPN"</string>
<string name="PERSOSUBSTATE_SIM_SP_EHPLMN_ENTRY" msgid="3988705848553894358">"Codul PIN de deblocare privind furnizorul de servicii și Equivalent Home PLMN"</string>
<string name="PERSOSUBSTATE_SIM_ICCID_ENTRY" msgid="6186770686690993200">"Codul PIN de deblocare ICCID"</string>
@@ -2287,8 +2287,8 @@
<string name="notification_channel_abusive_bg_apps" msgid="6092140213264920355">"Activitate de fundal"</string>
<string name="notification_title_abusive_bg_apps" msgid="994230770856147656">"O aplicație consumă bateria"</string>
<string name="notification_title_long_running_fgs" msgid="8170284286477131587">"O aplicație este încă activă"</string>
- <string name="notification_content_abusive_bg_apps" msgid="5296898075922695259">"<xliff:g id="APP">%1$s</xliff:g> rulează în fundal. Atingeți pentru a gestiona utilizarea bateriei."</string>
- <string name="notification_content_long_running_fgs" msgid="8258193410039977101">"<xliff:g id="APP">%1$s</xliff:g> poate afecta autonomia bateriei. Atingeți pentru a examina aplicațiile active."</string>
+ <string name="notification_content_abusive_bg_apps" msgid="5296898075922695259">"<xliff:g id="APP">%1$s</xliff:g> rulează în fundal. Atinge pentru a gestiona utilizarea bateriei."</string>
+ <string name="notification_content_long_running_fgs" msgid="8258193410039977101">"<xliff:g id="APP">%1$s</xliff:g> poate afecta autonomia bateriei. Atinge pentru a examina aplicațiile active."</string>
<string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Verificați aplicațiile active"</string>
<string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nu se poate accesa camera foto a telefonului de pe <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
<string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nu se poate accesa camera foto a tabletei de pe <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 2cceafc..71668fa 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Использовать блокировку экрана"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Чтобы продолжить, разблокируйте экран."</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Плотно прижмите палец к сканеру."</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не удалось распознать отпечаток. Повторите попытку."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не удалось распознать отпечаток пальца. Повторите попытку."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Очистите сканер отпечатков пальцев и повторите попытку."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Очистите сканер и повторите попытку."</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Плотно прижмите палец к сканеру."</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Вы перемещали палец слишком медленно. Повторите попытку."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Попробуйте сохранить отпечаток другого пальца."</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Слишком светло."</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Вы нажали кнопку питания."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Попробуйте изменить положение пальца."</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Каждый раз немного меняйте положение пальца."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лицо распознано, нажмите кнопку \"Подтвердить\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Сканер недоступен"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Не удалось сохранить отпечаток."</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Превышено время ожидания. Повторите попытку."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Время настройки отпечатка пальца истекло. Повторите попытку."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Операция с отпечатком отменена."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Операция с отпечатком пальца отменена пользователем."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Слишком много попыток. Повторите позже."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Слишком много попыток. Используйте другой способ разблокировки экрана."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Слишком много попыток. Используйте другой способ разблокировки экрана."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Повторите попытку."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Не удалось распознать отпечаток пальца. Повторите попытку."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Нет отсканированных отпечатков пальцев"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На этом устройстве нет сканера отпечатков пальцев."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сканер отпечатков пальцев временно отключен."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Обратитесь в сервисный центр."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Невозможно создать модель лица. Повторите попытку."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Слишком светло. Сделайте освещение менее ярким."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Недостаточно света"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Переместите телефон дальше от лица"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Переместите телефон ближе к лицу"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Переместите телефон выше"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Запуск приложений."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Окончание загрузки..."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Вы нажали кнопку питания. Обычно это приводит к отключению экрана.\n\nПри добавлении отпечатка пальца слегка прикоснитесь к кнопке."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Нажмите, чтобы отключить экран"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Отключить экран"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Для завершения нужно отключить экран"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Отключить"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Продолжить сканирование отпечатка?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Вы нажали кнопку питания. Обычно это приводит к отключению экрана.\n\nЧтобы отсканировать отпечаток пальца, слегка прикоснитесь к кнопке."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Отключить экран"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевизор"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Динамики док-станции"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Внешнее устройство"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Наушники"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Система"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 06ac0f8..90b71de 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"තිර අගුල භාවිත කරන්න"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ඉදිරියට යාමට ඔබගේ තිර අගුල ඇතුළත් කරන්න"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"සංවේදකය මත තදින් ඔබන්න"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ඇඟිලි සලකුණ හඳුනා ගත නොහැක. නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ඇඟිලි සලකුණු සංවේදකය පිරිසිදු කර නැවත උත්සාහ කරන්න"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"සංවේදකය පිරිසිදු කර නැවත උත්සාහ කරන්න"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"සංවේදකය මත තදින් ඔබන්න"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ඇඟිල්ල වඩා සෙමෙන් ගෙන යන ලදි. කරුණාකර නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"තවත් ඇඟිලි සලකුණක් උත්සාහ කරන්න"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"දීප්තිය වැඩියි"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"බල එබීම අනාවරණය විය"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"සීරුමාරු කිරීම උත්සාහ කරන්න"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"එක් එක් අවස්ථාවේ ඔබගේ ඇඟිල්ලේ පිහිටීම මදක් වෙනස් කරන්න"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"මුහුණ සත්යාපනය කරන ලදී, කරුණාකර තහවුරු කරන්න ඔබන්න"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ඇඟිලි සලකුණු දෘඪාංගය ලද නොහැකිය."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ඇඟිලි සලකුණ පිහිටුවිය නොහැකිය"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"ඇඟිලි සලකුණු කාල නිමාව ළඟා විය. නැවත උත්සාහ කරන්න."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ඇඟිලි සලකුණු පිහිටුවීම කාලය නිමා විය. නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ඇඟිලි සලකුණු මෙහෙයුම අවලංගු කරන ලදී."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"පරිශීලක විසින් ඇඟිලි සලකුණු මෙහෙයුම අවසන් කරන ලදී."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"උත්සාහයන් ඉතා වැඩි ගණනකි. කරුණාකර පසුව නැවත උත්සාහ කරන්න."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"උත්සාහ ගණන ඉතා වැඩියි. ඒ වෙනුවට තිර අගුල භාවිත කරන්න."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"උත්සාහ ගණන ඉතා වැඩියි. ඒ වෙනුවට තිර අගුල භාවිත කරන්න."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"නැවත උත්සාහ කරන්න."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ඇඟිලි සලකුණ සැකසීමට නොහැක. නැවත උත්සාහ කරන්න."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ඇඟිලි සලකුණු ඇතුළත් කර නොමැත."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"මෙම උපාංගයේ ඇඟිලි සලකුණු සංවේදකයක් නොමැත."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"සංවේදකය තාවකාලිකව අබල කර ඇත."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"අළුත්වැඩියා සැපයුම්කරුවෙකු බලන්න."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"ඔබගේ මුහුණු ආකෘතිය තැනිය නොහැකිය. නැවත උත්සාහ කරන්න."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"දීප්තිය වැඩියි. තවත් මඳ ආලෝකය උත්සාහ කරන්න."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"ප්රමාණවත් ආලෝකයක් නැත"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"දුරකථනය තවත් ඈතට ගෙන යන්න"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"දුරකථනය තවත් සමීපයට ගෙන එන්න"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"දුරකථනය තවත් ඉහළට ගෙන යන්න"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"යෙදුම් ආරම්භ කරමින්."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"ඇරඹුම අවසාන කරමින්."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ඔබ බල බොත්තම එබුවේය — සාමාන්යයෙන් මෙය තිරය ක්රියාවිරහිත කරයි.\n\nඔබගේ ඇඟිලි සලකුණ පිහිටුවන අතරතුර සැහැල්ලුවෙන් තට්ටු කිරීමට උත්සාහ කරන්න."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"තිරය අක්රිය කිරීමට තට්ටු කරන්න"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"තිරය අක්රිය කරන්න"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"පිහිටුවීම නිම කිරීමට, තිරය අක්රිය කරන්න"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ක්රියාවිරහිත කරන්න"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ඔබගේ ඇඟිලි සලකුණ සත්යාපනය දිගටම කරන්නද?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"ඔබ බල බොත්තම එබුවේය — සාමාන්යයෙන් මෙය තිරය ක්රියාවිරහිත කරයි.\n\nඔබගේ ඇඟිලි සලකුණ සත්යාපනය කිරීමට සැහැල්ලුවෙන් තට්ටු කිරීමට උත්සාහ කරන්න."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"තිරය අක්රිය කරන්න"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"රූපවාහිනී"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"දුරකථනය"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"නාදක ඩොක් කරන්න"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"බාහිර උපාංගය"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ඉස් බණු"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"පද්ධතිය"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index cdc6829..121e410 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použiť zámku obrazovky"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Pokračujte zadaním zámky obrazovky"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevne pridržte senzor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Odtlačok prsta sa nepodarilo spracovať. Skúste to znova."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Odtlačok prsta sa nedá rozpoznať. Skúste to znova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Vyčistite senzor odtlačkov prstov a skúste to znova"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vyčistite senzor a skúste to znova"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pevne pridržte senzor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pohli ste prstom príliš pomaly. Skúste to znova."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Vyskúšajte iný odtlačok prsta"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Príliš jasno"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Bolo zistené stlačenie vypínača"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Vyskúšajte upraviť"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Zakaždým trocha zmeňte pozíciu prsta"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Tvár bola overená, stlačte tlačidlo potvrdenia"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardvér na snímanie odtlačku prsta nie je k dispozícii"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Odtlačok prsta sa nedá nastaviť"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Časový limit rozpoznania odtlačku prsta vypršal. Skúste to znova."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Nastavenie odtlačku prsta vypršalo. Skúste to znova."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operácia týkajúca sa odtlačku prsta bola zrušená"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Overenie odtlačku prsta zrušil používateľ."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Príliš veľa pokusov. Skúste to neskôr."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Príliš veľa pokusov. Použite radšej zámku obrazovky."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Príliš veľa pokusov. Použite radšej zámku obrazovky."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Skúste to znova"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Odtlačok prsta sa nedá spracovať. Skúste to znova."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Neregistrovali ste žiadne odtlačky prstov."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zariadenie nemá senzor odtlačkov prstov."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je dočasne vypnutý."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Navštívte poskytovateľa opráv."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Model tváre sa nedá vytvoriť. Skúste to znova."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Príliš veľa svetla. Skúste jemnejšie osvetlenie."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nie je dostatok svetla"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Oddiaľte telefón"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Priblížte telefón"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Posuňte telefón vyššie"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Prebieha spúšťanie aplikácií."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Prebieha dokončovanie spúšťania."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Stlačili ste vypínač. Obvykle tým vypnete obrazovku.\n\nPri nastavovaní odtlačku prsta skúste klepnúť jemne."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Klepnutím vypnite obrazovku"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Vypnúť obrazovku"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Nastavovanie ukončíte vypnutím obrazovky"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Vypnúť"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Pokračovať v overovaní odtlačku prsta?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Stlačili ste vypínač. Obvykle tým vypnete obrazovku.\n\nAk chcete overiť odtlačok prsta, skúste klepnúť jemne."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Vypnúť obrazovku"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televízor"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefón"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Reproduktory doku"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Externé zariadenie"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slúchadlá"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Systém"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 6da07f8..8fc73ce 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Uporaba odklepanja s poverilnico"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Odklenite zaslon, če želite nadaljevati."</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Prst dobro pridržite na tipalu."</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Prstnega odtisa ni bilo mogoče obdelati. Poskusite znova."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Prstnega odtisa ni mogoče prepoznati. Poskusite znova."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Očistite tipalo prstnih odtisov in poskusite znova."</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Očistite tipalo in poskusite znova."</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prst dobro pridržite na tipalu."</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Prepočasen premik prsta. Poskusite znova."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Poskusite z drugim prstnim odtisom."</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvetlo je."</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Zaznan je bil pritisk gumba za vklop."</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Poskusite popraviti položaj prsta."</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Vsakič nekoliko spremenite položaj prsta."</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Pristnost obraza je preverjena. Pritisnite gumb »Potrdi«."</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Strojna oprema za prstne odtise ni na voljo."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Prstnega odtisa ni mogoče nastaviti."</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Dosežena časovna omejitev za prstni odtis. Poskusite znova."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Čas za nastavitev prstnega odtisa je potekel. Poskusite znova."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Dejanje s prstnim odtisom je bilo preklicano."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Dejanje s prstnim odtisom je preklical uporabnik."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Preveč poskusov. Poskusite znova pozneje."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Preveč poskusov. Odklenite z načinom za zaklepanje zaslona."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Preveč poskusov. Odklenite z zaklepanjem zaslona."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Poskusite znova."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Prstnega odtisa ni mogoče obdelati. Poskusite znova."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Ni registriranih prstnih odtisov."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ta naprava nima tipala prstnih odtisov."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Tipalo je začasno onemogočeno."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Obiščite ponudnika popravil."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Modela obraza ni mogoče ustvariti. Poskusite znova."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Presvetlo. Poskusite z blažjo osvetlitvijo."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Premalo svetlobe"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefon nekoliko odmaknite."</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Bolj približajte telefon."</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje."</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Zagon aplikacij."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Dokončevanje zagona."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnili ste gumb za vklop, s čimer običajno izklopite zaslon.\n\nPoskusite se narahlo dotakniti med nastavljanjem prstnega odtisa."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Dotaknite se za izklop zaslona"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Izklopi zaslon"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Za končanje nastavitve izklopite zaslon"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Izklopi"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Želite nadaljevati preverjanje prstnega odtisa?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnili ste gumb za vklop, s čimer običajno izklopite zaslon.\n\nZa preverjanje prstnega odtisa se poskusite narahlo dotakniti."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Izklopi zaslon"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televizor"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvočniki stojala"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Zunanja naprava"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalke"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 587215a..77fe612 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Përdor kyçjen e ekranit"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Fut kyçjen e ekranit për të vazhduar"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Shtyp fort te sensori"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Gjurma e gishtit nuk mund të përpunohej. Provo përsëri."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nuk mund ta dallojë gjurmën e gishtit. Provo përsëri."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Pastro sensorin e gjurmës së gishtit dhe provo sërish"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Pastro sensorin dhe provo sërish"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Shtyp fort te sensori"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Gishti lëvizi shumë ngadalë. Provo përsëri."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Provo një gjurmë gishti tjetër"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Me shumë ndriçim"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"U zbulua shtypja e \"Energjisë\""</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Provo ta rregullosh"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ndrysho pak pozicionin e gishtit çdo herë"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Fytyra u vërtetua, shtyp \"Konfirmo\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardueri i gjurmës së gishtit nuk mundësohet."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nuk mund të konfigurohet gjurma e gishtit"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Koha e veprimit për gjurmën e gishtit skadoi. Provo përsëri."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Konfigurimi i gjurmës së gishtit skadoi. Provo përsëri."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Operacioni i gjurmës së gishtit u anulua."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Veprimi i gjurmës së gishtit u anulua nga përdoruesi."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Keni bërë shumë tentativa. Provo përsëri më vonë."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Shumë përpjekje. Përdor më mirë kyçjen e ekranit."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Shumë përpjekje. Përdor më mirë kyçjen e ekranit."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Provo përsëri."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Gjurma e gishtit nuk mund të përpunohet. Provo përsëri."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Nuk ka asnjë gjurmë gishti të regjistruar."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kjo pajisje nuk ka sensor të gjurmës së gishtit."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensori është çaktivizuar përkohësisht."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vizito një ofrues të shërbimit të riparimit."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Modeli i fytyrës nuk krijohet. Provo sërish."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Me shumë ndriçim. Provo një ndriçim më të butë."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nuk ka dritë të mjaftueshme"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Lëvize telefonin më larg"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Lëvize telefonin më afër"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Lëvize telefonin më lart"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Aplikacionet e fillimit."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Po përfundon nisjen."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Shtype butonin e energjisë — zakonisht, kjo e fik ekranin.\n\nProvo të trokasësh lehtë ndërkohë që konfiguron gjurmën e gishtit."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Trokit për ta fikur ekranin"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Fik ekranin"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Përfundo konfigurimin; fik ekranin"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Çaktivizo"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Të vazhdohet verifikimi i gjurmës?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Shtype butonin e energjisë — zakonisht, kjo e fik ekranin.\n\nProvo të trokasësh lehtë për të verifikuar gjurmën e gishtit."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Fik ekranin"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televizori"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altoparlantët e stacionit"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Pajisje e jashtme"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Kufjet"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistemi"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 2acaf5c..c38c771 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -584,13 +584,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Користите закључавање екрана"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Употребите закључавање екрана да бисте наставили"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Јако притисните сензор"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Није успела обрада отиска прста. Пробајте поново."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Препознавање отиска прста није успело. Пробајте поново."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Обришите сензор за отисак прста и пробајте поново"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Обришите сензор и пробајте поново"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Јако притисните сензор"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Превише споро сте померили прст. Пробајте поново."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Пробајте са другим отиском прста"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Превише је светло"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Откривен је притисак дугмета за укључивање"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Пробајте да прилагодите"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Сваки пут помало промените положај прста"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -602,12 +603,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Лице је потврђено. Притисните Потврди"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Хардвер за отиске прстију није доступан."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Подешавање отиска прста није успело"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Временско ограничење за отисак прста је истекло. Пробајте поново."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Време за подешавање отиска прста је истекло. Пробајте поново."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Радња са отиском прста је отказана."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Корисник је отказао радњу са отиском прста."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Превише покушаја. Пробајте поново касније."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Превише покушаја. Користите закључавање екрана уместо тога."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Превише покушаја. Користите закључавање екрана уместо тога."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Пробајте поново."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Обрађивање отиска прста није успело. Пробајте поново."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Није регистрован ниједан отисак прста."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Овај уређај нема сензор за отисак прста."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензор је привремено онемогућен."</string>
@@ -635,8 +636,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Посетите добављача за поправке."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Прављење модела лица није успело. Пробајте поново."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Превише је светло. Пробајте са слабијим осветљењем."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Нема довољно светла"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Удаљите телефон"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Приближите телефон"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Померите телефон нагоре"</string>
@@ -1250,8 +1250,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Покретање апликација."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Завршавање покретања."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете док подешавате отисак прста."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Додирните да бисте искључили екран"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Искључи екран"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Завршите подешавање искључивањем екрана"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Искључи"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Настављате верификацију отиска прста?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете да бисте верификовали отисак прста."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Искључи екран"</string>
@@ -1612,7 +1612,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ТВ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Звучници базне станице"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Спољни уређај"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Слушалице"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Систем"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index a6c162a..e65231d 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Använd skärmlåset"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Fortsätt med hjälp av ditt skärmlås"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tryck på sensorn med ett stadigt tryck"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Det gick inte att bearbeta fingeravtrycket. Försök igen."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingeravtrycket kändes inte igen. Försök igen."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengör fingeravtryckssensorn och försök igen"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengör sensorn och försök igen"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tryck hårt på sensorn"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Du rörde fingret för långsamt. Försök igen."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Testa ett annat fingeravtryck"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Det är för ljust"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Tryckning registrerades"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Testa att justera fingeravtrycket"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Flytta fingret lite varje gång"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet har autentiserats. Tryck på Bekräfta"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Det finns ingen maskinvara för fingeravtryck."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Det gick inte att konfigurera fingeravtryck"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Tidsgränsen för fingeravtrycket har uppnåtts. Försök igen."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingeravtryckskonfigurering nådde tidsgränsen. Försök igen."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingeravtrycksåtgärden avbröts."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingeravtrycksåtgärden avbröts av användaren."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Du har gjort för många försök. Försök igen senare."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"För många försök. Använd låsskärmen i stället."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"För många försök. Använd låsskärmen i stället."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Försök igen."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Det gick inte att bearbeta fingeravtrycket. Försök igen."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Inga fingeravtryck har registrerats."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Enheten har ingen fingeravtryckssensor."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensorn har tillfälligt inaktiverats."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Besök ett reparationsställe."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Ansiktsmodellen kunde inte skapas. Försök igen."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Det är för ljust. Testa lägre belysning."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"För lite ljus"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Flytta telefonen längre bort"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"För telefonen närmare"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Höj telefonen"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Appar startas."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Uppgraderingen är klar."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Du tryckte på av/på-knappen, vilket vanligtvis stänger av skärmen.\n\nTesta att trycka lätt när du konfigurerar fingeravtrycket."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Tryck för att stänga av skärmen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Stäng av skärmen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Stäng av skärmen för att avbryta"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Stäng av"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Vill du verifiera ditt fingeravtryck?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Du tryckte på av/på-knappen, vilket vanligtvis stänger av skärmen.\n\nTesta att trycka lätt för att verifiera ditt fingeravtryck."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Stäng av skärmen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Mobil"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dockningsstationens högtalare"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Extern enhet"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Hörlurar"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b17f58e..8ec29b3 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Tumia mbinu ya kufunga skrini"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Weka mbinu yako ya kufunga skrini ili uendelee"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Bonyeza kwa uthabiti kwenye kitambuzi"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Imeshindwa kuchakata alama ya kidole. Tafadhali jaribu tena."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Imeshindwa kutambua alama ya kidole. Jaribu tena."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Safisha kitambua alama ya kidole kisha ujaribu tena"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Safisha kitambuzi kisha ujaribu tena"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Bonyeza kwa nguvu kwenye kitambuzi"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Kidole kilisogezwa polepole zaidi. Tafadhali jaribu tena."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Jaribu alama nyingine ya kidole"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Inang\'aa mno"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Kubonyeza kitufe cha kuwasha/kuzima kumetambuliwa"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Jaribu kurekebisha"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Badilisha mkao wa kidole chako kiasi kila wakati"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Uso umethibitishwa, tafadhali bonyeza thibitisha"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Maunzi ya alama ya kidole hayapatikani."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Imeshindwa kuweka mipangilio ya alama ya kidole"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Muda wa kuweka alama ya kidole umekwisha. Jaribu tena."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Muda wa kuweka alama ya kidole umeisha. Jaribu tena."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Mchakato wa alama ya kidole umeghairiwa."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Mtumiaji ameghairi uthibitishaji wa alama ya kidole."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Majaribio mengi mno. Jaribu tena baadaye."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Umejaribu mara nyingi mno. Badala yake, tumia mbinu ya kufunga skrini."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Umejaribu mara nyingi mno. Badala yake, tumia mbinu ya kufunga skrini."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Jaribu tena."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Imeshindwa kutambua alama ya kidole. Jaribu tena."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Hakuna alama za vidole zilizojumuishwa."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kifaa hiki hakina kitambua alama ya kidole."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Kitambuzi kimezimwa kwa muda."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Tembelea mtoa huduma za urekebishaji."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Imeshindwa kuunda muundo wa uso wako. Jaribu tena."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Inang\'aa mno. Jaribu mwangaza hafifu"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Hakuna mwangaza wa kutosha"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Sogeza simu mbali kiasi"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Sogeza simu karibu"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Sogeza simu juu zaidi"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Programu zinaanza"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Inamaliza kuwasha."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Umebonyeza kitufe cha kuwasha/kuzima — kwa kawaida, hali hii huzima skrini.\n\nJaribu kugusa taratibu unapoweka mipangilio ya alama ya kidole chako."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Gusa ili uzime skrini"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Zima skrini"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Kusitisha kuweka alama ya kidole, zima skrini"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Zima"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Utaendelea kuthibitisha alama ya kidole chako?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Umebonyeza kitufe cha kuwasha/kuzima — kwa kawaida, hali hii huzima skrini.\n\nJaribu kugusa taratibu ili uthibitishe alama ya kidole chako."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Zima skrini"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Runinga"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Simu"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Vipasa sauti vya kituo"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Kifaa cha Nje"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Vipokeasauti"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Mfumo"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 6a7973e..ea5227c 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"திரைப் பூட்டைப் பயன்படுத்து"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"தொடர்வதற்கு உங்கள் திரைப் பூட்டை உள்ளிடுங்கள்"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"சென்சாரின் மீது நன்றாக அழுத்தவும்"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"கைரேகையைச் செயலாக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"கைரேகையை அடையாளம் காண முடியவில்லை. மீண்டும் முயலவும்."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"கைரேகை சென்சாரைச் சுத்தம் செய்துவிட்டு மீண்டும் முயலவும்"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"சென்சாரைச் சுத்தம் செய்துவிட்டு மீண்டும் முயலவும்"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"சென்சாரின் மீது நன்றாக அழுத்தவும்"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"விரலை மிகவும் மெதுவாக நகர்த்திவிட்டீர்கள். மீண்டும் முயற்சிக்கவும்."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"வேறு கைரேகையை முயலவும்"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"அதிக வெளிச்சமாக உள்ளது"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"பவர் பட்டனை அழுத்தியது கண்டறியப்பட்டது"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"விரலைச் சரியாக வைக்கவும்"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ஒவ்வொரு முறையும் விரலின் நிலையைச் சிறிதளவு மாற்றுங்கள்"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"முகம் அங்கீகரிக்கப்பட்டது. ’உறுதிப்படுத்துக’ என்பதை அழுத்துக"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"கைரேகை வன்பொருள் இல்லை."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"கைரேகையை அமைக்க முடியவில்லை"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"கைரேகைக்கான நேரம் முடிந்தது. மீண்டும் முயலவும்."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"கைரேகை அமைவுக்கான நேரம் முடிந்துவிட்டது. மீண்டும் முயலவும்."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"கைரேகை செயல்பாடு ரத்துசெய்யப்பட்டது."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"பயனர், கைரேகை உறுதிப்படுத்துதலை ரத்துசெய்தார்."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"அதிகமான முயற்சிகள். பிறகு முயற்சிக்கவும்."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"பலமுறை முயன்றுவிட்டீர்கள். இதற்குப் பதிலாகத் திரைப்பூட்டைப் பயன்படுத்தவும்."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"பலமுறை முயன்றுவிட்டீர்கள். இதற்குப் பதிலாகத் திரைப்பூட்டைப் பயன்படுத்தவும்."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"மீண்டும் முயற்சிக்கவும்."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"கைரேகையைச் செயலாக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"கைரேகைப் பதிவுகள் எதுவும் இல்லை."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"இந்தச் சாதனத்தில் கைரேகை சென்சார் இல்லை."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"சென்சார் தற்காலிகமாக முடக்கப்பட்டுள்ளது."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"பழுதுபார்ப்புச் சேவை வழங்குநரைத் தொடர்புகொள்ளவும்."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"முகத் தோற்றம் பதிவாகவில்லை. மீண்டும் முயலவும்."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"அதிக ஒளிர்வு. மிதமான ஒளியில் முயலவும்."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"போதிய வெளிச்சம் இல்லை"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"மொபைலை முகத்தில் இருந்து தள்ளிப் பிடிக்கவும்"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"மொபைலை அருகில் நகர்த்தவும்"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"மொபைலை மேலே நகர்த்தவும்"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ஆப்ஸ் தொடங்கப்படுகின்றன."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"துவக்குதலை முடிக்கிறது."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"நீங்கள் பவர் பட்டனை அழுத்தியுள்ளீர்கள் — வழக்கமாக இது திரையை ஆஃப் செய்யும்.\n\nஉங்கள் கைரேகையை அமைக்கும்போது மெதுவாகத் தொடுங்கள்."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"திரையை அணைக்க தட்டவும்"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"திரையை அணை"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"அமைவை நிறைவுசெய்ய திரையை முடக்குங்கள்"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"முடக்கு"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"கைரேகைச் சரிபார்ப்பைத் தொடரவா?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"நீங்கள் பவர் பட்டனை அழுத்தியுள்ளீர்கள் — வழக்கமாக இது திரையை ஆஃப் செய்யும்.\n\nஉங்கள் கைரேகையைச் சரிபார்க்க மெதுவாகத் தொடுங்கள்."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"திரையை ஆஃப் செய்"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"டிவி"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ஃபோன்"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"மொபைல் வைக்கும் கருவியின் ஸ்பீக்கர்கள்"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"வெளிப்புறச் சாதனம்"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ஹெட்ஃபோன்கள்"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"சிஸ்டம்"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 8c53b13..66dcac6 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"స్క్రీన్ లాక్ను ఉపయోగించండి"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"కొనసాగించడానికి మీ స్క్రీన్ లాక్ను ఎంటర్ చేయండి"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"సెన్సార్ మీద గట్టిగా నొక్కండి"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"వేలిముద్రను ప్రాసెస్ చేయడం సాధ్యపడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"వేలిముద్రను గుర్తించడం సాధ్యపడదు. మళ్లీ ట్రై చేయండి."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"వేలిముద్ర సెన్సార్ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"సెన్సార్ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"సెన్సార్ మీద గట్టిగా నొక్కండి"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"వేలిని చాలా నెమ్మదిగా కదిలించారు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"మరొక వేలిముద్రను ట్రై చేయండి"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"వెలుతురు అధికంగా ఉంది"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"పవర్ బటన్ కనుగొనబడింది"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"సర్దుబాటు చేయడానికి ట్రై చేయండి"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారీ మీ వేళ్ల స్థానాన్ని కొద్దిగా మార్చండి"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ముఖం ప్రమాణీకరించబడింది, దయచేసి ధృవీకరించును నొక్కండి"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"వేలిముద్ర హార్డ్వేర్ అందుబాటులో లేదు."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"వేలిముద్రను సెటప్ చేయడం సాధ్యం కాదు"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"వేలిముద్ర గడువు సమయం చేరుకుంది. మళ్లీ ప్రయత్నించండి."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"వేలిముద్ర సెటప్ సమయం ముగిసింది. మళ్లీ ట్రై చేయండి."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"వేలిముద్ర యాక్టివిటీ రద్దయింది."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"వేలిముద్ర చర్యని వినియోగదారు రద్దు చేశారు."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్ను ఉపయోగించండి."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్ను ఉపయోగించండి."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"మళ్లీ ప్రయత్నించండి."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"వేలిముద్రను ప్రాసెస్ చేయడం సాధ్యపడదు. మళ్లీ ట్రై చేయండి."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"వేలిముద్రలు నమోదు చేయబడలేదు."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ఈ పరికరంలో వేలిముద్ర సెన్సార్ ఎంపిక లేదు."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"సెన్సార్ తాత్కాలికంగా డిజేబుల్ చేయబడింది."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"రిపెయిర్ ప్రొవైడర్ను సందర్శించండి."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"మీ ఫేస్మోడల్ క్రియేషన్ కుదరదు. మళ్లీ ట్రై చేయండి."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"వెలుతురు అధికంగా ఉంది. తక్కువ ఉండేలా చూడండి."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"తగిన కాంతి లేదు"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ఫోన్ను కాస్త దూరంగా జరపండి"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ఫోన్ను దగ్గరగా పట్టుకోండి"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ఫోన్ను పైకి పట్టుకోండి"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"యాప్లను ప్రారంభిస్తోంది."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"బూట్ను ముగిస్తోంది."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"మీరు పవర్ బటన్ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను సెటప్ చేస్తున్నప్పుడు తేలికగా ట్యాప్ చేయడానికి ట్రై చేయండి."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"స్క్రీన్ను ఆఫ్ చేయడానికి ట్యాప్ చేయండి"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"స్క్రీన్ను ఆఫ్ చేయి"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"సెటప్ ముగించడానికి, స్క్రీన్ను ఆఫ్ చేయి"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ఆఫ్ చేయండి"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"మీ వేలిముద్ర వెరిఫైను కొనసాగించాలా?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"మీరు పవర్ బటన్ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను వెరిఫై చేయడానికి తేలికగా ట్యాప్ చేయడం ట్రై చేయండి."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"స్క్రీన్ను ఆఫ్ చేయి"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"టీవీ"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ఫోన్"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"డాక్ స్పీకర్లు"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"బాహ్య పరికరం"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"హెడ్ఫోన్లు"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"సిస్టమ్"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 7826774..0d1ea17 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ใช้การล็อกหน้าจอ"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ป้อนข้อมูลการล็อกหน้าจอเพื่อดำเนินการต่อ"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"กดเซ็นเซอร์ให้แน่น"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ประมวลผลลายนิ้วมือไม่ได้ โปรดลองอีกครั้ง"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ไม่รู้จักลายนิ้วมือ โปรดลองอีกครั้ง"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ทำความสะอาดเซ็นเซอร์ลายนิ้วมือแล้วลองอีกครั้ง"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ทำความสะอาดเซ็นเซอร์แล้วลองอีกครั้ง"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"กดเซ็นเซอร์ให้แน่น"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"นิ้วเคลื่อนที่ช้าเกินไป โปรดลองอีกครั้ง"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ลองลายนิ้วมืออื่น"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"สว่างเกินไป"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ตรวจพบว่ามีการกดปุ่มเปิด/ปิด"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ลองปรับการวางนิ้ว"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"เปลี่ยนตำแหน่งของนิ้วเล็กน้อยไปเรื่อยๆ ทุกครั้ง"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ตรวจสอบสิทธิ์ใบหน้าแล้ว โปรดกดยืนยัน"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ฮาร์ดแวร์ลายนิ้วมือไม่พร้อมใช้งาน"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"ตั้งค่าลายนิ้วมือไม่ได้"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"หมดเวลาใช้ลายนิ้วมือแล้ว โปรดลองอีกครั้ง"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"การตั้งค่าลายนิ้วมือหมดเวลา โปรดลองอีกครั้ง"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"ยกเลิกการทำงานของลายนิ้วมือ"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ผู้ใช้ยกเลิกการทำงานของลายนิ้วมือ"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"ดำเนินการหลายครั้งเกินไป ลองอีกครั้งในภายหลัง"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ลองหลายครั้งเกินไป ใช้การล็อกหน้าจอแทน"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"ลองหลายครั้งเกินไป ใช้การล็อกหน้าจอแทน"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"ลองอีกครั้ง"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"ประมวลผลลายนิ้วมือไม่ได้ โปรดลองอีกครั้ง"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ไม่มีลายนิ้วมือที่ลงทะเบียน"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"อุปกรณ์นี้ไม่มีเซ็นเซอร์ลายนิ้วมือ"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ปิดใช้เซ็นเซอร์ชั่วคราวแล้ว"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"โปรดติดต่อผู้ให้บริการซ่อม"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"สร้างรูปแบบใบหน้าไม่ได้ โปรดลองอีกครั้ง"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"สว่างเกินไป ลองหาตำแหน่งที่แสงน้อยกว่านี้"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"แสงสว่างไม่เพียงพอ"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"ถือโทรศัพท์ให้ห่างกว่านี้"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"ถือโทรศัพท์ให้ใกล้กว่านี้"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"ยกโทรศัพท์ให้สูงขึ้น"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"กำลังเริ่มต้นแอปพลิเคชัน"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"เสร็จสิ้นการบูต"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"คุณกดปุ่มเปิด/ปิดซึ่งโดยปกติจะเป็นการปิดหน้าจอ\n\nลองแตะเบาๆ ขณะตั้งค่าลายนิ้วมือ"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"แตะเพื่อปิดหน้าจอ"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"ปิดหน้าจอ"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ปิดหน้าจอเพื่อสิ้นสุดการตั้งค่า"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ปิด"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"ยืนยันลายนิ้วมือต่อไหม"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"คุณกดปุ่มเปิด/ปิดซึ่งโดยปกติจะเป็นการปิดหน้าจอ\n\nลองแตะเบาๆ เพื่อยืนยันลายนิ้วมือ"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"ปิดหน้าจอ"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ทีวี"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"โทรศัพท์"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ลำโพงแท่นชาร์จ"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"อุปกรณ์ภายนอก"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"หูฟัง"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"ระบบ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index e9d17a9..84f6112 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gumamit ng lock ng screen"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ilagay ang iyong lock ng screen para magpatuloy"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pumindot nang madiin sa sensor"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Hindi maproseso ang fingerprint. Pakisubukan ulit."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Hindi makilala ang fingerprint. Subukan ulit."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Linisin ang sensor para sa fingerprint at subukan ulit"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Linisin ang sensor at subukan ulit"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pumindot nang madiin sa sensor"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Masyadong mabagal ang paggalaw ng daliri. Pakisubukan ulit."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Sumubok ng ibang fingerprint"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Masyadong maliwanag"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"May na-detect na pagpindot sa Power"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Subukang isaayos"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Bahagyang baguhin ang posisyon ng iyong daliri sa bawat pagkakataon"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Na-authenticate ang mukha, pakipindot ang kumpirmahin"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hindi available ang hardware na ginagamitan ng fingerprint."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Hindi ma-set up ang fingerprint"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Nag-time out ang fingerprint. Subukang muli."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Nag-time out ang pag-set up ng fingerprint. Subukan ulit."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Nakansela ang operasyong ginagamitan ng fingerprint."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Kinansela ng user ang operasyon sa fingerprint."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Napakaraming pagtatangka. Subukan ulit sa ibang pagkakataon."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Masyadong maraming pagsubok. Gamitin na lang ang lock ng screen."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Masyadong maraming pagsubok. Gamitin na lang ang lock ng screen."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Subukang muli."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Hindi maproseso ang fingerprint. Subukan ulit."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Walang naka-enroll na fingerprint."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Walang sensor ng fingerprint ang device na ito."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Pansamantalang na-disable ang sensor."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Bumisita sa provider ng pag-aayos."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Hindi magawa ang iyong face model. Subukan ulit."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Masyadong maliwanag. Subukang bawasan ang liwanag."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Hindi sapat ang liwanag"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Ilayo pa ang telepono"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Ilapit pa ang telepono"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Itaas pa ang telepono"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Sinisimulan ang apps."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Pagtatapos ng pag-boot."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pinindot mo ang power button — karaniwan nitong ino-off ang screen.\n\nSubukang i-tap habang sine-set up ang iyong fingerprint."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Mag-tap para i-off ang screen"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"I-off ang screen"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"I-off ang screen para tapusin ang setup"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"I-off"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Magpatuloy sa pag-verify ng fingerprint?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pinindot mo ang power button — karaniwan nitong ino-off ang screen.\n\nSubukang i-tap para i-verify ang iyong fingerprint."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"I-off ang screen"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telepono"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Mga speaker ng dock"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"External na Device"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Mga Headphone"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"System"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 762b731..e0c1585 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran kilidi kullan"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Devam etmek için ekran kilidinizi girin"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Sensöre sıkıca bastırın"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Parmak izi tanınamadı. Tekrar deneyin."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Parmak izi sensörünü temizleyip tekrar deneyin"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensörü temizleyip tekrar deneyin"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensöre sıkıca bastırın"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Parmak hareketi çok yavaştı. Lütfen tekrar deneyin."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Başka bir parmak izi deneyin"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çok parlak"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Güç düğmesine basma algılandı"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ayarlamayı deneyin"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızın konumunu biraz değiştirin"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yüz kimliği doğrulandı, lütfen onayla\'ya basın"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Parmak izi donanımı kullanılamıyor."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Parmak izi ayarlanamıyor"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Parmak izi için zaman aşımı oluştu. Tekrar deneyin."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Parmak izi kurulumu zaman aşımına uğradı. Tekrar deneyin."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Parmak izi işlemi iptal edildi."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Parmak izi işlemi kullanıcı tarafından iptal edildi."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Çok fazla deneme yapıldı. Daha sonra tekrar deneyin."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Çok fazla deneme yapıldı. Bunun yerine ekran kilidini kullanın."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Çok fazla deneme yapıldı. Bunun yerine ekran kilidini kullanın."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Tekrar deneyin."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Parmak izi işlenemiyor. Tekrar deneyin."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Parmak izi kaydedilmedi."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda parmak izi sensörü yok."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensör geçici olarak devre dışı bırakıldı."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Bir onarım hizmeti sağlayıcıyı ziyaret edin."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Yüzünüzün modeli oluşturulamıyor. Tekrar deneyin."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Çok parlak. Parlaklığı daha az bir ışıklandırma deneyin."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Yeterli ışık yok"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaklaştırın"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaklaştırın"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu daha yukarı kaldırın"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Uygulamalar başlatılıyor"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Açılış tamamlanıyor."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Güç düğmesine bastınız. Bu düğmeye basıldığında genellikle ekran kapanır.\n\nParmak izinizi tanımlarken hafifçe dokunmayı deneyin."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ekranı kapatmak için dokunun"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Ekranı kapat"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ekranı kapatarak kurulumu sonlandırın"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Kapat"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Parmak izi doğrulamaya devam edilsin mi?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Güç düğmesine bastınız. Bu düğmeye basıldığında genellikle ekran kapanır.\n\nParmak izinizi doğrulamak için hafifçe dokunmayı deneyin."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Ekranı kapat"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Yuva hoparlörleri"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Harici Cihaz"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Kulaklıklar"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Sistem"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 730cfac..c76d6a3 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -585,13 +585,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Доступ розблокуванням екрана"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Щоб продовжити, введіть дані для розблокування екрана"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Міцно притисніть палець до сканера"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не вдалось обробити відбиток пальця. Повторіть спробу."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Відбиток пальця не розпізнано. Повторіть спробу."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Очистьте сканер відбитків пальців і повторіть спробу"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Очистьте сканер і повторіть спробу"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Міцно притисніть палець до сканера"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Ви провели пальцем надто повільно. Повторіть спробу."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Спробуйте інший відбиток пальця"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Надто яскраво"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Виявлено натискання кнопки живлення"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Спробуйте відкоригувати відбиток пальця"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Щоразу трохи змінюйте положення пальця"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -603,12 +604,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Обличчя автентифіковано. Натисніть \"Підтвердити\""</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Сканер відбитків пальців недоступний."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Не вдалося створити відбиток пальця"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Час очікування відбитка пальця минув. Повторіть спробу."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Час очікування для налаштування відбитка пальця минув. Повторіть спробу."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Дію з відбитком пальця скасовано."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Користувач скасував дію з відбитком пальця."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Забагато спроб. Спробуйте пізніше."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Забагато спроб. Використайте натомість розблокування екрана."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Забагато спроб. Використайте натомість розблокування екрана."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Повторіть спробу."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Не вдалось обробити відбиток пальця. Повторіть спробу."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Відбитки пальців не зареєстровано."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На цьому пристрої немає сканера відбитків пальців."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчик тимчасово вимкнено."</string>
@@ -636,8 +637,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Зверніться до постачальника послуг із ремонту."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Модель обличчя не створено. Повторіть спробу."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадто яскраво. Потрібно менше світла."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Замало світла"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Тримайте телефон далі від обличчя"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Тримайте телефон ближче до обличчя"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Підніміть телефон вище"</string>
@@ -1251,8 +1251,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Запуск програм."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Завершення завантаження."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Ви натиснули кнопку живлення – зазвичай після цього вимикається екран.\n\nЩоб зареєструвати відбиток пальця, спробуйте лише злегка торкнутися датчика."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Натисніть, щоб вимкнути екран"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Вимкнути екран"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Щоб завершити, вимкніть екран"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Вимкнути"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Продовжити підтвердження відбитка?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Ви натиснули кнопку живлення – зазвичай після цього вимикається екран.\n\nЩоб підтвердити відбиток пальця, спробуйте лише злегка торкнутися датчика."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Вимкнути екран"</string>
@@ -1613,7 +1613,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевізор"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Динаміки док-станції"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Зовнішній пристрій"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Навушники"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Система"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 6fa0071..c589440 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"اسکرین لاک استعمال کریں"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"جاری رکھنے کے لیے اپنا اسکرین لاک درج کریں"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"سینسر پر اچھی طرح دبائیں"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"فنگر پرنٹ پر کارروائی نہیں کی جا سکی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"فنگر پرنٹ کی شناخت نہیں کی جا سکی۔ دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"فنگر پرنٹ سینسر صاف کریں اور دوبارہ کوشش کریں"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"سینسر صاف کریں اور دوبارہ کوشش کریں"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"سینسر پر اچھی طرح دبائیں"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"انگلی کو بہت آہستہ ہٹایا گیا۔ براہ کرم دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"دوسرا فنگر پرنٹ آزمائیں"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"کافی روشنی ہے"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"پاور پریس کا پتہ چلا"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ایڈجسٹ کرنے کی کوشش کریں"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ہر بار اپنی انگلی کی پوزیشن کو تھوڑا تبدیل کریں"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چہرے کی تصدیق ہو گئی، براہ کرم \'تصدیق کریں\' کو دبائيں"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"فنگر پرنٹ ہارڈ ویئر دستیاب نہیں ہے۔"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"فنگر پرنٹ کو سیٹ اپ نہیں کیا جا سکا"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"فنگر پرنٹ کی میعاد ختم ہوگئی۔ دوبارہ کوشش کریں۔"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"فنگر پرنٹ کے سیٹ اپ کا وقت ختم ہو گیا۔ دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"فنگر پرنٹ کی کارروائی منسوخ ہوگئی۔"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"صارف نے فنگر پرنٹ کی کارروائی منسوخ کر دی۔"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"کافی زیادہ کوششیں کی گئیں۔ بعد میں دوبارہ کوشش کریں۔"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"کافی زیادہ کوششیں۔ اس کے بجائے اسکرین لاک کا استعمال کریں۔"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"کافی زیادہ کوششیں۔ اس کے بجائے اسکرین لاک کا استعمال کریں۔"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"دوبارہ کوشش کریں۔"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"فنگر پرنٹ پروسیس نہیں ہو سکتا۔ دوبارہ کوشش کریں۔"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"کوئی فنگر پرنٹ مندرج شدہ نہیں ہے۔"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"اس آلہ میں فنگر پرنٹ سینسر نہیں ہے۔"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"سینسر عارضی طور غیر فعال ہے۔"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ایک مرمت فراہم کنندہ کو ملاحظہ کریں۔"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"آپکے چہرے کا ماڈل تخلیق نہیں ہو سکا۔ پھر کوشش کریں۔"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"کافی روشنی ہے۔ ہلکی روشنی میں آزمائیں۔"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"کافی روشنی نہیں ہے"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"فون کو تھوڑا دور کریں"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"فون کو تھوڑا قریب کریں"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"فون کو تھوڑا اوپر لے جائیں"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ایپس شروع ہو رہی ہیں۔"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"بوٹ مکمل ہو رہا ہے۔"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"آپ نے پاور بٹن دبایا — اس سے عام طور پر اسکرین آف ہو جاتی ہے۔\n\nاپنے فنگر پرنٹ کو سیٹ اپ کرنے کے دوران ہلکا سا تھپتھپانے کی کوشش کریں۔"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"اسکرین آف کرنے کیلئے تھپتھپائیں"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"اسکرین آف کریں"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"سیٹ اپ ختم کرنے کیلئے، اسکرین آف کریں"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"آف کریں"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"اپنے فنگر پرنٹ کی توثیق کرنا جاری رکھیں؟"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"آپ نے پاور بٹن دبایا — اس سے عام طور پر اسکرین آف ہو جاتی ہے۔\n\nاپنے فنگر پرنٹ کی توثیق کرنے کے لیے ہلکا سا تھپتھپانے کی کوشش کریں۔"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"اسکرین آف کریں"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"فون"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ڈاک اسپیکرز"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"بیرونی آلہ"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ہیڈ فونز"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"سسٹم"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index b9a0ae5..a0bcc98 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran qulfi"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ekran qulfini kiritish bilan davom eting"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Sensorni mahkam bosing"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmoq izi aniqlanmadi. Qaytadan urining."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Bu barmoq izi notanish. Qayta urining."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Barmoq izi skanerini tozalang va qayta urining"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Sensorni tozalang va qayta urining"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Sensorni mahkam bosing"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Barmoq juda sekin harakatlandi. Qayta urinib ko‘ring."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Boshqa barmoq izi bilan urining"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Juda yorqin"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Quvvat tugmasi bosildi"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Moslashga urining"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Barmoqni har safar biroz surib joylang"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yuzingiz aniqlandi, tasdiqlash uchun bosing"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Barmoq izi skaneri ish holatida emas."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Barmoq izi sozlanmadi"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Barmoq izini aniqlash vaqti tugab qoldi. Qayta urinib ko‘ring."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Barmoq izini sozlash vaqti tugadi. Qayta urining."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Barmoq izi tekshiruvi bekor qilindi."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Barmoq izi amali foydalanuvchi tomonidan bekor qilindi"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Urinishlar soni ko‘payib ketdi. Keyinroq qayta urinib ko‘ring."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Juda koʻp urinildi. Ekran qulfi orqali urining."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Juda koʻp urinildi. Ekran qulfi orqali urining."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Qayta urinib ko‘ring."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Barmoq izi tekshirilmadi. Qayta urining."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Hech qanday barmoq izi qayd qilinmagan."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu qurilmada barmoq izi skaneri mavjud emas."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor vaqtincha faol emas."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Xizmat koʻrsatish markaziga murojaat qiling."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Yuzingiz modeli yaratilmadi. Qayta urining."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Juda yorqin. Biroz soyaroq joy tanlang."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Yorugʻlik yetarli emas"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonni biroz uzoqroq tuting"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonni yaqinroq tuting"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonni teparoq tuting"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Ilovalar ishga tushirilmoqda."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Tizimni yuklashni tugatish."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Quvvat tugmasini bosdingiz — bu odatda ekranni oʻchiradi.\n\nBarmoq izini qoʻshish vaqtida tugmaga yengilgina tegining."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Ekranni oʻchirish uchun bosing"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Ekranni oʻchirish"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Sozlashni yakunlash uchun ekranni oʻchiring"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Faolsizlantirish"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Barmoq izi tasdiqlashda davom etilsinmi?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Quvvat tugmasini bosdingiz. Bu odatda ekranni oʻchiradi.\n\nBarmoq izingizni tasdiqlash uchun tugmaga yengilgina tegining."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Ekranni oʻchirish"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Taglik karnaylar"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Tashqi qurilma"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Quloq karnaychalari"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Tizim"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index ad4a3899..c94730a 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Dùng phương thức khóa màn hình"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Hãy nhập phương thức khóa màn hình của bạn để tiếp tục"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Nhấn chắc trên cảm biến"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Không thể xử lý vân tay. Vui lòng thử lại."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Không nhận dạng được vân tay. Hãy thử lại."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hãy vệ sinh cảm biến vân tay rồi thử lại"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vệ sinh cảm biến rồi thử lại"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Nhấn chắc trên cảm biến"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Di chuyển ngón tay quá chậm. Vui lòng thử lại."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Hãy thử một vân tay khác"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Quá sáng"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Phát hiện thấy thao tác nhấn nút Nguồn"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Hãy thử điều chỉnh"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mỗi lần, hãy thay đổi vị trí ngón tay một chút"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Đã xác thực khuôn mặt, vui lòng nhấn để xác nhận"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Phần cứng vân tay không khả dụng."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Không thể thiết lập vân tay"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Đã hết thời gian chờ vân tay. Hãy thử lại."</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Hết thời gian thiết lập vân tay. Hãy thử lại."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Thao tác dùng dấu vân tay bị hủy."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Người dùng đã hủy thao tác dùng dấu vân tay."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Quá nhiều lần thử. Hãy thử lại sau."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Bạn đã thử quá nhiều lần. Hãy dùng phương thức khoá màn hình."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Bạn đã thử quá nhiều lần. Hãy dùng phương thức khoá màn hình."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Thử lại."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Không xử lý được vân tay. Hãy thử lại."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Chưa đăng ký vân tay."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Thiết bị này không có cảm biến vân tay."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Đã tạm thời tắt cảm biến."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Hãy liên hệ với một nhà cung cấp dịch vụ sửa chữa."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Không thể tạo mẫu khuôn mặt của bạn. Hãy thử lại."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Quá sáng. Hãy thử giảm độ sáng."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Không đủ ánh sáng"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Đưa điện thoại ra xa hơn"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Đưa điện thoại lại gần hơn"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Nâng điện thoại lên cao hơn"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Khởi động ứng dụng."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Hoàn tất khởi động."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Bạn đã nhấn nút nguồn – thao tác này thường tắt màn hình.\n\nHãy thử nhấn nhẹ khi thiết lập vân tay của bạn."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Nhấn để tắt màn hình"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Tắt màn hình"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Để kết thúc thiết lập, hãy tắt màn hình"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Tắt"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Tiếp tục xác minh vân tay của bạn?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Bạn đã nhấn nút nguồn – thao tác này thường tắt màn hình.\n\nHãy thử nhấn nhẹ để xác minh vân tay."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Tắt màn hình"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Điện thoại"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Loa đế"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Thiết bị bên ngoài"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Tai nghe"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Hệ thống"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index ce5cd53..b81633e4 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用屏幕锁定凭据"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"输入您的屏幕锁定凭据才能继续"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"请用力按住传感器"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"无法处理指纹,请重试。"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"无法识别指纹,请重试。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"请清洁指纹传感器,然后重试"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"请清洁传感器,然后重试"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"请用力按住传感器"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移动太慢,请重试。"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"请试试其他指纹"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"光线太亮"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"检测到按下“电源”按钮的操作"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"请尝试调整指纹"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"请在每次放手指时略微更改手指的位置"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已验证,请按确认按钮"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"指纹硬件无法使用。"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"无法设置指纹"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"指纹录入操作超时,请重试。"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"指纹设置已超时,请重试。"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"指纹操作已取消。"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"用户取消了指纹操作。"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"尝试次数过多,请稍后重试。"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"尝试次数过多,请通过屏幕锁定功能解锁。"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"尝试次数过多,请通过屏幕锁定功能解锁。"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"请重试。"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"无法处理指纹,请重试。"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未注册任何指纹。"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此设备没有指纹传感器。"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"传感器已暂时停用。"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"请联系维修服务提供商。"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"无法创建您的脸部模型,请重试。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度过高,请尝试使用较柔和的亮度。"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"光线不足"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"请将手机拿远一点"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"请将手机拿近一点"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"请将手机举高一点"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"正在启动应用。"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"即将完成启动。"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"您已按电源按钮,这通常会关闭屏幕。\n\n请尝试在设置指纹时轻轻按一下。"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"按一下即可关闭屏幕"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"关闭屏幕"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"若要结束设置,请关闭屏幕"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"关闭"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"要继续验证您的指纹吗?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"您已按电源按钮,这通常会关闭屏幕。\n\n请尝试轻轻按一下来验证您的指纹。"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"关闭屏幕"</string>
@@ -1482,7 +1482,7 @@
<string name="sync_binding_label" msgid="469249309424662147">"同步"</string>
<string name="accessibility_binding_label" msgid="1974602776545801715">"无障碍"</string>
<string name="wallpaper_binding_label" msgid="1197440498000786738">"壁纸"</string>
- <string name="chooser_wallpaper" msgid="3082405680079923708">"更改壁纸"</string>
+ <string name="chooser_wallpaper" msgid="3082405680079923708">"更换壁纸"</string>
<string name="notification_listener_binding_label" msgid="2702165274471499713">"通知侦听器"</string>
<string name="vr_listener_binding_label" msgid="8013112996671206429">"VR 监听器"</string>
<string name="condition_provider_service_binding_label" msgid="8490641013951857673">"条件提供程序"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"电视"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"手机"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"基座扬声器"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"外部设备"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"耳机"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"系统"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 96c7b0b..d7f33a5 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用螢幕鎖定"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"如要繼續操作,請輸入螢幕鎖定解鎖憑證"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"請用力按住感應器"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋。請再試一次。"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"無法辨識指紋,請再試一次。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"請清潔指紋感應器,然後再試一次"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"請清潔感應器,然後再試一次"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"請用力按住感應器"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移動太慢,請重試。"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"改用其他指紋"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"太亮"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"偵測到按下開關按鈕"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"嘗試調整"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"每次掃瞄時請稍微變更手指的位置"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"面孔已經驗證,請㩒一下 [確認]"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"無法使用指紋軟件。"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"無法設定指紋"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"指紋已逾時。請再試一次。"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"指紋設定逾時,請再試一次。"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"指紋操作已取消。"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"使用者已取消指紋操作。"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"嘗試次數過多,請稍後再試。"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"嘗試次數過多,請改用螢幕鎖定功能。"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"嘗試次數過多,請改用螢幕鎖定功能。"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"再試一次。"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"無法處理指紋,請再試一次。"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未註冊任何指紋"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此裝置沒有指紋感應器。"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"感應器已暫時停用。"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"請諮詢維修服務供應商。"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"無法建立面部模型,請再試一次。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"影像太亮。請嘗試在更暗的環境下使用。"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"光線不足"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"請將手機移開一點"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"請將手機移近一點"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"請將手機向上移"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"正在啟動應用程式。"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"啟動完成。"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"您已按下開關按鈕,這麼做通常會關閉螢幕。\n\n設定指紋時請嘗試輕按開關按鈕。"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"輕按即可關閉螢幕"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"關閉螢幕"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"如要結束設定,請關閉螢幕"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"關閉"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"要繼續驗證指紋嗎?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"您已按下開關按鈕,這麼做通常會關閉螢幕。\n\n嘗試輕按開關按鈕以驗證指紋。"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"關閉螢幕"</string>
@@ -1565,7 +1565,7 @@
<string name="action_bar_home_description_format" msgid="5087107531331621803">"%1$s:%2$s"</string>
<string name="action_bar_home_subtitle_description_format" msgid="4346835454749569826">"%1$s (%2$s):%3$s"</string>
<string name="storage_internal" msgid="8490227947584914460">"內部共用儲存空間"</string>
- <string name="storage_sd_card" msgid="3404740277075331881">"SD 記憶卡"</string>
+ <string name="storage_sd_card" msgid="3404740277075331881">"SD 卡"</string>
<string name="storage_sd_card_label" msgid="7526153141147470509">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD 卡"</string>
<string name="storage_usb_drive" msgid="448030813201444573">"USB 驅動器"</string>
<string name="storage_usb_drive_label" msgid="6631740655876540521">"<xliff:g id="MANUFACTURER">%s</xliff:g> USB 驅動器"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"電視"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"手機"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"插座喇叭"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"外部裝置"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"耳機"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"系統"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 46d95c7f..44aeb10 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用螢幕鎖定功能"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"如要繼續操作,請輸入螢幕鎖定憑證"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"請確實按住感應器"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋,請再試一次。"</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"無法辨識指紋,請再試一次。"</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"請清潔指紋感應器,然後再試一次"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"清潔感應器,然後再試一次"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"請確實按住感應器"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"手指移動速度過慢,請再試一次。"</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"改用其他指紋"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"太亮"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"偵測到按下電源鍵"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"請試著調整"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"每次掃描時請稍微改變手指的位置"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"臉孔驗證成功,請按下 [確認] 按鈕"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"指紋硬體無法使用。"</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"無法設定指紋"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"指紋處理作業逾時,請再試一次。"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"指紋設定逾時,請再試一次。"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"指紋作業已取消。"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"使用者已取消指紋驗證作業。"</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"嘗試次數過多,請稍後再試。"</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"嘗試次數過多,請改用螢幕鎖定功能。"</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"嘗試次數過多,請改用螢幕鎖定功能。"</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"請再試一次。"</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"無法處理指紋,請再試一次。"</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"未登錄任何指紋。"</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"這個裝置沒有指紋感應器。"</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"感應器已暫時停用。"</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"請洽詢維修供應商。"</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"無法建立臉部模型,請再試一次。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度過高,請嘗試使用較柔和的照明方式。"</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"光線不足"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"請將手機拿遠一點"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"請將手機拿近一點"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"請將手機舉高一點"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"正在啟動應用程式。"</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"啟動完成。"</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"你已按下電源鍵,這麼做通常會關閉螢幕。\n\n設定指紋時請試著減輕觸碰電源鍵的力道。"</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"輕觸即可關閉螢幕"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"關閉螢幕"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"如要結束設定,請關閉螢幕"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"關閉"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"要繼續驗證指紋嗎?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"你已按下電源鍵,這麼做通常會關閉螢幕。\n\n驗證指紋時,請試著減輕觸碰電源鍵的力道。"</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"關閉螢幕"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"電視"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"手機"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"座架喇叭"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"外部裝置"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"耳機"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"系統"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 6e640c6..d4d1f2a 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -583,13 +583,14 @@
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Sebenzisa isikhiya sesikrini"</string>
<string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Faka ukukhiya isikrini kwakho ukuze uqhubeke"</string>
<string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Cindezela ngokuqinile kunzwa"</string>
- <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ayikwazanga ukucubungula izigxivizo zeminwe. Sicela uzame futhi."</string>
+ <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Ayisazi isigxivizo somunwe. Zama futhi."</string>
<string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hlanza inzwa yesigxivizo somunwe bese uzame futhi"</string>
<string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Hlanza inzwa bese uzame futhi"</string>
<string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Cindezela ngokuqinile kunzwa"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Umnwe uhanjiswe kancane kakhulu. Sicela uzame futhi."</string>
<string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zama ezinye izigxivizo zeminwe"</string>
<string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Kukhanya kakhulu"</string>
+ <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Ukucindezela kwamandla kutholiwe"</string>
<string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Zama ukulungisa"</string>
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Shintsha indawo yomunwe wakho kancane isikhathi ngasinye"</string>
<string-array name="fingerprint_acquired_vendor">
@@ -601,12 +602,12 @@
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ukuqinisekiswa kobuso, sicela ucindezele okuthi qinisekisa"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Izingxenyekazi zekhompuyutha zezigxivizo zeminwe azitholakali."</string>
<string name="fingerprint_error_no_space" msgid="7285481581905967580">"Ayikwazi ukusetha izigxivizo zeminwe"</string>
- <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Kufinyelelwe isikhathi sokuvala sezigxivizo zeminwe. Zama futhi"</string>
+ <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Ukusethwa kwesigxivizo somunwe kuphelelwe yisikhathi Zama futhi."</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"Ukusebenza kwezigxivizo zeminwe kukhanseliwe."</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Umsebenzi wezigxivizo zomunwe ukhanselwe umsebenzisi."</string>
- <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Imizamo eminingi kakhulu. Zama futhi emuva kwesikhathi."</string>
+ <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Imizamo eminingi kakhulu. Sebenzisa ukukhiya isikrini kunalokho."</string>
<string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"Imizamo eminingi kakhulu. Sebenzisa ukukhiya isikrini kunalokho."</string>
- <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Zama futhi."</string>
+ <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"Ayikwazi ukucubungula isigxivizo somunwe. Zama futhi."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Azikho izigxivizo zeminwe ezibhalisiwe."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Le divayisi ayinayo inzwa yezigxivizo zeminwe."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Inzwa ikhutshazwe okwesikhashana."</string>
@@ -634,8 +635,7 @@
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Vakashela umhlinzeki wokulungisa."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Ayikwazi ukusungula imodeli yobuso bakho. Zama futhi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Kukhanya kakhulu. Zama ukukhanya okuthambile."</string>
- <!-- no translation found for face_acquired_too_dark (8539853432479385326) -->
- <skip />
+ <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ukukhanya okunganele"</string>
<string name="face_acquired_too_close" msgid="4453646176196302462">"Yisa ifoni kude"</string>
<string name="face_acquired_too_far" msgid="2922278214231064859">"Sondeza ifoni eduze"</string>
<string name="face_acquired_too_high" msgid="8278815780046368576">"Yisa ifoni phezulu"</string>
@@ -1249,8 +1249,8 @@
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Qalisa izinhlelo zokusebenza."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Qedela ukuqala kabusha."</string>
<string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Ucindezele inkinobho yamandla — lokhu kuvame ukuvala isikrini.\n\nZama ukuthepha kancane ngenkathi usetha isigxivizo sakho somunwe."</string>
- <string name="fp_power_button_enrollment_title" msgid="8997641910928785172">"Thepha ukuze uvale isikrini"</string>
- <string name="fp_power_button_enrollment_button_text" msgid="8351290204990805109">"Vala isikrini"</string>
+ <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ukuze umise ukusetha, vala isikrini"</string>
+ <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Vala"</string>
<string name="fp_power_button_bp_title" msgid="5585506104526820067">"Qhubeka uqinisekise isigxivizo sakho somunwe?"</string>
<string name="fp_power_button_bp_message" msgid="2983163038168903393">"Ucindezele inkinobho yamandla — lokhu kuvame ukuvala isikrini.\n\nZama ukuthepha kancane ukuze uqinisekise isigxivizo sakho somunwe."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Vala isikrini"</string>
@@ -1611,7 +1611,7 @@
<string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"I-TV"</string>
<string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Ifoni"</string>
<string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Izipikha ze-Dock"</string>
- <string name="default_audio_route_name_external_device" msgid="5474470558160717850">"HDMI"</string>
+ <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Idivayisi Yangaphandle"</string>
<string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Ama-headphone"</string>
<string name="default_audio_route_name_usb" msgid="895668743163316932">"I-USB"</string>
<string name="default_audio_route_category_name" msgid="5241740395748134483">"Isistimu"</string>
diff --git a/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java b/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
index ddc05e0..7338c3a 100644
--- a/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
+++ b/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
@@ -204,19 +204,6 @@
assertEquals(100, Color.alpha(bitmap.getPixel(50, 50)));
}
- @Test
- public void testSetBounds() throws Exception {
- mIconDrawable = new AdaptiveIconDrawable(mBackgroundDrawable, mForegroundDrawable);
- mIconDrawable.setBounds(0, 0, 100, 100);
-
- assertEquals(new Rect(-25, -25, 125, 125), mBackgroundDrawable.getBounds());
- assertEquals(new Rect(-25, -25, 125, 125), mForegroundDrawable.getBounds());
-
- mIconDrawable.setBounds(10, 10, 110, 110);
- assertEquals(new Rect(-15, -15, 135, 135), mBackgroundDrawable.getBounds());
- assertEquals(new Rect(-15, -15, 135, 135), mForegroundDrawable.getBounds());
- }
-
//
// Utils
//
diff --git a/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java b/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java
new file mode 100644
index 0000000..ebd78b46
--- /dev/null
+++ b/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2022 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 com.android.internal.os.anr;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link AnrLatencyTracekr.java}.
+ *
+ */
+public class AnrLatencyTrackerTests {
+
+ private AnrLatencyTracker mLatencyTracker;
+
+ @Before
+ public void setup() {
+ mLatencyTracker = spy(new AnrLatencyTracker(0, 50L));
+ when(mLatencyTracker.getUptimeMillis())
+ .thenReturn(55L)
+ .thenReturn(60L)
+ .thenReturn(70L)
+ .thenReturn(80L)
+ .thenReturn(88L)
+ .thenReturn(99L)
+ .thenReturn(101L)
+ .thenReturn(105L)
+ .thenReturn(108L)
+ .thenReturn(110L)
+ .thenReturn(117L)
+ .thenReturn(121L)
+ .thenReturn(129L)
+ .thenReturn(135L)
+ .thenReturn(150L)
+ .thenReturn(155L)
+ .thenReturn(157L)
+ .thenReturn(158L)
+ .thenReturn(165L)
+ .thenReturn(175L)
+ .thenReturn(188L);
+ }
+
+ @Test
+ public void testNormalScenario() {
+
+ mLatencyTracker.appNotRespondingStarted();
+ mLatencyTracker.waitingOnAnrRecordLockStarted();
+ mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
+ mLatencyTracker.appNotRespondingEnded();
+
+ mLatencyTracker.anrProcessingStarted();
+ mLatencyTracker.updateCpuStatsNowCalled();
+ mLatencyTracker.updateCpuStatsNowReturned();
+ mLatencyTracker.currentPsiStateCalled();
+ mLatencyTracker.currentPsiStateReturned();
+ mLatencyTracker.processCpuTrackerMethodsCalled();
+ mLatencyTracker.processCpuTrackerMethodsReturned();
+ mLatencyTracker.criticalEventLogStarted();
+ mLatencyTracker.criticalEventLogEnded();
+
+ mLatencyTracker.waitingOnGlobalLockStarted();
+ mLatencyTracker.waitingOnGlobalLockEnded();
+ mLatencyTracker.waitingOnPidLockStarted();
+ mLatencyTracker.waitingOnPidLockEnded();
+ mLatencyTracker.waitingOnAMSLockStarted();
+ mLatencyTracker.waitingOnAMSLockEnded();
+ mLatencyTracker.waitingOnProcLockStarted();
+ mLatencyTracker.waitingOnProcLockEnded();
+
+ mLatencyTracker.dumpStackTracesStarted();
+ mLatencyTracker.dumpingFirstPidsStarted();
+ mLatencyTracker.dumpingPidStarted(1);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingFirstPidsEnded();
+ mLatencyTracker.dumpingNativePidsStarted();
+ mLatencyTracker.dumpingPidStarted(3);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingNativePidsEnded();
+ mLatencyTracker.dumpingExtraPidsStarted();
+ mLatencyTracker.dumpingPidStarted(10);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingPidStarted(11);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingExtraPidsEnded();
+ mLatencyTracker.dumpStackTracesEnded();
+ mLatencyTracker.anrProcessingEnded();
+
+ mLatencyTracker.close();
+
+ assertThat(mLatencyTracker.dumpAsCommaSeparatedArrayWithHeader())
+ .isEqualTo("DurationsV1: 50,5,25,8,100,2,3,7,8,15,2,7,13,10,3,4\n\n");
+ verify(mLatencyTracker, times(1)).pushAtom();
+ }
+
+ @Test
+ public void testCloseIdempotency() {
+
+ mLatencyTracker.appNotRespondingStarted();
+ mLatencyTracker.waitingOnAnrRecordLockStarted();
+ mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
+ mLatencyTracker.appNotRespondingEnded();
+
+ mLatencyTracker.anrProcessingStarted();
+ mLatencyTracker.updateCpuStatsNowCalled();
+ mLatencyTracker.updateCpuStatsNowReturned();
+ mLatencyTracker.currentPsiStateCalled();
+ mLatencyTracker.currentPsiStateReturned();
+ mLatencyTracker.processCpuTrackerMethodsCalled();
+ mLatencyTracker.processCpuTrackerMethodsReturned();
+ mLatencyTracker.criticalEventLogStarted();
+ mLatencyTracker.criticalEventLogEnded();
+
+ mLatencyTracker.waitingOnGlobalLockStarted();
+ mLatencyTracker.waitingOnGlobalLockEnded();
+ mLatencyTracker.waitingOnPidLockStarted();
+ mLatencyTracker.waitingOnPidLockEnded();
+ mLatencyTracker.waitingOnAMSLockStarted();
+ mLatencyTracker.waitingOnAMSLockEnded();
+ mLatencyTracker.waitingOnProcLockStarted();
+ mLatencyTracker.waitingOnProcLockEnded();
+
+ mLatencyTracker.dumpStackTracesStarted();
+ mLatencyTracker.dumpingFirstPidsStarted();
+ mLatencyTracker.dumpingPidStarted(1);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingFirstPidsEnded();
+ mLatencyTracker.dumpingNativePidsStarted();
+ mLatencyTracker.dumpingPidStarted(3);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingNativePidsEnded();
+ mLatencyTracker.dumpingExtraPidsStarted();
+ mLatencyTracker.dumpingPidStarted(10);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingPidStarted(11);
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpingExtraPidsEnded();
+ mLatencyTracker.dumpStackTracesEnded();
+ mLatencyTracker.anrProcessingEnded();
+
+ mLatencyTracker.close();
+ mLatencyTracker.close();
+
+ verify(mLatencyTracker, times(1)).pushAtom();
+ }
+
+ @Test
+ public void testSkipInProcessErrorStateRecordAppNotResponding() {
+
+ mLatencyTracker.appNotRespondingStarted();
+ mLatencyTracker.waitingOnAnrRecordLockStarted();
+ mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
+ mLatencyTracker.appNotRespondingEnded();
+
+ mLatencyTracker.anrProcessingStarted();
+ mLatencyTracker.updateCpuStatsNowCalled();
+ mLatencyTracker.updateCpuStatsNowReturned();
+ mLatencyTracker.currentPsiStateCalled();
+ mLatencyTracker.currentPsiStateReturned();
+ mLatencyTracker.processCpuTrackerMethodsCalled();
+ mLatencyTracker.processCpuTrackerMethodsReturned();
+ mLatencyTracker.criticalEventLogStarted();
+ mLatencyTracker.criticalEventLogEnded();
+
+ mLatencyTracker.waitingOnGlobalLockStarted();
+ mLatencyTracker.waitingOnGlobalLockEnded();
+ mLatencyTracker.waitingOnPidLockStarted();
+ mLatencyTracker.waitingOnPidLockEnded();
+ mLatencyTracker.waitingOnAMSLockStarted();
+ mLatencyTracker.waitingOnAMSLockEnded();
+ mLatencyTracker.waitingOnProcLockStarted();
+ mLatencyTracker.waitingOnProcLockEnded();
+
+ mLatencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
+
+ mLatencyTracker.anrProcessingEnded();
+
+ mLatencyTracker.close();
+
+ verify(mLatencyTracker, times(0)).pushAtom();
+ }
+
+ @Test
+ public void testSkipInDumpTraces() {
+
+ mLatencyTracker.appNotRespondingStarted();
+ mLatencyTracker.waitingOnAnrRecordLockStarted();
+ mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
+ mLatencyTracker.appNotRespondingEnded();
+
+ mLatencyTracker.anrProcessingStarted();
+ mLatencyTracker.updateCpuStatsNowCalled();
+ mLatencyTracker.updateCpuStatsNowReturned();
+ mLatencyTracker.currentPsiStateCalled();
+ mLatencyTracker.currentPsiStateReturned();
+ mLatencyTracker.processCpuTrackerMethodsCalled();
+ mLatencyTracker.processCpuTrackerMethodsReturned();
+ mLatencyTracker.criticalEventLogStarted();
+ mLatencyTracker.criticalEventLogEnded();
+
+ mLatencyTracker.waitingOnGlobalLockStarted();
+ mLatencyTracker.waitingOnGlobalLockEnded();
+ mLatencyTracker.waitingOnPidLockStarted();
+ mLatencyTracker.waitingOnPidLockEnded();
+ mLatencyTracker.waitingOnAMSLockStarted();
+ mLatencyTracker.waitingOnAMSLockEnded();
+ mLatencyTracker.waitingOnProcLockStarted();
+ mLatencyTracker.waitingOnProcLockEnded();
+
+ mLatencyTracker.dumpStackTracesStarted();
+ mLatencyTracker.anrSkippedDumpStackTraces();
+ mLatencyTracker.dumpStackTracesEnded();
+
+ mLatencyTracker.anrProcessingEnded();
+
+ mLatencyTracker.close();
+
+ verify(mLatencyTracker, times(0)).pushAtom();
+ }
+
+}
diff --git a/data/sounds/AudioTv.mk b/data/sounds/AudioTv.mk
index fd53aff..d288e0e 100644
--- a/data/sounds/AudioTv.mk
+++ b/data/sounds/AudioTv.mk
@@ -15,7 +15,6 @@
LOCAL_PATH := frameworks/base/data/sounds
PRODUCT_COPY_FILES += \
- $(LOCAL_PATH)/Alarm_Beep_01.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/alarms/Alarm_Beep_02.ogg \
$(LOCAL_PATH)/effects/ogg/Effect_Tick_48k.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/ui/Effect_Tick.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressDelete_120_48k.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/ui/KeypressDelete.ogg \
$(LOCAL_PATH)/effects/ogg/KeypressInvalid_120_48k.ogg:$(TARGET_COPY_OUT_PRODUCT)/media/audio/ui/KeypressInvalid.ogg \
diff --git a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
index 47de37d..688425a 100644
--- a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
+++ b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
@@ -26,6 +26,8 @@
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
import android.graphics.BlendMode;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -37,6 +39,8 @@
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Region;
+import android.graphics.Shader;
+import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.PathParser;
@@ -102,8 +106,7 @@
private static final float DEFAULT_VIEW_PORT_SCALE = 1f / (1 + 2 * EXTRA_INSET_PERCENTAGE);
/**
- * Unused path.
- * TODO: Remove once the layoutLib is updated
+ * Clip path defined in R.string.config_icon_mask.
*/
private static Path sMask;
@@ -111,10 +114,9 @@
* Scaled mask based on the view bounds.
*/
private final Path mMask;
- private final Path mMaskTransformed;
+ private final Path mMaskScaleOnly;
private final Matrix mMaskMatrix;
private final Region mTransparentRegion;
- private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
/**
* Indices used to access {@link #mLayerState.mChildDrawable} array for foreground and
@@ -129,10 +131,19 @@
*/
LayerState mLayerState;
+ private Shader mLayersShader;
+ private Bitmap mLayersBitmap;
+
private final Rect mTmpOutRect = new Rect();
private Rect mHotspotBounds;
private boolean mMutated;
+ private boolean mSuspendChildInvalidation;
+ private boolean mChildRequestedInvalidation;
+ private final Canvas mCanvas;
+ private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG |
+ Paint.FILTER_BITMAP_FLAG);
+
/**
* Constructor used for xml inflation.
*/
@@ -146,16 +157,19 @@
*/
AdaptiveIconDrawable(@Nullable LayerState state, @Nullable Resources res) {
mLayerState = createConstantState(state, res);
- // config_icon_mask from context bound resource may have been changed using
+ // config_icon_mask from context bound resource may have been chaged using
// OverlayManager. Read that one first.
Resources r = ActivityThread.currentActivityThread() == null
? Resources.getSystem()
: ActivityThread.currentActivityThread().getApplication().getResources();
- mMask = PathParser.createPathFromPathData(r.getString(R.string.config_icon_mask));
- mMaskTransformed = new Path();
+ // TODO: either make sMask update only when config_icon_mask changes OR
+ // get rid of it all-together in layoutlib
+ sMask = PathParser.createPathFromPathData(r.getString(R.string.config_icon_mask));
+ mMask = new Path(sMask);
+ mMaskScaleOnly = new Path(mMask);
mMaskMatrix = new Matrix();
+ mCanvas = new Canvas();
mTransparentRegion = new Region();
- mPaint.setColor(Color.BLACK);
}
private ChildDrawable createChildDrawable(Drawable drawable) {
@@ -266,7 +280,7 @@
* @return the mask path object used to clip the drawable
*/
public Path getIconMask() {
- return mMaskTransformed;
+ return mMask;
}
/**
@@ -308,47 +322,92 @@
if (bounds.isEmpty()) {
return;
}
- // Set the child layer bounds bigger than the view port size
- // by {@link #DEFAULT_VIEW_PORT_SCALE}
- float cX = bounds.exactCenterX();
- float cY = bounds.exactCenterY();
- float insetWidth = bounds.width() / (DEFAULT_VIEW_PORT_SCALE * 2);
- float insetHeight = bounds.height() / (DEFAULT_VIEW_PORT_SCALE * 2);
- final Rect outRect = mTmpOutRect;
- outRect.set(
- (int) (cX - insetWidth),
- (int) (cY - insetHeight),
- (int) (cX + insetWidth),
- (int) (cY + insetHeight));
+ updateLayerBounds(bounds);
+ }
+
+ private void updateLayerBounds(Rect bounds) {
+ if (bounds.isEmpty()) {
+ return;
+ }
+ try {
+ suspendChildInvalidation();
+ updateLayerBoundsInternal(bounds);
+ updateMaskBoundsInternal(bounds);
+ } finally {
+ resumeChildInvalidation();
+ }
+ }
+
+ /**
+ * Set the child layer bounds bigger than the view port size by {@link #DEFAULT_VIEW_PORT_SCALE}
+ */
+ private void updateLayerBoundsInternal(Rect bounds) {
+ int cX = bounds.width() / 2;
+ int cY = bounds.height() / 2;
for (int i = 0, count = mLayerState.N_CHILDREN; i < count; i++) {
final ChildDrawable r = mLayerState.mChildren[i];
- if (r.mDrawable != null) {
- r.mDrawable.setBounds(outRect);
+ final Drawable d = r.mDrawable;
+ if (d == null) {
+ continue;
}
+
+ int insetWidth = (int) (bounds.width() / (DEFAULT_VIEW_PORT_SCALE * 2));
+ int insetHeight = (int) (bounds.height() / (DEFAULT_VIEW_PORT_SCALE * 2));
+ final Rect outRect = mTmpOutRect;
+ outRect.set(cX - insetWidth, cY - insetHeight, cX + insetWidth, cY + insetHeight);
+
+ d.setBounds(outRect);
+ }
+ }
+
+ private void updateMaskBoundsInternal(Rect b) {
+ // reset everything that depends on the view bounds
+ mMaskMatrix.setScale(b.width() / MASK_SIZE, b.height() / MASK_SIZE);
+ sMask.transform(mMaskMatrix, mMaskScaleOnly);
+
+ mMaskMatrix.postTranslate(b.left, b.top);
+ sMask.transform(mMaskMatrix, mMask);
+
+ if (mLayersBitmap == null || mLayersBitmap.getWidth() != b.width()
+ || mLayersBitmap.getHeight() != b.height()) {
+ mLayersBitmap = Bitmap.createBitmap(b.width(), b.height(), Bitmap.Config.ARGB_8888);
}
- // Update the clipping mask
- mMaskMatrix.setScale(bounds.width() / MASK_SIZE, bounds.height() / MASK_SIZE);
- mMaskMatrix.postTranslate(bounds.left, bounds.top);
- mMask.transform(mMaskMatrix, mMaskTransformed);
-
- // Clear the transparent region, it is calculated lazily
+ mPaint.setShader(null);
mTransparentRegion.setEmpty();
+ mLayersShader = null;
}
@Override
public void draw(Canvas canvas) {
- int saveCount = canvas.save();
- canvas.clipPath(mMaskTransformed);
- canvas.drawPaint(mPaint);
- if (mLayerState.mChildren[BACKGROUND_ID].mDrawable != null) {
- mLayerState.mChildren[BACKGROUND_ID].mDrawable.draw(canvas);
+ if (mLayersBitmap == null) {
+ return;
}
- if (mLayerState.mChildren[FOREGROUND_ID].mDrawable != null) {
- mLayerState.mChildren[FOREGROUND_ID].mDrawable.draw(canvas);
+ if (mLayersShader == null) {
+ mCanvas.setBitmap(mLayersBitmap);
+ mCanvas.drawColor(Color.BLACK);
+ if (mLayerState.mChildren[BACKGROUND_ID].mDrawable != null) {
+ mLayerState.mChildren[BACKGROUND_ID].mDrawable.draw(mCanvas);
+ }
+ if (mLayerState.mChildren[FOREGROUND_ID].mDrawable != null) {
+ mLayerState.mChildren[FOREGROUND_ID].mDrawable.draw(mCanvas);
+ }
+ mLayersShader = new BitmapShader(mLayersBitmap, TileMode.CLAMP, TileMode.CLAMP);
+ mPaint.setShader(mLayersShader);
}
- canvas.restoreToCount(saveCount);
+ if (mMaskScaleOnly != null) {
+ Rect bounds = getBounds();
+ canvas.translate(bounds.left, bounds.top);
+ canvas.drawPath(mMaskScaleOnly, mPaint);
+ canvas.translate(-bounds.left, -bounds.top);
+ }
+ }
+
+ @Override
+ public void invalidateSelf() {
+ mLayersShader = null;
+ super.invalidateSelf();
}
@Override
@@ -541,9 +600,37 @@
return false;
}
+ /**
+ * Temporarily suspends child invalidation.
+ *
+ * @see #resumeChildInvalidation()
+ */
+ private void suspendChildInvalidation() {
+ mSuspendChildInvalidation = true;
+ }
+
+ /**
+ * Resumes child invalidation after suspension, immediately performing an
+ * invalidation if one was requested by a child during suspension.
+ *
+ * @see #suspendChildInvalidation()
+ */
+ private void resumeChildInvalidation() {
+ mSuspendChildInvalidation = false;
+
+ if (mChildRequestedInvalidation) {
+ mChildRequestedInvalidation = false;
+ invalidateSelf();
+ }
+ }
+
@Override
public void invalidateDrawable(@NonNull Drawable who) {
- invalidateSelf();
+ if (mSuspendChildInvalidation) {
+ mChildRequestedInvalidation = true;
+ } else {
+ invalidateSelf();
+ }
}
@Override
@@ -627,13 +714,6 @@
@Override
public void setAlpha(int alpha) {
mPaint.setAlpha(alpha);
- final ChildDrawable[] array = mLayerState.mChildren;
- for (int i = 0; i < mLayerState.N_CHILDREN; i++) {
- final Drawable dr = array[i].mDrawable;
- if (dr != null) {
- dr.setAlpha(alpha);
- }
- }
}
@Override
@@ -736,6 +816,10 @@
}
}
+ if (changed) {
+ updateLayerBounds(getBounds());
+ }
+
return changed;
}
@@ -751,6 +835,10 @@
}
}
+ if (changed) {
+ updateLayerBounds(getBounds());
+ }
+
return changed;
}
@@ -891,7 +979,6 @@
int mDensity;
// The density to use when inflating/looking up the children drawables. A value of 0 means
-
// use the system's density.
int mSrcDensityOverride = 0;
diff --git a/keystore/java/android/security/keystore/KeyProperties.java b/keystore/java/android/security/keystore/KeyProperties.java
index d9a7994..dbd918e 100644
--- a/keystore/java/android/security/keystore/KeyProperties.java
+++ b/keystore/java/android/security/keystore/KeyProperties.java
@@ -29,6 +29,8 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.security.spec.AlgorithmParameterSpec;
+import java.security.spec.MGF1ParameterSpec;
import java.util.Collection;
import java.util.Locale;
@@ -675,6 +677,26 @@
}
}
+ /**
+ * @hide
+ */
+ @NonNull public static @DigestEnum
+ AlgorithmParameterSpec fromKeymasterToMGF1ParameterSpec(int digest) {
+ switch (digest) {
+ default:
+ case KeymasterDefs.KM_DIGEST_SHA1:
+ return MGF1ParameterSpec.SHA1;
+ case KeymasterDefs.KM_DIGEST_SHA_2_224:
+ return MGF1ParameterSpec.SHA224;
+ case KeymasterDefs.KM_DIGEST_SHA_2_256:
+ return MGF1ParameterSpec.SHA256;
+ case KeymasterDefs.KM_DIGEST_SHA_2_384:
+ return MGF1ParameterSpec.SHA384;
+ case KeymasterDefs.KM_DIGEST_SHA_2_512:
+ return MGF1ParameterSpec.SHA512;
+ }
+ }
+
@NonNull
public static @DigestEnum String fromKeymasterToSignatureAlgorithmDigest(int digest) {
switch (digest) {
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreCipherSpiBase.java b/keystore/java/android/security/keystore2/AndroidKeyStoreCipherSpiBase.java
index e808c5c..7571e44 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreCipherSpiBase.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreCipherSpiBase.java
@@ -69,6 +69,7 @@
*/
abstract class AndroidKeyStoreCipherSpiBase extends CipherSpi implements KeyStoreCryptoOperation {
private static final String TAG = "AndroidKeyStoreCipherSpiBase";
+ public static final String DEFAULT_MGF1_DIGEST = "SHA-1";
// Fields below are populated by Cipher.init and KeyStore.begin and should be preserved after
// doFinal finishes.
@@ -133,24 +134,28 @@
if ("RSA/ECB/OAEPWithSHA-224AndMGF1Padding".equals(transform)) {
OAEPParameterSpec spec =
new OAEPParameterSpec("SHA-224", "MGF1",
- new MGF1ParameterSpec("SHA1"), PSource.PSpecified.DEFAULT);
+ new MGF1ParameterSpec(DEFAULT_MGF1_DIGEST),
+ PSource.PSpecified.DEFAULT);
mCipher.init(opmode, key, spec, random);
} else if ("RSA/ECB/OAEPWithSHA-256AndMGF1Padding".equals(transform)) {
OAEPParameterSpec spec =
new OAEPParameterSpec("SHA-256", "MGF1",
- new MGF1ParameterSpec("SHA1"), PSource.PSpecified.DEFAULT);
+ new MGF1ParameterSpec(DEFAULT_MGF1_DIGEST),
+ PSource.PSpecified.DEFAULT);
mCipher.init(opmode, key, spec, random);
} else if ("RSA/ECB/OAEPWithSHA-384AndMGF1Padding".equals(transform)) {
OAEPParameterSpec spec =
new OAEPParameterSpec("SHA-384", "MGF1",
- new MGF1ParameterSpec("SHA1"), PSource.PSpecified.DEFAULT);
+ new MGF1ParameterSpec(DEFAULT_MGF1_DIGEST),
+ PSource.PSpecified.DEFAULT);
mCipher.init(opmode, key, spec, random);
} else if ("RSA/ECB/OAEPWithSHA-512AndMGF1Padding".equals(transform)) {
OAEPParameterSpec spec =
new OAEPParameterSpec("SHA-512", "MGF1",
- new MGF1ParameterSpec("SHA1"), PSource.PSpecified.DEFAULT);
+ new MGF1ParameterSpec(DEFAULT_MGF1_DIGEST),
+ PSource.PSpecified.DEFAULT);
mCipher.init(opmode, key, spec, random);
} else {
mCipher.init(opmode, key, random);
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java
index cdc1085..acc0005 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi.java
@@ -16,6 +16,8 @@
package android.security.keystore2;
+import static android.security.keystore2.AndroidKeyStoreCipherSpiBase.DEFAULT_MGF1_DIGEST;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread;
@@ -908,6 +910,26 @@
params.add(KeyStore2ParameterUtils.makeEnum(
KeymasterDefs.KM_TAG_PADDING, padding
));
+ if (padding == KeymasterDefs.KM_PAD_RSA_OAEP) {
+ final boolean[] hasDefaultMgf1DigestBeenAdded = {false};
+ ArrayUtils.forEach(mKeymasterDigests, (digest) -> {
+ params.add(KeyStore2ParameterUtils.makeEnum(
+ KeymasterDefs.KM_TAG_RSA_OAEP_MGF_DIGEST, digest
+ ));
+ hasDefaultMgf1DigestBeenAdded[0] |=
+ digest.equals(KeyProperties.Digest.toKeymaster(DEFAULT_MGF1_DIGEST));
+ });
+ /* Because of default MGF1 digest is SHA-1. It has to be added in Key
+ * characteristics. Otherwise, crypto operations will fail with Incompatible
+ * MGF1 digest.
+ */
+ if (!hasDefaultMgf1DigestBeenAdded[0]) {
+ params.add(KeyStore2ParameterUtils.makeEnum(
+ KeymasterDefs.KM_TAG_RSA_OAEP_MGF_DIGEST,
+ KeyProperties.Digest.toKeymaster(DEFAULT_MGF1_DIGEST)
+ ));
+ }
+ }
});
ArrayUtils.forEach(mKeymasterSignaturePaddings, (padding) -> {
params.add(KeyStore2ParameterUtils.makeEnum(
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreRSACipherSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreRSACipherSpi.java
index 5848247..e9b66aa 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreRSACipherSpi.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreRSACipherSpi.java
@@ -161,10 +161,11 @@
*/
abstract static class OAEPWithMGF1Padding extends AndroidKeyStoreRSACipherSpi {
- private static final String MGF_ALGORITGM_MGF1 = "MGF1";
+ private static final String MGF_ALGORITHM_MGF1 = "MGF1";
private int mKeymasterDigest = -1;
private int mDigestOutputSizeBytes;
+ private int mKeymasterMgf1Digest = KeymasterDefs.KM_DIGEST_SHA1; // Default MGF1 digest
OAEPWithMGF1Padding(int keymasterDigest) {
super(KeymasterDefs.KM_PAD_RSA_OAEP);
@@ -189,10 +190,10 @@
+ ". Only OAEPParameterSpec supported");
}
OAEPParameterSpec spec = (OAEPParameterSpec) params;
- if (!MGF_ALGORITGM_MGF1.equalsIgnoreCase(spec.getMGFAlgorithm())) {
+ if (!MGF_ALGORITHM_MGF1.equalsIgnoreCase(spec.getMGFAlgorithm())) {
throw new InvalidAlgorithmParameterException(
"Unsupported MGF: " + spec.getMGFAlgorithm()
- + ". Only " + MGF_ALGORITGM_MGF1 + " supported");
+ + ". Only " + MGF_ALGORITHM_MGF1 + " supported");
}
String jcaDigest = spec.getDigestAlgorithm();
int keymasterDigest;
@@ -225,11 +226,6 @@
}
MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec) mgfParams;
String mgf1JcaDigest = mgfSpec.getDigestAlgorithm();
- if (!KeyProperties.DIGEST_SHA1.equalsIgnoreCase(mgf1JcaDigest)) {
- throw new InvalidAlgorithmParameterException(
- "Unsupported MGF1 digest: " + mgf1JcaDigest
- + ". Only " + KeyProperties.DIGEST_SHA1 + " supported");
- }
PSource pSource = spec.getPSource();
if (!(pSource instanceof PSource.PSpecified)) {
throw new InvalidAlgorithmParameterException(
@@ -244,6 +240,7 @@
+ ". Only pSpecifiedEmpty (PSource.PSpecified.DEFAULT) supported");
}
mKeymasterDigest = keymasterDigest;
+ mKeymasterMgf1Digest = KeyProperties.Digest.toKeymaster(mgf1JcaDigest);
mDigestOutputSizeBytes =
(KeymasterUtils.getDigestOutputSizeBits(keymasterDigest) + 7) / 8;
}
@@ -273,10 +270,10 @@
protected final AlgorithmParameters engineGetParameters() {
OAEPParameterSpec spec =
new OAEPParameterSpec(
- KeyProperties.Digest.fromKeymaster(mKeymasterDigest),
- MGF_ALGORITGM_MGF1,
- MGF1ParameterSpec.SHA1,
- PSource.PSpecified.DEFAULT);
+ KeyProperties.Digest.fromKeymaster(mKeymasterDigest),
+ MGF_ALGORITHM_MGF1,
+ KeyProperties.Digest.fromKeymasterToMGF1ParameterSpec(mKeymasterMgf1Digest),
+ PSource.PSpecified.DEFAULT);
try {
AlgorithmParameters params = AlgorithmParameters.getInstance("OAEP");
params.init(spec);
@@ -298,6 +295,9 @@
parameters.add(KeyStore2ParameterUtils.makeEnum(
KeymasterDefs.KM_TAG_DIGEST, mKeymasterDigest
));
+ parameters.add(KeyStore2ParameterUtils.makeEnum(
+ KeymasterDefs.KM_TAG_RSA_OAEP_MGF_DIGEST, mKeymasterMgf1Digest
+ ));
}
@Override
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
index dfda356..94bf122 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
@@ -16,6 +16,8 @@
package android.security.keystore2;
+import static android.security.keystore2.AndroidKeyStoreCipherSpiBase.DEFAULT_MGF1_DIGEST;
+
import android.annotation.NonNull;
import android.hardware.biometrics.BiometricManager;
import android.hardware.security.keymint.HardwareAuthenticatorType;
@@ -511,6 +513,28 @@
KeymasterDefs.KM_TAG_PADDING,
padding
));
+ if (padding == KeymasterDefs.KM_PAD_RSA_OAEP) {
+ if (spec.isDigestsSpecified()) {
+ boolean hasDefaultMgf1DigestBeenAdded = false;
+ for (String digest : spec.getDigests()) {
+ importArgs.add(KeyStore2ParameterUtils.makeEnum(
+ KeymasterDefs.KM_TAG_RSA_OAEP_MGF_DIGEST,
+ KeyProperties.Digest.toKeymaster(digest)
+ ));
+ hasDefaultMgf1DigestBeenAdded |= digest.equals(DEFAULT_MGF1_DIGEST);
+ }
+ /* Because of default MGF1 digest is SHA-1. It has to be added in Key
+ * characteristics. Otherwise, crypto operations will fail with Incompatible
+ * MGF1 digest.
+ */
+ if (!hasDefaultMgf1DigestBeenAdded) {
+ importArgs.add(KeyStore2ParameterUtils.makeEnum(
+ KeymasterDefs.KM_TAG_RSA_OAEP_MGF_DIGEST,
+ KeyProperties.Digest.toKeymaster(DEFAULT_MGF1_DIGEST)
+ ));
+ }
+ }
+ }
}
for (String padding : spec.getSignaturePaddings()) {
importArgs.add(KeyStore2ParameterUtils.makeEnum(
diff --git a/keystore/java/android/security/keystore2/KeyStore2ParameterUtils.java b/keystore/java/android/security/keystore2/KeyStore2ParameterUtils.java
index dcdd7de..54955c6 100644
--- a/keystore/java/android/security/keystore2/KeyStore2ParameterUtils.java
+++ b/keystore/java/android/security/keystore2/KeyStore2ParameterUtils.java
@@ -78,6 +78,7 @@
kp.value = KeyParameterValue.blockMode(v);
break;
case Tag.DIGEST:
+ case Tag.RSA_OAEP_MGF_DIGEST:
kp.value = KeyParameterValue.digest(v);
break;
case Tag.EC_CURVE:
diff --git a/libs/WindowManager/Shell/res/values-ro/strings_tv.xml b/libs/WindowManager/Shell/res/values-ro/strings_tv.xml
index 56dadb2..36df286 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings_tv.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings_tv.xml
@@ -19,16 +19,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_tv_pip" msgid="2576686079160402435">"Picture-in-picture"</string>
<string name="pip_notification_unknown_title" msgid="2729870284350772311">"(Program fără titlu)"</string>
- <string name="pip_close" msgid="2955969519031223530">"Închideți"</string>
+ <string name="pip_close" msgid="2955969519031223530">"Închide"</string>
<string name="pip_fullscreen" msgid="7278047353591302554">"Ecran complet"</string>
- <string name="pip_move" msgid="158770205886688553">"Mutați"</string>
- <string name="pip_expand" msgid="1051966011679297308">"Extindeți"</string>
- <string name="pip_collapse" msgid="3903295106641385962">"Restrângeți"</string>
- <string name="pip_edu_text" msgid="3672999496647508701">" Apăsați de două ori "<annotation icon="home_icon">"butonul ecran de pornire"</annotation>" pentru comenzi"</string>
+ <string name="pip_move" msgid="158770205886688553">"Mută"</string>
+ <string name="pip_expand" msgid="1051966011679297308">"Extinde"</string>
+ <string name="pip_collapse" msgid="3903295106641385962">"Restrânge"</string>
+ <string name="pip_edu_text" msgid="3672999496647508701">" Apasă de două ori "<annotation icon="home_icon">"butonul ecran de pornire"</annotation>" pentru comenzi"</string>
<string name="a11y_pip_menu_entered" msgid="5106343214776801614">"Meniu picture-in-picture."</string>
- <string name="a11y_action_pip_move_left" msgid="6612980937817141583">"Mutați spre stânga"</string>
- <string name="a11y_action_pip_move_right" msgid="1119409122645529936">"Mutați spre dreapta"</string>
- <string name="a11y_action_pip_move_up" msgid="98502616918621959">"Mutați în sus"</string>
- <string name="a11y_action_pip_move_down" msgid="3858802832725159740">"Mutați în jos"</string>
+ <string name="a11y_action_pip_move_left" msgid="6612980937817141583">"Mută spre stânga"</string>
+ <string name="a11y_action_pip_move_right" msgid="1119409122645529936">"Mută spre dreapta"</string>
+ <string name="a11y_action_pip_move_up" msgid="98502616918621959">"Mută în sus"</string>
+ <string name="a11y_action_pip_move_down" msgid="3858802832725159740">"Mută în jos"</string>
<string name="a11y_action_pip_move_done" msgid="1486845365134416210">"Gata"</string>
</resources>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
index ac95d4b..f58719b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
@@ -191,15 +191,19 @@
*
* @param change the change of this task transition that needs to have the task layer as the
* leash
- * @return {@code true} if it adopts the window decoration; {@code false} otherwise
+ * @return {@code true} if it creates the window decoration; {@code false} otherwise
*/
- void createWindowDecoration(
+ boolean createWindowDecoration(
TransitionInfo.Change change,
SurfaceControl.Transaction startT,
SurfaceControl.Transaction finishT) {
final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
+ if (state.mWindowDecoration != null) {
+ return false;
+ }
state.mWindowDecoration = mWindowDecorationViewModel.createWindowDecoration(
state.mTaskInfo, state.mLeash, startT, finishT);
+ return true;
}
/**
@@ -222,6 +226,9 @@
windowDecor =
mWindowDecorOfVanishedTasks.removeReturnOld(taskInfo.taskId);
}
+ if (windowDecor == null) {
+ return null;
+ }
mWindowDecorationViewModel.setupWindowDecorationForTransition(
taskInfo, startT, finishT, windowDecor);
return windowDecor;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java
index a780ec1..17d6067 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java
@@ -26,6 +26,7 @@
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
+import android.window.WindowContainerToken;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -80,6 +81,7 @@
@NonNull SurfaceControl.Transaction startT,
@NonNull SurfaceControl.Transaction finishT) {
final ArrayList<AutoCloseable> windowDecors = new ArrayList<>();
+ final ArrayList<WindowContainerToken> taskParents = new ArrayList<>();
for (TransitionInfo.Change change : info.getChanges()) {
if ((change.getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0) {
continue;
@@ -89,9 +91,22 @@
if (taskInfo == null || taskInfo.taskId == -1) {
continue;
}
+ // Filter out non-leaf tasks. Freeform/fullscreen don't nest tasks, but split-screen
+ // does, so this prevents adding duplicate captions in that scenario.
+ if (change.getParent() != null
+ && info.getChange(change.getParent()).getTaskInfo() != null) {
+ // This logic relies on 2 assumptions: 1 is that child tasks will be visited before
+ // parents (due to how z-order works). 2 is that no non-tasks are interleaved
+ // between tasks (hierarchically).
+ taskParents.add(change.getContainer());
+ }
+ if (taskParents.contains(change.getContainer())) {
+ continue;
+ }
switch (change.getMode()) {
case WindowManager.TRANSIT_OPEN:
+ case WindowManager.TRANSIT_TO_FRONT:
onOpenTransitionReady(change, startT, finishT);
break;
case WindowManager.TRANSIT_CLOSE: {
@@ -154,20 +169,28 @@
boolean adopted = false;
final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
- if (type == Transitions.TRANSIT_MAXIMIZE
- && taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
+ if (taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
windowDecor = mFreeformTaskListener.giveWindowDecoration(
change.getTaskInfo(), startT, finishT);
- adopted = mFullscreenTaskListener.adoptWindowDecoration(
- change, startT, finishT, windowDecor);
+ if (windowDecor != null) {
+ adopted = mFullscreenTaskListener.adoptWindowDecoration(
+ change, startT, finishT, windowDecor);
+ } else {
+ // will return false if it already has the window decor.
+ adopted = mFullscreenTaskListener.createWindowDecoration(change, startT, finishT);
+ }
}
- if (type == Transitions.TRANSIT_RESTORE_FROM_MAXIMIZE
- && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {
+ if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {
windowDecor = mFullscreenTaskListener.giveWindowDecoration(
change.getTaskInfo(), startT, finishT);
- adopted = mFreeformTaskListener.adoptWindowDecoration(
- change, startT, finishT, windowDecor);
+ if (windowDecor != null) {
+ adopted = mFreeformTaskListener.adoptWindowDecoration(
+ change, startT, finishT, windowDecor);
+ } else {
+ // will return false if it already has the window decor.
+ adopted = mFreeformTaskListener.createWindowDecoration(change, startT, finishT);
+ }
}
if (!adopted) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
index 7d1259a..76e296b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
@@ -173,16 +173,23 @@
*
* @param change the change of this task transition that needs to have the task layer as the
* leash
+ * @return {@code true} if a decoration was actually created.
*/
- public void createWindowDecoration(TransitionInfo.Change change,
+ public boolean createWindowDecoration(TransitionInfo.Change change,
SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
- if (!mWindowDecorViewModelOptional.isPresent()) return;
+ if (!mWindowDecorViewModelOptional.isPresent()) return false;
+ if (state.mWindowDecoration != null) {
+ // Already has a decoration.
+ return false;
+ }
T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration(
state.mTaskInfo, state.mLeash, startT, finishT);
if (newWindowDecor != null) {
state.mWindowDecoration = newWindowDecor;
+ return true;
}
+ return false;
}
/**
diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp
index 779c4b7..eb8d26a 100644
--- a/libs/androidfw/Android.bp
+++ b/libs/androidfw/Android.bp
@@ -71,6 +71,7 @@
"misc.cpp",
"ObbFile.cpp",
"PosixUtils.cpp",
+ "ResourceTimer.cpp",
"ResourceTypes.cpp",
"ResourceUtils.cpp",
"StreamingZipInflater.cpp",
@@ -173,6 +174,7 @@
"tests/Idmap_test.cpp",
"tests/LoadedArsc_test.cpp",
"tests/Locale_test.cpp",
+ "tests/ResourceTimer_test.cpp",
"tests/ResourceUtils_test.cpp",
"tests/ResTable_test.cpp",
"tests/Split_test.cpp",
diff --git a/libs/androidfw/ResourceTimer.cpp b/libs/androidfw/ResourceTimer.cpp
new file mode 100644
index 0000000..44128d9
--- /dev/null
+++ b/libs/androidfw/ResourceTimer.cpp
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#include <unistd.h>
+#include <string.h>
+
+#include <map>
+#include <atomic>
+
+#include <utils/Log.h>
+#include <androidfw/ResourceTimer.h>
+
+// The following block allows compilation on windows, which does not have getuid().
+#ifdef _WIN32
+#ifdef ERROR
+#undef ERROR
+#endif
+#define getuid() (getUidWindows_)
+#endif
+
+namespace android {
+
+namespace {
+
+#ifdef _WIN32
+// A temporary to confuse lint into thinking that getuid() on windows might return something other
+// than zero.
+int getUidWindows_ = 0;
+#endif
+
+// The number of nanoseconds in a microsecond.
+static const unsigned int US = 1000;
+// The number of nanoseconds in a second.
+static const unsigned int S = 1000 * 1000 * 1000;
+
+// Return the difference between two timespec values. The difference is in nanoseconds. If the
+// return value would exceed 2s (2^31 nanoseconds) then UINT_MAX is returned.
+unsigned int diffInNs(timespec const &a, timespec const &b) {
+ timespec r = { 0, 0 };
+ r.tv_nsec = a.tv_nsec - b.tv_nsec;
+ if (r.tv_nsec < 0) {
+ r.tv_sec = -1;
+ r.tv_nsec += S;
+ }
+ r.tv_sec = r.tv_sec + (a.tv_sec - b.tv_sec);
+ if (r.tv_sec > 2) return UINT_MAX;
+ unsigned int result = (r.tv_sec * S) + r.tv_nsec;
+ if (result > 2 * S) return UINT_MAX;
+ return result;
+}
+
+}
+
+ResourceTimer::ResourceTimer(Counter api)
+ : active_(enabled_.load()),
+ api_(api) {
+ if (active_) {
+ clock_gettime(CLOCK_MONOTONIC, &start_);
+ }
+}
+
+ResourceTimer::~ResourceTimer() {
+ record();
+}
+
+void ResourceTimer::enable() {
+ if (!enabled_.load()) counter_ = new GuardedTimer[ResourceTimer::counterSize];
+ enabled_.store(true);
+}
+
+void ResourceTimer::cancel() {
+ active_ = false;
+}
+
+void ResourceTimer::record() {
+ if (!active_) return;
+
+ struct timespec end;
+ clock_gettime(CLOCK_MONOTONIC, &end);
+ // Get the difference in microseconds.
+ const unsigned int ticks = diffInNs(end, start_);
+ ScopedTimer t(counter_[toIndex(api_)]);
+ t->record(ticks);
+ active_ = false;
+}
+
+bool ResourceTimer::copy(int counter, Timer &dst, bool reset) {
+ ScopedTimer t(counter_[counter]);
+ if (t->count == 0) {
+ dst.reset();
+ if (reset) t->reset();
+ return false;
+ }
+ Timer::copy(dst, *t, reset);
+ return true;
+}
+
+void ResourceTimer::reset() {
+ for (int i = 0; i < counterSize; i++) {
+ ScopedTimer t(counter_[i]);
+ t->reset();
+ }
+}
+
+ResourceTimer::Timer::Timer() {
+ // Ensure newly-created objects are zeroed.
+ memset(buckets, 0, sizeof(buckets));
+ reset();
+}
+
+ResourceTimer::Timer::~Timer() {
+ for (int d = 0; d < MaxDimension; d++) {
+ delete[] buckets[d];
+ }
+}
+
+void ResourceTimer::Timer::freeBuckets() {
+ for (int d = 0; d < MaxDimension; d++) {
+ delete[] buckets[d];
+ buckets[d] = 0;
+ }
+}
+
+void ResourceTimer::Timer::reset() {
+ count = total = mintime = maxtime = 0;
+ memset(largest, 0, sizeof(largest));
+ memset(&pvalues, 0, sizeof(pvalues));
+ // Zero the histogram, keeping any allocated dimensions.
+ for (int d = 0; d < MaxDimension; d++) {
+ if (buckets[d] != 0) memset(buckets[d], 0, sizeof(int) * MaxBuckets);
+ }
+}
+
+void ResourceTimer::Timer::copy(Timer &dst, Timer &src, bool reset) {
+ dst.freeBuckets();
+ dst = src;
+ // Clean up the histograms.
+ if (reset) {
+ // Do NOT free the src buckets because they being used by dst.
+ memset(src.buckets, 0, sizeof(src.buckets));
+ src.reset();
+ } else {
+ for (int d = 0; d < MaxDimension; d++) {
+ if (src.buckets[d] != nullptr) {
+ dst.buckets[d] = new int[MaxBuckets];
+ memcpy(dst.buckets[d], src.buckets[d], sizeof(int) * MaxBuckets);
+ }
+ }
+ }
+}
+
+void ResourceTimer::Timer::record(int ticks) {
+ // Record that the event happened.
+ count++;
+
+ total += ticks;
+ if (mintime == 0 || ticks < mintime) mintime = ticks;
+ if (ticks > maxtime) maxtime = ticks;
+
+ // Do not add oversized events to the histogram.
+ if (ticks != UINT_MAX) {
+ for (int d = 0; d < MaxDimension; d++) {
+ if (ticks < range[d]) {
+ if (buckets[d] == 0) {
+ buckets[d] = new int[MaxBuckets];
+ memset(buckets[d], 0, sizeof(int) * MaxBuckets);
+ }
+ if (ticks < width[d]) {
+ // Special case: never write to bucket 0 because it complicates the percentile logic.
+ // However, this is always the smallest possible value to it is very unlikely to ever
+ // affect any of the percentile results.
+ buckets[d][1]++;
+ } else {
+ buckets[d][ticks / width[d]]++;
+ }
+ break;
+ }
+ }
+ }
+
+ // The list of largest times is sorted with the biggest value at index 0 and the smallest at
+ // index MaxLargest-1. The incoming tick count should be added to the array only if it is
+ // larger than the current value at MaxLargest-1.
+ if (ticks > largest[Timer::MaxLargest-1]) {
+ for (size_t i = 0; i < Timer::MaxLargest; i++) {
+ if (ticks > largest[i]) {
+ if (i < Timer::MaxLargest-1) {
+ for (size_t j = Timer::MaxLargest - 1; j > i; j--) {
+ largest[j] = largest[j-1];
+ }
+ }
+ largest[i] = ticks;
+ break;
+ }
+ }
+ }
+}
+
+void ResourceTimer::Timer::Percentile::compute(
+ int cumulative, int current, int count, int width, int time) {
+ nominal = time;
+ nominal_actual = (cumulative * 100) / count;
+ floor = nominal - width;
+ floor_actual = ((cumulative - current) * 100) / count;
+}
+
+void ResourceTimer::Timer::compute() {
+ memset(&pvalues, 0, sizeof(pvalues));
+
+ float l50 = count / 2.0;
+ float l90 = (count * 9.0) / 10.0;
+ float l95 = (count * 95.0) / 100.0;
+ float l99 = (count * 99.0) / 100.0;
+
+ int sum = 0;
+ for (int d = 0; d < MaxDimension; d++) {
+ if (buckets[d] == 0) continue;
+ for (int j = 0; j < MaxBuckets && sum < count; j++) {
+ // Empty buckets don't contribute to the answers. Skip them.
+ if (buckets[d][j] == 0) continue;
+ sum += buckets[d][j];
+ // A word on indexing. j is never zero in the following lines. buckets[0][0] corresponds
+ // to a delay of 0us, which cannot happen. buckets[n][0], for n > 0 overlaps a value in
+ // buckets[n-1], and the code would have stopped there.
+ if (sum >= l50 && pvalues.p50.nominal == 0) {
+ pvalues.p50.compute(sum, buckets[d][j], count, width[d], j * width[d]);
+ }
+ if (sum >= l90 && pvalues.p90.nominal == 0) {
+ pvalues.p90.compute(sum, buckets[d][j], count, width[d], j * width[d]);
+ }
+ if (sum >= l95 && pvalues.p95.nominal == 0) {
+ pvalues.p95.compute(sum, buckets[d][j], count, width[d], j * width[d]);
+ }
+ if (sum >= l99 && pvalues.p99.nominal == 0) {
+ pvalues.p99.compute(sum, buckets[d][j], count, width[d], j * width[d]);
+ }
+ }
+ }
+}
+
+char const *ResourceTimer::toString(ResourceTimer::Counter counter) {
+ switch (counter) {
+ case Counter::GetResourceValue:
+ return "GetResourceValue";
+ case Counter::RetrieveAttributes:
+ return "RetrieveAttributes";
+ };
+ return "Unknown";
+}
+
+std::atomic<bool> ResourceTimer::enabled_(false);
+std::atomic<ResourceTimer::GuardedTimer *> ResourceTimer::counter_(nullptr);
+
+const int ResourceTimer::Timer::range[] = { 100 * US, 1000 * US, 10*1000 * US, 100*1000 * US };
+const int ResourceTimer::Timer::width[] = { 1 * US, 10 * US, 100 * US, 1000 * US };
+
+
+} // namespace android
diff --git a/libs/androidfw/include/androidfw/ResourceTimer.h b/libs/androidfw/include/androidfw/ResourceTimer.h
new file mode 100644
index 0000000..7461351
--- /dev/null
+++ b/libs/androidfw/include/androidfw/ResourceTimer.h
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifndef ANDROIDFW_RESOURCETIMER_H_
+#define ANDROIDFW_RESOURCETIMER_H_
+
+#include <time.h>
+#include <atomic>
+#include <vector>
+
+#include <utils/Mutex.h>
+#include <android-base/macros.h>
+#include <androidfw/Util.h>
+
+namespace android {
+
+// ResourceTimer captures the duration of short functions. Durations are accumulated in registers
+// and statistics are pulled back to the Java layer as needed.
+// To monitor an API, first add it to the Counter enumeration. Then, inside the API, create an
+// instance of ResourceTimer with the appropriate enumeral. The corresponding counter will be
+// updated when the ResourceTimer destructor is called, normally at the end of the enclosing block.
+class ResourceTimer {
+ public:
+ enum class Counter {
+ GetResourceValue,
+ RetrieveAttributes,
+
+ LastCounter = RetrieveAttributes,
+ };
+ static const int counterSize = static_cast<int>(Counter::LastCounter) + 1;
+ static char const *toString(Counter);
+
+ // Start a timer for the specified counter.
+ ResourceTimer(Counter);
+ // The block is exiting. If the timer is active, record it.
+ ~ResourceTimer();
+ // This records the elapsed time and disables further recording. Use this if the containing
+ // block includes extra processing that should not be included in the timer. The method is
+ // destructive in that the timer is no longer valid and further calls to record() will be
+ // ignored.
+ void record();
+ // This cancels a timer. Elapsed time will neither be computed nor recorded.
+ void cancel();
+
+ // A single timer contains the count of events and the cumulative time spent handling the
+ // events. It also includes the smallest value seen and 10 largest values seen. Finally, it
+ // includes a histogram of values that approximates a semi-log.
+
+ // The timer can compute percentiles of recorded events. For example, the p50 value is a time
+ // such that 50% of the readings are below the value and 50% are above the value. The
+ // granularity in the readings means that a percentile cannot always be computed. In this case,
+ // the percentile is reported as zero. (The simplest example is when there is a single
+ // reading.) Even if the value can be computed, it will not be exact. Therefore, a percentile
+ // is actually reported as two values: the lowest time at which it might be valid and the
+ // highest time at which it might be valid.
+ struct Timer {
+ static const size_t MaxLargest = 5;
+
+ // The construct zeros all the fields. The destructor releases memory allocated to the
+ // buckets.
+ Timer();
+ ~Timer();
+
+ // The following summary values are set to zero on a reset. All times are in ns.
+
+ // The total number of events recorded.
+ int count;
+ // The total duration of events.
+ int64_t total;
+ // The smallest event duration seen. This is guaranteed to be non-zero if count is greater
+ // than 0.
+ int mintime;
+ // The largest event duration seen.
+ int maxtime;
+
+ // The largest values seen. Element 0 is the largest value seen (and is the same as maxtime,
+ // above). Element 1 is the next largest, and so on. If count is less than MaxLargest,
+ // unused elements will be zero.
+ int largest[MaxLargest];
+
+ // The p50 value is a time such that 50% of the readings are below that time and 50% of the
+ // readings.
+
+ // A single percentile is defined by the lowest value supported by the readings and the
+ // highest value supported by the readings.
+ struct Percentile {
+ // The nominal time (in ns) of the percentile. The true percentile is guaranteed to be less
+ // than or equal to this time.
+ int nominal;
+ // The actual percentile of the nominal time.
+ int nominal_actual;
+ // The time of the next lower bin. The true percentile is guaranteed to be greater than
+ // this time.
+ int floor;
+ // The actual percentile of the floor time.
+ int floor_actual;
+
+ // Fill in a percentile given the cumulative to the bin, the count in the current bin, the
+ // total count, the width of the bin, and the time of the bin.
+ void compute(int cumulative, int current, int count, int width, int time);
+ };
+
+ // The structure that holds the percentiles.
+ struct {
+ Percentile p50;
+ Percentile p90;
+ Percentile p95;
+ Percentile p99;
+ } pvalues;
+
+ // Set all counters to zero.
+ void reset();
+ // Record an event. The input time is in ns.
+ void record(int);
+ // Compute the percentiles. Percentiles are computed on demand, as the computation is too
+ // expensive to be done inline.
+ void compute();
+
+ // Copy one timer to another. If reset is true then the src is reset immediately after the
+ // copy. The reset flag is exploited to make the copy faster. Any data in dst is lost.
+ static void copy(Timer &dst, Timer &src, bool reset);
+
+ private:
+ // Free any buckets.
+ void freeBuckets();
+
+ // Readings are placed in bins, which are orgzanized into decades. The decade 0 covers
+ // [0,100) in steps of 1us. Decade 1 covers [0,1000) in steps of 10us. Decade 2 covers
+ // [0,10000) in steps of 100us. And so on.
+
+ // An event is placed in the first bin that can hold it. This means that events in the range
+ // of [0,100) are placed in the first decade, events in the range of [0,1000) are placed in
+ // the second decade, and so on. This also means that the first 10% of the bins are unused
+ // in each decade after the first.
+
+ // The design provides at least two significant digits across the range of [0,10000).
+
+ static const size_t MaxDimension = 4;
+ static const size_t MaxBuckets = 100;
+
+ // The range of each dimension. The lower value is always zero.
+ static const int range[MaxDimension];
+ // The width of each bin, by dimension
+ static const int width[MaxDimension];
+
+ // A histogram of the values seen. Centuries are allocated as needed, to minimize the memory
+ // impact.
+ int *buckets[MaxDimension];
+ };
+
+ // Fetch one Timer. The function has a short-circuit behavior: if the count is zero then
+ // destination count is set to zero and the function returns false. Otherwise, the destination
+ // is a copy of the source and the function returns true. This behavior lowers the cost of
+ // handling unused timers.
+ static bool copy(int src, Timer &dst, bool reset);
+
+ // Enable the timers. Timers are initially disabled. Enabling timers allocates memory for the
+ // counters. Timers cannot be disabled.
+ static void enable();
+
+ private:
+ // An internal reset method. This does not take a lock.
+ static void reset();
+
+ // Helper method to convert a counter into an enum. Presumably, this will be inlined into zero
+ // actual cpu instructions.
+ static inline std::vector<unsigned int>::size_type toIndex(Counter c) {
+ return static_cast<std::vector<unsigned int>::size_type>(c);
+ }
+
+ // Every counter has an associated lock. The lock has been factored into a separate class to
+ // keep the Timer class a POD.
+ struct GuardedTimer {
+ Mutex lock_;
+ Timer timer_;
+ };
+
+ // Scoped timer
+ struct ScopedTimer {
+ AutoMutex _l;
+ Timer &t;
+ ScopedTimer(GuardedTimer &g) :
+ _l(g.lock_), t(g.timer_) {
+ }
+ Timer *operator->() {
+ return &t;
+ }
+ Timer& operator*() {
+ return t;
+ }
+ };
+
+ // An individual timer is active (or not), is tracking a specific API, and has a start time.
+ // The api and the start time are undefined if the timer is not active.
+ bool active_;
+ Counter api_;
+ struct timespec start_;
+
+ // The global enable flag. This is initially false and may be set true by the java runtime.
+ static std::atomic<bool> enabled_;
+
+ // The global timers. The memory for the timers is not allocated until the timers are enabled.
+ static std::atomic<GuardedTimer *> counter_;
+};
+
+} // namespace android
+
+#endif /* ANDROIDFW_RESOURCETIMER_H_ */
diff --git a/libs/androidfw/tests/ResourceTimer_test.cpp b/libs/androidfw/tests/ResourceTimer_test.cpp
new file mode 100644
index 0000000..4a1e973
--- /dev/null
+++ b/libs/androidfw/tests/ResourceTimer_test.cpp
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+
+#include <android-base/file.h>
+#include <android-base/test_utils.h>
+#include <androidfw/Util.h>
+
+#include "TestHelpers.h"
+
+#include <androidfw/ResourceTimer.h>
+
+namespace android {
+
+namespace {
+
+// Create a reading in us. This is a convenience function to avoid multiplying by 1000
+// everywhere.
+unsigned int US(int us) {
+ return us * 1000;
+}
+
+}
+
+TEST(ResourceTimerTest, TimerBasic) {
+ ResourceTimer::Timer timer;
+ ASSERT_THAT(timer.count, 0);
+ ASSERT_THAT(timer.total, 0);
+
+ for (int i = 1; i <= 100; i++) {
+ timer.record(US(i));
+ }
+ ASSERT_THAT(timer.count, 100);
+ ASSERT_THAT(timer.total, US((101 * 100)/2));
+ ASSERT_THAT(timer.mintime, US(1));
+ ASSERT_THAT(timer.maxtime, US(100));
+ ASSERT_THAT(timer.pvalues.p50.floor, 0);
+ ASSERT_THAT(timer.pvalues.p50.nominal, 0);
+ ASSERT_THAT(timer.largest[0], US(100));
+ ASSERT_THAT(timer.largest[1], US(99));
+ ASSERT_THAT(timer.largest[2], US(98));
+ ASSERT_THAT(timer.largest[3], US(97));
+ ASSERT_THAT(timer.largest[4], US(96));
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(49));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(50));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(89));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(90));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(94));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(95));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(98));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(99));
+
+ // Test reset functionality. All values should be zero after the reset. Computing pvalues
+ // after the result should also yield zeros.
+ timer.reset();
+ ASSERT_THAT(timer.count, 0);
+ ASSERT_THAT(timer.total, 0);
+ ASSERT_THAT(timer.mintime, US(0));
+ ASSERT_THAT(timer.maxtime, US(0));
+ ASSERT_THAT(timer.pvalues.p50.floor, US(0));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(0));
+ ASSERT_THAT(timer.largest[0], US(0));
+ ASSERT_THAT(timer.largest[1], US(0));
+ ASSERT_THAT(timer.largest[2], US(0));
+ ASSERT_THAT(timer.largest[3], US(0));
+ ASSERT_THAT(timer.largest[4], US(0));
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(0));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(0));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(0));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(0));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(0));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(0));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(0));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(0));
+
+ // Test again, adding elements in reverse.
+ for (int i = 100; i >= 1; i--) {
+ timer.record(US(i));
+ }
+ ASSERT_THAT(timer.count, 100);
+ ASSERT_THAT(timer.total, US((101 * 100)/2));
+ ASSERT_THAT(timer.mintime, US(1));
+ ASSERT_THAT(timer.maxtime, US(100));
+ ASSERT_THAT(timer.pvalues.p50.floor, 0);
+ ASSERT_THAT(timer.pvalues.p50.nominal, 0);
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(49));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(50));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(89));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(90));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(94));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(95));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(98));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(99));
+ ASSERT_THAT(timer.largest[0], US(100));
+ ASSERT_THAT(timer.largest[1], US(99));
+ ASSERT_THAT(timer.largest[2], US(98));
+ ASSERT_THAT(timer.largest[3], US(97));
+ ASSERT_THAT(timer.largest[4], US(96));
+}
+
+TEST(ResourceTimerTest, TimerLimit) {
+ ResourceTimer::Timer timer;
+
+ // Event truncation means that a time of 1050us will be stored in the 1000us
+ // bucket. Since there is a single event, all p-values lie in the same range.
+ timer.record(US(1050));
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(900));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(1000));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(900));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(1000));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(900));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(1000));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(900));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(1000));
+}
+
+TEST(ResourceTimerTest, TimerCopy) {
+ ResourceTimer::Timer source;
+ for (int i = 1; i <= 100; i++) {
+ source.record(US(i));
+ }
+ ResourceTimer::Timer timer;
+ ResourceTimer::Timer::copy(timer, source, true);
+ ASSERT_THAT(source.count, 0);
+ ASSERT_THAT(source.total, 0);
+ // compute() is not normally be called on a reset timer, but it should work and it should return
+ // all zeros.
+ source.compute();
+ ASSERT_THAT(source.pvalues.p50.floor, US(0));
+ ASSERT_THAT(source.pvalues.p50.nominal, US(0));
+ ASSERT_THAT(source.pvalues.p90.floor, US(0));
+ ASSERT_THAT(source.pvalues.p90.nominal, US(0));
+ ASSERT_THAT(source.pvalues.p95.floor, US(0));
+ ASSERT_THAT(source.pvalues.p95.nominal, US(0));
+ ASSERT_THAT(source.pvalues.p99.floor, US(0));
+ ASSERT_THAT(source.pvalues.p99.nominal, US(0));
+ ASSERT_THAT(source.largest[0], US(0));
+ ASSERT_THAT(source.largest[1], US(0));
+ ASSERT_THAT(source.largest[2], US(0));
+ ASSERT_THAT(source.largest[3], US(0));
+ ASSERT_THAT(source.largest[4], US(0));
+
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(49));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(50));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(89));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(90));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(94));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(95));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(98));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(99));
+ ASSERT_THAT(timer.largest[0], US(100));
+ ASSERT_THAT(timer.largest[1], US(99));
+ ASSERT_THAT(timer.largest[2], US(98));
+ ASSERT_THAT(timer.largest[3], US(97));
+ ASSERT_THAT(timer.largest[4], US(96));
+
+ // Call compute a second time. The values must be the same.
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(49));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(50));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(89));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(90));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(94));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(95));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(98));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(99));
+ ASSERT_THAT(timer.largest[0], US(100));
+ ASSERT_THAT(timer.largest[1], US(99));
+ ASSERT_THAT(timer.largest[2], US(98));
+ ASSERT_THAT(timer.largest[3], US(97));
+ ASSERT_THAT(timer.largest[4], US(96));
+
+ // Modify the source. If timer and source share histogram arrays, this will introduce an
+ // error.
+ for (int i = 1; i <= 100; i++) {
+ source.record(US(i));
+ }
+ // Call compute a third time. The values must be the same.
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(49));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(50));
+ ASSERT_THAT(timer.pvalues.p90.floor, US(89));
+ ASSERT_THAT(timer.pvalues.p90.nominal, US(90));
+ ASSERT_THAT(timer.pvalues.p95.floor, US(94));
+ ASSERT_THAT(timer.pvalues.p95.nominal, US(95));
+ ASSERT_THAT(timer.pvalues.p99.floor, US(98));
+ ASSERT_THAT(timer.pvalues.p99.nominal, US(99));
+ ASSERT_THAT(timer.largest[0], US(100));
+ ASSERT_THAT(timer.largest[1], US(99));
+ ASSERT_THAT(timer.largest[2], US(98));
+ ASSERT_THAT(timer.largest[3], US(97));
+ ASSERT_THAT(timer.largest[4], US(96));
+}
+
+// Verify that if too many oversize entries are reported, the percentile values cannot be computed
+// and are set to zero.
+TEST(ResourceTimerTest, TimerOversize) {
+ static const int oversize = US(2 * 1000 * 1000);
+
+ ResourceTimer::Timer timer;
+ for (int i = 1; i <= 100; i++) {
+ timer.record(US(i));
+ }
+
+ // Insert enough oversize values to invalidate the p90, p95, and p99 percentiles. The p50 is
+ // still computable.
+ for (int i = 1; i <= 50; i++) {
+ timer.record(oversize);
+ }
+ ASSERT_THAT(timer.largest[0], oversize);
+ ASSERT_THAT(timer.largest[1], oversize);
+ ASSERT_THAT(timer.largest[2], oversize);
+ ASSERT_THAT(timer.largest[3], oversize);
+ ASSERT_THAT(timer.largest[4], oversize);
+ timer.compute();
+ ASSERT_THAT(timer.pvalues.p50.floor, US(74));
+ ASSERT_THAT(timer.pvalues.p50.nominal, US(75));
+ ASSERT_THAT(timer.pvalues.p90.floor, 0);
+ ASSERT_THAT(timer.pvalues.p90.nominal, 0);
+ ASSERT_THAT(timer.pvalues.p95.floor, 0);
+ ASSERT_THAT(timer.pvalues.p95.nominal, 0);
+ ASSERT_THAT(timer.pvalues.p99.floor, 0);
+ ASSERT_THAT(timer.pvalues.p99.nominal, 0);
+}
+
+
+} // namespace android
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index 546f0c6..dea6097 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -1433,6 +1433,8 @@
return new String("AudioAttributes:"
+ " usage=" + usageToString()
+ " content=" + contentTypeToString()
+ + (mSource != MediaRecorder.AudioSource.AUDIO_SOURCE_INVALID
+ ? " source=" + MediaRecorder.toLogFriendlyAudioSource(mSource) : "")
+ " flags=0x" + Integer.toHexString(mFlags).toUpperCase()
+ " tags=" + mFormattedTags
+ " bundle=" + (mBundle == null ? "null" : mBundle.toString()));
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java
index f957498..98819a3 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategy.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java
@@ -22,7 +22,6 @@
import android.annotation.TestApi;
import android.media.AudioAttributes;
import android.media.AudioSystem;
-import android.media.MediaRecorder;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
@@ -130,9 +129,7 @@
return aa;
}
}
- return new AudioAttributes.Builder()
- .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
- .setUsage(AudioAttributes.USAGE_UNKNOWN).build();
+ return DEFAULT_ATTRIBUTES;
}
/**
@@ -217,7 +214,7 @@
@SystemApi
public @NonNull AudioAttributes getAudioAttributes() {
// We need a choice, so take the first one
- return mAudioAttributesGroups.length == 0 ? (new AudioAttributes.Builder().build())
+ return mAudioAttributesGroups.length == 0 ? DEFAULT_ATTRIBUTES
: mAudioAttributesGroups[0].getAudioAttributes();
}
@@ -358,8 +355,7 @@
* Default attributes, with default source to be aligned with native.
*/
private static final @NonNull AudioAttributes DEFAULT_ATTRIBUTES =
- new AudioAttributes.Builder().setCapturePreset(MediaRecorder.AudioSource.DEFAULT)
- .build();
+ new AudioAttributes.Builder().build();
/**
* @hide
@@ -429,8 +425,7 @@
public @NonNull AudioAttributes getAudioAttributes() {
// We need a choice, so take the first one
- return mAudioAttributes.length == 0 ? (new AudioAttributes.Builder().build())
- : mAudioAttributes[0];
+ return mAudioAttributes.length == 0 ? DEFAULT_ATTRIBUTES : mAudioAttributes[0];
}
/**
diff --git a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
index fccef23..9147ccd 100644
--- a/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-ro/strings.xml
@@ -16,22 +16,22 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="backup_confirm_title" msgid="827563724209303345">"Copiere de rezervă completă"</string>
+ <string name="backup_confirm_title" msgid="827563724209303345">"Backup complet"</string>
<string name="restore_confirm_title" msgid="5469365809567486602">"Restabilire completă"</string>
- <string name="backup_confirm_text" msgid="1878021282758896593">"S-a solicitat crearea unei copii de rezervă complete a tuturor datelor pe un computer desktop conectat. Doriți să permiteți acest lucru?\n\nDacă nu ați solicitat dvs. copierea de rezervă, nu permiteți ca operațiunea să continue."</string>
- <string name="allow_backup_button_label" msgid="4217228747769644068">"Faceți backup pentru date"</string>
- <string name="deny_backup_button_label" msgid="6009119115581097708">"Nu creați copii de rezervă"</string>
- <string name="restore_confirm_text" msgid="7499866728030461776">"S-a solicitat o restabilire completă a tuturor datelor de pe un computer desktop conectat. Doriți să permiteți acest lucru?\n\nDacă nu dvs. ați solicitat această restabilire, nu permiteți continuarea operațiunii. Acest proces va înlocui toate datele existente în prezent pe dispozitiv!"</string>
- <string name="allow_restore_button_label" msgid="3081286752277127827">"Restabiliți datele dvs."</string>
- <string name="deny_restore_button_label" msgid="1724367334453104378">"Nu restabiliți"</string>
- <string name="current_password_text" msgid="8268189555578298067">"Introduceți mai jos parola actuală pentru copia de rezervă:"</string>
- <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introduceți mai jos parola pentru criptarea dispozitivului."</string>
- <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introduceți mai jos parola de criptare a dispozitivului. Aceasta va fi utilizată, de asemenea, pentru a cripta arhiva copiei de rezervă."</string>
- <string name="backup_enc_password_text" msgid="4981585714795233099">"Introduceți o parolă pentru a o utiliza la criptarea datelor copiei de rezervă complete. Dacă acest câmp rămâne necompletat, pentru copierea de rezervă se va utiliza parola dvs. actuală."</string>
- <string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă doriți să criptați datele copiei de rezervă complete, introduceți o parolă mai jos:"</string>
- <string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introduceți parola mai jos:"</string>
- <string name="toast_backup_started" msgid="550354281452756121">"Se începe copierea de rezervă..."</string>
- <string name="toast_backup_ended" msgid="3818080769548726424">"Copierea de rezervă a fost finalizată"</string>
+ <string name="backup_confirm_text" msgid="1878021282758896593">"S-a solicitat crearea unui backup complet pentru toate datele pe un computer desktop conectat. Permiți acest lucru?\n\nDacă nu tu ai solicitat backupul, nu permite ca operațiunea să continue."</string>
+ <string name="allow_backup_button_label" msgid="4217228747769644068">"Fă backup pentru date"</string>
+ <string name="deny_backup_button_label" msgid="6009119115581097708">"Nu face backup"</string>
+ <string name="restore_confirm_text" msgid="7499866728030461776">"S-a solicitat o restabilire completă a tuturor datelor de pe un computer desktop conectat. Permiți acest lucru?\n\nDacă nu tu ai solicitat această restabilire, nu permite continuarea operațiunii. Acest proces va înlocui toate datele existente pe dispozitiv!"</string>
+ <string name="allow_restore_button_label" msgid="3081286752277127827">"Restabilește datele"</string>
+ <string name="deny_restore_button_label" msgid="1724367334453104378">"Nu restabili"</string>
+ <string name="current_password_text" msgid="8268189555578298067">"Introdu mai jos parola actuală pentru backup:"</string>
+ <string name="device_encryption_restore_text" msgid="1570864916855208992">"Introdu mai jos parola pentru criptarea dispozitivului."</string>
+ <string name="device_encryption_backup_text" msgid="5866590762672844664">"Introdu mai jos parola de criptare a dispozitivului. Aceasta va fi folosită și pentru a cripta arhiva backupului."</string>
+ <string name="backup_enc_password_text" msgid="4981585714795233099">"Introdu o parolă pentru a o folosi la criptarea datelor backupului complet. Dacă acest câmp rămâne necompletat, pentru backup se va folosi parola actuală:"</string>
+ <string name="backup_enc_password_optional" msgid="1350137345907579306">"Dacă vrei să criptezi datele backupului complet, introdu o parolă mai jos:"</string>
+ <string name="restore_enc_password_text" msgid="6140898525580710823">"Dacă datele pentru restabilire sunt criptate, introdu parola mai jos:"</string>
+ <string name="toast_backup_started" msgid="550354281452756121">"Se începe backupul..."</string>
+ <string name="toast_backup_ended" msgid="3818080769548726424">"Backup terminat"</string>
<string name="toast_restore_started" msgid="7881679218971277385">"Se pornește restabilirea..."</string>
<string name="toast_restore_ended" msgid="1764041639199696132">"Restabilirea s-a încheiat"</string>
<string name="toast_timeout" msgid="5276598587087626877">"Operația a expirat"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ro/strings.xml b/packages/CompanionDeviceManager/res/values-ro/strings.xml
index 619468e..1d87de9 100644
--- a/packages/CompanionDeviceManager/res/values-ro/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ro/strings.xml
@@ -19,16 +19,16 @@
<string name="app_label" msgid="4470785958457506021">"Manager de dispozitiv Companion"</string>
<string name="confirmation_title" msgid="3785000297483688997">"Permiteți ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să vă acceseze dispozitivul <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ceas"</string>
- <string name="chooser_title" msgid="2262294130493605839">"Alegeți un profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> pe care să îl gestioneze <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
+ <string name="chooser_title" msgid="2262294130493605839">"Alege un profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> pe care să îl gestioneze <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
<string name="summary_watch" msgid="3002344206574997652">"Această aplicație este necesară pentru a gestiona <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> va putea să interacționeze cu notificările dvs. și să vă acceseze permisiunile pentru Telefon, SMS, Agendă, Calendar, Jurnale de apeluri și Dispozitive din apropiere."</string>
<string name="permission_apps" msgid="6142133265286656158">"Aplicații"</string>
<string name="permission_apps_summary" msgid="798718816711515431">"Să redea în stream aplicațiile telefonului"</string>
- <string name="title_app_streaming" msgid="2270331024626446950">"Permiteți ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să acceseze aceste informații de pe telefon"</string>
+ <string name="title_app_streaming" msgid="2270331024626446950">"Permite ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să acceseze aceste informații de pe telefon"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicii pe mai multe dispozitive"</string>
<string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> de a reda în stream aplicații între dispozitivele dvs."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
- <string name="title_computer" msgid="4693714143506569253">"Permiteți ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să acceseze aceste informații de pe telefon"</string>
+ <string name="title_computer" msgid="4693714143506569253">"Permite ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să acceseze aceste informații de pe telefon"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="permission_notification" msgid="693762568127741203">"Notificări"</string>
<string name="permission_notification_summary" msgid="884075314530071011">"Poate să citească toate notificările, inclusiv informații cum ar fi agenda, mesajele și fotografiile"</string>
@@ -38,7 +38,7 @@
<string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> de a accesa fotografiile, conținutul media și notificările de pe telefon"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispozitiv"</string>
<string name="summary_generic" msgid="2346762210105903720"></string>
- <string name="consent_yes" msgid="8344487259618762872">"Permiteți"</string>
+ <string name="consent_yes" msgid="8344487259618762872">"Permite"</string>
<string name="consent_no" msgid="2640796915611404382">"Nu permiteți"</string>
<string name="consent_back" msgid="2560683030046918882">"Înapoi"</string>
<string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Oferiți aplicațiilor de pe <strong><xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g></strong> aceleași permisiuni ca pe <strong><xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
diff --git a/packages/CredentialManager/OWNERS b/packages/CredentialManager/OWNERS
new file mode 100644
index 0000000..f3b43c1
--- /dev/null
+++ b/packages/CredentialManager/OWNERS
@@ -0,0 +1 @@
+include /core/java/android/credentials/OWNERS
diff --git a/packages/PackageInstaller/res/values-ro/strings.xml b/packages/PackageInstaller/res/values-ro/strings.xml
index 03cb145..1f15619 100644
--- a/packages/PackageInstaller/res/values-ro/strings.xml
+++ b/packages/PackageInstaller/res/values-ro/strings.xml
@@ -17,10 +17,10 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Program de instalare a pachetelor"</string>
- <string name="install" msgid="711829760615509273">"Instalați"</string>
- <string name="update" msgid="3932142540719227615">"Actualizați"</string>
+ <string name="install" msgid="711829760615509273">"Instalează"</string>
+ <string name="update" msgid="3932142540719227615">"Actualizează"</string>
<string name="done" msgid="6632441120016885253">"Gata"</string>
- <string name="cancel" msgid="1018267193425558088">"Anulați"</string>
+ <string name="cancel" msgid="1018267193425558088">"Anulează"</string>
<string name="installing" msgid="4921993079741206516">"Se instalează…"</string>
<string name="installing_app" msgid="1165095864863849422">"Se instalează <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplicație instalată."</string>
@@ -36,7 +36,7 @@
<string name="install_failed_msg" product="tablet" msgid="6298387264270562442">"Aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe tableta dvs."</string>
<string name="install_failed_msg" product="tv" msgid="1920009940048975221">"Aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe televizorul dvs."</string>
<string name="install_failed_msg" product="default" msgid="6484461562647915707">"Aplicația <xliff:g id="APP_NAME">%1$s</xliff:g> nu a putut fi instalată pe telefonul dvs."</string>
- <string name="launch" msgid="3952550563999890101">"Deschideți"</string>
+ <string name="launch" msgid="3952550563999890101">"Deschide"</string>
<string name="unknown_apps_admin_dlg_text" msgid="4456572224020176095">"Administratorul nu permite instalarea aplicațiilor obținute din surse necunoscute"</string>
<string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"Aplicațiile necunoscute nu pot fi instalate de acest utilizator"</string>
<string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"Acest utilizator nu are permisiunea să instaleze aplicații"</string>
diff --git a/packages/SettingsLib/FooterPreference/res/values-ro/strings.xml b/packages/SettingsLib/FooterPreference/res/values-ro/strings.xml
index 2b50117..6619684 100644
--- a/packages/SettingsLib/FooterPreference/res/values-ro/strings.xml
+++ b/packages/SettingsLib/FooterPreference/res/values-ro/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="settingslib_learn_more_text" msgid="7385478101223578464">"Aflați mai multe"</string>
+ <string name="settingslib_learn_more_text" msgid="7385478101223578464">"Află mai multe"</string>
</resources>
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt
index 317346d..1ebc5da 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt
@@ -18,4 +18,8 @@
import com.android.settingslib.spa.framework.DebugActivity
-class GalleryDebugActivity : DebugActivity(SpaEnvironment.EntryRepository, MainActivity::class.java)
+class GalleryDebugActivity : DebugActivity(
+ SpaEnvironment.EntryRepository,
+ browseActivityClass = MainActivity::class.java,
+ entryProviderAuthorities = "com.android.spa.gallery.provider",
+)
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt
index 3210eb5..d3e0096 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt
@@ -20,5 +20,5 @@
class GalleryEntryProvider : EntryProvider(
SpaEnvironment.EntryRepository,
- "com.android.settingslib.spa.gallery/.MainActivity",
+ browseActivityClass = MainActivity::class.java,
)
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt
index 783fef7..773e5f3 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt
@@ -16,6 +16,8 @@
package com.android.settingslib.spa.gallery
+import android.os.Bundle
+import androidx.navigation.NamedNavArgument
import com.android.settingslib.spa.framework.common.SettingsEntryRepository
import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
@@ -34,6 +36,32 @@
import com.android.settingslib.spa.gallery.ui.CategoryPageProvider
import com.android.settingslib.spa.gallery.ui.SpinnerPageProvider
+/**
+ * Enum to define all SPP name here.
+ * Since the SPP name would be used in log, DO NOT change it once it is set. One can still change
+ * the display name for better readability if necessary.
+ */
+enum class SettingsPageProviderEnum(val displayName: String) {
+ HOME("home"),
+ PREFERENCE("preference"),
+ ARGUMENT("argument"),
+
+ // Add your SPPs
+}
+
+fun createSettingsPage(
+ SppName: SettingsPageProviderEnum,
+ parameter: List<NamedNavArgument> = emptyList(),
+ arguments: Bundle? = null
+): SettingsPage {
+ return SettingsPage(
+ name = SppName.name,
+ displayName = SppName.displayName,
+ parameter = parameter,
+ arguments = arguments,
+ )
+}
+
object SpaEnvironment {
val PageProviderRepository: SettingsPageProviderRepository by
lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
@@ -55,7 +83,7 @@
ActionButtonPageProvider,
),
rootPages = listOf(
- SettingsPage.create(HomePageProvider.name)
+ createSettingsPage(SettingsPageProviderEnum.HOME)
)
)
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
index a16ee6c..c8a4650 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/home/HomePage.kt
@@ -21,10 +21,10 @@
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
-import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.gallery.R
+import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.button.ActionButtonPageProvider
import com.android.settingslib.spa.gallery.page.ArgumentPageModel
import com.android.settingslib.spa.gallery.page.ArgumentPageProvider
@@ -38,20 +38,19 @@
import com.android.settingslib.spa.widget.scaffold.HomeScaffold
object HomePageProvider : SettingsPageProvider {
- override val name = "Home"
+ override val name = SettingsPageProviderEnum.HOME.name
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
- val owner = SettingsPage.create(name)
return listOf(
- PreferenceMainPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- ArgumentPageProvider.buildInjectEntry("foo")!!.setLink(fromPage = owner).build(),
- SliderPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- SpinnerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- SettingsPagerPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- FooterPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- IllustrationPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- CategoryPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
- ActionButtonPageProvider.buildInjectEntry().setLink(fromPage = owner).build(),
+ PreferenceMainPageProvider.buildInjectEntry().build(),
+ ArgumentPageProvider.buildInjectEntry("foo")!!.build(),
+ SliderPageProvider.buildInjectEntry().build(),
+ SpinnerPageProvider.buildInjectEntry().build(),
+ SettingsPagerPageProvider.buildInjectEntry().build(),
+ FooterPageProvider.buildInjectEntry().build(),
+ IllustrationPageProvider.buildInjectEntry().build(),
+ CategoryPageProvider.buildInjectEntry().build(),
+ ActionButtonPageProvider.buildInjectEntry().build(),
)
}
@@ -59,7 +58,7 @@
override fun Page(arguments: Bundle?) {
HomeScaffold(title = stringResource(R.string.app_name)) {
for (entry in buildEntry(arguments)) {
- if (entry.name.startsWith(ArgumentPageModel.name)) {
+ if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0))
} else {
entry.UiLayout()
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
index e32de7a..cc0a79a 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPage.kt
@@ -24,23 +24,38 @@
import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
+import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
+import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
object ArgumentPageProvider : SettingsPageProvider {
- override val name = ArgumentPageModel.name
+ // Defines all entry name in this page.
+ // Note that entry name would be used in log. DO NOT change it once it is set.
+ // One can still change the display name for better readability if necessary.
+ private enum class EntryEnum(val displayName: String) {
+ STRING_PARAM("string_param"),
+ INT_PARAM("int_param"),
+ }
+
+ private fun createEntry(owner: SettingsPage, entry: EntryEnum): SettingsEntryBuilder {
+ return SettingsEntryBuilder.create(owner, entry.name, entry.displayName)
+ }
+
+ override val name = SettingsPageProviderEnum.ARGUMENT.name
override val parameter = ArgumentPageModel.parameter
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
if (!ArgumentPageModel.isValidArgument(arguments)) return emptyList()
- val owner = SettingsPage.create(name, parameter, arguments)
+ val owner = createSettingsPage(SettingsPageProviderEnum.ARGUMENT, parameter, arguments)
val entryList = mutableListOf<SettingsEntry>()
entryList.add(
- SettingsEntryBuilder.create("string_param", owner)
+ createEntry(owner, EntryEnum.STRING_PARAM)
// Set attributes
.setIsAllowSearch(true)
+ .setSearchDataFn { ArgumentPageModel.genStringParamSearchData() }
.setUiLayoutFn {
// Set ui rendering
Preference(ArgumentPageModel.create(it).genStringParamPreferenceModel())
@@ -48,9 +63,10 @@
)
entryList.add(
- SettingsEntryBuilder.create("int_param", owner)
+ createEntry(owner, EntryEnum.INT_PARAM)
// Set attributes
.setIsAllowSearch(true)
+ .setSearchDataFn { ArgumentPageModel.genIntParamSearchData() }
.setUiLayoutFn {
// Set ui rendering
Preference(ArgumentPageModel.create(it).genIntParamPreferenceModel())
@@ -68,11 +84,12 @@
if (!ArgumentPageModel.isValidArgument(arguments)) return null
return SettingsEntryBuilder.createInject(
- entryName = "${name}_$stringParam",
- owner = SettingsPage.create(name, parameter, arguments)
+ owner = createSettingsPage(SettingsPageProviderEnum.ARGUMENT, parameter, arguments),
+ displayName = "${name}_$stringParam",
)
// Set attributes
.setIsAllowSearch(false)
+ .setSearchDataFn { ArgumentPageModel.genInjectSearchData() }
.setUiLayoutFn {
// Set ui rendering
Preference(ArgumentPageModel.create(it).genInjectPreferenceModel())
@@ -83,7 +100,7 @@
override fun Page(arguments: Bundle?) {
RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) {
for (entry in buildEntry(arguments)) {
- if (entry.name.startsWith(name)) {
+ if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments))
} else {
entry.UiLayout()
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
index 6e86fd7..e75d09b 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/ArgumentPageModel.kt
@@ -23,22 +23,28 @@
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.android.settingslib.spa.framework.BrowseActivity
+import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.util.getIntArg
import com.android.settingslib.spa.framework.util.getStringArg
import com.android.settingslib.spa.framework.util.navLink
+import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.widget.preference.PreferenceModel
-private const val TITLE = "Sample page with arguments"
+// Defines all the resources for this page.
+// In real Settings App, resources data is defined in xml, rather than SPP.
+private const val PAGE_TITLE = "Sample page with arguments"
+private const val STRING_PARAM_TITLE = "String param value"
+private const val INT_PARAM_TITLE = "Int param value"
private const val STRING_PARAM_NAME = "stringParam"
private const val INT_PARAM_NAME = "intParam"
+private val ARGUMENT_PAGE_KEYWORDS = listOf("argument keyword1", "argument keyword2")
class ArgumentPageModel : PageModel() {
companion object {
- const val name = "Argument"
val parameter = listOf(
navArgument(STRING_PARAM_NAME) { type = NavType.StringType },
navArgument(INT_PARAM_NAME) { type = NavType.IntType },
@@ -62,6 +68,18 @@
return (stringParam != null && listOf("foo", "bar").contains(stringParam))
}
+ fun genStringParamSearchData(): EntrySearchData {
+ return EntrySearchData(title = STRING_PARAM_TITLE)
+ }
+
+ fun genIntParamSearchData(): EntrySearchData {
+ return EntrySearchData(title = INT_PARAM_TITLE)
+ }
+
+ fun genInjectSearchData(): EntrySearchData {
+ return EntrySearchData(title = PAGE_TITLE, keyword = ARGUMENT_PAGE_KEYWORDS)
+ }
+
@Composable
fun create(arguments: Bundle?): ArgumentPageModel {
val pageModel: ArgumentPageModel = viewModel(key = arguments.toString())
@@ -70,7 +88,7 @@
}
}
- private val title = TITLE
+ private val title = PAGE_TITLE
private var arguments: Bundle? = null
private var stringParam: String? = null
private var intParam: Int? = null
@@ -92,7 +110,7 @@
@Composable
fun genStringParamPreferenceModel(): PreferenceModel {
return object : PreferenceModel {
- override val title = "String param value"
+ override val title = STRING_PARAM_TITLE
override val summary = stateOf(stringParam!!)
}
}
@@ -100,7 +118,7 @@
@Composable
fun genIntParamPreferenceModel(): PreferenceModel {
return object : PreferenceModel {
- override val title = "Int param value"
+ override val title = INT_PARAM_TITLE
override val summary = stateOf(intParam!!.toString())
}
}
@@ -114,7 +132,8 @@
return object : PreferenceModel {
override val title = genPageTitle()
override val summary = stateOf(summaryArray.joinToString(", "))
- override val onClick = navigator(name + parameter.navLink(arguments))
+ override val onClick = navigator(
+ SettingsPageProviderEnum.ARGUMENT.displayName + parameter.navLink(arguments))
}
}
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
index cbd028d..9fc736c 100644
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt
@@ -18,132 +18,166 @@
import android.os.Bundle
import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Autorenew
import androidx.compose.material.icons.outlined.DisabledByDefault
import androidx.compose.material.icons.outlined.TouchApp
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.produceState
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
+import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
-import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
-import com.android.settingslib.spa.framework.compose.navigator
-import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsTheme
+import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
+import com.android.settingslib.spa.gallery.createSettingsPage
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.ASYNC_PREFERENCE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.AUTO_UPDATE_PREFERENCE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.DISABLE_PREFERENCE_SUMMARY
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.DISABLE_PREFERENCE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.MANUAL_UPDATE_PREFERENCE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.PAGE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_KEYWORDS
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_SUMMARY
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_TITLE
+import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.logMsg
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
+import com.android.settingslib.spa.widget.preference.SimplePreferenceMarco
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.SettingsIcon
-import kotlinx.coroutines.delay
-
-private const val TITLE = "Sample Preference"
object PreferencePageProvider : SettingsPageProvider {
- override val name = "Preference"
+ // Defines all entry name in this page.
+ // Note that entry name would be used in log. DO NOT change it once it is set.
+ // One can still change the display name for better readability if necessary.
+ enum class EntryEnum(val displayName: String) {
+ SIMPLE_PREFERENCE("preference"),
+ SUMMARY_PREFERENCE("preference_with_summary"),
+ DISABLED_PREFERENCE("preference_disable"),
+ ASYNC_SUMMARY_PREFERENCE("preference_with_async_summary"),
+ MANUAL_UPDATE_PREFERENCE("preference_actionable"),
+ AUTO_UPDATE_PREFERENCE("preference_auto_update"),
+ }
+
+ override val name = SettingsPageProviderEnum.PREFERENCE.name
+ private val owner = createSettingsPage(SettingsPageProviderEnum.PREFERENCE)
+
+ private fun createEntry(entry: EntryEnum): SettingsEntryBuilder {
+ return SettingsEntryBuilder.create(owner, entry.name, entry.displayName)
+ }
override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
- val owner = SettingsPage.create(name)
val entryList = mutableListOf<SettingsEntry>()
entryList.add(
- SettingsEntryBuilder.create("Preference", owner)
+ createEntry(EntryEnum.SIMPLE_PREFERENCE)
.setIsAllowSearch(true)
- .setUiLayoutFn {
- Preference(object : PreferenceModel {
- override val title = "Preference"
- })
- }.build()
+ .setMarco {
+ logMsg("create marco for ${EntryEnum.SIMPLE_PREFERENCE}")
+ SimplePreferenceMarco(title = SIMPLE_PREFERENCE_TITLE)
+ }
+ .build()
)
entryList.add(
- SettingsEntryBuilder.create("Preference with summary", owner)
+ createEntry(EntryEnum.SUMMARY_PREFERENCE)
.setIsAllowSearch(true)
- .setUiLayoutFn {
- Preference(object : PreferenceModel {
- override val title = "Preference"
- override val summary = "With summary".toState()
- })
- }.build()
+ .setMarco {
+ logMsg("create marco for ${EntryEnum.SUMMARY_PREFERENCE}")
+ SimplePreferenceMarco(
+ title = SIMPLE_PREFERENCE_TITLE,
+ summary = SIMPLE_PREFERENCE_SUMMARY,
+ searchKeywords = SIMPLE_PREFERENCE_KEYWORDS,
+ )
+ }
+ .build()
)
entryList.add(
- SettingsEntryBuilder.create("Preference with async summary", owner)
+ createEntry(EntryEnum.DISABLED_PREFERENCE)
.setIsAllowSearch(true)
+ .setMarco {
+ logMsg("create marco for ${EntryEnum.DISABLED_PREFERENCE}")
+ SimplePreferenceMarco(
+ title = DISABLE_PREFERENCE_TITLE,
+ summary = DISABLE_PREFERENCE_SUMMARY,
+ disabled = true,
+ icon = Icons.Outlined.DisabledByDefault,
+ )
+ }
+ .build()
+ )
+ entryList.add(
+ createEntry(EntryEnum.ASYNC_SUMMARY_PREFERENCE)
+ .setIsAllowSearch(true)
+ .setSearchDataFn {
+ EntrySearchData(title = ASYNC_PREFERENCE_TITLE)
+ }
.setUiLayoutFn {
- Preference(object : PreferenceModel {
- override val title = "Preference"
- override val summary = produceState(initialValue = " ") {
- delay(1000L)
- value = "Async summary"
+ val model = PreferencePageModel.create()
+ val asyncSummary = remember { model.getAsyncSummary() }
+ Preference(
+ object : PreferenceModel {
+ override val title = ASYNC_PREFERENCE_TITLE
+ override val summary = asyncSummary
}
- })
+ )
}.build()
)
entryList.add(
- SettingsEntryBuilder.create("Click me", owner)
+ createEntry(EntryEnum.MANUAL_UPDATE_PREFERENCE)
.setIsAllowSearch(true)
.setUiLayoutFn {
- var count by rememberSaveable { mutableStateOf(0) }
- Preference(object : PreferenceModel {
- override val title = "Click me"
- override val summary = derivedStateOf { count.toString() }
- override val onClick: (() -> Unit) = { count++ }
- override val icon = @Composable {
- SettingsIcon(imageVector = Icons.Outlined.TouchApp)
+ val model = PreferencePageModel.create()
+ val manualUpdaterSummary = remember { model.getManualUpdaterSummary() }
+ Preference(
+ object : PreferenceModel {
+ override val title = MANUAL_UPDATE_PREFERENCE_TITLE
+ override val summary = manualUpdaterSummary
+ override val onClick = { model.manualUpdaterOnClick() }
+ override val icon = @Composable {
+ SettingsIcon(imageVector = Icons.Outlined.TouchApp)
+ }
}
- })
+ )
}.build()
)
entryList.add(
- SettingsEntryBuilder.create("Ticker", owner)
+ createEntry(EntryEnum.AUTO_UPDATE_PREFERENCE)
.setIsAllowSearch(true)
.setUiLayoutFn {
- var ticks by rememberSaveable { mutableStateOf(0) }
- LaunchedEffect(ticks) {
- delay(1000L)
- ticks++
- }
- Preference(object : PreferenceModel {
- override val title = "Ticker"
- override val summary = derivedStateOf { ticks.toString() }
- })
- }.build()
- )
- entryList.add(
- SettingsEntryBuilder.create("Disabled", owner)
- .setIsAllowSearch(true)
- .setUiLayoutFn {
- Preference(object : PreferenceModel {
- override val title = "Disabled"
- override val summary = "Disabled".toState()
- override val enabled = false.toState()
- override val icon = @Composable {
- SettingsIcon(imageVector = Icons.Outlined.DisabledByDefault)
+ val model = PreferencePageModel.create()
+ val autoUpdaterSummary = remember { model.getAutoUpdaterSummary() }
+ Preference(
+ object : PreferenceModel {
+ override val title = AUTO_UPDATE_PREFERENCE_TITLE
+ override val summary = autoUpdaterSummary.observeAsState(" ")
+ override val icon = @Composable {
+ SettingsIcon(imageVector = Icons.Outlined.Autorenew)
+ }
}
- })
- }.build()
+ )
+ }
+ .build()
)
return entryList
}
fun buildInjectEntry(): SettingsEntryBuilder {
- return SettingsEntryBuilder.createInject(owner = SettingsPage.create(name))
+ return SettingsEntryBuilder.createInject(owner = owner)
.setIsAllowSearch(true)
- .setUiLayoutFn {
- Preference(object : PreferenceModel {
- override val title = TITLE
- override val onClick = navigator(name)
- })
+ .setMarco {
+ logMsg("create marco for INJECT entry")
+ SimplePreferenceMarco(
+ title = PAGE_TITLE,
+ clickRoute = SettingsPageProviderEnum.PREFERENCE.name
+ )
}
}
@Composable
override fun Page(arguments: Bundle?) {
- RegularScaffold(title = TITLE) {
+ RegularScaffold(title = PAGE_TITLE) {
for (entry in buildEntry(arguments)) {
entry.UiLayout()
}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt
new file mode 100644
index 0000000..1188e1e
--- /dev/null
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 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 com.android.settingslib.spa.gallery.preference
+
+import android.os.Bundle
+import android.util.Log
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.mutableStateOf
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.android.settingslib.spa.framework.common.PageModel
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+class PreferencePageModel : PageModel() {
+ companion object {
+ // Defines all the resources for this page.
+ // In real Settings App, resources data is defined in xml, rather than SPP.
+ const val PAGE_TITLE = "Sample Preference"
+ const val SIMPLE_PREFERENCE_TITLE = "Preference"
+ const val SIMPLE_PREFERENCE_SUMMARY = "Simple summary"
+ const val DISABLE_PREFERENCE_TITLE = "Disabled"
+ const val DISABLE_PREFERENCE_SUMMARY = "Disabled summary"
+ const val ASYNC_PREFERENCE_TITLE = "Async Preference"
+ private const val ASYNC_PREFERENCE_SUMMARY = "Async summary"
+ const val MANUAL_UPDATE_PREFERENCE_TITLE = "Manual Updater"
+ const val AUTO_UPDATE_PREFERENCE_TITLE = "Auto Updater"
+ val SIMPLE_PREFERENCE_KEYWORDS = listOf("simple keyword1", "simple keyword2")
+
+ @Composable
+ fun create(): PreferencePageModel {
+ val pageModel: PreferencePageModel = viewModel()
+ pageModel.initOnce()
+ return pageModel
+ }
+
+ fun logMsg(message: String) {
+ Log.d("PreferencePageModel", message)
+ }
+ }
+
+ private val asyncSummary = mutableStateOf(" ")
+
+ private val manualUpdater = mutableStateOf(0)
+
+ private val autoUpdater = object : MutableLiveData<String>(" ") {
+ private var tick = 0
+ private var updateJob: Job? = null
+ override fun onActive() {
+ logMsg("autoUpdater.active")
+ updateJob = viewModelScope.launch(Dispatchers.IO) {
+ while (true) {
+ delay(1000L)
+ tick++
+ logMsg("autoUpdater.value $tick")
+ postValue(tick.toString())
+ }
+ }
+ }
+
+ override fun onInactive() {
+ logMsg("autoUpdater.inactive")
+ updateJob?.cancel()
+ }
+ }
+
+ override fun initialize(arguments: Bundle?) {
+ logMsg("init with args " + arguments.toString())
+
+ viewModelScope.launch(Dispatchers.IO) {
+ delay(2000L)
+ asyncSummary.value = ASYNC_PREFERENCE_SUMMARY
+ }
+ }
+
+ fun getAsyncSummary(): State<String> {
+ logMsg("getAsyncSummary")
+ return asyncSummary
+ }
+
+ fun getManualUpdaterSummary(): State<String> {
+ logMsg("getManualUpdaterSummary")
+ return derivedStateOf { manualUpdater.value.toString() }
+ }
+
+ fun manualUpdaterOnClick() {
+ logMsg("manualUpdaterOnClick")
+ manualUpdater.value = manualUpdater.value + 1
+ }
+
+ fun getAutoUpdaterSummary(): LiveData<String> {
+ logMsg("getAutoUpdaterSummary")
+ return autoUpdater
+ }
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
index e5a1862..0bb631a 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
@@ -31,12 +31,23 @@
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.android.settingslib.spa.R
-import com.android.settingslib.spa.framework.common.ROOT_PAGE_NAME
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.framework.compose.localNavController
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.navRoute
+const val NULL_PAGE_NAME = "NULL"
+
+/**
+ * The Activity to render ALL SPA pages, and handles jumps between SPA pages.
+ * One can open any SPA page by:
+ * $ adb shell am start -n <BrowseActivityComponent> -e spa:SpaActivity:destination <SpaPageRoute>
+ * For gallery, BrowseActivityComponent = com.android.settingslib.spa.gallery/.MainActivity
+ * For SettingsGoogle, BrowseActivityComponent = com.android.settings/.spa.SpaActivity
+ * Some examples:
+ * $ adb shell am start -n <BrowseActivityComponent> -e spa:SpaActivity:destination HOME
+ * $ adb shell am start -n <BrowseActivityComponent> -e spa:SpaActivity:destination ARGUMENT/bar/5
+ */
open class BrowseActivity(
private val sppRepository: SettingsPageProviderRepository,
) : ComponentActivity() {
@@ -55,8 +66,8 @@
private fun MainContent() {
val navController = rememberNavController()
CompositionLocalProvider(navController.localNavController()) {
- NavHost(navController, ROOT_PAGE_NAME) {
- composable(ROOT_PAGE_NAME) {}
+ NavHost(navController, NULL_PAGE_NAME) {
+ composable(NULL_PAGE_NAME) {}
for (page in sppRepository.getAllProviders()) {
composable(
route = page.name + page.parameter.navRoute() +
@@ -82,7 +93,7 @@
destinationNavigated.value = true
LaunchedEffect(Unit) {
val destination =
- intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPageName()
+ intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPage()
if (destination.isNotEmpty()) {
navController.navigate(destination) {
popUpTo(navController.graph.findStartDestination().id) {
@@ -94,7 +105,7 @@
}
companion object {
- const val KEY_DESTINATION = "spa:SpaActivity:destination"
+ const val KEY_DESTINATION = "spaActivityDestination"
const val HIGHLIGHT_ENTRY_PARAM_NAME = "highlightEntry"
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt
index 8aef2c6..c4e88e1 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt
@@ -25,6 +25,7 @@
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
@@ -33,7 +34,6 @@
import androidx.navigation.navArgument
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.BrowseActivity.Companion.KEY_DESTINATION
-import com.android.settingslib.spa.framework.EntryProvider.Companion.PAGE_INFO_QUERY
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryRepository
import com.android.settingslib.spa.framework.common.SettingsPage
@@ -54,6 +54,13 @@
private const val PARAM_NAME_PAGE_ID = "pid"
private const val PARAM_NAME_ENTRY_ID = "eid"
+/**
+ * The Debug Activity to display all Spa Pages & Entries.
+ * One can open the debug activity by:
+ * $ adb shell am start -n <Activity>
+ * For gallery, Activity = com.android.settingslib.spa.gallery/.GalleryDebugActivity
+ * For SettingsGoogle, Activity = com.android.settings/.spa.SpaDebugActivity
+ */
open class DebugActivity(
private val entryRepository: SettingsEntryRepository,
private val browseActivityClass: Class<*>,
@@ -75,15 +82,16 @@
if (entryProviderAuthorities == null) return
try {
+ val query = EntryProvider.QueryEnum.PAGE_INFO_QUERY
contentResolver.query(
- Uri.parse("content://$entryProviderAuthorities/${PAGE_INFO_QUERY.queryPath}"),
+ Uri.parse("content://$entryProviderAuthorities/${query.queryPath}"),
null, null, null
).use { cursor ->
while (cursor != null && cursor.moveToNext()) {
- val route = cursor.getString(PAGE_INFO_QUERY.getIndex(ColumnName.PAGE_ROUTE))
- val entryCount = cursor.getInt(PAGE_INFO_QUERY.getIndex(ColumnName.ENTRY_COUNT))
+ val route = cursor.getString(query, EntryProvider.ColumnEnum.PAGE_ROUTE)
+ val entryCount = cursor.getInt(query, EntryProvider.ColumnEnum.PAGE_ENTRY_COUNT)
val hasRuntimeParam =
- cursor.getInt(PAGE_INFO_QUERY.getIndex(ColumnName.HAS_RUNTIME_PARAM)) == 1
+ cursor.getBoolean(query, EntryProvider.ColumnEnum.HAS_RUNTIME_PARAM)
Log.d(
"DEBUG ACTIVITY", "Page Info: $route ($entryCount) " +
(if (hasRuntimeParam) "with" else "no") + "-runtime-params"
@@ -106,13 +114,13 @@
composable(
route = "$ROUTE_PAGE/{$PARAM_NAME_PAGE_ID}",
arguments = listOf(
- navArgument(PARAM_NAME_PAGE_ID) { type = NavType.IntType },
+ navArgument(PARAM_NAME_PAGE_ID) { type = NavType.StringType },
)
) { navBackStackEntry -> OnePage(navBackStackEntry.arguments) }
composable(
route = "$ROUTE_ENTRY/{$PARAM_NAME_ENTRY_ID}",
arguments = listOf(
- navArgument(PARAM_NAME_ENTRY_ID) { type = NavType.IntType },
+ navArgument(PARAM_NAME_ENTRY_ID) { type = NavType.StringType },
)
) { navBackStackEntry -> OneEntry(navBackStackEntry.arguments) }
}
@@ -121,13 +129,15 @@
@Composable
fun RootPage() {
+ val allPageWithEntry = remember { entryRepository.getAllPageWithEntry() }
+ val allEntry = remember { entryRepository.getAllEntries() }
HomeScaffold(title = "Settings Debug") {
Preference(object : PreferenceModel {
- override val title = "List All Pages"
+ override val title = "List All Pages (${allPageWithEntry.size})"
override val onClick = navigator(route = ROUTE_All_PAGES)
})
Preference(object : PreferenceModel {
- override val title = "List All Entries"
+ override val title = "List All Entries (${allEntry.size})"
override val onClick = navigator(route = ROUTE_All_ENTRIES)
})
}
@@ -135,14 +145,15 @@
@Composable
fun AllPages() {
- RegularScaffold(title = "All Pages") {
- for (pageWithEntry in entryRepository.getAllPageWithEntry()) {
+ val allPageWithEntry = remember { entryRepository.getAllPageWithEntry() }
+ RegularScaffold(title = "All Pages (${allPageWithEntry.size})") {
+ for (pageWithEntry in allPageWithEntry) {
Preference(object : PreferenceModel {
override val title =
- "${pageWithEntry.page.name} (${pageWithEntry.entries.size})"
+ "${pageWithEntry.page.displayName} (${pageWithEntry.entries.size})"
override val summary = pageWithEntry.page.formatArguments().toState()
override val onClick =
- navigator(route = ROUTE_PAGE + "/${pageWithEntry.page.id}")
+ navigator(route = ROUTE_PAGE + "/${pageWithEntry.page.id()}")
})
}
}
@@ -150,16 +161,18 @@
@Composable
fun AllEntries() {
- RegularScaffold(title = "All Entries") {
- EntryList(entryRepository.getAllEntries())
+ val allEntry = remember { entryRepository.getAllEntries() }
+ RegularScaffold(title = "All Entries (${allEntry.size})") {
+ EntryList(allEntry)
}
}
@Composable
fun OnePage(arguments: Bundle?) {
- val id = arguments!!.getInt(PARAM_NAME_PAGE_ID)
+ val id = arguments!!.getString(PARAM_NAME_PAGE_ID, "")
val pageWithEntry = entryRepository.getPageWithEntry(id)!!
- RegularScaffold(title = "Page ${pageWithEntry.page.name}") {
+ RegularScaffold(title = "Page - ${pageWithEntry.page.displayName}") {
+ Text(text = "id = ${pageWithEntry.page.id()}")
Text(text = pageWithEntry.page.formatArguments())
Text(text = "Entry size: ${pageWithEntry.entries.size}")
Preference(model = object : PreferenceModel {
@@ -173,15 +186,16 @@
@Composable
fun OneEntry(arguments: Bundle?) {
- val id = arguments!!.getInt(PARAM_NAME_ENTRY_ID)
+ val id = arguments!!.getString(PARAM_NAME_ENTRY_ID, "")
val entry = entryRepository.getEntry(id)!!
- RegularScaffold(title = "Entry ${entry.displayName()}") {
+ val entryContent = remember { entry.formatContent() }
+ RegularScaffold(title = "Entry - ${entry.displayTitle()}") {
Preference(model = object : PreferenceModel {
override val title = "open entry"
override val enabled = (!entry.hasRuntimeParam()).toState()
override val onClick = openEntry(entry)
})
- Text(text = entry.formatAll())
+ Text(text = entryContent)
}
}
@@ -189,10 +203,10 @@
private fun EntryList(entries: Collection<SettingsEntry>) {
for (entry in entries) {
Preference(object : PreferenceModel {
- override val title = entry.displayName()
+ override val title = entry.displayTitle()
override val summary =
- "${entry.fromPage?.name} -> ${entry.toPage?.name}".toState()
- override val onClick = navigator(route = ROUTE_ENTRY + "/${entry.id}")
+ "${entry.fromPage?.displayName} -> ${entry.toPage?.displayName}".toState()
+ override val onClick = navigator(route = ROUTE_ENTRY + "/${entry.id()}")
})
}
}
@@ -200,8 +214,8 @@
@Composable
private fun openPage(page: SettingsPage): (() -> Unit)? {
if (page.hasRuntimeParam()) return null
- val route = page.buildRoute()
val context = LocalContext.current
+ val route = page.buildRoute()
val intent = Intent(context, browseActivityClass).apply {
putExtra(KEY_DESTINATION, route)
}
@@ -214,8 +228,8 @@
@Composable
private fun openEntry(entry: SettingsEntry): (() -> Unit)? {
if (entry.hasRuntimeParam()) return null
- val route = entry.buildRoute()
val context = LocalContext.current
+ val route = entry.buildRoute()
val intent = Intent(context, browseActivityClass).apply {
putExtra(KEY_DESTINATION, route)
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt
index 90ce182..33f1eb5 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt
@@ -16,9 +16,12 @@
package com.android.settingslib.spa.framework
+import android.content.ComponentName
import android.content.ContentProvider
import android.content.ContentValues
import android.content.Context
+import android.content.Intent
+import android.content.Intent.URI_INTENT_SCHEME
import android.content.UriMatcher
import android.content.pm.ProviderInfo
import android.database.Cursor
@@ -26,38 +29,62 @@
import android.net.Uri
import android.util.Log
import com.android.settingslib.spa.framework.common.SettingsEntryRepository
+import com.android.settingslib.spa.framework.common.SettingsPage
/**
- * Enum to define all column names in provider.
+ * The content provider to return entry related data, which can be used for search and hierarchy.
+ * One can query the provider result by:
+ * $ adb shell content query --uri content://<AuthorityPath>/<QueryPath>
+ * For gallery, AuthorityPath = com.android.spa.gallery.provider
+ * For SettingsGoogle, AuthorityPath = com.android.settings.spa.provider
+ * Some examples:
+ * $ adb shell content query --uri content://<AuthorityPath>/page_start
+ * $ adb shell content query --uri content://<AuthorityPath>/page_info
*/
-enum class ColumnName(val id: String) {
- PAGE_NAME("pageName"),
- PAGE_ROUTE("pageRoute"),
- ENTRY_COUNT("entryCount"),
- HAS_RUNTIME_PARAM("hasRuntimeParam"),
- PAGE_START_ADB("pageStartAdb"),
-}
-
-data class QueryDefinition(
- val queryPath: String,
- val queryMatchCode: Int,
- val columnNames: List<ColumnName>,
-) {
- fun getColumns(): Array<String> {
- return columnNames.map { it.id }.toTypedArray()
- }
-
- fun getIndex(name: ColumnName): Int {
- return columnNames.indexOf(name)
- }
-}
-
open class EntryProvider(
private val entryRepository: SettingsEntryRepository,
- private val browseActivityComponentName: String? = null,
+ private val browseActivityClass: Class<*>? = null,
) : ContentProvider() {
- private var mMatcher: UriMatcher? = null
+ /**
+ * Enum to define all column names in provider.
+ */
+ enum class ColumnEnum(val id: String) {
+ PAGE_ID("pageId"),
+ PAGE_NAME("pageName"),
+ PAGE_ROUTE("pageRoute"),
+ PAGE_INTENT_URI("pageIntent"),
+ PAGE_ENTRY_COUNT("entryCount"),
+ HAS_RUNTIME_PARAM("hasRuntimeParam"),
+ PAGE_START_ADB("pageStartAdb"),
+ }
+
+ /**
+ * Enum to define all queries supported in the provider.
+ */
+ enum class QueryEnum(
+ val queryPath: String,
+ val queryMatchCode: Int,
+ val columnNames: List<ColumnEnum>
+ ) {
+ PAGE_START_COMMAND(
+ "page_start", 1,
+ listOf(ColumnEnum.PAGE_START_ADB)
+ ),
+ PAGE_INFO_QUERY(
+ "page_info", 2,
+ listOf(
+ ColumnEnum.PAGE_ID,
+ ColumnEnum.PAGE_NAME,
+ ColumnEnum.PAGE_ROUTE,
+ ColumnEnum.PAGE_INTENT_URI,
+ ColumnEnum.PAGE_ENTRY_COUNT,
+ ColumnEnum.HAS_RUNTIME_PARAM,
+ )
+ ),
+ }
+
+ private var uriMatcher: UriMatcher? = null
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
TODO("Implement this to handle requests to delete one or more rows")
@@ -88,17 +115,17 @@
}
override fun attachInfo(context: Context?, info: ProviderInfo?) {
- mMatcher = UriMatcher(UriMatcher.NO_MATCH)
+ uriMatcher = UriMatcher(UriMatcher.NO_MATCH)
if (info != null) {
- mMatcher!!.addURI(
+ uriMatcher!!.addURI(
info.authority,
- PAGE_START_COMMAND_QUERY.queryPath,
- PAGE_START_COMMAND_QUERY.queryMatchCode
+ QueryEnum.PAGE_START_COMMAND.queryPath,
+ QueryEnum.PAGE_START_COMMAND.queryMatchCode
)
- mMatcher!!.addURI(
+ uriMatcher!!.addURI(
info.authority,
- PAGE_INFO_QUERY.queryPath,
- PAGE_INFO_QUERY.queryMatchCode
+ QueryEnum.PAGE_INFO_QUERY.queryPath,
+ QueryEnum.PAGE_INFO_QUERY.queryMatchCode
)
}
super.attachInfo(context, info)
@@ -112,9 +139,9 @@
sortOrder: String?
): Cursor? {
return try {
- when (mMatcher!!.match(uri)) {
- PAGE_START_COMMAND_QUERY.queryMatchCode -> queryPageStartCommand()
- PAGE_INFO_QUERY.queryMatchCode -> queryPageInfo()
+ when (uriMatcher!!.match(uri)) {
+ QueryEnum.PAGE_START_COMMAND.queryMatchCode -> queryPageStartCommand()
+ QueryEnum.PAGE_INFO_QUERY.queryMatchCode -> queryPageInfo()
else -> throw UnsupportedOperationException("Unknown Uri $uri")
}
} catch (e: UnsupportedOperationException) {
@@ -126,47 +153,72 @@
}
private fun queryPageStartCommand(): Cursor {
- val componentName = browseActivityComponentName ?: "[component-name]"
- val cursor = MatrixCursor(PAGE_START_COMMAND_QUERY.getColumns())
+ val cursor = MatrixCursor(QueryEnum.PAGE_START_COMMAND.getColumns())
for (pageWithEntry in entryRepository.getAllPageWithEntry()) {
- val page = pageWithEntry.page
- if (!page.hasRuntimeParam()) {
- cursor.newRow().add(
- ColumnName.PAGE_START_ADB.id,
- "adb shell am start -n $componentName" +
- " -e ${BrowseActivity.KEY_DESTINATION} ${page.buildRoute()}"
- )
+ val command = createBrowsePageAdbCommand(pageWithEntry.page)
+ if (command != null) {
+ cursor.newRow().add(ColumnEnum.PAGE_START_ADB.id, command)
}
}
return cursor
}
private fun queryPageInfo(): Cursor {
- val cursor = MatrixCursor(PAGE_INFO_QUERY.getColumns())
+ val cursor = MatrixCursor(QueryEnum.PAGE_INFO_QUERY.getColumns())
for (pageWithEntry in entryRepository.getAllPageWithEntry()) {
val page = pageWithEntry.page
- cursor.newRow().add(ColumnName.PAGE_NAME.id, page.name)
- .add(ColumnName.PAGE_ROUTE.id, page.buildRoute())
- .add(ColumnName.ENTRY_COUNT.id, pageWithEntry.entries.size)
- .add(ColumnName.HAS_RUNTIME_PARAM.id, if (page.hasRuntimeParam()) 1 else 0)
+ cursor.newRow()
+ .add(ColumnEnum.PAGE_ID.id, page.id())
+ .add(ColumnEnum.PAGE_NAME.id, page.displayName)
+ .add(ColumnEnum.PAGE_ROUTE.id, page.buildRoute())
+ .add(ColumnEnum.PAGE_ENTRY_COUNT.id, pageWithEntry.entries.size)
+ .add(ColumnEnum.HAS_RUNTIME_PARAM.id, if (page.hasRuntimeParam()) 1 else 0)
+ .add(
+ ColumnEnum.PAGE_INTENT_URI.id,
+ createBrowsePageIntent(page).toUri(URI_INTENT_SCHEME)
+ )
}
return cursor
}
- companion object {
- val PAGE_START_COMMAND_QUERY = QueryDefinition(
- "page_start", 1,
- listOf(ColumnName.PAGE_START_ADB)
- )
+ private fun createBrowsePageIntent(page: SettingsPage): Intent {
+ if (context == null || browseActivityClass == null || page.hasRuntimeParam())
+ return Intent()
- val PAGE_INFO_QUERY = QueryDefinition(
- "page_info", 2,
- listOf(
- ColumnName.PAGE_NAME,
- ColumnName.PAGE_ROUTE,
- ColumnName.ENTRY_COUNT,
- ColumnName.HAS_RUNTIME_PARAM,
- )
- )
+ return Intent().setComponent(ComponentName(context!!, browseActivityClass)).apply {
+ putExtra(BrowseActivity.KEY_DESTINATION, page.buildRoute())
+ }
}
+
+ private fun createBrowsePageAdbCommand(page: SettingsPage): String? {
+ if (context == null || page.hasRuntimeParam()) return null
+ val packageName = context!!.packageName
+ val activityName =
+ browseActivityClass?.name?.replace(packageName, "") ?: "<browse-activity-class>"
+ return "adb shell am start -n $packageName/$activityName" +
+ " -e ${BrowseActivity.KEY_DESTINATION} ${page.buildRoute()}"
+ }
+}
+
+fun EntryProvider.QueryEnum.getColumns(): Array<String> {
+ return columnNames.map { it.id }.toTypedArray()
+}
+
+fun EntryProvider.QueryEnum.getIndex(name: EntryProvider.ColumnEnum): Int {
+ return columnNames.indexOf(name)
+}
+
+fun Cursor.getString(query: EntryProvider.QueryEnum, columnName: EntryProvider.ColumnEnum): String {
+ return this.getString(query.getIndex(columnName))
+}
+
+fun Cursor.getInt(query: EntryProvider.QueryEnum, columnName: EntryProvider.ColumnEnum): Int {
+ return this.getInt(query.getIndex(columnName))
+}
+
+fun Cursor.getBoolean(
+ query: EntryProvider.QueryEnum,
+ columnName: EntryProvider.ColumnEnum
+): Boolean {
+ return this.getInt(query.getIndex(columnName)) == 1
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntryMarco.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntryMarco.kt
new file mode 100644
index 0000000..8399d12
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntryMarco.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 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 com.android.settingslib.spa.framework.common
+
+import androidx.compose.runtime.Composable
+
+/**
+ * Defines interface of a entry marco, which contains all entry functions to support different
+ * scenarios, such as browsing (UiLayout), search, etc.
+ * SPA team will rebuild some entry marcos, in order to make the entry creation easier.
+ */
+interface EntryMarco {
+ @Composable
+ fun UiLayout() {}
+ fun getSearchData(): EntrySearchData? = null
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntrySearchData.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntrySearchData.kt
new file mode 100644
index 0000000..9b262af
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntrySearchData.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 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 com.android.settingslib.spa.framework.common
+
+/**
+ * Defines Search data of one Settings entry.
+ */
+data class EntrySearchData(
+ val title: String = "",
+ val keyword: List<String> = emptyList(),
+) {
+ fun format(): String {
+ val content = listOf(
+ "search_title = $title",
+ "search_keyword = $keyword",
+ )
+ return content.joinToString("\n")
+ }
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/PageModel.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/PageModel.kt
index ee12f02..edcca18 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/PageModel.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/PageModel.kt
@@ -22,7 +22,7 @@
open class PageModel : ViewModel() {
var initialized = false
- fun initOnce(arguments: Bundle?) {
+ fun initOnce(arguments: Bundle? = null) {
// Initialize only once
if (initialized) return
initialized = true
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
index 445c4eb..2239066 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
@@ -18,84 +18,20 @@
import android.os.Bundle
import androidx.compose.runtime.Composable
-import androidx.navigation.NamedNavArgument
-import androidx.navigation.NavType
-import com.android.settingslib.spa.framework.BrowseActivity
-import com.android.settingslib.spa.framework.util.navLink
+import androidx.compose.runtime.remember
const val INJECT_ENTRY_NAME = "INJECT"
const val ROOT_ENTRY_NAME = "ROOT"
-const val ROOT_PAGE_NAME = "Root"
-
-/**
- * Defines data of one Settings entry for Settings search.
- */
-data class SearchData(val keyword: String = "")
-
-/**
- * Defines data of one Settings entry for UI rendering.
- */
-data class UiData(val title: String = "")
-
-/**
- * Defines data to identify a Settings page.
- */
-data class SettingsPage(
- // The unique id of this page, which is computed by name + normalized(arguments)
- val id: Int,
-
- // The name of the page, which is used to compute the unique id, and need to be stable.
- val name: String,
-
- // Defined parameters of this page.
- val parameter: List<NamedNavArgument> = emptyList(),
-
- // The arguments of this page.
- val arguments: Bundle? = null,
-) {
- companion object {
- fun create(
- name: String,
- parameter: List<NamedNavArgument> = emptyList(),
- arguments: Bundle? = null
- ): SettingsPage {
- return SettingsPageBuilder(name, parameter).setArguments(arguments).build()
- }
- }
-
- fun formatArguments(): String {
- val normalizedArguments = parameter.normalize(arguments)
- if (normalizedArguments == null || normalizedArguments.isEmpty) return "[No arguments]"
- return normalizedArguments.toString().removeRange(0, 6)
- }
-
- fun formatAll(): String {
- return "$name ${formatArguments()}"
- }
-
- fun buildRoute(highlightEntryName: String? = null): String {
- val highlightParam =
- if (highlightEntryName == null)
- ""
- else
- "?${BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME}=$highlightEntryName"
- return name + parameter.navLink(arguments) + highlightParam
- }
-
- fun hasRuntimeParam(): Boolean {
- return parameter.hasRuntimeParam(arguments)
- }
-}
/**
* Defines data of a Settings entry.
*/
data class SettingsEntry(
- // The unique id of this entry, which is computed by name + owner + fromPage + toPage.
- val id: Int,
-
// The name of the page, which is used to compute the unique id, and need to be stable.
- val name: String,
+ private val name: String,
+
+ // The display name of the page, for better readability.
+ val displayName: String,
// The owner page of this entry.
val owner: SettingsPage,
@@ -109,7 +45,7 @@
* Defines entry attributes here.
* ========================================
*/
- val isAllowSearch: Boolean,
+ val isAllowSearch: Boolean = false,
/**
* ========================================
@@ -121,13 +57,7 @@
* API to get Search related data for this entry.
* Returns null if this entry is not available for the search at the moment.
*/
- val searchData: () -> SearchData? = { null },
-
- /**
- * API to get UI related data for this entry.
- * Returns null if the entry is not render-able.
- */
- val uiData: () -> UiData? = { null },
+ private val searchDataImpl: (arguments: Bundle?) -> EntrySearchData? = { null },
/**
* API to Render UI of this entry directly. For now, we use it in the internal injection, to
@@ -135,68 +65,56 @@
* injected entry. In the long term, we may deprecate the @Composable Page() API in SPP, and
* use each entries' UI rendering function in the page instead.
*/
- val uiLayoutImpl: (@Composable (arguments: Bundle?) -> Unit) = {},
+ private val uiLayoutImpl: (@Composable (arguments: Bundle?) -> Unit) = {},
) {
- fun formatAll(): String {
+ // The unique id of this entry, which is computed by name + owner + fromPage + toPage.
+ fun id(): String {
+ return "$name:${owner.id()}(${fromPage?.id()}-${toPage?.id()})".toHashId()
+ }
+
+ fun formatContent(): String {
val content = listOf(
- "owner = ${owner.formatAll()}",
- "linkFrom = ${fromPage?.formatAll()}",
- "linkTo = ${toPage?.formatAll()}",
+ "id = ${id()}",
+ "owner = ${owner.formatDisplayTitle()}",
+ "linkFrom = ${fromPage?.formatDisplayTitle()}",
+ "linkTo = ${toPage?.formatDisplayTitle()}",
+ "${getSearchData()?.format()}",
)
return content.joinToString("\n")
}
- // The display name of the entry, for better readability.
- fun displayName(): String {
- return "${owner.name}:$name"
+ fun displayTitle(): String {
+ return "${owner.displayName}:$displayName"
}
- private fun getDisplayPage(): SettingsPage {
- // Display the entry on its from-page, or on its owner page if the from-page is unset.
+ private fun containerPage(): SettingsPage {
+ // The Container page of the entry, which is the from-page or
+ // the owner-page if from-page is unset.
return fromPage ?: owner
}
fun buildRoute(): String {
- return getDisplayPage().buildRoute(name)
+ return containerPage().buildRoute(id())
}
fun hasRuntimeParam(): Boolean {
- return getDisplayPage().hasRuntimeParam()
+ return containerPage().hasRuntimeParam()
+ }
+
+ private fun fullArgument(runtimeArguments: Bundle? = null): Bundle {
+ val arguments = Bundle()
+ if (owner.arguments != null) arguments.putAll(owner.arguments)
+ if (runtimeArguments != null) arguments.putAll(runtimeArguments)
+ return arguments
+ }
+
+ fun getSearchData(runtimeArguments: Bundle? = null): EntrySearchData? {
+ return searchDataImpl(fullArgument(runtimeArguments))
}
@Composable
fun UiLayout(runtimeArguments: Bundle? = null) {
- val arguments = Bundle()
- if (owner.arguments != null) arguments.putAll(owner.arguments)
- if (runtimeArguments != null) arguments.putAll(runtimeArguments)
- uiLayoutImpl(arguments)
- }
-}
-
-data class SettingsPageWithEntry(
- val page: SettingsPage,
- val entries: List<SettingsEntry>,
-)
-
-class SettingsPageBuilder(
- private val name: String,
- private val parameter: List<NamedNavArgument> = emptyList()
-) {
- private var arguments: Bundle? = null
-
- fun build(): SettingsPage {
- val normArguments = parameter.normalize(arguments)
- return SettingsPage(
- id = "$name:${normArguments?.toString()}".toUniqueId(),
- name = name,
- parameter = parameter,
- arguments = arguments,
- )
- }
-
- fun setArguments(arguments: Bundle?): SettingsPageBuilder {
- this.arguments = arguments
- return this
+ uiLayoutImpl(fullArgument(runtimeArguments))
}
}
@@ -204,32 +122,41 @@
* The helper to build a Settings Entry instance.
*/
class SettingsEntryBuilder(private val name: String, private val owner: SettingsPage) {
+ private var displayName = name
private var fromPage: SettingsPage? = null
private var toPage: SettingsPage? = null
- private var isAllowSearch: Boolean? = null
- private var searchDataFn: () -> SearchData? = { null }
- private var uiLayoutFn: (@Composable (arguments: Bundle?) -> Unit) = {}
+ // Attributes
+ private var isAllowSearch: Boolean = false
+
+ // Functions
+ private var searchDataFn: (arguments: Bundle?) -> EntrySearchData? = { null }
+ private var uiLayoutFn: (@Composable (arguments: Bundle?) -> Unit) = { }
fun build(): SettingsEntry {
return SettingsEntry(
- id = "$name:${owner.id}(${fromPage?.id}-${toPage?.id})".toUniqueId(),
name = name,
owner = owner,
+ displayName = displayName,
// linking data
fromPage = fromPage,
toPage = toPage,
// attributes
- isAllowSearch = getIsSearchable(),
+ isAllowSearch = isAllowSearch,
// functions
- searchData = searchDataFn,
+ searchDataImpl = searchDataFn,
uiLayoutImpl = uiLayoutFn,
)
}
+ fun setDisplayName(displayName: String): SettingsEntryBuilder {
+ this.displayName = displayName
+ return this
+ }
+
fun setLink(
fromPage: SettingsPage? = null,
toPage: SettingsPage? = null
@@ -244,7 +171,16 @@
return this
}
- fun setSearchDataFn(fn: () -> SearchData?): SettingsEntryBuilder {
+ fun setMarco(fn: (arguments: Bundle?) -> EntryMarco): SettingsEntryBuilder {
+ setSearchDataFn { fn(it).getSearchData() }
+ setUiLayoutFn {
+ val marco = remember { fn(it) }
+ marco.UiLayout()
+ }
+ return this
+ }
+
+ fun setSearchDataFn(fn: (arguments: Bundle?) -> EntrySearchData?): SettingsEntryBuilder {
this.searchDataFn = fn
return this
}
@@ -254,8 +190,6 @@
return this
}
- private fun getIsSearchable(): Boolean = isAllowSearch ?: false
-
companion object {
fun create(entryName: String, owner: SettingsPage): SettingsEntryBuilder {
return SettingsEntryBuilder(entryName, owner)
@@ -269,48 +203,19 @@
return create(entryName, owner).setLink(toPage = owner)
}
- fun createInject(owner: SettingsPage, entryName: String? = null): SettingsEntryBuilder {
- val name = entryName ?: "${INJECT_ENTRY_NAME}_${owner.name}"
- return createLinkTo(name, owner)
+ fun create(owner: SettingsPage, entryName: String, displayName: String? = null):
+ SettingsEntryBuilder {
+ return SettingsEntryBuilder(entryName, owner).setDisplayName(displayName ?: entryName)
}
- fun createRoot(owner: SettingsPage, entryName: String? = null): SettingsEntryBuilder {
- val name = entryName ?: "${ROOT_ENTRY_NAME}_${owner.name}"
- return createLinkTo(name, owner)
+ fun createInject(owner: SettingsPage, displayName: String? = null): SettingsEntryBuilder {
+ val name = displayName ?: "${INJECT_ENTRY_NAME}_${owner.displayName}"
+ return createLinkTo(INJECT_ENTRY_NAME, owner).setDisplayName(name)
+ }
+
+ fun createRoot(owner: SettingsPage, displayName: String? = null): SettingsEntryBuilder {
+ val name = displayName ?: "${ROOT_ENTRY_NAME}_${owner.displayName}"
+ return createLinkTo(ROOT_ENTRY_NAME, owner).setDisplayName(name)
}
}
}
-
-private fun String.toUniqueId(): Int {
- return this.hashCode()
-}
-
-private fun List<NamedNavArgument>.normalize(arguments: Bundle? = null): Bundle? {
- if (this.isEmpty()) return null
- val normArgs = Bundle()
- for (navArg in this) {
- when (navArg.argument.type) {
- NavType.StringType -> {
- val value = arguments?.getString(navArg.name)
- if (value != null)
- normArgs.putString(navArg.name, value)
- else
- normArgs.putString("unset_" + navArg.name, null)
- }
- NavType.IntType -> {
- if (arguments != null && arguments.containsKey(navArg.name))
- normArgs.putInt(navArg.name, arguments.getInt(navArg.name))
- else
- normArgs.putString("unset_" + navArg.name, null)
- }
- }
- }
- return normArgs
-}
-
-private fun List<NamedNavArgument>.hasRuntimeParam(arguments: Bundle? = null): Boolean {
- for (navArg in this) {
- if (arguments == null || !arguments.containsKey(navArg.name)) return true
- }
- return false
-}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
index a4e5a58..77f064d 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
@@ -21,15 +21,20 @@
private const val MAX_ENTRY_SIZE = 5000
+data class SettingsPageWithEntry(
+ val page: SettingsPage,
+ val entries: List<SettingsEntry>,
+)
+
/**
* The repository to maintain all Settings entries
*/
class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
// Map of entry unique Id to entry
- private val entryMap: Map<Int, SettingsEntry>
+ private val entryMap: Map<String, SettingsEntry>
// Map of Settings page to its contained entries.
- private val pageWithEntryMap: Map<Int, SettingsPageWithEntry>
+ private val pageWithEntryMap: Map<String, SettingsPageWithEntry>
init {
logMsg("Initialize")
@@ -39,23 +44,29 @@
val entryQueue = LinkedList<SettingsEntry>()
for (page in sppRepository.getAllRootPages()) {
val rootEntry = SettingsEntryBuilder.createRoot(owner = page).build()
- if (!entryMap.containsKey(rootEntry.id)) {
+ val rootEntryId = rootEntry.id()
+ if (!entryMap.containsKey(rootEntryId)) {
entryQueue.push(rootEntry)
- entryMap.put(rootEntry.id, rootEntry)
+ entryMap.put(rootEntryId, rootEntry)
}
}
while (entryQueue.isNotEmpty() && entryMap.size < MAX_ENTRY_SIZE) {
val entry = entryQueue.pop()
val page = entry.toPage
- if (page == null || pageWithEntryMap.containsKey(page.id)) continue
+ val pageId = page?.id()
+ if (pageId == null || pageWithEntryMap.containsKey(pageId)) continue
val spp = sppRepository.getProviderOrNull(page.name) ?: continue
- val newEntries = spp.buildEntry(page.arguments)
- pageWithEntryMap[page.id] = SettingsPageWithEntry(page, newEntries)
+ val newEntries = spp.buildEntry(page.arguments).map {
+ // Set from-page if it is missing.
+ if (it.fromPage == null) it.copy(fromPage = page) else it
+ }
+ pageWithEntryMap[pageId] = SettingsPageWithEntry(page, newEntries)
for (newEntry in newEntries) {
- if (!entryMap.containsKey(newEntry.id)) {
+ val newEntryId = newEntry.id()
+ if (!entryMap.containsKey(newEntryId)) {
entryQueue.push(newEntry)
- entryMap.put(newEntry.id, newEntry)
+ entryMap.put(newEntryId, newEntry)
}
}
}
@@ -67,7 +78,7 @@
return pageWithEntryMap.values
}
- fun getPageWithEntry(pageId: Int): SettingsPageWithEntry? {
+ fun getPageWithEntry(pageId: String): SettingsPageWithEntry? {
return pageWithEntryMap[pageId]
}
@@ -75,7 +86,7 @@
return entryMap.values
}
- fun getEntry(entryId: Int): SettingsEntry? {
+ fun getEntry(entryId: String): SettingsEntry? {
return entryMap[entryId]
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
new file mode 100644
index 0000000..124743a
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2022 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 com.android.settingslib.spa.framework.common
+
+import android.os.Bundle
+import androidx.navigation.NamedNavArgument
+import androidx.navigation.NavType
+import com.android.settingslib.spa.framework.BrowseActivity
+import com.android.settingslib.spa.framework.util.navLink
+
+/**
+ * Defines data to identify a Settings page.
+ */
+data class SettingsPage(
+ // The name of the page, which is used to compute the unique id, and need to be stable.
+ val name: String,
+
+ // The display name of the page, for better readability.
+ val displayName: String,
+
+ // Defined parameters of this page.
+ val parameter: List<NamedNavArgument> = emptyList(),
+
+ // The arguments of this page.
+ val arguments: Bundle? = null,
+) {
+ companion object {
+ fun create(
+ name: String,
+ parameter: List<NamedNavArgument> = emptyList(),
+ arguments: Bundle? = null
+ ): SettingsPage {
+ return SettingsPage(name, name, parameter, arguments)
+ }
+ }
+
+ // The unique id of this page, which is computed by name + normalized(arguments)
+ fun id(): String {
+ val normArguments = parameter.normalize(arguments)
+ return "$name:${normArguments?.toString()}".toHashId()
+ }
+
+ // Returns if this Settings Page is created by the given Spp.
+ fun isCreateBy(SppName: String): Boolean {
+ return name == SppName
+ }
+
+ fun formatArguments(): String {
+ val normalizedArguments = parameter.normalize(arguments)
+ if (normalizedArguments == null || normalizedArguments.isEmpty) return "[No arguments]"
+ return normalizedArguments.toString().removeRange(0, 6)
+ }
+
+ fun formatDisplayTitle(): String {
+ return "$displayName ${formatArguments()}"
+ }
+
+ fun buildRoute(highlightEntryName: String? = null): String {
+ val highlightParam =
+ if (highlightEntryName == null)
+ ""
+ else
+ "?${BrowseActivity.HIGHLIGHT_ENTRY_PARAM_NAME}=$highlightEntryName"
+ return name + parameter.navLink(arguments) + highlightParam
+ }
+
+ fun hasRuntimeParam(): Boolean {
+ return parameter.hasRuntimeParam(arguments)
+ }
+}
+
+private fun List<NamedNavArgument>.normalize(arguments: Bundle? = null): Bundle? {
+ if (this.isEmpty()) return null
+ val normArgs = Bundle()
+ for (navArg in this) {
+ when (navArg.argument.type) {
+ NavType.StringType -> {
+ val value = arguments?.getString(navArg.name)
+ if (value != null)
+ normArgs.putString(navArg.name, value)
+ else
+ normArgs.putString("unset_" + navArg.name, null)
+ }
+ NavType.IntType -> {
+ if (arguments != null && arguments.containsKey(navArg.name))
+ normArgs.putInt(navArg.name, arguments.getInt(navArg.name))
+ else
+ normArgs.putString("unset_" + navArg.name, null)
+ }
+ }
+ }
+ return normArgs
+}
+
+private fun List<NamedNavArgument>.hasRuntimeParam(arguments: Bundle? = null): Boolean {
+ for (navArg in this) {
+ if (arguments == null || !arguments.containsKey(navArg.name)) return true
+ }
+ return false
+}
+
+fun String.toHashId(): String {
+ return this.hashCode().toString(36)
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProviderRepository.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProviderRepository.kt
index 6adda6b..77a157f 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProviderRepository.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProviderRepository.kt
@@ -30,12 +30,8 @@
logMsg("Initialize Completed: ${pageProviderMap.size} spp")
}
- fun getDefaultStartPageName(): String {
- return if (rootPages.isNotEmpty()) {
- rootPages[0].name
- } else {
- ""
- }
+ fun getDefaultStartPage(): String {
+ return if (rootPages.isEmpty()) "" else rootPages[0].buildRoute()
}
fun getAllRootPages(): Collection<SettingsPage> {
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
index 32ef0bb..13a2cc9 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
@@ -49,7 +49,8 @@
}
@Composable
-fun navigator(route: String): () -> Unit {
+fun navigator(route: String?): () -> Unit {
+ if (route == null) return {}
val navController = LocalNavController.current
return { navController.navigate(route) }
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt
index 0e6f53a..39b8d57 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/Preference.kt
@@ -21,7 +21,39 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import com.android.settingslib.spa.framework.common.EntryMarco
+import com.android.settingslib.spa.framework.common.EntrySearchData
+import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
+import com.android.settingslib.spa.widget.ui.createSettingsIcon
+
+data class SimplePreferenceMarco(
+ val title: String,
+ val summary: String? = null,
+ val icon: ImageVector? = null,
+ val disabled: Boolean = false,
+ val clickRoute: String? = null,
+ val searchKeywords: List<String> = emptyList(),
+) : EntryMarco {
+ @Composable
+ override fun UiLayout() {
+ Preference(model = object : PreferenceModel {
+ override val title: String = this@SimplePreferenceMarco.title
+ override val summary = stateOf(this@SimplePreferenceMarco.summary ?: "")
+ override val icon = createSettingsIcon(this@SimplePreferenceMarco.icon)
+ override val enabled = stateOf(!this@SimplePreferenceMarco.disabled)
+ override val onClick = navigator(clickRoute)
+ })
+ }
+
+ override fun getSearchData(): EntrySearchData {
+ return EntrySearchData(
+ title = this@SimplePreferenceMarco.title,
+ keyword = searchKeywords
+ )
+ }
+}
/**
* The widget model for [Preference] widget.
@@ -71,9 +103,9 @@
@Composable
fun Preference(model: PreferenceModel) {
val modifier = remember(model.enabled.value, model.onClick) {
- model.onClick?.let { onClick ->
- Modifier.clickable(enabled = model.enabled.value, onClick = onClick)
- } ?: Modifier
+ model.onClick?.let { onClick ->
+ Modifier.clickable(enabled = model.enabled.value, onClick = onClick)
+ } ?: Modifier
}
BasePreference(
title = model.title,
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt
index 4f28e37..25a4e70 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Icon.kt
@@ -33,3 +33,8 @@
tint = MaterialTheme.colorScheme.onSurface,
)
}
+
+fun createSettingsIcon(imageVector: ImageVector?): (@Composable () -> Unit)? {
+ if (imageVector == null) return null
+ return { SettingsIcon(imageVector = imageVector) }
+}
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 9578045..a39a2b9 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Ontkoppel"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Gedeaktiveer"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-opstelling het misluk"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nie gekoppel nie weens laegehalte-netwerk"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi-verbinding het misluk"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Stawingsprobleem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Kan nie koppel nie"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Kan nie aan \"<xliff:g id="AP_NAME">%1$s</xliff:g>\" koppel nie"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Sal nie outomaties koppel nie"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Geen internettoegang nie"</string>
<string name="saved_network" msgid="7143698034077223645">"Gestoor deur <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Gekoppel aan beperkte netwerk"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Outomaties deur %1$s gekoppel"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Outomaties deur netwerkgraderingverskaffer gekoppel"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Gekoppel via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Gekoppel via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Beskikbaar via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tik om aan te meld"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Geen internet nie"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Daar kan nie by private DNS-bediener ingegaan word nie"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Geen internet nie"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Aanmelding word vereis"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Toegangspunt is tydelik vol"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Gekoppel via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Beskikbaar via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Maak tans <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> oop"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Kon nie koppel nie"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Voltooi tans aanmelding …"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Kon nie aanmelding voltooi nie. Tik om weer te probeer."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Aanmelding is voltooi. Koppel tans …"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Baie stadig"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Stadig"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Middelmatig"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Vinnig"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Baie vinnig"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Verval"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Verbind tans…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Gekoppel (geen foon nie)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Gekoppel (geen media nie)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Gekoppel (geen boodskaptoegang nie)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Gekoppel (geen foon of media nie)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Gekoppel, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Gekoppel (geen foon nie), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 494ec1e..67f43c5 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ተቋርጧል"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ተሰናክሏል"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"የአይ.ፒ. ውቅረት መሰናከል"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"በዝቅተኛ አውታረ መረብ ምክንያት አልተገናኘም"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"የWiFi ግንኙነት መሰናከል"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"የማረጋገጫ ችግር"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"መገናኘት አልተቻለም"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"ወደ «<xliff:g id="AP_NAME">%1$s</xliff:g>» ማገናኘት አይቻልም"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"በራስ-ሰር አይገናኝም"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ምንም የበይነመረብ መዳረሻ ያለም"</string>
<string name="saved_network" msgid="7143698034077223645">"የተቀመጠው በ<xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"ከሚለካ አውታረ መረብ ጋር ተገናኝቷል"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"በ%1$s በኩል በራስ-ሰር ተገናኝቷል"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"በአውታረ መረብ ደረጃ ሰጪ አቅራቢ በኩል በራስ-ሰር ተገናኝቷል"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"በ%1$s በኩል መገናኘት"</string>
<string name="connected_via_app" msgid="3532267661404276584">"በ <xliff:g id="NAME">%1$s</xliff:g> በኩል ተገናኝተዋል"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"በ%1$s በኩል የሚገኝ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ለመመዝገብ መታ ያድርጉ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ምንም በይነመረብ የለም"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"የግል ዲኤንኤስ አገልጋይ ሊደረስበት አይችልም"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ምንም በይነመረብ የለም"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ወደ መለያ መግባት ያስፈልጋል"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"የመዳረሻ ነጥብ ለጊዜው ሞልቷል"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"በ%1$s በኩል ተገናኝቷል"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"በ%1$s በኩል የሚገኝ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>ን በመክፈት ላይ"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"መገናኘት አልተቻለም"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"መመዝገብን በማጠናቀቅ ላይ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"መመዝገብን ማጠናቀቅ አልተቻለም። እንደገና ለመሞከር መታ ያድርጉ።"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ምዝገባ ተጠናቋል። በማገናኘት ላይ…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"በጣም ቀርፋፋ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"አዘግይ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"እሺ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"መካከለኛ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ፈጣን"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"እጅግ በጣም ፈጣን"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ጊዜው አልፏል"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"በማገናኘት ላይ..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ተገናኝቷል (ምንም ስልክ የለም)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ተገናኝቷል (ምንም ማህደረ መረጃ የለም)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"ተገናኝቷል (ምንም የመልዕክት መዳረሻ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ተገናኝቷል (ምንም ስልክ ወይም ማህደረ መረጃ የለም)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ተገናኝቷል፣ ባትሪ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ተገናኝቷል (ምንም ስልክ የለም)፣ ባትሪ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 5171e6f..705cccb 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"غير متصلة"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"غير مفعّلة"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"تعذّر إعداد عنوان IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"الجهاز غير متصل بسبب انخفاض جودة الشبكة"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"تعذّر اتصال WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"حدثت مشكلة في المصادقة"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"تعذَّر الاتصال"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"تعذَّر الاتصال بـ \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"لن يتم الاتصال تلقائيًا"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"لا يتوفّر اتصال بالإنترنت"</string>
<string name="saved_network" msgid="7143698034077223645">"تم الحفظ بواسطة <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"تم الاتصال بشبكة تفرض تكلفة استخدام."</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"تم الاتصال تلقائيًا عبر %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"تم الاتصال تلقائيًا عبر مقدم خدمة تقييم الشبكة"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"تم الاتصال عبر %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"تم الاتصال عبر <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"متوفرة عبر %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"انقر للاشتراك."</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"لا يتوفر اتصال إنترنت."</string>
<string name="private_dns_broken" msgid="1984159464346556931">"لا يمكن الوصول إلى خادم أسماء نظام نطاقات خاص"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"لا يتوفر اتصال إنترنت."</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"يلزم تسجيل الدخول"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"نقطة الوصول ممتلئة مؤقتًا"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"تم الاتصال عبر %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"متوفرة عبر %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"فتح <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"تعذّر الاتصال."</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"جارٍ إكمال الاشتراك…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"تعذّر إكمال الاشتراك. انقر للمحاولة مرة أخرى."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"اكتمل الاشتراك. جارٍ الاتصال…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"بطيئة جدًا"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"بطيئة"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"جيدة"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"متوسطة"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"سريعة"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"سريعة جدًا"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"منتهية الصلاحية"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"جارٍ الاقتران..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"الجهاز متصل (بدون هاتف)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"الجهاز متصل (بدون وسائط)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"الجهاز متصل (بدون وصول إلى الرسائل)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"الجهاز متصل (بدون هاتف أو وسائط)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"الجهاز متصل، ومستوى طاقة البطارية <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"الجهاز متصل (بدون هاتف)، ومستوى طاقة البطارية <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index d7d09dd..ba0d302 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"সংযোগ বিচ্ছিন্ন"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"নিষ্ক্ৰিয় হৈ আছে"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP কনফিগাৰেশ্বন বিফল হৈছে"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"নিম্নমানৰ নেটৱৰ্কৰ বাবে সংযোগ কৰা হোৱা নাই"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"ৱাই-ফাই সংযোগ বিফল হৈছে"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"সত্যাপন কৰাত সমস্যা হৈছে"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"সংযোগ কৰিব নোৱাৰে"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'ৰ সৈতে সংযোগ কৰিব পৰা নাই"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"স্বয়ংক্ৰিয়ভাৱে সংযোগ নহ’ব"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ইণ্টাৰনেট সংযোগ নাই"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g>এ ছেভ কৰিছে"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"নিৰিখ-নিৰ্দিষ্ট নেটৱৰ্কৰ সৈতে সংযোগ কৰা হৈছে"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s মাধ্যমেদি স্বয়ংক্ৰিয়ভাৱে সংযোগ কৰা হৈছে"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"নেটৱৰ্ক ৰেটিং প্ৰদানকাৰীৰ জৰিয়তে স্বয়ং সংয়োগ কৰা হ’ল"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s-ৰ মাধ্যমেদি সংযোগ কৰা হৈছে"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>ৰ জৰিয়তে সংযুক্ত"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ছাইন আপ কৰিবলৈ টিপক"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ইণ্টাৰনেট সংযোগ নাই"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ব্যক্তিগত DNS ছাৰ্ভাৰ এক্সেছ কৰিব নোৱাৰি"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ইণ্টাৰনেট সংযোগ নাই"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ছাইন ইন কৰা দৰকাৰী"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"একচেছ পইণ্ট কিছু সময়ৰ বাবে পূৰ্ণ হৈ আছে"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$sৰ যোগেৰে সংযোজিত"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> খুলি থকা হৈছে"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"সংযোগ কৰিব পৰা নগ’ল"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ছাইন আপ সম্পূৰ্ণ কৰি থকা হৈছে…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ছাইন আপ সম্পূৰ্ণ কৰিব পৰা নগ’ল। আকৌ চেষ্টা কৰিবলৈ টিপক।"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ছাইন আপ সম্পূৰ্ণ হৈছে সংযোগ কৰি থকা হৈছে…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"অতি লেহেম"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"লেহেমীয়া"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ঠিক"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"মধ্যমীয়া"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"দ্ৰুত"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"অতি দ্ৰুত"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ম্যাদ উকলিছে"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"যোৰা লগোৱা হৈছে…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"সংযোগ কৰা হ’ল (ফ\'ন নাই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"সংযোগ কৰা হ’ল (মিডিয়া নাই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"সংযোগ কৰা হ’ল (বাৰ্তাত প্ৰৱেশাধিকাৰ নাই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"সংযোগ কৰা হ’ল (কোনো ফ\'ন বা মিডিয়া নাই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"সংযোগ কৰা হ’ল, বেটাৰীৰ স্তৰ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"সংযোগ কৰা হ’ল (ফ\'ন নাই), বেটাৰীৰ স্তৰ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 0d2f883..33efb4fd 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Bağlantı kəsildi"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Deaktiv"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Konfiqurasiya Uğursuzluğu"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Şəbəkə keyfiyyəti aşağı olduğuna görə qoşulmadı"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi Bağlantı Uğursuzluğu"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentifikasiya problemi"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Qoşulmaq mümkün deyil"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\"<xliff:g id="AP_NAME">%1$s</xliff:g>\" şəbəkəsinə qoşulmaq mümkün deyil"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Avtomatik qoşulmayacaq"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"İnternet girişi yoxdur"</string>
<string name="saved_network" msgid="7143698034077223645">"Yadda saxlayan: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Ölçülən şəbəkəyə qoşulub"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s üzərindən avtomatik qoşuldu"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Avtomatik olaraq şəbəkə reytinq provayderi ilə qoşuludur"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s vasitəsilə qoşuludur"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ilə qoşulub"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s vasitəsilə əlçatandır"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Qeydiyyatdan keçmək üçün klikləyin"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"İnternet yoxdur"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Özəl DNS serverinə giriş mümkün deyil"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"İnternet yoxdur"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Giriş tələb olunur"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Giriş nöqtəsi müvəqqəti olaraq doludur"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ilə qoşuludur"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s vasitəsilə əlçatandır"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılır"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Qoşulmaq mümkün olmadı"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Qeydiyyat tamamlanır…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Qeydiyyat tamamlanmadı. Yenidən cəhd etmək üçün klikləyin."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Qeydiyyat tamamlandı. Qoşulur…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Çox Yavaş"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Yavaş"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Orta"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Sürətli"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Çox Sürətli"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Vaxtı keçib"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Birləşdirilir..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Qoşuludur (telefon yoxdur)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Qoşuludur (media yoxdur)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Qoşuludur (mesaj girişi yoxdur)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Qoşuludur (telefon və ya media yoxdur)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Qoşuludur, batareya <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Qoşuludur (telefon yoxdur), batareya <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 92749327..108a136 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Veza je prekinuta"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Onemogućeno"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP konfiguracija je otkazala"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nije povezano zbog lošeg kvaliteta mreže"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi veza je otkazala"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem sa potvrdom identiteta"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Povezivanje nije uspelo"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Povezivanje sa „<xliff:g id="AP_NAME">%1$s</xliff:g>“ nije uspelo"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Automatsko povezivanje nije uspelo"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nema pristupa internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Sačuvao/la je <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Povezani ste na mrežu sa ograničenjem"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatski povezano preko %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatski povezano preko dobavljača ocene mreže"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Veza je uspostavljena preko pristupne tačke %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Povezano preko: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupna je preko pristupne tačke %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite da biste se registrovali"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema interneta"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Pristup privatnom DNS serveru nije uspeo"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema interneta"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Treba da se prijavite"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pristupna tačka je privremeno zauzeta"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Povezano preko %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dostupno preko %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Otvara se <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Povezivanje nije uspelo"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Registracija se dovršava…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Dovršavanje registracije nije uspelo. Dodirnite da biste probali ponovo."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registracija je dovršena. Povezuje se…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Veoma spora"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Spora"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Potvrdi"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Srednja"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Brza"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Veoma brza"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Isteklo"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Uparivanje..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Povezano (bez telefona): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Povezano (bez medija): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Povezano je (bez pristupa porukama): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Povezano (bez telefona ili medija): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Povezano, nivo baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Povezano (bez telefona), nivo baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 2f1b7d7..5a70202 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Адключана"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Адключана"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Збой канфігурацыі IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Няма падключэння з-за нізкай якасці сеткі"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Збой падлучэння Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Праблема аўтэнтыфікацыі"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Немагчыма падключыцца"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Немагчыма падключыцца да сеткі \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Не будзе аўтаматычна падключацца"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Няма доступу да інтэрнэту"</string>
<string name="saved_network" msgid="7143698034077223645">"Захавана праз: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Падключана да сеткі з падлікам трафіка"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Аўтаматычна падключана праз %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Аўтаматычна падключана праз пастаўшчыка паслугі ацэнкі сеткі"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Падключана праз %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Падключана праз праграму \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Даступна праз %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Націсніце, каб зарэгістравацца"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Няма падключэння да інтэрнэту"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Не ўдалося атрымаць доступ да прыватнага DNS-сервера"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Няма падключэння да інтэрнэту"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Трэба выканаць уваход"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Пункт доступу часова заняты"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Падключана праз %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Даступна праз %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Адкрываецца <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Не ўдалося падключыцца"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Рэгістрацыя завяршаецца…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Не ўдалося выканаць рэгістрацыю. Дакраніцеся, каб паўтарыць спробу."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Рэгістрацыя завершана. Ідзе падключэнне…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Вельмі павольная"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Павольная"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ОК"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Сярэдняя"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Хуткая"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Вельмі хуткая"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Тэрмін скончыўся"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Спалучэнне..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Падключана прылада <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без званкоў)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Падключана прылада <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без аўдыя)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Падключана прылада <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без паведамленняў)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Падкл. прылада <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без званкоў і аўдыя)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Падключана прылада <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>. Узровень зараду яе акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Падключана прылада <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (без званкоў). Узровень зараду яе акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index c839f53..7e97dd3 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Няма връзка"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Деактивирани"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Неуспешно конфигуриране на IP адреса"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Не е установена връзка поради ниското качество на мрежата"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Неуспешна връзка с Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Проблем при удостоверяването"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Не може да се установи връзка"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Не може да се установи връзка с/ъс <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Няма да се свърже автоматично"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Няма достъп до интернет"</string>
<string name="saved_network" msgid="7143698034077223645">"Запазено от <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Установена е връзка с мрежа с отчитане"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Автоматично е установена връзка чрез %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Автоматично е установена връзка чрез доставчик на услуги за оценяване на мрежите"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Установена е връзка през „%1$s“"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Установена е връзка през <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Мрежата е достъпна през „%1$s“"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Докоснете, за да се регистрирате"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Няма интернет"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Не може да се осъществи достъп до частния DNS сървър"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Няма връзка с интернет"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Изисква се вход в профила"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Точката за достъп временно е пълна"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Установена е връзка през %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Мрежата е достъпна през %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> се отваря"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Не можа да се установи връзка"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Регистрацията се завършва…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Регистрацията не можа да бъде завършена. Докоснете, за да опитате отново."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Регистрацията е завършена. Установява се връзка…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Много бавна"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Бавна"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ОK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Средна"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Бърза"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Много бърза"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Изтекло"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Сдвояване..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Свързано (без телефон)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Свързано (без мултимедия)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Свързано (без достъп до съобщенията)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Свързано (без телефон или мултимедия)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Свързано, батерия: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Свързано (без телефон), батерия: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 7a71dc8..023be24 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"কানেকশন নেই"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"অক্ষম হয়েছে"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP কনফিগারেশনের ব্যর্থতা"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"খারাপ নেটওয়ার্কের কারণে কানেক্ট নয়"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"ওয়াই ফাই সংযোগের ব্যর্থতা"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"যাচাইকরণ সমস্যা"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"কানেক্ট স্থাপন করা যাচ্ছে না"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'এ যোগ করা যায়নি"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"অটোমেটিক কানেক্ট করবে না"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ইন্টারনেট অ্যাক্সেস নেই"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সেভ করা"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"মিটার্ড নেটওয়ার্কের সঙ্গে কানেক্ট করা"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"স্বয়ংক্রিয়ভাবে %1$s এর মাধ্যমে কানেক্ট হয়েছে"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"নেটওয়ার্কের রেটিং প্রদানকারীর মাধ্যমে অটোমেটিক কানেক্ট"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s মাধ্যমে কানেক্ট হয়েছে"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>-এর মাধ্যমে কানেক্ট করা আছে"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s এর মাধ্যমে উপলব্ধ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"সাইন-আপ করতে ট্যাপ করুন"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ইন্টারনেট কানেকশন নেই"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ব্যক্তিগত ডিএনএস সার্ভার অ্যাক্সেস করা যাবে না"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ইন্টারনেট কানেকশন নেই"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"সাইন-ইন করা দরকার"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s এর মাধ্যমে কানেক্ট হয়েছে"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s এর মাধ্যমে পাওয়া যাচ্ছে"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> খোলা হচ্ছে"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"কানেক্ট করা যায়নি"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"সাইন-আপ সম্পূর্ণ করা হচ্ছে…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"সাইন-আপ করা যায়নি। আবার চেষ্টা করতে ট্যাপ করুন।"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"সাইন-আপ করা হয়ে গেছে। কানেক্ট করা হচ্ছে…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"খুব ধীরে"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ধীরে"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ঠিক আছে"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"মাঝারি"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"দ্রুত"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"খুব দ্রুত"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"মেয়াদ শেষ হয়ে গেছে"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"যুক্ত করা হচ্ছে..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"কানেক্ট করা আছে (ফোনের অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"কানেক্ট করা আছে (মিডিয়ার অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"কানেক্ট করা আছে (মেসেজে অ্যাকসেস নেই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"কানেক্ট করা আছে (ফোনের বা মিডিয়ার অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"কানেক্ট করা আছে, ব্যাটারি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"কানেক্ট করা আছে (ফোনের অডিও ছাড়া), ব্যাটারি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 74325ca..3cb4190 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Nije povezano"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Onemogućeno"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Greška u konfiguraciji IP-a"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Niste povezani zbog slabog kvaliteta mreže"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Greška pri povezivanju na WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem pri autentifikaciji"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nije se moguće povezati"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nije se moguće povezati na aplikaciju \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Neće se automatski povezati"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nema pristupa internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Sačuvano: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Povezani ste s mrežom s naplatom"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatski povezano koristeći %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatski povezano putem ocjenjivača mreže"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Povezani preko %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Povezano preko <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupan preko %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite za prijavu"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema internetske veze"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Nije moguće pristupiti privatnom DNS serveru"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema internetske veze"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Potrebna je prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pristupna tačka je privremeno puna"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Povezano koristeći %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dostupna koristeći %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Otvaranje <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Povezivanje nije uspjelo"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Završavanje registracije…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registraciju nije moguće izvršiti. Dodirnite da pokušate ponovo."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registracija je završena. Povezivanje…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Veoma sporo"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Sporo"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Uredu"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Srednja brzina"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Brzo"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Veoma brzo"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Isteklo"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Uparivanje…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Povezano (bez telefona)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Povezano (bez medija)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Povezano (bez pristupa porukama)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Povezano (bez telefona ili medija)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Povezano, baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Povezano (bez telefona), baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 94c3d56..efa29ee 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desconnectada"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desactivat"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Error de configuració d\'IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"No s\'ha connectat a la xarxa perquè la qualitat és baixa"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Error de connexió Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema d\'autenticació"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"No es pot connectar"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"No es pot connectar a <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"No es connectarà automàticament"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No hi ha accés a Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Desada per <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connectat a una xarxa d\'ús mesurat"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Connectada automàticament a través de: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Connectada automàticament a través d\'un proveïdor de valoració de xarxes"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connectada mitjançant %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connectat mitjançant <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible mitjançant %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toca per registrar-te"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sense connexió a Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"No es pot accedir al servidor DNS privat"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sense connexió a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Cal iniciar la sessió"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"El punt d\'accés està temporalment ple"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connectat mitjançant %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponible mitjançant %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"S\'està obrint <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"No s\'ha pogut connectar"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"S\'està completant el registre…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"No s\'ha pogut completar el registre. Toca per tornar-ho a provar."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"S\'ha completat el registre. S\'està connectant…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Molt lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Correcta"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Mitjana"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Ràpida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Molt ràpida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Caducada"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"S\'està vinculant..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connectat (sense accés al telèfon)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connectat (sense contingut multimèdia)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connectat (sense accés als missatges)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connectat (sense telèfon ni multimèdia)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> connectat, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> connectat (sense accés al telèfon), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria"</string>
@@ -668,7 +658,7 @@
<string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"Si emets <xliff:g id="SWITCHAPP">%1$s</xliff:g> o canvies la sortida, l\'emissió actual s\'aturarà"</string>
<string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Emet <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
<string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Canvia la sortida"</string>
- <string name="back_navigation_animation" msgid="8105467568421689484">"Animacions per a les accions de tornada predictives"</string>
- <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activa animacions del sistema per a la tornada predictiva."</string>
+ <string name="back_navigation_animation" msgid="8105467568421689484">"Animacions de retrocés predictiu"</string>
+ <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activa animacions del sistema de retrocés predictiu."</string>
<string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Aquesta configuració activa animacions del sistema per a accions gestuals predictives. Requereix definir enableOnBackInvokedCallback com a \"true\" en cada aplicació al fitxer de manifest."</string>
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 6746ddf..3736f93 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Odpojeno"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Vypnuto"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Selhání konfigurace protokolu IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nejste připojeni, protože síť je příliš slabá"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Selhání připojení Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problém s ověřením"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nelze se připojit"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"K síti <xliff:g id="AP_NAME">%1$s</xliff:g> se nelze připojit"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Připojení nebude automaticky navázáno"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nebyl zjištěn žádný přístup k internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Připojeno k měřené síti"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automaticky připojeno přes poskytovatele %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automaticky připojeno přes poskytovatele hodnocení sítí"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Připojeno prostřednictvím %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Připojeno přes <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupné prostřednictvím %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Klepnutím se zaregistrujete"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nejste připojeni k internetu"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Nelze získat přístup k soukromému serveru DNS"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nejste připojeni k internetu"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Je vyžadováno přihlášení"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Přístupový bod je dočasně zaplněn"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Připojeno prostřednictvím %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dostupné prostřednictvím %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Spouštění aplikace <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nelze se připojit"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Dokončování registrace…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registraci se nepodařilo dokončit. Klepnutím opakujte akci."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registrace byla dokončena. Připojování…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Velmi pomalá"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Pomalá"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Střední"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rychlá"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Velmi rychlá"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Platnost vypršela"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Párování..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez telefonu)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez médií)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez přístupu ke zprávám)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez telefonu a médií)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>, úroveň baterie <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Připojeno k zařízení <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (bez telefonu), úroveň baterie <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index bee5b0f..849604d 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Afbrudt"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Deaktiveret"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-konfigurationsfejl"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ingen forbindelse på grund af lav netværkskvalitet"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi-forbindelsesfejl"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem med godkendelse"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Kan ikke forbinde"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Der kan ikke oprettes forbindelse til \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Der oprettes ikke automatisk forbindelse"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ingen internetadgang"</string>
<string name="saved_network" msgid="7143698034077223645">"Gemt af <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Der er oprettet forbindelse til det forbrugsbaserede netværk"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatisk tilsluttet via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatisk forbundet via udbyder af netværksvurdering"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Tilsluttet via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Forbundet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Tilgængelig via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tryk for at registrere dig"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Intet internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Der er ikke adgang til den private DNS-server"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Intet internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Login er påkrævet"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Adgangspunktet er midlertidigt fuldt"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Tilsluttet via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Tilgængelig via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Åbner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Der kunne ikke oprettes forbindelse"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Fuldfører registrering…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registreringen kunne ikke fuldføres. Tryk for at prøve igen."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registreringen er fuldført. Opretter forbindelse…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Meget langsom"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Langsom"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Middel"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Hurtig"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Meget hurtig"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Udløbet"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Parrer..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (ingen telefon)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (ingen medier)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (ingen adgang til beskeder)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (ingen telefon eller medier)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> – batteriniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (ingen telefon) – batteriniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 9082210..d736d59 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Nicht verbunden"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Deaktiviert"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-Konfigurationsfehler"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Keine Verbindung aufgrund der geringen Netzwerkqualität"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WLAN-Verbindungsfehler"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentifizierungsproblem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Verbindung nicht möglich"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Keine Verbindung zu \"<xliff:g id="AP_NAME">%1$s</xliff:g>\" möglich"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Kein automatischer Verbindungsaufbau"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Kein Internetzugriff"</string>
<string name="saved_network" msgid="7143698034077223645">"Gespeichert durch <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Mit kostenpflichtigem Netzwerk verbunden"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatisch über %1$s verbunden"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatisch über Anbieter von Netzwerkbewertungen verbunden"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Über %1$s verbunden"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Verfügbar über %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Zum Anmelden tippen"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Kein Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Auf den privaten DNS-Server kann nicht zugegriffen werden"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Kein Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Anmeldung erforderlich"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Zugangspunkt vorübergehend voll belegt"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Über %1$s verbunden"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Verfügbar über %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wird geöffnet"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Verbindung nicht möglich"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Anmeldung wird abgeschlossen…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Anmeldung konnte nicht abgeschlossen werden. Tippe, um es noch einmal zu versuchen."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Anmeldung abgeschlossen. Verbindung wird hergestellt…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Sehr langsam"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Langsam"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Mittel"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Mittel"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Schnell"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Sehr schnell"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Abgelaufen"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Wird gekoppelt…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Mit <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> verbunden (kein Telefon-Audio)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Mit <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> verbunden (kein Medien-Audio)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Mit <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> verbunden (kein Nachrichtenzugriff)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Mit <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> verbunden (weder Telefon- noch Medien-Audio)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Mit <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> verbunden, Akkustand bei <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Mit <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> verbunden (kein Telefon-Audio), Akkustand bei <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 37be5b0..e76b933 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Αποσυνδεδεμένο"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Απενεργοποιημένο"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Αποτυχία διαμόρφωσης διεύθυνσης IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Δεν υπάρχει σύνδεση λόγω χαμηλής ποιότητας δικτύου"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Αποτυχία σύνδεσης Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Πρόβλημα ελέγχου ταυτότητας"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Αδυναμία σύνδεσης"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Δεν είναι δυνατή η σύνδεση στο δίκτυο \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Δεν θα συνδεθεί αυτόματα"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Δεν υπάρχει πρόσβαση στο διαδίκτυο"</string>
<string name="saved_network" msgid="7143698034077223645">"Αποθηκεύτηκε από <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Σύνδεση σε δίκτυο με ογκοχρέωση"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Συνδέθηκε αυτόματα μέσω %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Συνδέθηκε αυτόματα μέσω παρόχου αξιολόγησης δικτύου"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Συνδέθηκε μέσω %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Συνδέθηκε μέσω <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Διαθέσιμο μέσω %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Πατήστε για εγγραφή"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Χωρίς σύνδεση στο διαδίκτυο"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Δεν είναι δυνατή η πρόσβαση στον ιδιωτικό διακομιστή DNS."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Δεν υπάρχει σύνδεση στο διαδίκτυο"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Απαιτείται σύνδεση"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Το σημείο πρόσβασης είναι προσωρινά πλήρες"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Συνδέθηκε μέσω %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Διαθέσιμο μέσω %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Άνοιγμα <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Δεν ήταν δυνατή η σύνδεση"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Ολοκλήρωση εγγραφής…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Δεν ήταν δυνατή η ολοκλήρωση της εγγραφής. Πατήστε για να δοκιμάσετε ξανά."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Η εγγραφή ολοκληρώθηκε. Σύνδεση…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Πολύ αργή"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Αργή"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ΟΚ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Μέτρια"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Γρήγορη"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Πολύ γρήγορη"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Έληξε"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Σύζευξη..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Σε σύνδεση (χωρίς τηλέφωνο)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Σε σύνδεση (χωρίς μέσα)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Σε σύνδεση (χωρίς πρόσβαση σε μηνύματα)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Σε σύνδεση (χωρίς τηλέφωνο ή μέσα)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Σε σύνδεση, μπαταρία <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Σε σύνδεση (χωρίς τηλέφωνο), μπαταρία <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index cc24ba4..09bc065 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Disconnected"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disabled"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Configuration Failure"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Not connected due to low quality network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentication problem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Can\'t connect"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Won\'t automatically connect"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No Internet access"</string>
<string name="saved_network" msgid="7143698034077223645">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connected to metered network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatically connected via network rating provider"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connected via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Access point temporarily full"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connected via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Couldn’t connect"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Couldn’t complete sign-up. Tap to try again"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Sign-up complete. Connecting…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Very slow"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Slow"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medium"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Fast"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Very fast"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expired"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pairing…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index ef72b12..77b20a6 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Disconnected"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disabled"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Configuration Failure"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Not connected due to low quality network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentication problem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Can\'t connect"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Won\'t automatically connect"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No Internet access"</string>
<string name="saved_network" msgid="7143698034077223645">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connected to metered network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatically connected via network rating provider"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connected via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Access point temporarily full"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connected via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Couldn’t connect"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Couldn’t complete sign-up. Tap to try again"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Sign-up complete. Connecting…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Very slow"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Slow"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medium"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Fast"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Very fast"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expired"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pairing…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index cc24ba4..09bc065 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Disconnected"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disabled"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Configuration Failure"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Not connected due to low quality network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentication problem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Can\'t connect"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Won\'t automatically connect"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No Internet access"</string>
<string name="saved_network" msgid="7143698034077223645">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connected to metered network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatically connected via network rating provider"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connected via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Access point temporarily full"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connected via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Couldn’t connect"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Couldn’t complete sign-up. Tap to try again"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Sign-up complete. Connecting…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Very slow"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Slow"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medium"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Fast"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Very fast"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expired"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pairing…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index cc24ba4..09bc065 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Disconnected"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disabled"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Configuration Failure"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Not connected due to low quality network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentication problem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Can\'t connect"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Won\'t automatically connect"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No Internet access"</string>
<string name="saved_network" msgid="7143698034077223645">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connected to metered network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatically connected via network rating provider"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connected via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"No Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Access point temporarily full"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connected via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Couldn’t connect"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Couldn’t complete sign-up. Tap to try again"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Sign-up complete. Connecting…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Very slow"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Slow"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medium"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Fast"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Very fast"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expired"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pairing…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 0fedf4b..f82a757 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Disconnected"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disabled"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Configuration Failure"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Not connected due to low quality network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi Connection Failure"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentication problem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Can\'t connect"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Won\'t automatically connect"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No internet access"</string>
<string name="saved_network" msgid="7143698034077223645">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connected to metered network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatically connected via network rating provider"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connected via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"No internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Private DNS server cannot be accessed"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"No internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sign in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Access point temporarily full"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connected via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Couldn’t connect"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completing sign-up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Couldn’t complete sign-up. Tap to try again."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Sign-up complete. Connecting…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Very Slow"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Slow"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medium"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Fast"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Very Fast"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expired"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pairing…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index fb976e5..1a4e307 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desconectado"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Inhabilitada"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Error de configuración IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"No se estableció conexión debido a la mala calidad de la red"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Error de conexión Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema de autenticación"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"No se puede establecer la conexión"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"No se puede establecer conexión con \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"No se conectará automáticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No hay acceso a Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Conectado a la red de uso medido"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conexión automática mediante %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectado automáticamente mediante proveedor de calificación de red"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conexión a través de %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Conexión a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible a través de %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Presiona para registrarte"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sin Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"No se puede acceder al servidor DNS privado"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sin Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Acceso obligatorio"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"El punto de acceso está completo temporalmente"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conexión a través de %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponible a través de %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"No se pudo establecer conexión"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completando registro…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"No se pudo completar el registro. Presiona para volver a intentarlo."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Se completó el registro. Conectando…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Muy lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Aceptar"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Media"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Muy rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Vencida"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Vinculando..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado (sin teléfono) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado (sin archivos multimedia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectado (sin acceso a mensajes) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectado (sin teléfono/multimedia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectado a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería)"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectado (sin teléfono) a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería)"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 6097023..fdf99e0 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desconectado"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Inhabilitado"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Error de configuración de IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"No conectado debido a la baja calidad de la red"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Error de conexión Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Error de autenticación"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"No se puede establecer conexión"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"No se puede establecer conexión con \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"No se establecerá conexión automáticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"No se ha detectado ningún acceso a Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Conectado a una red de uso medido"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conectada automáticamente a través de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectado automáticamente a través de un proveedor de valoración de redes"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conectado a través de %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Conectado a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible a través de %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toca para registrarte"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sin Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"No se ha podido acceder al servidor DNS privado"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sin Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Debes iniciar sesión"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Punto de acceso temporalmente lleno"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conectado a través de %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponible a través de %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"No se ha podido conectar"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completando registro…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"No se ha podido completar el registro. Toca para volver a intentarlo."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Se ha completado el registro. Conectando…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Muy lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Aceptable"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Media"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Muy rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Caducada"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Emparejando…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sin audio de teléfono)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado (sin audio multimedia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sin acceso a mensajes)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sin audio de teléfono ni multimedia)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectado a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería)"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectado (sin audio de teléfono) a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería)"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 2825c06..bcd395c 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Pole ühendatud"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Keelatud"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP seadistamise ebaõnnestumine"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Võrgu kehva kvaliteedi tõttu ei ühendatud"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi-ühenduse viga"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentimise probleem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Ei saa ühendada"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Võrguga „<xliff:g id="AP_NAME">%1$s</xliff:g>” ei saa ühendada"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Automaatselt ei ühendata"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Juurdepääs Internetile puudub"</string>
<string name="saved_network" msgid="7143698034077223645">"Salvestas: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Ühendatud mahupõhise võrguga"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Ühendus loodi automaatselt teenusega %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Ühendus loodi automaatselt võrgukvaliteedi hinnangute pakkuja kaudu"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Ühendatud üksuse %1$s kaudu"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Ühendatud võrgu <xliff:g id="NAME">%1$s</xliff:g> kaudu"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Saadaval üksuse %1$s kaudu"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Puudutage registreerumiseks"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Interneti pole"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Privaatsele DNS-serverile ei pääse juurde"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Interneti-ühendus puudub"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Nõutav on sisselogimine"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pääsupunkt on ajutiselt täis"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Ühendatud operaatori %1$s kaudu"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Saadaval operaatori %1$s kaudu"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Teenuse <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> avamine"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ühendust ei saanud luua"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Registreerimise lõpuleviimine …"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registreerimist ei saanud lõpule viia. Puudutage, et uuesti proovida."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registreerimine on lõpule viidud. Ühendamine …"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Väga aeglane"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Aeglane"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Hea"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Keskmine"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Kiire"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Väga kiire"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Aegunud"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Sidumine ..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Ühendatud (telefoni pole)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Ühendatud (meediat pole)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Ühendatud (juurdepääs sõnumitele puudub)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Ühendatud (telefoni ega meediat pole)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Ühendatud, aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Ühendatud (telefoni pole), aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 765e2f2..8e8150c 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Deskonektatuta"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desgaituta"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Ezin izan da konfiguratu IP helbidea"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ez dago konektatuta sarearen kalitate eskasagatik"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Ezin izan da konektatu wifi-sarera"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentifikazio-arazoa"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Ezin da konektatu"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Ezin da konektatu \"<xliff:g id="AP_NAME">%1$s</xliff:g>\" sarera"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Ez da konektatuko automatikoki"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ezin da konektatu Internetera"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> aplikazioak gorde du"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Sare neurtu batera konektatuta"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s bidez automatikoki konektatuta"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatikoki konektatuta sare-balorazioen hornitzailearen bidez"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s bidez konektatuta"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> bidez konektatuta"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s bidez erabilgarri"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Sakatu erregistratzeko"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ez dago Interneteko konexiorik"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Ezin da atzitu DNS zerbitzari pribatua"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Ez dago Interneteko konexiorik"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Saioa hasi behar da"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Sarbide-puntua beteta dago aldi baterako"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s bidez konektatuta"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s bidez erabilgarri"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> irekitzen"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ezin izan da konektatu"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Erregistroa osatzen…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Ezin izan da osatu erregistroa. Berriro saiatzeko, ukitu hau."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Erregistratu da. Konektatzen…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Oso motela"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Motela"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Ados"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Tartekoa"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Bizkorra"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Oso bizkorra"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Iraungita"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Parekatzen…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Konektatuta (telefonoaren audiorik gabe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Konektatuta (gailuaren audiorik gabe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Konektatuta (mezuetarako sarbiderik gabe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Konektatuta (telefonoaren edo gailuaren audiorik gabe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Konektatuta. Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>."</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Konektatuta (telefonoaren audiorik gabe). Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>."</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index c0b8a27..d40f692 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"اتصال قطع شد"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"غیرفعال شد"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"پیکربندی IP انجام نشد"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"اتصال ناموفق به دلیل شبکه با کیفیت پایین"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"اتصال Wi-Fi برقرار نشد"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"مشکل اصالتسنجی"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"برقراری اتصال ممکن نیست"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"برقراری اتصال به «<xliff:g id="AP_NAME">%1$s</xliff:g>» ممکن نیست"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"اتصال بهصورت خودکار انجام نمیشود"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"دسترسی به اینترنت ندارد"</string>
<string name="saved_network" msgid="7143698034077223645">"ذخیرهشده توسط <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"اتصال به شبکه محدود برقرار شد"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"اتصال خودکار ازطریق %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"اتصال خودکار ازطریق ارائهدهنده ردهبندی شبکه"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"متصل از طریق %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"متصل شده ازطریق <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"در دسترس از طریق %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"برای ثبتنام ضربه بزنید"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"عدم اتصال به اینترنت"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"سرور DNS خصوصی قابل دسترسی نیست"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"عدم دسترسی به اینترنت"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ورود به سیستم لازم است"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ظرفیت نقطه دسترسی موقتاً تکمیل شده است"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"متصل ازطریق %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"در دسترس ازطریق %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"درحال بازکردن <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"متصل نشد"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"درحال تکمیل ثبتنام…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ثبتنام تکمیل نشد. برای امتحان مجدد ضربه بزنید."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ثبتنام کامل شد. درحال اتصال…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"بسیار آهسته"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"آهسته"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"تأیید"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"متوسط"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"سریع"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"خیلی سریع"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"منقضیشده"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"در حال مرتبطسازی..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"متصل (بدون تلفن)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"متصل (بدون رسانه)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"متصل (بدون دسترسی پیام)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"متصل (بدون تلفن یا رسانه)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"متصل، باتری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"متصل (بدون تلفن)، باتری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 66373b5..0d6036a 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Yhteys katkaistu"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Pois päältä"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-kokoonpanovirhe"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ei yhteyttä – verkko huonolaatuinen"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi-yhteysvirhe"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Todennusvirhe"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Yhdistäminen ei onnistu."</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Yhdistäminen verkkoon <xliff:g id="AP_NAME">%1$s</xliff:g> ei onnistu."</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Yhteyttä ei muodosteta automaattisesti"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ei internetyhteyttä"</string>
<string name="saved_network" msgid="7143698034077223645">"Tallentaja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Yhdistetty maksulliseen verkkoon"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automaattinen yhteys muodostettu palvelun %1$s kautta"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Yhdistetty automaattisesti verkon arviointipalvelun kautta"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Yhdistetty seuraavan kautta: %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Yhdistetty (<xliff:g id="NAME">%1$s</xliff:g>)"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Käytettävissä seuraavan kautta: %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Rekisteröidy napauttamalla"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ei internetyhteyttä"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Ei pääsyä yksityiselle DNS-palvelimelle"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Ei internetyhteyttä"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Sisäänkirjautuminen vaaditaan"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Yhteyspiste tilapäisesti täynnä"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Yhdistetty, verkko: %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Käytettävissä, verkko: %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Avataan <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ei yhteyttä"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Viimeistellään rekisteröitymistä…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Rekisteröityminen epäonnistui. Yritä uudelleen napauttamalla."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Rekisteröityminen valmis. Yhdistetään…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Hyvin hidas"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Hidas"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Kohtuullinen"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Nopea"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Hyvin nopea"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Vanhentunut"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Laiteparia muodostetaan..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Yhdistetty (ei puhelimen ääntä) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Yhdistetty (ei median ääntä) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Yhdistetty (ei pääsyä viesteihin) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Yhdistetty (ei puhelinta tai mediaa) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Yhdistetty, akun taso <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Yhdistetty (ei puhelimen ääntä), akun varaus <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index f1acddae..f276236 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Déconnecté"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Désactivés"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Échec de configuration de l\'adresse IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Non connecté en raison de la mauvaise qualité du réseau"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Échec de connexion Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problème d\'authentification"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Connexion impossible"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Impossible de se connecter à « <xliff:g id="AP_NAME">%1$s</xliff:g> »"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Reconnexion automatique impossible"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Aucun accès à Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Enregistrés par <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Appareil connecté à un réseau mesuré"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatiquement connecté par %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Connecté automatiquement par le fournisseur d\'avis sur le réseau"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connecté par %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connecté sur le réseau <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Accessible par %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toucher pour vous connecter"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Aucune connexion Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Impossible d\'accéder au serveur DNS privé"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Aucune connexion Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Connexion requise"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Le point d\'accès est temporairement plein"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connecté par %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Accessible par %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> en cours…"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Impossible de se connecter"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Terminaison de l\'inscription en cours…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Impossible de terminer l\'inscription. Touchez pour réessayer."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Inscription terminée. Connexion en cours…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Très lente"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lente"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Moyenne"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Élevée"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Très rapide"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expiré"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Association…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connecté (aucun téléphone) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connecté (aucun média) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connecté (aucun accès aux messages) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connecté (aucun téléphone ni média) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connecté, pile chargée à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connecté (aucun téléphone), pile chargée à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index d7cd507..7c4afa7 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Déconnecté"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Désactivé"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Échec de configuration de l\'adresse IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Non connecté en raison de la faible qualité du réseau"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Échec de la connexion Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problème d\'authentification"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Connexion impossible"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Impossible de se connecter au réseau \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Reconnexion automatique impossible"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Aucun accès à Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Enregistré lors de : <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connecté au réseau facturé à l\'usage"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Connecté automatiquement via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Connecté automatiquement via un fournisseur d\'évaluation du réseau"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Connecté via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponible via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Appuyez ici pour vous connecter"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Aucun accès à Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Impossible d\'accéder au serveur DNS privé"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Aucun accès à Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Connexion requise"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Point d\'accès temporairement plein"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connecté via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponible via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Impossible de se connecter"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Finalisation de l\'inscription…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Impossible de finaliser l\'inscription. Appuyez ici pour réessayer."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Inscription terminée. Connexion…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Très lente"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lente"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Correcte"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Moyenne"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Élevée"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Très rapide"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Arrivé à expiration"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Association…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connecté (aucun téléphone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connecté (aucun contenu mutimédia)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Connecté (sans accès aux messages)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connecté (aucun tél./contenu multimédia)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Connecté, batterie à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Connecté (aucun téléphone), batterie à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 30ef44e..95d5e21 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Rede desconectada"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desactivadas"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Erro na configuración de IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Non se estableceu conexión porque a rede é de baixa calidade"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Erro na conexión wifi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema de autenticación"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Non se pode establecer conexión"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Non se pode establecer conexión coa aplicación <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Non se conectará automaticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Sen acceso a Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Gardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Estableceuse conexión coa rede sen tarifa plana"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conectouse automaticamente a través de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectada automaticamente a través dun provedor de valoración de redes"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conectado a través de %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Wifi conectada a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dispoñible a través de %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toca para rexistrarte"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Non hai conexión a Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Non se puido acceder ao servidor DNS privado"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Non hai conexión a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"É obrigatorio iniciar sesión"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"O punto de acceso está temporalmente cheo"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conectado a través de %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dispoñible a través de %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Non se puido establecer conexión"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completando o rexistro…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Non se puido completar o rexistro. Toca para tentalo de novo."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Completouse o rexistro. Conectando…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Moi lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Aceptar"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Media"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Moi rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Caducou"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Vinculando..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sen teléfono)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sen audio multimedia)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sen acceso a mensaxes)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectado a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (sen tel./audio multimedia)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectado a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>, batería ao <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectado a <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (sen teléfono), batería ao <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 20dbf4f..e8acbd5 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ડિસ્કનેક્ટ કર્યું"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"અક્ષમ કર્યો"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP કન્ફિગરેશન નિષ્ફળ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ઓછી ગુણવત્તાવાળા નેટવર્કના લીધે કનેક્ટ થયું નથી"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi કનેક્શન નિષ્ફળ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"પ્રમાણીકરણ સમસ્યા"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"કનેક્ટ કરી શકાતું નથી"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' સાથે કનેક્ટ કરી શકાતું નથી"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ઑટોમૅટિક રીતે કનેક્ટ કરશે નહીં"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"કોઈ ઇન્ટરનેટ ઍક્સેસ નથી"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા સચવાયું"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"મીટર્ડ (ડેટા નિયંત્રણ) નેટવર્ક સાથે કનેક્ટેડ છે"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s દ્વારા સ્વત: કનેક્ટ થયેલ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"નેટવર્ક રેટિંગ પ્રદાતા દ્વારા ઑટોમૅટિક રીતે કનેક્ટ થયું"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા કનેક્ટ થયેલ"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s દ્વારા ઉપલબ્ધ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"સાઇન અપ કરવા માટે ટૅપ કરો"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"કોઈ ઇન્ટરનેટ નથી"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ખાનગી DNS સર્વર ઍક્સેસ કરી શકાતા નથી"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ઇન્ટરનેટ ઍક્સેસ નથી"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"સાઇન ઇન આવશ્યક"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s દ્વારા ઉપલબ્ધ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ખોલી રહ્યાં છીએ"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"કનેક્ટ કરી શકાયું નથી"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"સાઇન અપ પૂર્ણ કરી રહ્યા છીએ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"સાઇન અપ પૂર્ણ કરી શકાયું નથી. ફરી પ્રયાસ કરવા માટે ટૅપ કરો."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"સાઇન અપ પૂર્ણ. કનેક્ટ કરી રહ્યાં છીએ…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ખૂબ જ ધીમી"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ધીમી"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ઓકે"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"મધ્યમ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ઝડપી"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ખૂબ ઝડપી"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"સમય સમાપ્ત થયો"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"જોડી કરી રહ્યું છે…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ ફોન નથી)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ મીડિયા નથી)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ સંદેશ ઍક્સેસ નથી)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (ફોન કે મીડિયા નથી)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> સાથે કનેક્ટ થયેલ, બૅટરી <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ ફોન નથી), બૅટરી <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index db53698..1c4e4a0 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"डिसकनेक्ट किया गया"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"अक्षम"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP कॉन्फ़िगरेशन की विफलता"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"खराब नेटवर्क होने के कारण कनेक्ट नहीं हुआ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"वाईफ़ाई कनेक्शन विफलता"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"पुष्टि नहीं हो सकी"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"कनेक्ट नहीं हो पा रहा है"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' से कनेक्ट नहीं हो पा रहा है"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"अपने आप कनेक्ट नहीं होगा"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"इंटरनेट नहीं है"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"सीमित डेटा वाले नेटवर्क से कनेक्ट किया गया"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s के ज़रिए ऑटोमैटिक रूप से कनेक्ट है"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"नेटवर्क रेटिंग कंपनी के ज़रिए अपने आप कनेक्ट है"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s के द्वारा उपलब्ध"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> के ज़रिए कनेक्ट किया गया"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s के द्वारा उपलब्ध"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप करने के लिए टैप करें"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"इंटरनेट कनेक्शन नहीं है"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"निजी डीएनएस सर्वर को ऐक्सेस नहीं किया जा सकता"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"इंटरनेट कनेक्शन नहीं है"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"साइन इन करना ज़रूरी है"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ऐक्सेस पॉइंट फ़िलहाल भरा हुआ है"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s के ज़रिए कनेक्ट"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s के ज़रिए उपलब्ध"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> खोला जा रहा है"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"कनेक्ट नहीं किया जा सका"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"साइन-अप पूरा हो रहा है…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"साइन-अप पूरा नहीं हो सका. फिर से कोशिश करने के लिए टैप करें."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"साइन-अप पूरा हुआ. कनेक्ट हो रहा है…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"अत्यधिक धीमी"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"धीमी"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ठीक है"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"मध्यम"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"तेज़"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"बहुत ज़्यादा तेज़"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"समयसीमा खत्म हो गई"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"जोड़ा जा रहा है…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"जुड़ गया (फ़ोन के ऑडियो को छोड़कर)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"जुड़ गया (मीडिया ऑडियो को छोड़कर)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"जुड़ गया (मैसेज का ऐक्सेस नहीं)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"जुड़ गया (फ़ोन या मीडिया ऑडियो को छोड़कर)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"जुड़ गया, बैटरी का लेवल <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"जुड़ गया (फ़ोन के ऑडियो को छोड़कर), बैटरी का लेवल <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 89fcb8e..06166f6 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Nije povezano"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Onemogućeno"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Konfiguracija IP-a nije uspjela"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Niste povezani jer je mreža loše kvalitete"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Povezivanje s Wi-Fijem nije uspjelo"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem u autentifikaciji"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Povezivanje nije uspjelo"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Povezivanje s aplikacijom \"<xliff:g id="AP_NAME">%1$s</xliff:g>\" nije uspjelo"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Neće se povezati automatski"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nema pristupa internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Spremila aplik. <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Povezano s mrežom s ograničenim prometom"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatski povezan putem %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatski povezan putem ocjenjivača mreže"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Povezano putem %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Povezan putem mreže <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dostupno putem %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Dodirnite da biste se registrirali"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nema interneta"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Nije moguće pristupiti privatnom DNS poslužitelju"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nema interneta"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Obavezna prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pristupna je točka privremeno puna"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Povezano putem mreže %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dostupno putem mreže %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Otvaranje aplikacije <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Povezivanje nije uspjelo"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Dovršavanje registracije…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nije moguće dovršiti registraciju. Dodirnite za ponovni pokušaj."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registracija je dovršena. Povezivanje…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Vrlo sporo"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Sporo"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"U redu"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Srednje"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Brzo"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Vrlo brzo"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Isteklo"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Uparivanje…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Povezano (bez telefona): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Povezano (bez medija): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Povezano (bez pristupa porukama): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Povezano (bez telefona i medija): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Povezano, baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Povezano (bez telefona), baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 21dbfe8..af5a114 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Leválasztva"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Letiltva"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-konfigurációs hiba"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nem kapcsolódik a hálózat rossz minősége miatt"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi-kapcsolati hiba"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Azonosítási probléma"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nem lehet csatlakozni"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nem lehet csatlakozni a(z) „<xliff:g id="AP_NAME">%1$s</xliff:g>” hálózathoz"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nem csatlakozik automatikusan"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nincs internet-hozzáférés"</string>
<string name="saved_network" msgid="7143698034077223645">"Mentette: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Forgalomkorlátos hálózathoz csatlakozva"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatikusan csatlakozott a következőn keresztül: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatikusan csatlakozott a hálózatértékelés szolgáltatóján keresztül"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Csatlakozva a következőn keresztül: %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Kapcsolódva a következőn keresztül: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Elérhető a következőn keresztül: %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Koppintson a regisztrációhoz"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nincs internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"A privát DNS-kiszolgálóhoz nem lehet hozzáférni"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nincs internetkapcsolat"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Bejelentkezést igényel"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"A hozzáférési pont átmenetileg megtelt"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Csatlakozva a következőn keresztül: %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Elérhető a következőn keresztül: %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> megnyitása"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nem sikerült csatlakozni"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Regisztráció befejezése…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nem sikerült a regisztráció befejezése. Koppintással újrapróbálkozhat."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"A regisztráció befejeződött. Csatlakozás…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Nagyon lassú"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lassú"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Rendben"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Közepes"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Gyors"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Nagyon gyors"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Lejárt"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Párosítás..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Csatlakoztatva (telefonhang nélkül)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Csatlakoztatva (médiahang nélkül)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Csatlakoztatva (nincs üzenet-hozzáférés)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Csatlakoztatva (nincs telefon- és médiahang)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Csatlakoztatva, az akkumulátor töltöttsége: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Csatlakoztatva (telefonhang nélkül); az akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 4affd4f..61c3e7e 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Կապ չկա"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Անջատված"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP կարգավորման ձախողում"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Չի կապակցվել ցանցի թույլ ազդանշանի պատճառով"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi կապի ձախողում"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Նույնականացման խնդիր"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Կապ չկա"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Հնարավոր չէ միանալ «<xliff:g id="AP_NAME">%1$s</xliff:g>»-ին"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Չի միանա ավտոմատ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ինտերնետ կապ չկա"</string>
<string name="saved_network" msgid="7143698034077223645">"Պահվել է՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Միացած է վճարովի թրաֆիկով ցանցի"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Ավտոմատ կերպով կապակցվել է %1$s-ի միջոցով"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Ավտոմատ միացել է ցանցերի վարկանիշի մատակարարի միջոցով"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Միացված է %1$s-ի միջոցով"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Հասանելի է %1$s-ի միջոցով"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Հպեք՝ գրանցվելու համար"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Կապ չկա"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Մասնավոր DNS սերվերն անհասանելի է"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Ինտերնետ կապ չկա"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Անհրաժեշտ է մուտք գործել"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Հասանելիության կետը ժամանակավորապես լիքն է"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Միացված է %1$s-ի միջոցով"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Հասանելի է %1$s-ի միջոցով"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>, բացվում է"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Չհաջողվեց միանալ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Գրանցումն ավարտվում է…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Չհաջողվեց ավարտել գրանցումը: Հպեք` նորից փորձելու համար:"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Գրանցումն ավարտված է: Միացում…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Շատ դանդաղ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Դանդաղ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Լավ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Միջին"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Արագ"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Շատ արագ"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Սպառվել է"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Զուգակցում..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Միացավ <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> սարքին (հեռախոս չկա)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Միացավ <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> սարքին (մեդիա չկա)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Միացավ <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> սարքին (հաղորդագրություններ չկան)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Միացավ <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> սարքին (հեռախոս կամ մեդիա չկա)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Միացված է, մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Միացված է (հեռախոս չկա), մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 69174cf..d7f5857 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Terputus"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Nonaktif"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Kegagalan Konfigurasi IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Tidak terhubung karena jaringan berkualitas rendah"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Kegagalan Sambungan Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Masalah autentikasi"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Tidak dapat terhubung"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Tidak dapat terhubung ke \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Tidak akan terhubung otomatis"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Tidak ada akses internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Disimpan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Terhubung ke jaringan berbayar"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Terhubung otomatis melalui %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Otomatis terhubung melalui penyedia rating jaringan"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Terhubung melalui %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Terhubung melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Tersedia melalui %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Ketuk untuk mendaftar"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Tidak ada internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Server DNS pribadi tidak dapat diakses"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Tidak ada internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Perlu login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Titik akses penuh untuk sementara"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Terhubung melalui %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Tersedia melalui %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Tidak dapat terhubung"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Menyelesaikan pendaftaran…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Tidak dapat menyelesaikan pendaftaran. Ketuk untuk mencoba lagi."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Pendaftaran selesai. Menyambungkan…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Sangat Lambat"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lambat"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Oke"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Sedang"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Cepat"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Sangat Cepat"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Sudah tidak berlaku"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Menyambungkan..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Terhubung (tanpa ponsel)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Terhubung (tanpa media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Terhubung (tanpa akses pesan)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Terhubung (tanpa ponsel atau media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Terhubung, baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Terhubung (tanpa ponsel), baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index b541d50..4862904 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Aftengt"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Óvirkt"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-stillingarvilla"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Tenging er ekki til staðar því nettengingin er léleg"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi-tengingarvilla"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Vandamál við auðkenningu"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Ekki tókst að tengjast"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Ekki tókst að tengjast við „<xliff:g id="AP_NAME">%1$s</xliff:g>“"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Mun ekki tengjast sjálfkrafa"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Enginn netaðgangur"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> vistaði"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Tengdist neti með mældri notkun"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Sjálfkrafa tengt um %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Sjálfkrafa tengt um netgæðaveitu"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Tengt í gegnum %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Tenging í gegnum <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Í boði í gegnum %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Ýttu til að skrá þig"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Engin nettenging"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Ekki næst í DNS-einkaþjón"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Engin nettenging"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Innskráningar krafist"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Aðgangsstaður tímabundið fullur"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Tengt í gegnum %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Í boði í gegnum %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Opnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ekki tókst að tengjast"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Gengur frá nýskráningu…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Ekki tókst að ljúka við nýskráningu. Ýttu til að reyna aftur."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Nýskráningu lokið. Tengist…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Mjög hægt"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Hægt"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Í lagi"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Miðlungshratt"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Hratt"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Mjög hratt"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Útrunnin"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Parar…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Tengt (enginn sími) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Tengt (ekkert efni) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Tengt (enginn aðgangur að skilaboðum) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Tengt (enginn sími eða efni) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Tengt, staða rafhlöðu <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Tengt (enginn sími), staða rafhlöðu <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 4e948a4..9e5a224 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Non connessa"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Disattivata"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Errore configurazione IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Impossibile connettersi a causa della bassa qualità della rete"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Errore connessione Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema di autenticazione"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Impossibile stabilire una connessione"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Impossibile connettersi a \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Non verrà eseguita la connessione automatica"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nessun accesso a Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Salvata da <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Connessione a rete a consumo effettuata"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Collegato automaticamente tramite %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Collegato automaticamente tramite fornitore di servizi di valutazione rete"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Collegato tramite %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Connesso tramite <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponibile tramite %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tocca per registrarti"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Internet assente"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Non è possibile accedere al server DNS privato"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nessuna connessione a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Accesso richiesto"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Punto di accesso momentaneamente al completo"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Connesso tramite %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponibile tramite %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Apertura di <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Impossibile collegarsi"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Completamento della registrazione…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Impossibile completare la registrazione. Tocca per riprovare."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registrazione completata. Connessione…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Molto lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Media"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Veloce"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Molto veloce"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Scaduta"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Accoppiamento…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (telefono escluso)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (contenuti multimediali esclusi)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (nessun accesso ai messaggi)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (telefono o media esclusi)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> connesso, batteria al <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> connesso (telefono escluso), batteria al <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index f1d48f7..c6afad9 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"מנותקת"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"מושבת"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"כשל בתצורת IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"אין חיבור לרשת, כי איכות הרשת נמוכה"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"כשל בחיבור Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"בעיית אימות"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"לא ניתן להתחבר"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"לא ניתן להתחבר אל <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"לא יתבצע חיבור באופן אוטומטי"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"אין גישה לאינטרנט"</string>
<string name="saved_network" msgid="7143698034077223645">"נשמר על ידי <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"יש חיבור לרשת המבוססת על חיוב לפי שימוש בנתונים"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"מחובר אוטומטית דרך %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"מחובר אוטומטית דרך ספק של דירוג רשת"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"מחובר דרך %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"מחוברת באמצעות <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"זמינה דרך %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"יש להקיש כדי להירשם"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"אין אינטרנט"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"לא ניתן לגשת לשרת DNS הפרטי"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"אין אינטרנט"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"נדרשת כניסה"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"נקודת הגישה מלאה באופן זמני"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"מחובר לרשת של %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"זמינה דרך %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"מתבצעת פתיחה של <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"לא ניתן היה להתחבר"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"מתבצעת השלמה של ההרשמה…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"לא ניתן היה להשלים את ההרשמה. יש להקיש כדי לנסות שוב."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"תהליך ההרשמה הסתיים. בתהליך התחברות…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"איטית מאוד"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"איטית"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"אישור"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"בינונית"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"מהירה"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"מהירה מאוד"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"התוקף פג"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ההתאמה מתבצעת..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"מחובר (ללא טלפון)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"מחובר (ללא מדיה)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"מחובר (ללא גישה להודעות)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"מחובר (ללא טלפון או מדיה)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"מחובר, שיעור הסוללה <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"מחובר (ללא טלפון), שיעור הסוללה <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 8cfc888..43fe178 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"未接続"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"無効"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP設定エラー"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ネットワークの品質が低いため、接続されていません"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi接続エラー"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"認証に問題"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"接続できません"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"「<xliff:g id="AP_NAME">%1$s</xliff:g>」に接続できません"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"自動的に接続されません"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"インターネット接続なし"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g>により保存"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"従量制ネットワークに接続しました"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s 経由で自動的に接続しています"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ネットワーク評価プロバイダ経由で自動的に接続しています"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s経由で接続"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> で接続しました"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s経由で使用可能"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"タップして登録してください"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"インターネットに接続されていません"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"プライベート DNS サーバーにアクセスできません"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"インターネット未接続"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ログインが必要"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"アクセス ポイントが一時的にいっぱいです"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s 経由で接続済み"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s 経由で使用可能"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"「<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>」を開いています"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"接続できませんでした"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"登録を完了しています…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"登録を完了できませんでした。タップしてもう一度お試しください。"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"登録が完了しました。接続しています…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"とても遅い"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"遅い"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"普通"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"速い"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"非常に速い"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"期限切れ"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ペアとして設定中..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"接続済み(電話なし): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"接続済み(メディアなし): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"接続済み(メッセージ アクセスなし): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"接続済み(電話、メディアなし): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"接続済み、バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>: <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"接続済み(電話なし)、バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>: <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 3cc44ce..c498b61 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"კავშირი გაწყვეტილია"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"გამორთულია"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP კონფიგურაციის შეფერხება"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"არ არის დაკავშირებული დაბალი ხარისხის ქსელის გამო"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi კავშირის შეფერხება"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ავთენტიკაციის პრობლემა"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"დაკავშირება ვერ ხერხდება"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"<xliff:g id="AP_NAME">%1$s</xliff:g>-თან დაკავშირება ვერ ხერხდება"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ავტომატურად დაკავშირება ვერ მოხერხდება"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ინტერნეტ-კავშირი არ არის"</string>
<string name="saved_network" msgid="7143698034077223645">"შენახული <xliff:g id="NAME">%1$s</xliff:g>-ის მიერ"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"დაკავშირებულია ფასიან ქსელთან"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"ავტომატურად დაკავშირდა %1$s-ის მეშვეობით"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ავტომატურად დაკავშირდა ქსელის ხარისხის შეფასების პროვაიდერის მეშვეობით"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s-ით დაკავშირებული"</string>
<string name="connected_via_app" msgid="3532267661404276584">"დაკავშირებულია <xliff:g id="NAME">%1$s</xliff:g>-ით"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"ხელმისაწვდომია %1$s-ით"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"შეეხეთ რეგისტრაციისთვის"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ინტერნეტ-კავშირი არ არის"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"პირად DNS სერვერზე წვდომა შეუძლებელია"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ინტერნეტ-კავშირი არ არის"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"აუცილებელია სისტემაში შესვლა"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"წვდომის წერტილი დროებით გადატვირთულია"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s-ით დაკავშირებული"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"ხელმისაწვდომია %1$s-ით"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"მიმდინარეობს <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-ის გახსნა"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"დაკავშირება ვერ მოხერხდა"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"მიმდინარეობს რეგისტრაციის დასრულება…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"რეგისტრაციის დასრულება ვერ მოხერხდა. შეეხეთ ხელახლა საცდელად."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"რეგისტრაცია დასრულდა. მიმდინარეობს დაკავშირება…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ძალიან ნელი"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ნელი"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"კარგი"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"საშუალო"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"სწრაფი"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ძალიან სწრაფი"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ვადაგასულია"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"დაწყვილება…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"დაკავშირებულია (ტელეფონი არ არის)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"დაკავშირებულია (მედია არ არის)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"დაკავშირებულია (შეტყობინებებზე წვდომა არ არის)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"დაკავშირებულია (ტელეფონი ამ მედია არ არის)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"დაკავშირებულია. ბატარეის დონე: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"დაკავშირებულია (ტელეფონი არ არის). ბატარეის დონე: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 8eb7db7..363cd0e 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Ажыратылған"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Өшірілген"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP конфигурациясының қатесі"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Желі байланысының сапасы төмен болғандықтан қосылмады"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi байланысының қатесі"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Растау мәселесі"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Қосылу мүмкін емес"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\"<xliff:g id="AP_NAME">%1$s</xliff:g>\" қолданбасына қосылу мүмкін емес"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Автоматты қосылмайды"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Интернетпен байланыс жоқ"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> сақтаған"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Трафик саналатын желіге қосылды."</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s арқылы автоматты қосылды"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Желі рейтингі провайдері арқылы автоматты түрде қосылған"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s арқылы қосылған"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> арқылы жалғанған"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s арқылы қолжетімді"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Тіркелу үшін түртіңіз."</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернетпен байланыс жоқ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Жеке DNS серверіне кіру мүмкін емес."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернетпен байланыс жоқ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Аккаунтқа кіру керек"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Кіру нүктесі уақытша бос емес"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s арқылы қосылды"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s арқылы қолжетімді"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ашылуда"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Жалғанбады"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Тіркелу процесі аяқталуда…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Тіркелу процесі аяқталмады. Әрекетті қайталау үшін түртіңіз."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Тіркелу процесі аяқталды. Жалғануда…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Өте баяу"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Баяу"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Жарайды"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Орташа"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Жылдам"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Өте жылдам"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Мерзімі өтті"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Жұптауда..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (телефонсыз)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (аудиосыз)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (хабарларға кіруге рұқсат жоқ)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (телефонсыз не аудиосыз)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Жалғанды, батарея заряды: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Жалғанды (телефонсыз), батарея заряды: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 7bfa1c4..00668fe 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"បានផ្ដាច់"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"បានបិទ"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"ការកំណត់រចនាសម្ព័ន្ធ IP បរាជ័យ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"មិនអាចភ្ជាប់បានទេ ដោយសារបណ្តាញមានគុណភាពសេវាខ្សោយ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"ការភ្ជាប់ WiFi បរាជ័យ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"បញ្ហាក្នុងការផ្ទៀងផ្ទាត់"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"មិនអាចភ្ជាប់បានទេ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"មិនអាចភ្ជាប់ជាមួយ \'<xliff:g id="AP_NAME">%1$s</xliff:g>\' បានទេ"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"នឹងមិនភ្ជាប់ដោយស្វ័យប្រវត្តិទេ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"មិនមានការតភ្ជាប់អ៊ីនធឺណិតទេ"</string>
<string name="saved_network" msgid="7143698034077223645">"បានរក្សាទុកដោយ <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"បានភ្ជាប់ទៅបណ្ដាញដែលផ្អែកតាមទិន្នន័យដែលប្រើ"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"បានភ្ជាប់ដោយស្វ័យប្រវត្តិតាមរយៈ %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"បានភ្ជាប់ដោយស្វ័យប្រវត្តិតាមរយៈក្រុមហ៊ុនផ្តល់ការវាយតម្លៃលើបណ្តាញ"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"បានភ្ជាប់តាមរយៈ %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"ភ្ជាប់តាម <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"មានតាមរយៈ %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ចុចដើម្បីចុះឈ្មោះ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"គ្មានអ៊ីនធឺណិតទេ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"មិនអាចចូលប្រើម៉ាស៊ីនមេ DNS ឯកជនបានទេ"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"គ្មានអ៊ីនធឺណិតទេ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"តម្រូវឱ្យចូលគណនី"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"បានភ្ជាប់តាមរយៈ %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"មានតាមរយៈ %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"កំពុងបើក <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"មិនអាចភ្ជាប់បានទេ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"កំពុងបញ្ចប់ការចុះឈ្មោះ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"មិនអាចបញ្ចប់ការចុះឈ្មោះបានទេ។ សូមចុច ដើម្បីព្យាយាមម្ដងទៀត។"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ការចុះឈ្មោះបានបញ្ចប់។ កំពុងភ្ជាប់…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"យឺតណាស់"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"យឺត"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"យល់ព្រម"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"មធ្យម"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"លឿន"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"លឿនខ្លាំង"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"បានផុតកំណត់"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"កំពុងផ្គូផ្គង..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"បានភ្ជាប់ (គ្មានទូរសព្ទទេ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"បានភ្ជាប់ (គ្មានមេឌៀទេ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"បានភ្ជាប់ (គ្មានការចូលប្រើសារទេ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"បានភ្ជាប់ (គ្មានទូរសព្ទ ឬមេឌៀទេ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"បានភ្ជាប់ ហើយថ្មមានកម្រិត <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"បានភ្ជាប់ (គ្មានទូរសព្ទទេ) ហើយថ្មមានកម្រិត <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index e77f8d4..ebf742b 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP ಕಾನ್ಫಿಗರೇಶನ್ ವಿಫಲತೆ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ಕಡಿಮೆ ಗುಣಮಟ್ಟದ ನೆಟ್ವರ್ಕ್ನಿಂದಾಗಿ ಸಂಪರ್ಕ ಸಾಧಿಸಿಲ್ಲ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi ಸಂಪರ್ಕ ವಿಫಲತೆ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ಪ್ರಮಾಣೀಕರಣ ಸಮಸ್ಯೆ"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವಿಲ್ಲ"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> ನಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"ಮಾಪನ ಮಾಡಲಾದ ನೆಟ್ವರ್ಕ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ನೆಟ್ವರ್ಕ್ ರೇಟಿಂಗ್ ಒದಗಿಸುವವರ ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ಆ್ಯಪ್ ಮೂಲಕ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ಸೈನ್ ಅಪ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ಖಾಸಗಿ DNS ಸರ್ವರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ಸೈನ್ ಇನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ಅನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ಸೈನ್-ಅಪ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ಸೈನ್-ಅಪ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ಸೈನ್-ಅಪ್ ಪೂರ್ಣಗೊಂಡಿದೆ. ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ತುಂಬಾ ನಿಧಾನವಾಗಿದೆ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ನಿಧಾನ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ಸರಿ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ಮಧ್ಯಮ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ವೇಗ"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ತುಂಬಾ ವೇಗವಾಗಿದೆ"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ಅವಧಿ ಮುಕ್ತಾಯವಾಗಿದೆ"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ಜೋಡಿಸಲಾಗುತ್ತಿದೆ..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಫೋನ್ ಇಲ್ಲ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಮಾಧ್ಯಮವಿಲ್ಲ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ಗೆ (ಸಂದೇಶ ಪ್ರವೇಶವಿಲ್ಲ) ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಫೋನ್ ಅಥವಾ ಮಾಧ್ಯಮವಿಲ್ಲ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ಸಂಪರ್ಕಗೊಂಡಿದೆ, ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ ಮಟ್ಟ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಫೋನ್ ಇಲ್ಲ), ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ ಮಟ್ಟ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index fe81cb3..21c8091 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"연결 끊김"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"사용 중지됨"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP 설정 실패"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"저품질 네트워크로 인해 연결되지 않음"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi 연결 실패"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"인증 문제"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"연결할 수 없음"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'에 연결할 수 없음"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"자동으로 연결되지 않습니다."</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"인터넷에 연결되어 있지 않음"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g>(으)로 저장됨"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"데이터 전송량 제한이 있는 네트워크에 연결됨"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s을(를) 통해 자동으로 연결됨"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"네트워크 평가 제공업체를 통해 자동으로 연결됨"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s을(를) 통해 연결됨"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>을(를) 통해 연결됨"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s을(를) 통해 사용 가능"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"탭하여 가입"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"인터넷 연결 없음"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"비공개 DNS 서버에 액세스할 수 없습니다."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"인터넷 연결 없음"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"로그인 필요"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"액세스 포인트가 일시적으로 가득 참"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s을(를) 통해 연결됨"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s을(를) 통해 사용 가능"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> 여는 중"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"연결할 수 없음"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"가입 완료 중…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"가입을 완료할 수 없습니다. 다시 시도하려면 탭하세요."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"가입이 완료되었습니다. 연결 중…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"매우 느림"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"느림"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"보통"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"보통"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"빠름"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"매우 빠름"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"만료됨"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"페어링 중..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"연결됨(전화 없음)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"연결됨(미디어 없음)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"연결됨(메시지 액세스 권한 없음)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"연결됨(전화 또는 미디어 없음)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"연결됨, 배터리 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"연결됨(전화 없음), 배터리 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index d5dc291..076f317a 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Ажыратылды"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Өчүрүлгөн"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP конфигурациясы бузулду"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Тармактын сапаты начар болгондуктан, туташкан жок"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi туташуусу бузулду"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Аутентификация маселеси бар"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Туташпай жатат"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\"<xliff:g id="AP_NAME">%1$s</xliff:g>\" тармагына туташпай койду"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Автоматтык түрдө туташпайт"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Интернетке туташпай турат"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> тарабынан сакталды"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Чектелген трафикке туташтырылды"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s аркылуу автоматтык түрдө туташты"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Тармактар рейтингинин булагы аркылуу автоматтык түрдө туташты"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s аркылуу жеткиликтүү"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> аркылуу туташты"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s аркылуу жеткиликтүү"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Катталуу үчүн таптап коюңуз"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернет жок"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Жеке DNS сервери жеткиликсиз"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернет жок"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Аккаунтка кирүү талап кылынат"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Байланыш түйүнүнө өтө көп түзмөк туташып турат"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s аркылуу туташты"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s аркылуу иштейт"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ачылууда"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Туташпай койду"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Катталуу аяктоодо…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Катталуу аягына чыккан жок. Кайра аракет кылуу үчүн таптап коюңуз."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Катталуу аягына чыкты. Туташууда…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Өтө жай"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Жай"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Жарайт"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Орто"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Ылдам"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Абдан ылдам"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Эскирип калган"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Туташууда…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Туташып турат (телефониясыз)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Туташып турат (медиасыз)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Туташып турат (SMS/MMS жазышуусуз)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Туташып турат (телефониясыз же медиасыз)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Туташып турат, батареянын деңгээли – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Туташып турат (телефониясыз), батареянын деңгээли – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 578017c..9ebe67a 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ຕັດການເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ປິດການນຳໃຊ້"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"ການຕັ້ງຄ່າ IP ລົ້ມເຫຼວ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ບໍ່ໄດ້ເຊື່ອມຕໍ່ເນື່ອງຈາກຄຸນນະພາບເຄືອຂ່າຍຕໍ່າ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"ການເຊື່ອມຕໍ່ WiFi ລົ້ມເຫຼວ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ບັນຫາການພິສູດຢືນຢັນ"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາ \'<xliff:g id="AP_NAME">%1$s</xliff:g>\' ໄດ້"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ຈະບໍ່ເຊື່ອມຕໍ່ອັດຕະໂນມັດ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
<string name="saved_network" msgid="7143698034077223645">"ບັນທຶກໂດຍ <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍທີ່ມີການວັດແທກແລ້ວ"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"ເຊື່ອມຕໍ່ຜ່ານທາງ %1$s ໂດຍອັດຕະໂນມັດ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ເຊື່ອມຕໍ່ກັບອັດຕະໂນມັດແລ້ວຜ່ານຜູ້ໃຫ້ບໍລິການຄະແນນເຄືອຂ່າຍ"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string>
<string name="connected_via_app" msgid="3532267661404276584">"ເຊື່ອມຕໍ່ຜ່ານ <xliff:g id="NAME">%1$s</xliff:g> ແລ້ວ"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"ມີໃຫ້ຜ່ານ %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ແຕະເພື່ອສະໝັກ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ບໍ່ມີອິນເຕີເນັດ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ບໍ່ສາມາດເຂົ້າເຖິງເຊີບເວີ DNS ສ່ວນຕົວໄດ້"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ບໍ່ມີອິນເຕີເນັດ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ຈຳເປັນຕ້ອງເຂົ້າສູ່ລະບົບ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"ໃຊ້ໄດ້ຜ່ານ %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"ກຳລັງເປີດ <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ກຳລັງສຳເລັດການສະໝັກ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ບໍ່ສາມາດສຳເລັດການສະໝັກໄດ້. ແຕະເພື່ອລອງໃໝ່."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ສະໝັກສຳເລັດແລ້ວ. ກຳລັງເຊື່ອມຕໍ່…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ຊ້າຫຼາຍ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ຊ້າ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ຕົກລົງ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ປານກາງ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ໄວ"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ໄວຫຼາຍ"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ໝົດອາຍຸແລ້ວ"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ກຳລັງຈັບຄູ່..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີໂທລະສັບ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີມີເດຍ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີສິດເຂົ້າອ່ານຂໍ້ຄວາມ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີໂທລະສັບ ຫຼື ມີເດຍ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ເຊື່ອມຕໍ່ແລ້ວ, ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີໂທລະສັບ), ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index a2be901..fcea778 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Neprisijungta"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Neleidžiama"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP konfigūracijos triktis"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Neprisijungta dėl žemos kokybės tinklo"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"„Wi-Fi“ ryšio triktis"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentifikavimo problema"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nepavyksta prisijungti"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nepavyksta prisijungti prie „<xliff:g id="AP_NAME">%1$s</xliff:g>“"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nebus automatiškai prisijungiama"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nėra interneto ryšio"</string>
<string name="saved_network" msgid="7143698034077223645">"Išsaugojo <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Prisijungta prie matuojamo tinklo"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatiškai prisijungta naudojant „%1$s“"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatiškai prisijungta naudojant tinklo įvertinimo paslaugos teikėjo paslaugomis"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Prisijungta naudojant „%1$s“"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Prisijungta naudojant programą „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Pasiekiama naudojant „%1$s“"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Palieskite, kad prisiregistruotumėte"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nėra interneto ryšio"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Privataus DNS serverio negalima pasiekti"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nėra interneto ryšio"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Reikia prisijungti"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Prieigos taškas laikinai visiškai užimtas"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Prisijungta naudojant „%1$s“"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Pasiekiama naudojant „%1$s“"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Atidaroma: „<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>“"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nepavyko prisijungti"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Baigiamas prisiregistravimas…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nepavyko užbaigti prisiregistravimo. Jei norite bandyti dar kartą, palieskite."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Prisiregistravimas baigtas. Prijungiama…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Labai lėtas"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lėtas"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Gerai"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Vidutinis"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Greitas"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Labai greitas"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Baigėsi galiojimo laikas"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Susiejama..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Prisijungta (<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>), (telefono nėra)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Prisijungta (<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>), (medijos nėra)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Prisij. (<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>), (prieigos prie praneš. nėra)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Prisijungta (<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>), (telef. ar medijos nėra)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Prisijungta (<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>), akumuliatoriaus įkrovos lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Prisijungta (<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>), (telefono nėra), akumuliatoriaus įkrovos lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index d09617b..c280737 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Savienojums pārtraukts"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Atspējots"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP konfigurācijas kļūme"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Savienojums nav izveidots zemas kvalitātes tīkla dēļ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi savienojuma kļūme"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentificēšanas problēma"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nevar izveidot savienojumu"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nevar izveidot savienojumu ar tīklu <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Savienojums netiks izveidots automātiski"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nav piekļuves internetam"</string>
<string name="saved_network" msgid="7143698034077223645">"Saglabāja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Izveidots savienojums ar maksas tīklu"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automātiski savienots, izmantojot %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automātiski izveidots savienojums, izmantojot tīkla vērtējuma sniedzēju"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Savienots, izmantojot %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Savienojums ar <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Pieejams, izmantojot %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Pieskarieties, lai reģistrētos"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nav interneta"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Nevar piekļūt privātam DNS serverim."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nav piekļuves internetam"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Nepieciešama pierakstīšanās"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Piekļuves punkts īslaicīgi ir pilns"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Savienojums izveidots, izmantojot %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Pieejams, izmantojot %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Notiek lietotnes <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> atvēršana."</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nevarēja izveidot savienojumu"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Notiek reģistrācijas pabeigšana…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nevarēja pabeigt reģistrāciju. Pieskarieties, lai mēģinātu vēlreiz."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Reģistrācija ir pabeigta. Notiek savienojuma izveide…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Ļoti lēns"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lēns"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Labi"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Vidējs"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Ātrs"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Ļoti ātrs"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Beidzies derīguma termiņš"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Notiek pāra izveide..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Savienojums izveidots (nav tālrunis): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Savienojums izveidots (nav multivide): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Savienots (nav piekļuves ziņojumiem): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Savienots (nav tālrunis vai multivide): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Savienojums izveidots (<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>), akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Savienojums izveidots <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (nav tālrunis), akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 7dc9174..f849900 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Не е поврзано"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Оневозможено"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Конфигурирањето ИП не успеа"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Не е поврзано поради нискиот квалитет на мрежата"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Поврзувањето преку Wi-Fi не успеа"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Проблем со автентикација"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Не може да се поврзе"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Не може да се поврзе на „<xliff:g id="AP_NAME">%1$s</xliff:g>“"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Не може да се поврзе автоматски"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Нема пристап до интернет"</string>
<string name="saved_network" msgid="7143698034077223645">"Зачувано од <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Поврзано на мрежа со ограничен интернет"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Автоматски поврзано преку %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Автоматски поврзано преку оценувач на мрежа"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Поврзано преку %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Поврзано преку <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Достапно преку %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Допрете за да се регистрирате"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нема интернет"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Не може да се пристапи до приватниот DNS-сервер"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Нема интернет"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Потребно е најавување"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Пристапната точка привремено е преоптоварена"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Поврзано преку %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Достапно преку %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Се отвора <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Не може да се поврзе"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Се завршува регистрацијата…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Не може да се заврши регистрацијата. Допрете за да се обидете повторно."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Регистрацијата е завршена. Се поврзува…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Многу бавна"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Бавна"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Во ред"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Средна"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Брза"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Многу брза"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Истечено"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Се спарува..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без телефон)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без аудиовизуелни содржини)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без пристап до пораките)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (без телефон и аудиовизуел.)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>, ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Поврзан со <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (без телефон), ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index bae251a..cc15e03 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"വിച്ഛേദിച്ചു"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP കോൺഫിഗറേഷൻ പരാജയം"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"മോശം നെറ്റ്വർക്ക് ആയതിനാൽ കണക്റ്റായില്ല"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi കണക്ഷൻ പരാജയം"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ആധികാരികമാക്കുന്നതിലെ പ്രശ്നം"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"കണക്റ്റുചെയ്യാനാകുന്നില്ല"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' എന്നതിലേക്ക് കണക്റ്റുചെയ്യാനാകുന്നില്ല"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"സ്വയമേവ കണക്റ്റുചെയ്യില്ല"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> സംരക്ഷിച്ചത്"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"മീറ്റർ ചെയ്ത നെറ്റ്വർക്കിലേക്ക് കണക്റ്റ് ചെയ്തു"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s വഴി സ്വയമേവ ബന്ധിപ്പിച്ചു"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"നെറ്റ്വർക്ക് റേറ്റിംഗ് ദാതാവുമായി സ്വയം കണക്റ്റുചെയ്തു"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> മുഖേന കണക്റ്റ് ചെയ്തു"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s വഴി ലഭ്യം"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"സൈൻ അപ്പ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ഇന്റർനെറ്റ് ഇല്ല"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"സ്വകാര്യ DNS സെർവർ ആക്സസ് ചെയ്യാനാവില്ല"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ഇന്റർനെറ്റ് ഇല്ല"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"സൈൻ ഇൻ ചെയ്യേണ്ടത് ആവശ്യമാണ്"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ആക്സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s വഴി ലഭ്യം"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> തുറക്കുന്നു"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"കണക്റ്റ് ചെയ്യാനായില്ല"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"സൈൻ അപ്പ് പൂർത്തിയാക്കുന്നു…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"സൈൻ അപ്പ് പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"സൈൻ അപ്പ് പൂർത്തിയായി. കണക്റ്റ് ചെയ്യുന്നു…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"വളരെ കുറഞ്ഞ വേഗത്തിൽ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"കുറഞ്ഞ വേഗത്തിൽ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ശരി"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ഇടത്തരം"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"വേഗത്തിൽ"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"അതിവേഗം"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"കാലഹരണപ്പെട്ടത്"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ജോടിയാക്കുന്നു…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"കണക്റ്റ് ചെയ്തു (ഫോൺ ഇല്ല)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"കണക്റ്റ് ചെയ്തു (മീഡിയ ഇല്ല)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"കണക്റ്റ് ചെയ്തു (സന്ദേശ ആക്സസ് ഇല്ല)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"കണക്റ്റ് ചെയ്തു (ഫോണോ മീഡിയയോ ഇല്ല)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"കണക്റ്റ് ചെയ്തു, ബാറ്ററി <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"കണക്റ്റ് ചെയ്തു (ഫോൺ ഇല്ല), ബാറ്ററി നില <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 890f2c4..3701a30 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Салсан"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Идэвхгүйжүүлсэн"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP тохируулга амжилтгүй"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Сүлжээний чанар муу байгаа тул холбогдож чадсангүй"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi холболт амжилтгүй"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Баталгаажуулалтын асуудал"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Холбогдож чадсангүй"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'-д холбогдож чадсангүй"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Автоматаар холбогдохгүй"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Интернет хандалт алга"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> хадгалсан"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Хязгаартай сүлжээнд холбогдсон"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s-р автоматаар холбогдсон"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Сүлжээний үнэлгээ үзүүлэгчээр автоматаар холбогдох"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s-р холбогдсон"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g>-р холбогдсон"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s-р боломжтой"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Бүртгүүлэхийн тулд товшино уу"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Интернэт алга"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Хувийн DNS серверт хандах боломжгүй байна"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Интернэт алга"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Нэвтрэх шаардлагатай"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Хандах цэг түр хугацаанд дүүрсэн байна"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s-р холбогдсон"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s-р боломжтой"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-г нээж байна"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Холбогдож чадсангүй"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Бүртгэлийг дуусгаж байна…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Бүртгэлийг дуусгаж чадсангүй. Дахин оролдохын тулд товшино уу."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Бүртгүүлж дууслаа. Холбогдож байна…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Маш удаан"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Удаан"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ЗА"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Дунд"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Хурдан"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Маш хурдан"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Хугацаа дууссан"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Хослуулж байна…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Холбогдсон (утас байхгүй)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Холбогдсон (медиа байхгүй)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Холбогдсон (мессежийн хандалт байхгүй)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Холбогдсон (утас эсвэл медиа байхгүй)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Холбогдсон, батарей <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Холбогдсон (утас байхгүй), батарей <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index e87422d..3fffc1a 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"डिस्कनेक्ट केले"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"अक्षम"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP कॉंफिगरेशन अयशस्वी"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"कमी दर्जाच्या नेटवर्कमुळे कनेक्ट केलेले नाही"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi कनेक्शन अयशस्वी"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"प्रमाणीकरण समस्या"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"कनेक्ट करू शकत नाही"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'शी कनेक्ट करू शकत नाही"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"स्वयंचलितपणे कनेक्ट करणार नाही"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"इंटरनेट अॅक्सेस नाही"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे सेव्ह केले"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"मर्यादित नेटवर्कशी कनेक्ट केले आहे"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s द्वारे स्वयंचलितपणे कनेक्ट केले"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"नेटवर्क रेटिंग प्रदात्याद्वारे स्वयंचलितपणे कनेक्ट केले"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s द्वारे कनेक्ट केले"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे कनेक्ट केले"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s द्वारे उपलब्ध"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप करण्यासाठी टॅप करा"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"इंटरनेट नाही"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"खाजगी DNS सर्व्हर ॲक्सेस करू शकत नाही"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"इंटरनेट नाही"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"साइन इन करणे आवश्यक आहे"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"अॅक्सेस पॉइंट तात्पुरते भरलेले"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ने कनेक्ट केले"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s ने उपलब्ध"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> उघडत आहे"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"कनेक्ट करता आले नाही"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"साइन अप पूर्ण होत आहे…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"साइन अप पूर्ण करता आले नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"साइन अप पूर्ण झाले. कनेक्ट करत आहे…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"खूप हळू"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"हळू"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ठीक आहे"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"मध्यम"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"जलद"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"खूप जलद"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"मुदत संपली"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"पेअर करत आहे…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"कनेक्ट केले (फोन नाही)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"कनेक्ट केले (मीडिया नाही)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"कनेक्ट केले (मेसेज अॅक्सेस नाही)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"कनेक्ट केले (फोन किंवा मीडिया नाही)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"कनेक्ट केले, बॅटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"कनेक्ट केले (फोन नाही), बॅटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index e99de6e..79553c0 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Diputuskan sambungan"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Dinyahdayakan"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Kegagalan Konfigurasi IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Tidak disambungkan kerana rangkaian berkualiti rendah"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Kegagalan Sambungan WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Masalah pengesahan"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Tidak dapat bersambung"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Tidak dapat bersambung ke \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Tidak akan menyambung secara automatik"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Tiada akses Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Diselamatkan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Disambungkan kepada rangkaian bermeter"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Disambungkan secara automatik melalui %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Disambungkan secara automatik melalui pembekal penilaian rangkaian"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Disambungkan melalui %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Disambungkan melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Tersedia melalui %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Ketik untuk daftar"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Tiada Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Pelayan DNS peribadi tidak boleh diakses"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Tiada Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Log masuk diperlukan"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Titik akses penuh buat sementara waktu"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Disambungkan melalui %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Tersedia melalui %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Tidak dapat menyambung"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Menyelesaikan pendaftaran…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Tidak dapat menyelesaikan pendaftaran. Ketik untuk mencuba lagi."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Pendaftaran selesai. Menyambung…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Sangat Perlahan"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Perlahan"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Sederhana"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Laju"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Sangat Laju"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Tamat tempoh"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Menggandingkan..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Disambungkan (tiada telefon)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Disambungkan (tiada media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Disambungkan (tiada akses mesej)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Disambungkan (tiada telefon atau media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Disambungkan, bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Disambungkan (tiada telefon), bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index fcdd028..fc38626 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ချိတ်ဆက်မထားပါ"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ပိတ်ထားသည်"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP ပြုပြင်ခြင်း မအောင်မြင်ပါ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ကွန်ရက်ချိတ်ဆက်မှု အားနည်းသည့်အတွက် ချိတ်ဆက်ထားခြင်း မရှိပါ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi ချိတ်ဆက်မှု မအောင်မြင်ပါ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"အထောက်အထားစိစစ်မှု ပြဿနာ"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ချိတ်ဆက်၍ မရပါ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' နှင့် ချိတ်ဆက်၍ မရပါ"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"အလိုအလျောက်ချိတ်ဆက်မည်မဟုတ်ပါ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"အင်တာနက် ချိတ်ဆက်မှု မရှိပါ"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> က သိမ်းဆည်းခဲ့သည်"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"အခမဲ့မဟုတ်သော ကွန်ရက်သို့ ချိတ်ဆက်ထားသည်"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ကွန်ရက်အဆင့်သတ်မှတ်ပေးသူ မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"အကောင့်ဖွင့်ရန် တို့ပါ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"အင်တာနက် မရှိပါ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"သီးသန့် ဒီအန်အက်စ် (DNS) ဆာဗာကို သုံး၍မရပါ။"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"အင်တာနက် မရှိပါ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"လက်မှတ်ထိုးဝင်ရန် လိုအပ်သည်"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s မှတစ်ဆင့် ရနိုင်သည်"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ကို ဖွင့်နေသည်"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"ချိတ်ဆက်၍ မရပါ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်နေသည်…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်၍ မရပါ။ ပြန်စမ်းကြည့်ရန် တို့ပါ။"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"အကောင့်ဖွင့်ခြင်း ပြီးပါပြီ။ ချိတ်ဆက်နေသည်…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"အလွန်နှေး"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"နှေး"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"အတော်အသင့်"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"မြန်"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"အလွန်မြန်"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"သက်တမ်းကုန်သွားပါပြီ"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"တွဲချိတ်နေသည်…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ချိတ်ဆက်ပြီးပြီ (ဖုန်းမရှိပါ)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ချိတ်ဆက်ပြီးပြီ (မီဒီယာ မရှိပါ)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ချိတ်ဆက်ပြီးပြီ (မက်ဆေ့ဂျ် သုံး၍မရပါ)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ချိတ်ပြီးပြီ (ဖုန်း (သို့) မီဒီယာ မရှိပါ)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ချိတ်ဆက်ပြီးပြီ၊ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ချိတ်ဆက်ပြီးပြီ (ဖုန်းမရှိပါ)၊ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 0490623..3d1e98d 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Frakoblet"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Slått av"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-konfigurasjonsfeil"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ikke tilkoblet på grunn av nettverk av lav kvalitet"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi-tilkoblingsfeil"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentiseringsproblem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Kan ikke koble til"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Kan ikke koble til «<xliff:g id="AP_NAME">%1$s</xliff:g>»"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Kobler ikke til automatisk"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ingen internettilgang"</string>
<string name="saved_network" msgid="7143698034077223645">"Lagret av <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Koble til et nettverk med datamåling"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatisk tilkoblet via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatisk tilkoblet via leverandør av nettverksvurdering"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Tilkoblet via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Tilkoblet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Tilgjengelig via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Trykk for å registrere deg"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ingen internettilkobling"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Den private DNS-tjeneren kan ikke nås"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Ingen internettilkobling"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Pålogging kreves"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Tilgangspunktet er midlertidig fullt"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Tilkoblet via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Tilgjengelig via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Åpner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Kunne ikke koble til"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Fullfører registreringen …"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Kunne ikke fullføre registreringen. Trykk for å prøve på nytt."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registreringen er fullført. Kobler til …"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Veldig treg"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Treg"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Ok"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Middels"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rask"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Veldig rask"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Utløpt"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Kobler til …"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Koblet til (ingen telefon) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Koblet til (ingen medier) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Koblet til (ingen meldingstilgang) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Koblet til (ingen telefon eller medier) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Koblet til, batteri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Koblet til (ingen telefon), batteri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 87cb123..777c897 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"डिस्कनेक्ट गरिएको छ"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"असक्षम पारियो"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP विन्यास असफल"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"कम गुणस्तरको नेटवर्कका कारण जडान गर्न सकिएन"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"वाईफाई जडान असफल"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"प्रमाणीकरण समस्या"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"जडान गर्न सकिँदैन"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' मा जडान गर्न सकिँदैन"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"स्वतः जडान हुने छैन"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"इन्टरनेटमाथिको पहुँच छैन"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> द्वारा सेभ गरियो"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"प्रयोगसम्बन्धी सीमा तोकिएको नेटवर्कमा कनेक्ट गरियो"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s मार्फत् स्वतः जडान गरिएको"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"नेटवर्क मूल्याङ्कनकर्ता मार्फत स्वत: जडान गरिएको"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s मार्फत जडित"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> मार्फत जडान गरिएको"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s मार्फत उपलब्ध"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"साइन अप गर्न ट्याप गर्नुहोस्"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"इन्टरनेट छैन"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"निजी DNS सर्भरमाथि पहुँच प्राप्त गर्न सकिँदैन"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"इन्टरनेटमाथिको पहुँच छैन"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"साइन इन गर्न आवश्यक छ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s मार्फत जडान गरियो"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s मार्फत उपलब्ध"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> खोल्दै"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"जडान गर्न सकिएन"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"साइन अप गर्ने कार्य सम्पन्न गर्दै…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"साइन अप गर्ने कार्य सम्पन्न गर्न सकिएन। फेरि प्रयास गर्न ट्याप गर्नुहोस्।"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"साइन अप गर्ने कार्य सम्पन्न भयो। जडान गर्दै…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"धेरै ढिलो"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"बिस्तारै"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ठिक छ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"मध्यम"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"छिटो"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"धेरै छिटो"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"म्याद सकियो"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"कनेक्ट गरिँदै छ..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"जडान गरियो (फोनबाहेेक) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"जडान गरियो (मिडियाबाहेक) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"जडान गरियो (सन्देशमाथि पहुँच छैन) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"जडान गरियो (फोन वा मिडियाबाहेक) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"जडान गरियो, ब्याट्री <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"जडान गरियो (फोनबाहेेक), ब्याट्री <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 6693735..d30a21f 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Verbinding verbroken"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Uitgezet"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-configuratie mislukt"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Niet verbonden wegens netwerk van lage kwaliteit"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wifi-verbinding mislukt"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authenticatieprobleem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Kan geen verbinding maken"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Kan geen verbinding maken met \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Er wordt niet automatisch verbinding gemaakt"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Geen internettoegang"</string>
<string name="saved_network" msgid="7143698034077223645">"Opgeslagen door \'<xliff:g id="NAME">%1$s</xliff:g>\'"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Verbonden met netwerk met datalimiet"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatisch verbonden via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatisch verbonden via provider van netwerkbeoordelingen"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Verbonden via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Verbonden via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Beschikbaar via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tik om aan te melden"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Geen internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Geen toegang tot privé-DNS-server"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Geen internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Inloggen vereist"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Toegangspunt tijdelijk vol"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Verbonden via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Beschikbaar via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wordt geopend"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Kan geen verbinding maken"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Aanmelding voltooien…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Kan aanmelding niet voltooien. Tik om het opnieuw te proberen."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Aanmelding voltooid. Verbinden…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Zeer langzaam"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Langzaam"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Redelijk"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Gemiddeld"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Snel"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Zeer snel"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Verlopen"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Koppelen..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (geen telefoon)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (geen media)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (geen berichtentoegang)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (geen telefoon of media)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>, batterij: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Verbonden: <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (geen telefoon), batterij: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 94afb93..0120768 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ବିଛିନ୍ନ କରାଯାଇଛି"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ଅକ୍ଷମ ହୋଇଛି"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP କନଫିଗରେଶନ ବିଫଳ ହୋଇଛି"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ନିମ୍ନ ମାନର ନେଟ୍ୱର୍କ କାରଣରୁ ସଂଯୁକ୍ତ ହୋଇନାହିଁ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"ୱାଇଫାଇ ସଂଯୋଗ ବିଫଳ ହୋଇଛି"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ପ୍ରମାଣୀକରଣରେ ସମସ୍ୟା"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ସଂଯୋଗ କରିପାରିବ ନାହିଁ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' ସହିତ ସଂଯୁକ୍ତ ହୋଇପାରୁନାହିଁ"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ସ୍ୱଚାଳିତ ଭାବେ ସଂଯୁକ୍ତ ହେବନାହିଁ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ଇଣ୍ଟରନେଟ୍ର କୌଣସି ଆକ୍ସେସ୍ ନାହିଁ"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> ଦ୍ୱାରା ସେଭ କରାଯାଇଛି"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"ମିଟରଯୁକ୍ତ ନେଟୱାର୍କ ସହ ସଂଯୋଗ କରାଯାଇଛି"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲୀ ସଂଯୁକ୍ତ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ନେଟୱର୍କ ମୂଲ୍ୟାୟନ ପ୍ରଦାତାଙ୍କ ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲ୍ୟ ସଂଯୁକ୍ତ"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ଦ୍ବାରା ସଂଯୋଗ କରାଯାଇଛି"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ସାଇନ୍ ଅପ୍ ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ନାହିଁ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ବ୍ୟକ୍ତିଗତ DNS ସର୍ଭର୍ ଆକ୍ସେସ୍ କରିହେବ ନାହିଁ"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"କୌଣସି ଇଣ୍ଟରନେଟ୍ ନାହିଁ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ସାଇନ୍-ଇନ୍ ଆବଶ୍ୟକ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ଆକ୍ସେସ୍ ପଏଣ୍ଟ ସାମୟିକ ଭାବେ ପୂର୍ଣ୍ଣ"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ଖୋଲୁଛି"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"ସଂଯୋଗ କରିହେଲା ନାହିଁ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ସାଇନ୍ ଅପ୍ ଶେଷ ହେଉଛି…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ସାଇନ୍ ଅପ୍ ଶେଷ ହୋଇପାରିଲା ନାହିଁ। ପୁଣି ଥରେ ଚେଷ୍ଟା କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ସାଇନ୍ ଅପ୍ ଶେଷ ହୋଇଛି। ସଂଯୋଗ କରୁଛି…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ବହୁତ ମନ୍ଥର"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"କମ୍ ବେଗ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ଠିକ୍ ଅଛି"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ମଧ୍ୟମ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ଦ୍ରୁତ"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ଅତି ଦ୍ରୁତ"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ମିଆଦ ଶେଷ ହୋଇଯାଇଛି"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ପେୟାର୍ କରୁଛି…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ସଂଯୁକ୍ତ ହେଲା (ମିଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"ସଂଯୁକ୍ତ ହେଲା (ମେସେଜ୍ ଆକ୍ସେସ୍ ନାହିଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ କିମ୍ବା ମେଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ସଂଯୁକ୍ତ ହେଲା, ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ସଂଯୁକ୍ତ ନାହିଁ (ଫୋନ୍ ନୁହେଁ), ବ୍ୟାଟେରୀ<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 7bab52f..1481767 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ਡਿਸਕਨੈਕਟ ਹੋਇਆ"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ਅਯੋਗ ਬਣਾਇਆ"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP ਕੌਂਫਿਗਰੇਸ਼ਨ ਅਸਫਲਤਾ"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ਘੱਟ ਗੁਣਵੱਤਾ ਵਾਲੇ ਨੈੱਟਵਰਕ ਕਾਰਨ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi ਕਨੈਕਸ਼ਨ ਅਸਫਲਤਾ"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ਕੋਈ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> ਵੱਲੋਂ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"ਮੀਟਰਬੱਧ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s ਰਾਹੀਂ ਆਪਣੇ-ਆਪ ਕਨੈਕਟ ਹੋਇਆ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਰਾਹੀਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਹੋਇਆ"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ਸਾਈਨ-ਅੱਪ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ਨਿੱਜੀ ਡੋਮੇਨ ਨਾਮ ਪ੍ਰਣਾਲੀ (DNS) ਸਰਵਰ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ਸਾਈਨ-ਇਨ ਲੋੜੀਂਦਾ ਹੈ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ਖੋਲ੍ਹਿਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ਸਾਈਨ-ਅੱਪ ਮੁਕੰਮਲ ਹੋਇਆ ਕਨੈਕਟ ਹੋ ਰਿਹਾ ਹੈ…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ਬਹੁਤ ਹੌਲੀ"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ਹੌਲੀ"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ਠੀਕ ਹੈ"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ਔਸਤ"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"ਤੇਜ਼"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ਬਹੁਤ ਤੇਜ਼"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"ਮਿਆਦ ਮੁੱਕ ਗਈ"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"ਜੋੜਾਬੱਧ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਸੁਨੇਹੇ \'ਤੇ ਪਹੁੰਚ ਨਹੀਂ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਫ਼ੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ, ਬੈਟਰੀ ਦਾ ਪੱਧਰ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ), ਬੈਟਰੀ ਦਾ ਪੱਧਰ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 1384d5b..83f8e49 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Rozłączono"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Wyłączona"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Błąd konfiguracji IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Brak połączenia z powodu słabego sygnału sieci"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Błąd połączenia Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem z uwierzytelnianiem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nie można się połączyć"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nie można się połączyć z siecią „<xliff:g id="AP_NAME">%1$s</xliff:g>”"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nie można połączyć automatycznie"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Brak dostępu do internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Zapisane przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Połączono z siecią z pomiarem użycia danych"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatycznie połączono przez: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatycznie połączono przez dostawcę ocen jakości sieci"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Połączono przez %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Połączenie przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Dostępne przez %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Kliknij, by się zarejestrować"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Brak internetu"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Brak dostępu do prywatnego serwera DNS"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Brak internetu"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Musisz się zalogować"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Punkt dostępu jest tymczasowo zajęty"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Połączono przez: %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Dostępna przez: %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Otwieram: <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nie udało się połączyć"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Kończę rejestrować…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nie udało się dokończyć rejestracji. Kliknij, by spróbować ponownie."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Rejestracja zakończona. Łączę…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Bardzo wolna"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Wolna"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Średnia"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Szybka"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Bardzo szybka"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Ważność wygasła"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Paruję…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Połączono (bez telefonu) – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Połączono (bez multimediów) – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Połączono (bez dostępu do wiadomości) – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Połączono (bez telefonu i multimediów) – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Połączono, bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> – <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Połączono (bez telefonu), bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> – <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 36675ae..d9a7c69 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desconectada"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desativado"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Falha de configuração de IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Não conectado devido à baixa qualidade da rede"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Falha de conexão Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema de autenticação"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Não é possível estabelecer conexão"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Não é possível conectar-se a \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Não se conectará automaticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Sem acesso à Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Salva por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Conectado a uma rede limitada"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conectado automaticamente via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectado automaticamente via provedor de avaliação de rede"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conectado via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Não é possível acessar o servidor DNS privado"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"É necessário fazer login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Ponto de acesso temporariamente cheio"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conectado via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponível via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Não foi possível conectar"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Concluindo inscrição…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Inscrição concluída. Conectando…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Muito lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Ok"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Média"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Muito rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expirada"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pareando…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado (sem telefone) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado (sem mídia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectado (sem acesso a mensagens) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectado (sem telefone ou mídia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectado, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> de bateria"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectado (sem telefone), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> de bateria"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index f5a9625..c24589c 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desligada"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desativado"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Falha de configuração de IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Não ligado devido à baixa qualidade da rede"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Falha de ligação Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema de autenticação"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Não é possível ligar"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Não é possível ligar a \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Não é efetuada uma ligação automaticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Sem acesso à Internet."</string>
<string name="saved_network" msgid="7143698034077223645">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Ligação estabelecida a uma rede de acesso limitado."</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Ligado automaticamente através de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Ligado automaticamente através do fornecedor de classificação de rede"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Ligado através de %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Ligado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível através de %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Não é possível aceder ao servidor DNS."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"É necessário iniciar sessão"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Ponto de acesso temporariamente cheio"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Ligado através de %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponível através de %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"A abrir <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Não foi possível estabelecer ligação"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"A concluir a inscrição…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Inscrição concluída. A ligar…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Muito lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Média"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Muito rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expirada"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"A sincronizar..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Ligado (sem telemóvel)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Ligado (sem multimédia)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Ligado (sem acesso a mensagens)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Ligado (sem telemóvel nem multimédia)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Ligado, bateria a <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Ligado (sem telemóvel), bateria a <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 36675ae..d9a7c69 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Desconectada"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Desativado"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Falha de configuração de IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Não conectado devido à baixa qualidade da rede"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Falha de conexão Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema de autenticação"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Não é possível estabelecer conexão"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Não é possível conectar-se a \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Não se conectará automaticamente"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Sem acesso à Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Salva por <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Conectado a uma rede limitada"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conectado automaticamente via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectado automaticamente via provedor de avaliação de rede"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conectado via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponível via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Sem Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Não é possível acessar o servidor DNS privado"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"É necessário fazer login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Ponto de acesso temporariamente cheio"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conectado via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponível via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Não foi possível conectar"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Concluindo inscrição…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Inscrição concluída. Conectando…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Muito lenta"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lenta"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Ok"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Média"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rápida"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Muito rápida"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expirada"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pareando…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectado (sem telefone) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectado (sem mídia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectado (sem acesso a mensagens) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectado (sem telefone ou mídia) a <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectado, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> de bateria"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectado (sem telefone), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> de bateria"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 8b6259c..8fb09ac 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Deconectat"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Dezactivată"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Eroare de configurație IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nu există conexiune din cauza rețelei de calitate slabă"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Eroare de conexiune Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problemă la autentificare"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nu se poate conecta"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nu se poate conecta la „<xliff:g id="AP_NAME">%1$s</xliff:g>”"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nu se va conecta automat"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nu există acces la internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Salvată de <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"S-a conectat la o rețea contorizată"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Conectată automat prin %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Conectată automat prin furnizor de evaluări ale rețelei"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Conectată prin %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Conectat prin <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Disponibilă prin %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Atinge pentru a te înscrie"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Fără conexiune la internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Serverul DNS privat nu poate fi accesat"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Fără conexiune la internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Trebuie să te conectezi"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Punctul de acces este temporar plin"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Conectată prin %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Disponibilă prin %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Se deschide <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nu s-a putut conecta"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Se finalizează înscrierea…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Nu s-a putut finaliza înscrierea. Atinge pentru a încerca din nou."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Înscrierea a fost finalizată. Se conectează…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Foarte lentă"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Lentă"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Bine"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medie"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rapidă"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Foarte rapidă"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Expirat"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Se asociază…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Conectat (fără telefon) la <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Conectat (fără conținut media) la <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Conectat (fără acces la mesaje) la <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Conectat (fără telefon sau media) la <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Conectat, baterie <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Conectat (fără telefon), baterie <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 12a5fcc..704d848 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Не подключено"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Отключено"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Ошибка IP-конфигурации"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Подключение невозможно из-за низкого качества сети"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Ошибка подключения Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Ошибка аутентификации"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Ошибка подключения"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Не удалось подключиться к сети \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Подключение не будет выполняться автоматически"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Без доступа к Интернету"</string>
<string name="saved_network" msgid="7143698034077223645">"Сохранено: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Подключено к сети с ограниченным трафиком"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Автоматически подключено к %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Автоматически подключено через автора рейтинга сетей"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Подключено к %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Подключено через приложение \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Доступно через %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Нажмите, чтобы зарегистрироваться"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нет подключения к Интернету"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Доступа к частному DNS-серверу нет."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Нет подключения к Интернету"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Требуется выполнить вход."</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"К точке доступа подключено слишком много устройств"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Подключено к %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Доступно через %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Открытие <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Не удалось подключиться."</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Завершение регистрации…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Не удалось завершить регистрацию. Нажмите, чтобы повторить попытку."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Регистрация завершена. Подключение…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Очень медленная"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Медленная"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ОК"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Средняя"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Быстрая"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Очень быстрая"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Срок действия истек"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Устанавливается соединение..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Подключено (кроме звонков)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Подключено (кроме аудио)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Подключено (кроме сообщений)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Подключено (кроме звонков и аудио)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Подключено, уровень заряда батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Подключено (кроме звонков), уровень заряда батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 8abc51a..d67060e 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"විසන්ධි විය"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"අබලයි"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP වින්යාස කිරීම අසාර්ථකයි"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"අඩු ගුණත්වයේ ජාලය හේතුවෙන් සම්බන්ධ නොවීය"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi සම්බන්ධතාව අසාර්ථකයි"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"සත්යාපනයේ ගැටලුවකි"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"සම්බන්ධ විය නොහැකිය"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' වෙත සම්බන්ධ විය නොහැකිය"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ස්වයංක්රිය නැවත සම්බන්ධ නොවනු ඇත"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"අන්තර්ජාල ප්රවේශය නැත"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> විසින් සුරකින ලදී"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"මනුගත ජාලයට සම්බන්ධ කර ඇත"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s හරහා ස්වයංක්රියව සම්බන්ධ විය"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"ජාල ශ්රේණිගත සපයන්නා හරහා ස්වයංක්රියව සම්බන්ධ විය"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s හරහා සම්බන්ධ විය"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> හරහා සම්බන්ධයි"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"ලියාපදිංචි වීමට තට්ටු කරන්න"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"අන්තර්ජාලය නැත"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"පුද්ගලික DNS සේවාදායකයට ප්රවේශ වීමට නොහැකිය"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"අන්තර්ජාලය නැත"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"පිරීම අවශ්යයි"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ප්රවේශ ලක්ෂ්ය තාවකාලිකව පිරී ඇත"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s හරහා සම්බන්ධ විය"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> විවෘත කරමින්"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"සබැඳීමට නොහැකි විය"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"ලියාපදිංචිය සම්පූර්ණ කරමින්…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ලියාපදිංචිය සම්පූර්ණ කළ නොහැකි විය. නැවත උත්සාහ කිරීමට තට්ටු කරන්න."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"ලියාපදිංචිය සම්පූර්ණයි. සබැඳෙමින්…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ඉතා මන්දගාමී"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"මන්දගාමී"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"හරි"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"මධ්යම"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"වේගවත්"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"ඉතා වේගවත්"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"කල් ඉකුත් විය"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"යුගල කරමින්…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"සම්බන්ධිතයි (දුරකථනය නැත) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"සම්බන්ධිතයි (මාධ්ය නැත)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"සම්බන්ධිතයි (පණිවිඩ ප්රවේශය නැත)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"සම්බන්ධිතයි (දුරකථනය හෝ මාධ්ය නැත) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"සම්බන්ධිතයි, බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"සම්බන්ධිතයි (දුරකථනය නැත), බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 3a8e078..1982893 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Odpojené"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Vypnuté"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Zlyhanie konfigurácie adresy IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nepripojené z dôvodu siete nízkej kvality"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Zlyhanie pripojenia Wi‑Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problém s overením"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nedá sa pripojiť"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"K sieti <xliff:g id="AP_NAME">%1$s</xliff:g> sa nedá pripojiť"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nedôjde k automatickému pripojeniu"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Žiadny prístup k internetu"</string>
<string name="saved_network" msgid="7143698034077223645">"Uložila aplikácia <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Pripojené k meranej sieti"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automaticky pripojené prostredníctvom %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automaticky pripojené prostredníctvom poskytovateľa hodnotenia siete"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Pripojené prostredníctvom %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Pripojené prostredníctvom siete <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"K dispozícii prostredníctvom %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Prihláste sa klepnutím"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Bez internetu"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"K súkromnému serveru DNS sa nepodarilo získať prístup"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Žiadny internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Vyžaduje sa prihlásenie"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Prístupový bod je dočasne plný"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Pripojené prostredníctvom operátora %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"K dispozícii prostredníctvom operátora %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Otvára sa <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nepodarilo sa pripojiť"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Dokončuje sa registrácia…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registráciu sa nepodarilo dokončiť. Klepnutím to skúste znova."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registrácia je dokončená. Pripája sa…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Veľmi pomalá"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Pomalá"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Stredná"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Rýchla"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Veľmi rýchla"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Vypršalo"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Páruje sa..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Pripojené k zariadeniu <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez telefónu)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Pripojené k zariadeniu <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez médií)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Pripojené k <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez prístupu k správam)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Pripojené k <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> (bez telefónu a médií)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Pripojené k zariadeniu <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>, úroveň batérie <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Pripojené k zariadeniu <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (bez telefónu), úroveň batérie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 9f1aecb..262ecfd 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Ni povezave"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Onemogočeno"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Konfiguracija IP-ja ni uspela"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ni povezano zaradi slabe kakovosti omrežja"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Povezava prek Wi-Fi-ja ni uspela"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Težava s preverjanjem pristnosti"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Povezava ni mogoča"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Povezava z aplikacijo »<xliff:g id="AP_NAME">%1$s</xliff:g>« ni mogoča"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Samodejna vnovična vzpostavitev povezave se ne bo izvedla"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ni dostopa do interneta"</string>
<string name="saved_network" msgid="7143698034077223645">"Shranil(-a): <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Povezano z omrežjem z omejenim prenosom podatkov"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Samodejno vzpostavljena povezava prek: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Samodejno vzpostavljena povezava prek ponudnika ocenjevanja omrežij"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Vzpostavljena povezava prek: %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Povezava vzpostavljena prek omrežja <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Na voljo prek: %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Dotaknite se, če se želite registrirati"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ni internetne povezave"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Do zasebnega strežnika DNS ni mogoče dostopati"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Brez internetne povezave"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Zahtevana je prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Dostopna točka je trenutno zasedena"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Vzpostavljena povezava prek: %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Na voljo prek: %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Odpiranje ponudnika <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Povezave ni bilo mogoče vzpostaviti"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Dokončevanje registracije …"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registracije ni bilo mogoče dokončati. Če želite poskusiti znova, se dotaknite."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registracija je končana. Povezovanje …"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Zelo počasna"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Počasna"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"V redu"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Srednje hitra"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Hitra"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Zelo hitra"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Poteklo"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Seznanjanje ..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Povezano (brez telefona) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Povezano (brez predstavnosti) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Povezano (brez dostopa do sporočil) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Povezano (brez telefona/predstavnosti) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Povezano, raven napolnjenosti baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Povezano (brez telefona), raven napolnjenosti baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 515f963..d0f1f7c 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Shkëputur"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Të çaktivizuara"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Dështim në konfigurimin e IP-së"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Nuk është lidhur për shkak të rrjetit me cilësi të dobët"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Dështim i lidhjes WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problem me vërtetimin"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Nuk mund të lidhet"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Nuk mund të lidhet me \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Nuk do të lidhet automatikisht"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Nuk ka qasje në internet"</string>
<string name="saved_network" msgid="7143698034077223645">"E ruajtur nga <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Lidhur me një rrjet me matje"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Lidhur automatikisht përmes %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Lidhur automatikisht nëpërmjet ofruesit të vlerësimit të rrjetit"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"E lidhur përmes %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Lidhur përmes <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"E mundshme përmes %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Trokit për t\'u regjistruar"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Nuk ka internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Serveri privat DNS nuk mund të qaset"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Nuk ka internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Kërkohet identifikimi"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pika e qasjes është përkohësisht plot"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"E lidhur përmes %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"E disponueshme përmes %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Po hapet <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Nuk mund të lidhej"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Po përfundon regjistrimin…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Regjistrimi nuk mund të përfundonte. Trokit për të provuar përsëri."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Regjistrimi përfundoi. Po lidhet…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Shumë e ulët"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"E ngadaltë"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Në rregull"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Mesatare"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"E shpejtë"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Shumë e shpejtë"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Skaduar"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Po çiftohet..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"E lidhur (pa telefon)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"E lidhur (pa media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"E lidhur (nuk ka qasje te mesazhet)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"E lidhur (pa telefon ose media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"E lidhur, bateria <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"E lidhur (pa telefon), bateria <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 61496ae..b102d3a 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Веза је прекинута"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Онемогућено"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP конфигурација је отказала"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Није повезано због лошег квалитета мреже"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi веза је отказала"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Проблем са потврдом идентитета"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Повезивање није успело"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Повезивање са „<xliff:g id="AP_NAME">%1$s</xliff:g>“ није успело"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Аутоматско повезивање није успело"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Нема приступа интернету"</string>
<string name="saved_network" msgid="7143698034077223645">"Сачувао/ла је <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Повезани сте на мрежу са ограничењем"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Аутоматски повезано преко %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Аутоматски повезано преко добављача оцене мреже"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Веза је успостављена преко приступне тачке %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Повезано преко: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Доступна је преко приступне тачке %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Додирните да бисте се регистровали"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Нема интернета"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Приступ приватном DNS серверу није успео"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Нема интернета"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Треба да се пријавите"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Приступна тачка је привремено заузета"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Повезано преко %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Доступно преко %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Отвара се <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Повезивање није успело"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Регистрација се довршава…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Довршавање регистрације није успело. Додирните да бисте пробали поново."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Регистрација је довршена. Повезује се…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Веома спора"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Спора"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Потврди"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Средња"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Брза"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Веома брза"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Истекло"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Упаривање..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Повезано (без телефона): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Повезано (без медија): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Повезано је (без приступа порукама): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Повезано (без телефона или медија): <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Повезано, ниво батерије је <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Повезано (без телефона), ниво батерије је <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 943ba5f6..8c12372 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Frånkopplad"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Inaktiverad"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP-konfigurationsfel"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ingen anslutning på grund av låg kvalitet på nätverket"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wifi-anslutningsfel"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Autentiseringsproblem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Det gick inte att ansluta"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Det gick inte att ansluta till <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Det går inte att ansluta automatiskt"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Ingen internetåtkomst"</string>
<string name="saved_network" msgid="7143698034077223645">"Sparades av <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Ansluten till nätverk med datapriser"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatiskt ansluten via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatiskt ansluten via leverantör av nätverksbetyg"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Anslutet via %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Anslutet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Tillgängligt via %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Tryck för att logga in"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Inget internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Det går inte att komma åt den privata DNS-servern."</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Inget internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Inloggning krävs"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Åtkomstpunkten har inga platser över för tillfället"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Anslutet via %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Tillgängligt via %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Öppnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Det gick inte att ansluta"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Registreringen slutförs …"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Det gick inte att slutföra registreringen. Tryck för att försöka igen."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registrering slutförd. Ansluter …"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Mycket långsam"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Långsam"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Okej"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Medelsnabb"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Snabb"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Mycket snabb"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Har upphört att gälla"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Parkoppling…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Ansluten (ingen mobil)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Ansluten (inga medier)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Ansluten (ingen meddelandeåtkomst)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Ansluten (ingen mobil och inga medier) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Ansluten, batterinivå <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Ansluten (ingen mobil), batterinivå <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index b7124a63..72a3751 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Hujaunganishwa"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Imezimwa"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Haikuweza Kusanidi IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Haijaunganishwa kwa sababu intaneti si thabiti"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Haikuweza Kuunganisha kwenye WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Tatizo la uthibitishaji"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Imeshindwa kuunganisha"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Imeshindwa kuunganisha kwenye \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Haiwezi kuunganisha kiotomatiki"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Hakuna muunganisho wa intaneti"</string>
<string name="saved_network" msgid="7143698034077223645">"Ilihifadhiwa na <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Imeunganishwa kwenye mtandao unaopima data"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Imeunganishwa kiotomatiki kupitia %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Imeunganishwa kiotomatiki kupitia mtoa huduma wa ukadiriaji wa mtandao"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Imeunganishwa kupitia %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Imeunganishwa kupitia <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Inapatikana kupitia %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Gusa ili ujisajili"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Hakuna intaneti"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Seva ya faragha ya DNS haiwezi kufikiwa"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Hakuna intaneti"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Unahitaji kuingia katika akaunti"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Lango la mtandao lina shughuli nyingi kwa sasa"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Imeunganishwa kupitia %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Inapatikana kupitia %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Inafungua <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Imeshindwa kuunganisha"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Inakamilisha usajili…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Imeshindwa kukamilisha usajili. Gusa ili ujaribu tena."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Imekamilisha kusajili. Inaunganisha…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Polepole Sana"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Polepole"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Sawa"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Wastani"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Haraka"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Haraka Sana"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Muda umeisha"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Inaoanisha..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Imeunganishwa (hamna simu)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Imeunganishwa (hamna kifaa cha sauti)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Imeunganishwa (haifikii ujumbe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Imeunganishwa (hamna simu au kifaa cha sauti)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Imeunganishwa, kiasi cha chaji ni <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Imeunganishwa (hamna simu), kiasi cha chaji ni <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 5b3aae3..8714958 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"தொடர்பு துண்டிக்கப்பட்டது"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"முடக்கப்பட்டது"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP உள்ளமைவில் தோல்வி"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"தரம் குறைவான நெட்வொர்க்கின் காரணமாக, இணைக்கப்படவில்லை"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"வைஃபை இணைப்பில் தோல்வி"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"அங்கீகரிப்புச் சிக்கல்"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"இணைக்க முடியவில்லை"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' உடன் இணைக்க முடியவில்லை"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"தானாக இணைக்கப்படாது"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"இண்டர்நெட் அணுகல் இல்லை"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> சேமித்தது"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"கட்டண நெட்வொர்க்குடன் இணைக்கப்பட்டுள்ளது"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s மூலம் தானாக இணைக்கப்பட்டது"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"நெட்வொர்க் மதிப்பீடு வழங்குநரால் தானாக இணைக்கப்பட்டது"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s வழியாக இணைக்கப்பட்டது"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> மூலம் இணைக்கப்பட்டது"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s வழியாகக் கிடைக்கிறது"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"பதிவு செய்யத் தட்டவும்"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"இணைய இணைப்பு இல்லை"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"தனிப்பட்ட DNS சேவையகத்தை அணுக இயலாது"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"இணைய இணைப்பு இல்லை"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"உள்நுழைய வேண்டும்"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s வழியாக இணைக்கப்பட்டது"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s வழியாகக் கிடைக்கிறது"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> திறக்கப்படுகிறது"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"இணைக்க முடியவில்லை"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"பதிவு செய்வது நிறைவடைகிறது…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"பதிவு செய்வதை நிறைவுசெய்ய இயலவில்லை மீண்டும் முயற்சிக்கத் தட்டவும்."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"பதிவு செய்வது நிறைவடைந்தது. இணைக்கிறது…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"மிகவும் வேகம் குறைவானது"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"வேகம் குறைவு"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"சரி"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"நடுத்தரம்"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"வேகம்"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"மிகவும் வேகமானது"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"காலாவதியாகிவிட்டது"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"இணைக்கிறது..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> இணைக்கப்பட்டது (மொபைல் இல்லை)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> இணைக்கப்பட்டது (மீடியா இல்லை)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> இணைக்கப்பட்டது (செய்தி அணுகல் இல்லை)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> இணைக்கப்பட்டது (மொபைல்/மீடியா இல்லை)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"இணைக்கப்பட்டது, பேட்டரி <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"இணைக்கப்பட்டது (மொபைல் இல்லை), பேட்டரி <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index df9b0ef..e35bd76 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"డిస్కనెక్ట్ అయ్యింది"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"డిజేబుల్ చేయబడింది"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP కాన్ఫిగరేషన్ వైఫల్యం"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"తక్కువ క్వాలిటీ నెట్వర్క్ కారణంగా కనెక్ట్ చేయబడలేదు"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi కనెక్షన్ వైఫల్యం"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ప్రామాణీకరణ సమస్య"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"కనెక్ట్ చేయడం సాధ్యపడదు"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'కు కనెక్ట్ చేయడం సాధ్యపడదు"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ఆటోమేటిక్గా కనెక్ట్ కాదు"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా సేవ్ చేయబడింది"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"డేటా నియంత్రణ నెట్వర్క్కు కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s ద్వారా ఆటోమేటిక్గా కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"నెట్వర్క్ రేటింగ్ ప్రదాత ద్వారా ఆటోమేటిక్గా కనెక్ట్ చేయబడింది"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా కనెక్ట్ చేయబడింది"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"సైన్ అప్ చేయడానికి నొక్కండి"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ఇంటర్నెట్ లేదు"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"ప్రైవేట్ DNS సర్వర్ను యాక్సెస్ చేయడం సాధ్యపడదు"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ఇంటర్నెట్ లేదు"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"సైన్ ఇన్ చేయాలి"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"యాక్సెస్ పాయింట్ తాత్కాలికంగా నిండుకుంది"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> తెరవబడుతోంది"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"సైన్ అప్ పూర్తివుతోంది…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"సైన్ అప్ను పూర్తి చేయడం సాధ్య పడలేదు. మళ్లీ ప్రయత్నించడానికి నొక్కండి."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"సైన్ అప్ పూర్తయింది. కనెక్ట్ చేయబడుతోంది…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"చాలా నెమ్మది"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"నెమ్మది"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"సరే"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"మధ్యస్థం"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"వేగవంతం"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"చాలా వేగవంతం"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"గడువు ముగిసింది"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"పెయిరింగ్..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"కనెక్ట్ చేయబడింది (ఫోన్ కాదు)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"కనెక్ట్ చేయబడింది (మీడియా కాదు)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"కనెక్ట్ చేయబడింది (సందేశ యాక్సెస్ లేదు)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"కనెక్ట్ చేయబడింది (ఫోన్ లేదా మీడియా కాదు)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"కనెక్ట్ చేయబడింది, బ్యాటరీ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"కనెక్ట్ చేయబడింది (ఫోన్ కాదు), బ్యాటరీ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index a8744fa..f386e5d 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"ยกเลิกการเชื่อมต่อแล้ว"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"ปิดอยู่"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"การกำหนดค่า IP ล้มเหลว"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"ไม่ได้เชื่อมต่อเนื่องจากเครือข่ายคุณภาพต่ำ"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"การเชื่อมต่อ Wi-Fi ล้มเหลว"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ปัญหาในการตรวจสอบสิทธิ์"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"ไม่สามารถเชื่อมต่อ"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"ไม่สามารถเชื่อมต่อกับ \"<xliff:g id="AP_NAME">%1$s</xliff:g>\""</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"จะไม่เชื่อมต่อโดยอัตโนมัติ"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"เข้าถึงอินเทอร์เน็ตไม่ได้"</string>
<string name="saved_network" msgid="7143698034077223645">"บันทึกโดย<xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"เชื่อมต่อกับเครือข่ายแบบจำกัดปริมาณแล้ว"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"เชื่อมต่ออัตโนมัติผ่าน %1$s แล้ว"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"เชื่อมต่ออัตโนมัติผ่านผู้ให้บริการการจัดอันดับเครือข่าย"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
<string name="connected_via_app" msgid="3532267661404276584">"เชื่อมต่อแล้วผ่าน <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"พร้อมใช้งานผ่านทาง %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"แตะเพื่อลงชื่อสมัครใช้"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"ไม่มีอินเทอร์เน็ต"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"เข้าถึงเซิร์ฟเวอร์ DNS ไม่ได้"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"ไม่มีอินเทอร์เน็ต"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ต้องลงชื่อเข้าใช้"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"จุดเข้าใช้งานเต็มชั่วคราว"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"พร้อมใช้งานผ่านทาง %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"กำลังเปิด <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"เชื่อมต่อไม่ได้"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"กำลังลงชื่อสมัครใช้ให้เสร็จสิ้น…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"ลงชื่อสมัครใช้ให้เสร็จสิ้นไม่ได้ แตะเพื่อลองอีกครั้ง"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"การลงชื่อสมัครใช้เสร็จสมบูรณ์ กำลังเชื่อมต่อ…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"ช้ามาก"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"ช้า"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ตกลง"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"ปานกลาง"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"เร็ว"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"เร็วมาก"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"หมดอายุแล้ว"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"กำลังจับคู่อุปกรณ์..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"เชื่อมต่อแล้ว (ไม่รวมโทรศัพท์)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"เชื่อมต่อแล้ว (ไม่รวมสื่อ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"เชื่อมต่อแล้ว (ไม่มีการเข้าถึงข้อความ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"เชื่อมต่อแล้ว (ไม่รวมโทรศัพท์หรือสื่อ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"เชื่อมต่อแล้ว แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"เชื่อมต่อแล้ว (ไม่รวมโทรศัพท์) แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index bdcdbac..db27382 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Nadiskonekta"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Naka-disable"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Pagkabigo ng Configuration ng IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Hindi nakakonekta dahil mababa ang kalidad ng network"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Pagkabigo ng Koneksyon sa WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Problema sa pag-authenticate"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Hindi makakonekta"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Hindi makakonekta sa \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Hindi awtomatikong kokonekta"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Walang access sa internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Na-save ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Nakakonekta sa nakametrong network"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Awtomatikong nakakonekta sa pamamagitan ng %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Awtomatikong nakakonekta sa pamamagitan ng provider ng rating ng network"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Nakakonekta sa pamamagitan ng %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Nakakonekta sa pamamagitan ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Available sa pamamagitan ng %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"I-tap para mag-sign up"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Walang internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Hindi ma-access ang pribadong DNS server"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Walang internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Kinakailangang mag-sign in"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Pansamantalang puno ang access point"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Nakakonekta sa pamamagitan ng %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Available sa pamamagitan ng %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Binubuksan ang <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Hindi makakonekta"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Kinukumpleto ang pag-sign up…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Hindi makumpleto ang pag-sign up. I-tap para subukang muli."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Kumpleto na ang pag-sign up. Kumokonekta…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Napakabagal"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Mabagal"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Katamtaman"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Mabilis"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Napakabilis"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Nag-expire na"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Pinapares…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Nakakonekta (walang telepono)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Nakakonekta (walang media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Nakakonekta (walang access sa mensahe)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Nakakonekta (walang telepono o media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Nakakonekta, baterya <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Nakakonekta (walang telepono), baterya <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index de88c2c..8f4bae4 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Bağlı değil"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Devre dışı"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP Yapılandırması Hatası"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ağ kalitesi düşük olduğundan bağlanamadı"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Kablosuz Bağlantı Hatası"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Kimlik doğrulama sorunu"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Bağlanılamıyor"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\"<xliff:g id="AP_NAME">%1$s</xliff:g>\" ağına bağlanılamıyor"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Otomatik olarak bağlanma"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"İnternet erişimi yok"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> tarafından kaydedildi"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Sayaçlı ağa bağlı"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s üzerinden otomatik olarak bağlı"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Ağ derecelendirme sağlayıcı aracılığıyla otomatik olarak bağlandı"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s üzerinden bağlı"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> ile bağlandı"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s üzerinden kullanılabilir"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Kaydolmak için dokunun"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"İnternet yok"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Gizli DNS sunucusuna erişilemiyor"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"İnternet yok"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Oturum açılması gerekiyor"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Erişim noktası geçici olarak dolu"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s üzerinden bağlı"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s üzerinden kullanılabilir"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılıyor"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Bağlanılamadı"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Kayıt işlemi tamamlanıyor…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Kayıt işlemi tamamlanamadı. Tekrar denemek için dokunun."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Kayıt tamamlandı. Bağlanıyor…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Çok Yavaş"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Yavaş"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Tamam"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Orta"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Hızlı"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Çok Hızlı"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Süresi sona erdi"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Eşleniyor…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> cihazına bağlandı (telefon yok)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> cihazına bağlandı (medya yok)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> cihazına bağlandı (mesaj erişimi yok)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> cihazına bağlandı (telefon veya medya yok)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> cihazına bağlandı, pil <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> cihazına bağlandı (telefon yok), pil <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index a438741..a0c68c1 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Від’єднано"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Вимкнено"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Помилка конфігурації IP-адреси"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Не під’єднано через низьку якість мережі"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Помилка з’єднання Wi-Fi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Проблема з автентифікацією"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Не вдається під’єднатись"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Не вдається під’єднатися до мережі <xliff:g id="AP_NAME">%1$s</xliff:g>"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Не під’єднуватиметься автоматично"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Немає доступу до Інтернету"</string>
<string name="saved_network" msgid="7143698034077223645">"Збережено додатком <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Установлено з\'єднання з мережею з тарифікацією трафіку"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Автоматично під’єднано через %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Автоматично під’єднано через постачальника оцінки якості мережі"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Під’єднано через %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Підключено через додаток <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Доступ через %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Торкніться, щоб увійти"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Немає Інтернету"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Немає доступу до приватного DNS-сервера"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Немає Інтернету"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Потрібно ввійти в обліковий запис"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Точка доступу тимчасово переповнена"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Під’єднано через мережу %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Доступ через мережу %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> відкривається"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Не вдалося підключитись"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Завершення реєстрації…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Не вдалося завершити реєстрацію. Торкніться, щоб повторити спробу."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Реєстрацію завершено. Підключення…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Дуже повільна"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Повільна"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ОК"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Середня"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Швидка"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Дуже швидка"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Термін дії минув"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Підключення…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> під’єднано (без телефона)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> під’єдно (без медіа)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> під’єднано (без доступу до повідомлень)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> під’єднано (без телефона й медіа)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> під’єднано, заряд акумулятора – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> під’єднано (без телефона), заряд акумулятора – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 2e409ba..d0a1204 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"غیر منسلک"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"غیر فعال"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP کنفیگریشن کی ناکامی"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"کم معیاری نیٹ ورک کی وجہ سے منسلک نہیں ہے"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi کنکشن کی ناکامی"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"توثیق کا مسئلہ"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"منسلک نہیں ہو سکتا ہے"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\' سے منسلک نہیں ہو سکتا ہے"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"خودکار طور پر منسلک نہیں ہو گا"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"انٹرنیٹ تک کوئی رسائی نہیں"</string>
<string name="saved_network" msgid="7143698034077223645">"<xliff:g id="NAME">%1$s</xliff:g> کی جانب سے محفوظ کردہ"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"میٹرڈ نیٹ ورک سے منسلک ہے"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s کے ذریعے از خود منسلک کردہ"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"نیٹ ورک درجہ بندی کے فراہم کنندہ کے ذریعے از خود منسلک"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"منسلک بذریعہ %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> کے ذریعے منسلک"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"دستیاب بذریعہ %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"سائن اپ کے لیے تھپتھپائیں"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"انٹرنیٹ نہیں ہے"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"نجی DNS سرور تک رسائی حاصل نہیں کی جا سکی"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"انٹرنیٹ نہیں ہے"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"سائن ان درکار ہے"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"منسلک بذریعہ %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"دستیاب بذریعہ %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> کھل رہا ہے"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"منسلک نہیں کیا جا سکا"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"سائن اپ مکمل ہو رہا ہے…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"سائن اپ مکمل نہیں ہو سکا۔ دوبارہ کوشش کرنے کے لیے تھپتھپائیں۔"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"سائن اپ مکمل ہو گیا۔ منسلک ہو رہا ہے…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"بہت سست"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"سست"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"ٹھیک ہے"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"متوسط"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"تیز"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"بہت تیز"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"میعاد ختم ہو گئی"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"جوڑا بنایا جا رہا ہے…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"منسلک ہے (فون کے علاوہ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"منسلک ہے (میڈیا کے علاوہ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"منسلک ہے (پیغام تک رسائی نہیں ہے)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"منسلک ہے (فون یا میڈیا کے علاوہ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"منسلک ہو گیا، بٹری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"منسلک ہے (فون کے علاوہ)، بیٹری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index eeec101..1738e01 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Ulanmagan"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Yoqilmagan"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP manzilini sozlab bo‘lmadi"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Sifatsiz tarmoq sababli ulanib bo‘lmadi"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Wi-Fi ulanishini o‘rnatib bo‘lmadi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Tekshiruvda muammo"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Tarmoqqa ulanilmadi"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"“<xliff:g id="AP_NAME">%1$s</xliff:g>” nomli tarmoqqa ulanilmadi"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Avtomatik ravishda ulanilmaydi"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Internet aloqasi yo‘q"</string>
<string name="saved_network" msgid="7143698034077223645">"Saqlangan: <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Trafik hisoblanadigan tarmoqqa ulandi"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"%1$s orqali avtomatik ulandi"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Tarmoqlar reytingi muallifi orqali avtomatik ulandi"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"%1$s orqali ulangan"</string>
<string name="connected_via_app" msgid="3532267661404276584">"<xliff:g id="NAME">%1$s</xliff:g> orqali ulandi"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"%1$s orqali ishlaydi"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Yozilish uchun bosing"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Internetga ulanmagansiz"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Xususiy DNS server ishlamayapti"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Internet yo‘q"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Hisob bilan kirish zarur"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"%1$s orqali ulangan"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"%1$s orqali ishlaydi"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ochilmoqda"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ulanmadi"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Registratsiya tamomlanmoqda…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Registratsiya tamomlanmadi. Qayta urinish uchun tegining."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Registratsiya qilindi. Ulanmoqda…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Juda sekin"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Sekin"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"OK"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"O‘rtacha"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Tez"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Juda tez"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Muddati tugagan"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Juftlanmoqda…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ulandi (telefondan tashqari)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ulandi (mediadan tashqari)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ulandi (xabarlarga ruxsatsiz)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> ulandi (telefon yoki mediadan tashqari)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> ulandi, batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> ulandi (telefondan tashqari), batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index fc11dec..f7f4c0e 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Đã ngắt kết nối"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Đã tắt"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Lỗi cấu hình IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Không được kết nối do mạng chất lượng kém"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Lỗi kết nối WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Sự cố xác thực"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Không thể kết nối"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Không thể kết nối với \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Sẽ không tự động kết nối"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Không có quyền truy cập Internet"</string>
<string name="saved_network" msgid="7143698034077223645">"Do <xliff:g id="NAME">%1$s</xliff:g> lưu"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Đã kết nối với mạng có đo lượng dữ liệu"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Tự động được kết nối qua %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Tự động được kết nối qua nhà cung cấp dịch vụ xếp hạng mạng"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Được kết nối qua %1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Đã kết nối qua <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Có sẵn qua %1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Nhấn để đăng ký"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Không có Internet"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Không thể truy cập máy chủ DNS riêng tư"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Không có Internet"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Yêu cầu đăng nhập"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập."</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Được kết nối qua %1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Có sẵn qua %1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Đang mở <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Không thể kết nối"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Đang hoàn tất đăng ký…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Không thể hoàn tất đăng ký. Nhấn để thử lại."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Đã hoàn tất đăng ký. Đang kết nối…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Rất chậm"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Chậm"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"Khá tốt"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Trung bình"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Nhanh"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Rất nhanh"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Đã hết hạn"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Đang ghép nối…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Đã kết nối (không có điện thoại) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Đã kết nối (không có phương tiện) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Đã kết nối (không có quyền truy cập tin nhắn) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Đã kết nối (không có điện thoại hoặc phương tiện) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Đã kết nối, mức pin <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Đã kết nối (không có điện thoại), mức pin <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index a4fa1d9..f536bb9 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"已断开连接"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"已停用"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP 配置失败"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"网络质量较差,因此未连接"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WLAN 连接失败"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"身份验证出现问题"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"无法连接"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"无法连接到“<xliff:g id="AP_NAME">%1$s</xliff:g>”"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"无法自动连接"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"无法访问互联网"</string>
<string name="saved_network" msgid="7143698034077223645">"由“<xliff:g id="NAME">%1$s</xliff:g>”保存"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"已连接到按流量计费的网络"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"已通过%1$s自动连接"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"已自动连接(通过网络评分服务提供方)"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"已通过%1$s连接"</string>
<string name="connected_via_app" msgid="3532267661404276584">"已通过<xliff:g id="NAME">%1$s</xliff:g>连接到网络"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"可通过%1$s连接"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"点按即可注册"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"无法访问互联网"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"无法访问私人 DNS 服务器"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"无法访问互联网"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"必须登录"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"接入点暂时满载"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"已通过%1$s连接"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"可通过%1$s连接"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"正在打开<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"无法连接"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"正在完成注册…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"无法完成注册。点按即可重试。"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"注册完毕。正在连接…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"很慢"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"慢"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"良好"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"适中"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"快"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"很快"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"已失效"</string>
@@ -98,14 +89,13 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"正在配对..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"已连接(无手机信号)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"已连接(无媒体信号)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"已连接(无消息访问权限)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"已连接(无手机或媒体信号)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"已连接,电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"已连接(无手机信号),电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp_battery_level" msgid="6499078454894324287">"已连接(无媒体信号),电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="8477440576953067242">"已连接(无手机或媒体信号),电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_active_battery_level" msgid="3450745316700494425">"使用中,电池电量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
- <string name="bluetooth_active_battery_level_untethered" msgid="2706188607604205362">"已启用,左:目前电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>;右:目前电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
+ <string name="bluetooth_active_battery_level_untethered" msgid="2706188607604205362">"使用中,左:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> 电量,右:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 电量"</string>
<string name="bluetooth_battery_level" msgid="2893696778200201555">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 的电量"</string>
<string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"左:目前电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>;右:目前电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"使用中"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 369fe52..357302b 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"已中斷連線"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"已停用"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP 設定失敗"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"網絡品質欠佳,因此無法連線"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi 連線失敗"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"驗證問題"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"無法連線"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"無法連線至「<xliff:g id="AP_NAME">%1$s</xliff:g>」"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"不會自動連線"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"無法連接互聯網"</string>
<string name="saved_network" msgid="7143698034077223645">"由「<xliff:g id="NAME">%1$s</xliff:g>」儲存"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"已連結至按用量收費的網絡"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"已透過 %1$s 自動連線"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"已透過網絡評分供應商自動連線"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"已透過 %1$s 連線"</string>
<string name="connected_via_app" msgid="3532267661404276584">"已透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"可透過 %1$s 連線"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"輕按即可登入"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"沒有互聯網連線"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"無法存取私人 DNS 伺服器"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"沒有互聯網連線"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"必須登入"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"存取點暫時已滿"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"已透過 %1$s 連線"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"可透過 %1$s 連線"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"無法連接"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"正在完成申請…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"無法完成申請。輕按即可重試。"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"已完成申請。連接中…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"非常慢"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"慢"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"良好"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"適中"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"快"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"非常快"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"已過期"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"正在配對..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"已連接「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無手機音訊)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"已連接「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無媒體音訊)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"已連接「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無訊息存取權)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"已連接「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無手機或媒體音訊)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"已連接,電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"已連接 (無手機音訊),電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 8219811..4ae28304 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"已中斷連線"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"已停用"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP 設定失敗"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"網路品質不佳,因此未連線"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"WiFi 連線失敗"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"驗證問題"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"無法連線"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"無法連線至「<xliff:g id="AP_NAME">%1$s</xliff:g>」"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"無法自動連線"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"沒有可用的網際網路連線"</string>
<string name="saved_network" msgid="7143698034077223645">"由「<xliff:g id="NAME">%1$s</xliff:g>」儲存"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"已連線到計量付費網路"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"已透過 %1$s 自動連線"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"已透過網路評分供應商自動連線"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"已透過 %1$s 連線"</string>
<string name="connected_via_app" msgid="3532267661404276584">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"可透過 %1$s 使用"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"輕觸即可註冊"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"沒有網際網路連線"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"無法存取私人 DNS 伺服器"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"沒有網際網路連線"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"必須登入"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"存取點暫時滿載"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"已透過 %1$s 連線"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"可透過 %1$s 使用"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"無法連線"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"正在完成註冊程序…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"無法完成註冊程序。輕觸即可重試。"</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"註冊完成。連線中…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"非常慢"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"慢"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"確定"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"適中"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"快"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"非常快"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"已失效"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"配對中…"</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"已連線到「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無手機音訊)"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"已連線到「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無媒體音訊)"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"已連線到「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無訊息存取權)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"已連線到「<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>」(無手機或媒體音訊)"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"已連線,電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"已連線 (無手機音訊),電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 6ca4cc5..c113dc8 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -53,8 +53,6 @@
<string name="wifi_disconnected" msgid="7054450256284661757">"Inqamukile"</string>
<string name="wifi_disabled_generic" msgid="2651916945380294607">"Akusebenzi"</string>
<string name="wifi_disabled_network_failure" msgid="2660396183242399585">"Ukwehluleka kokulungiswa kwe-IP"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="1302938248432705534">"Ayixhunyiwe ngenxa yenethiwekhi yekhwalithi ephansi"</string>
- <string name="wifi_disabled_wifi_failure" msgid="8819554899148331100">"Ukwehlulekla koxhumo le-WiFi"</string>
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Inkinga yokufakazela ubuqiniso"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Ayikwazi ukuxhuma"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Ayikwazi ukuxhumeka ku-\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string>
@@ -63,12 +61,9 @@
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Ngeke ize ixhumeke ngokuzenzakalela"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Akukho ukufinyelela kwe-inthanethi"</string>
<string name="saved_network" msgid="7143698034077223645">"Kulondolozwe ngu-<xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="connected_to_metered_access_point" msgid="9179693207918156341">"Kuxhunywe kunethiwekhi eyenziwe imitha"</string>
<string name="connected_via_network_scorer" msgid="7665725527352893558">"Ixhumeke ngokuzenzakalela nge-%1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Kuxhunywe ngokuzenzakalelayo ngomhlinzeki wesilinganiso wenethiwekhi"</string>
- <string name="connected_via_passpoint" msgid="7735442932429075684">"Kuxhumeke nge-%1$s"</string>
<string name="connected_via_app" msgid="3532267661404276584">"Ixhumeke nge-<xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="available_via_passpoint" msgid="1716000261192603682">"Iyatholakala nge-%1$s"</string>
<string name="tap_to_sign_up" msgid="5356397741063740395">"Thepha ukuze ubhalisele"</string>
<string name="wifi_connected_no_internet" msgid="5087420713443350646">"Ayikho i-inthanethi"</string>
<string name="private_dns_broken" msgid="1984159464346556931">"Iseva eyimfihlo ye-DNS ayikwazi ukufinyelelwa"</string>
@@ -76,17 +71,13 @@
<string name="wifi_status_no_internet" msgid="3799933875988829048">"Ayikho i-inthanethi"</string>
<string name="wifi_status_sign_in_required" msgid="2236267500459526855">"Ukungena ngemvume kuyadingeka"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"Iphoyinti lokufinyelela ligcwele okwesikhashana"</string>
- <string name="connected_via_carrier" msgid="1968057009076191514">"Kuxhumeke nge-%1$s"</string>
- <string name="available_via_carrier" msgid="465598683092718294">"Iyatholakala nge-%1$s"</string>
<string name="osu_opening_provider" msgid="4318105381295178285">"Ivula i-<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
<string name="osu_connect_failed" msgid="9107873364807159193">"Ayikwazanga ukuxhumeka"</string>
<string name="osu_completing_sign_up" msgid="8412636665040390901">"Iqedela ukubhalisa…"</string>
<string name="osu_sign_up_failed" msgid="5605453599586001793">"Ayikwazanga ukuqedelela ukubhalisa. Thepha ukuze uzame futhi."</string>
<string name="osu_sign_up_complete" msgid="7640183358878916847">"Ukubhalisa kuqediwe. Iyaxhuma…"</string>
- <string name="speed_label_very_slow" msgid="8526005255731597666">"Phansi kakhulu"</string>
<string name="speed_label_slow" msgid="6069917670665664161">"Phansi"</string>
<string name="speed_label_okay" msgid="1253594383880810424">"KULUNGILE"</string>
- <string name="speed_label_medium" msgid="9078405312828606976">"Okumaphakathi"</string>
<string name="speed_label_fast" msgid="2677719134596044051">"Sheshayo"</string>
<string name="speed_label_very_fast" msgid="8215718029533182439">"Kushesha kakhulu"</string>
<string name="wifi_passpoint_expired" msgid="6540867261754427561">"Iphelelwe isikhathi"</string>
@@ -98,7 +89,6 @@
<string name="bluetooth_pairing" msgid="4269046942588193600">"Iyabhangqa..."</string>
<string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Ixhunyiwe (ayikho ifoni)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Ixhunyiwe (ayikho imidiya)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"Ixhunyiwe (akukho ukufinyelela kumlayezo)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Ixhunyiwe (ayikho ifoni noma imidiya)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_battery_level" msgid="5410325759372259950">"Ixhunyiwe, ibhethri ngu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
<string name="bluetooth_connected_no_headset_battery_level" msgid="2661863370509206428">"Ixhunyiwe (ayikho ifoni), ibhethri ngu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string>
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
index 10ac5d9..f501682 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java
@@ -72,6 +72,7 @@
Settings.System.SIP_CALL_OPTIONS,
Settings.System.SIP_RECEIVE_CALLS,
Settings.System.POINTER_SPEED,
+ Settings.System.VIBRATE_ON,
Settings.System.VIBRATE_WHEN_RINGING,
Settings.System.RINGTONE,
Settings.System.LOCK_TO_APP_ENABLED,
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index e7c7ac0..f05f637 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -83,7 +83,6 @@
Settings.System.SYSTEM_LOCALES, // bug?
Settings.System.USER_ROTATION, // backup candidate?
Settings.System.VIBRATE_IN_SILENT, // deprecated?
- Settings.System.VIBRATE_ON, // candidate for backup?
Settings.System.VOLUME_ACCESSIBILITY, // used internally, changing value will
// not change volume
Settings.System.VOLUME_ALARM, // deprecated since API 2?
diff --git a/packages/SoundPicker/res/values-ro/strings.xml b/packages/SoundPicker/res/values-ro/strings.xml
index 6190f7f..58b5aeb 100644
--- a/packages/SoundPicker/res/values-ro/strings.xml
+++ b/packages/SoundPicker/res/values-ro/strings.xml
@@ -19,10 +19,10 @@
<string name="ringtone_default" msgid="798836092118824500">"Ton de apel prestabilit"</string>
<string name="notification_sound_default" msgid="8133121186242636840">"Sunet de notificare prestabilit"</string>
<string name="alarm_sound_default" msgid="4787646764557462649">"Sunet de alarmă prestabilit"</string>
- <string name="add_ringtone_text" msgid="6642389991738337529">"Adăugați un ton de sonerie"</string>
- <string name="add_alarm_text" msgid="3545497316166999225">"Adăugați o alarmă"</string>
- <string name="add_notification_text" msgid="4431129543300614788">"Adăugați o notificare"</string>
- <string name="delete_ringtone_text" msgid="201443984070732499">"Ștergeți"</string>
+ <string name="add_ringtone_text" msgid="6642389991738337529">"Adaugă un ton de sonerie"</string>
+ <string name="add_alarm_text" msgid="3545497316166999225">"Adaugă o alarmă"</string>
+ <string name="add_notification_text" msgid="4431129543300614788">"Adaugă o notificare"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Șterge"</string>
<string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nu se poate adăuga tonul de sonerie personalizat"</string>
<string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nu se poate șterge tonul de sonerie personalizat"</string>
<string name="app_label" msgid="3091611356093417332">"Sunete"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml
index dcc9050..ae8680a0 100644
--- a/packages/SystemUI/res-keyguard/values-ro/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml
@@ -20,9 +20,9 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Introduceți codul PIN"</string>
- <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduceți modelul"</string>
- <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introduceți parola"</string>
+ <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Introdu codul PIN"</string>
+ <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introdu modelul"</string>
+ <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introdu parola"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Card nevalid"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Încărcată"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă wireless"</string>
@@ -31,11 +31,11 @@
<string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă rapid"</string>
<string name="keyguard_plugged_in_charging_slowly" msgid="217655355424210">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Se încarcă lent"</string>
<string name="keyguard_plugged_in_charging_limited" msgid="1709413803451065875">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Încărcarea s-a întrerupt pentru a proteja bateria"</string>
- <string name="keyguard_instructions_when_pattern_disabled" msgid="8448804180089936954">"Apăsați pe Meniu pentru a debloca."</string>
+ <string name="keyguard_instructions_when_pattern_disabled" msgid="8448804180089936954">"Apasă pe Meniu pentru a debloca."</string>
<string name="keyguard_network_locked_message" msgid="407096292844868608">"Rețea blocată"</string>
<string name="keyguard_missing_sim_message_short" msgid="704159478161444907">"Niciun card SIM"</string>
- <string name="keyguard_missing_sim_instructions" msgid="1162120926141335918">"Introduceți un card SIM."</string>
- <string name="keyguard_missing_sim_instructions_long" msgid="2712623293749378570">"Cardul SIM lipsește sau nu poate fi citit. Introduceți un card SIM."</string>
+ <string name="keyguard_missing_sim_instructions" msgid="1162120926141335918">"Introdu un card SIM."</string>
+ <string name="keyguard_missing_sim_instructions_long" msgid="2712623293749378570">"Cardul SIM lipsește sau nu poate fi citit. Introdu un card SIM."</string>
<string name="keyguard_permanent_disabled_sim_message_short" msgid="5842745213110966962">"Card SIM inutilizabil."</string>
<string name="keyguard_permanent_disabled_sim_instructions" msgid="2490584154727897806">"Cardul dvs. SIM este dezactivat definitiv.\n Contactați furnizorul de servicii wireless pentru a obține un alt card SIM."</string>
<string name="keyguard_sim_locked_message" msgid="4343544458476911044">"Cardul SIM este blocat."</string>
@@ -45,24 +45,24 @@
<string name="keyguard_accessibility_password" msgid="3524161948484801450">"Parola dispozitivului"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"Zona codului PIN pentru cardul SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"Zona codului PUK pentru cardul SIM"</string>
- <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"Ștergeți"</string>
+ <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"Șterge"</string>
<string name="disable_carrier_button_text" msgid="7153361131709275746">"Dezactivați cardul eSIM"</string>
<string name="error_disable_esim_title" msgid="3802652622784813119">"Nu se poate dezactiva cardul eSIM"</string>
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Cardul eSIM nu poate fi dezactivat din cauza unei erori."</string>
- <string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Introduceți"</string>
+ <string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Introdu"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Model greșit"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Parolă greșită"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Cod PIN greșit"</string>
- <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Reîncercați peste o secundă.}few{Reîncercați peste # secunde.}other{Reîncercați peste # de secunde.}}"</string>
- <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introduceți codul PIN al cardului SIM."</string>
- <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introduceți codul PIN al cardului SIM pentru „<xliff:g id="CARRIER">%1$s</xliff:g>”."</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Reîncearcă peste o secundă.}few{Reîncearcă peste # secunde.}other{Reîncearcă peste # de secunde.}}"</string>
+ <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introdu codul PIN al cardului SIM."</string>
+ <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introdu codul PIN al cardului SIM pentru „<xliff:g id="CARRIER">%1$s</xliff:g>”."</string>
<string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Dezactivați cardul eSIM pentru a folosi dispozitivul fără serviciu mobil."</string>
<string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"Cardul SIM este acum dezactivat. Pentru a continua, introduceți codul PUK. Pentru detalii, contactați operatorul."</string>
<string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"Cardul SIM „<xliff:g id="CARRIER">%1$s</xliff:g>\" este acum dezactivat. Pentru a continua, introduceți codul PUK. Pentru detalii, contactați operatorul."</string>
- <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"Introduceți codul PIN dorit"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"Introdu codul PIN dorit"</string>
<string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"Confirmați codul PIN dorit"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="4251352015304070326">"Se deblochează cardul SIM…"</string>
- <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Introduceți un cod PIN alcătuit din 4 până la 8 cifre."</string>
+ <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Introdu un cod PIN alcătuit din 4 până la 8 cifre."</string>
<string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"Codul PUK trebuie să aibă minimum 8 cifre."</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Ați introdus incorect codul PIN de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori.\n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
index 57bea67..6e4c858 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -24,6 +24,7 @@
import android.content.ComponentName;
import android.content.res.Configuration;
import android.metrics.LogMaker;
+import android.util.Log;
import android.view.View;
import com.android.internal.annotations.VisibleForTesting;
@@ -61,6 +62,7 @@
*/
public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewController<T>
implements Dumpable{
+ private static final String TAG = "QSPanelControllerBase";
protected final QSTileHost mHost;
private final QSCustomizerController mQsCustomizerController;
private final boolean mUsingMediaPlayer;
@@ -90,6 +92,13 @@
public void onConfigurationChange(Configuration newConfig) {
mShouldUseSplitNotificationShade =
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
+ // Logging to aid the investigation of b/216244185.
+ Log.d(TAG,
+ "onConfigurationChange: "
+ + "mShouldUseSplitNotificationShade="
+ + mShouldUseSplitNotificationShade + ", "
+ + "newConfig.windowConfiguration="
+ + newConfig.windowConfiguration);
mQSLogger.logOnConfigurationChanged(mLastOrientation, newConfig.orientation,
mView.getDumpableTag());
onConfigurationChanged();
diff --git a/packages/VpnDialogs/res/values-ro/strings.xml b/packages/VpnDialogs/res/values-ro/strings.xml
index 5bda87e..a63f592 100644
--- a/packages/VpnDialogs/res/values-ro/strings.xml
+++ b/packages/VpnDialogs/res/values-ro/strings.xml
@@ -17,21 +17,21 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="prompt" msgid="3183836924226407828">"Solicitare de conexiune"</string>
- <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> dorește să configureze o conexiune VPN care să îi permită să monitorizeze traficul în rețea. Acceptați numai dacă aveți încredere în sursă. Atunci când conexiunea VPN este activă, <br /> <br /> <img src=vpn_icon /> se afișează în partea de sus a ecranului."</string>
+ <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> dorește să configureze o conexiune VPN care să îi permită să monitorizeze traficul în rețea. Acceptă numai dacă ai încredere în sursă. Când conexiunea VPN e activă, <br /> <br /> <img src=vpn_icon /> se afișează în partea de sus a ecranului."</string>
<string name="warning" product="tv" msgid="5188957997628124947">"<xliff:g id="APP">%s</xliff:g> solicită permisiunea de a configura o conexiune VPN care să îi permită să monitorizeze traficul de rețea. Acceptați numai dacă aveți încredere în sursă. <br /> <br /> <img src=vpn_icon /> va apărea pe ecran atunci când conexiunea VPN este activă."</string>
<string name="legacy_title" msgid="192936250066580964">"VPN este conectat"</string>
<string name="session" msgid="6470628549473641030">"Sesiune:"</string>
<string name="duration" msgid="3584782459928719435">"Durată:"</string>
<string name="data_transmitted" msgid="7988167672982199061">"Trimise:"</string>
<string name="data_received" msgid="4062776929376067820">"Primite:"</string>
- <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octeți/<xliff:g id="NUMBER_1">%2$s</xliff:g> pachete"</string>
+ <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> byți/<xliff:g id="NUMBER_1">%2$s</xliff:g> pachete"</string>
<string name="always_on_disconnected_title" msgid="1906740176262776166">"Nu se poate conecta la rețeaua VPN activată permanent"</string>
<string name="always_on_disconnected_message" msgid="555634519845992917">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> este setată să rămână conectată permanent, dar momentan nu se poate conecta. Telefonul dvs. va folosi o rețea publică până când se va putea reconecta la <xliff:g id="VPN_APP_1">%1$s</xliff:g>."</string>
<string name="always_on_disconnected_message_lockdown" msgid="4232225539869452120">"<xliff:g id="VPN_APP">%1$s</xliff:g> este setată să rămână conectată permanent, dar momentan nu se poate conecta. Nu veți avea conexiune până când se va putea reconecta rețeaua VPN."</string>
<string name="always_on_disconnected_message_separator" msgid="3310614409322581371">" "</string>
<string name="always_on_disconnected_message_settings_link" msgid="6172280302829992412">"Modificați setările VPN"</string>
- <string name="configure" msgid="4905518375574791375">"Configurați"</string>
- <string name="disconnect" msgid="971412338304200056">"Deconectați"</string>
- <string name="open_app" msgid="3717639178595958667">"Deschideți aplicația"</string>
- <string name="dismiss" msgid="6192859333764711227">"Închideți"</string>
+ <string name="configure" msgid="4905518375574791375">"Configurează"</string>
+ <string name="disconnect" msgid="971412338304200056">"Deconectează"</string>
+ <string name="open_app" msgid="3717639178595958667">"Deschide aplicația"</string>
+ <string name="dismiss" msgid="6192859333764711227">"Închide"</string>
</resources>
diff --git a/packages/overlays/NoCutoutOverlay/res/values-ro/strings.xml b/packages/overlays/NoCutoutOverlay/res/values-ro/strings.xml
index e6281fd..2d7aaf6 100644
--- a/packages/overlays/NoCutoutOverlay/res/values-ro/strings.xml
+++ b/packages/overlays/NoCutoutOverlay/res/values-ro/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="display_cutout_emulation_overlay" msgid="9031691255599853162">"Ascundeți"</string>
+ <string name="display_cutout_emulation_overlay" msgid="9031691255599853162">"Ascunde"</string>
</resources>
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 8b13cc8..cbd3f60 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -134,6 +134,7 @@
"service-permission.stubs.system_server",
"service-sdksandbox.stubs.system_server",
],
+ plugins: ["ImmutabilityAnnotationProcessor"],
required: [
"default_television.xml",
@@ -172,6 +173,7 @@
"overlayable_policy_aidl-java",
"SurfaceFlingerProperties",
"com.android.sysprop.watchdog",
+ "ImmutabilityAnnotation",
],
javac_shard_size: 50,
}
diff --git a/services/core/java/com/android/server/SystemServerInitThreadPool.java b/services/core/java/com/android/server/SystemServerInitThreadPool.java
index 63e7563..9323d95 100644
--- a/services/core/java/com/android/server/SystemServerInitThreadPool.java
+++ b/services/core/java/com/android/server/SystemServerInitThreadPool.java
@@ -192,8 +192,10 @@
private static void dumpStackTraces() {
final ArrayList<Integer> pids = new ArrayList<>();
pids.add(Process.myPid());
- ActivityManagerService.dumpStackTraces(pids, null, null,
- Watchdog.getInterestingNativePids(), null, null, null);
+ ActivityManagerService.dumpStackTraces(pids, /* processCpuTracker= */null,
+ /* lastPids= */null, Watchdog.getInterestingNativePids(),
+ /* logExceptionCreatingFile= */null, /* subject= */null,
+ /* criticalEventSection= */null, /* latencyTracker= */null);
}
@Override
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java
index a6e5aa4..b00dec0 100644
--- a/services/core/java/com/android/server/Watchdog.java
+++ b/services/core/java/com/android/server/Watchdog.java
@@ -895,7 +895,7 @@
StringWriter tracesFileException = new StringWriter();
final File stack = ActivityManagerService.dumpStackTraces(
pids, processCpuTracker, new SparseArray<>(), getInterestingNativePids(),
- tracesFileException, subject, criticalEvents);
+ tracesFileException, subject, criticalEvents, /* latencyTracker= */null);
// Give some extra time to make sure the stack traces get written.
// The system's been hanging for a whlie, another second or two won't hurt much.
SystemClock.sleep(5000);
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 3b299a2..c677edc 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1227,31 +1227,39 @@
}
private void stopServiceLocked(ServiceRecord service, boolean enqueueOomAdj) {
- if (service.delayed) {
- // If service isn't actually running, but is being held in the
- // delayed list, then we need to keep it started but note that it
- // should be stopped once no longer delayed.
- if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "Delaying stop of pending: " + service);
- service.delayedStop = true;
- return;
- }
-
- final int uid = service.appInfo.uid;
- final String packageName = service.name.getPackageName();
- final String serviceName = service.name.getClassName();
- FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, uid, packageName,
- serviceName, FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
- mAm.mBatteryStatsService.noteServiceStopRunning(uid, packageName, serviceName);
- service.startRequested = false;
- if (service.tracker != null) {
- synchronized (mAm.mProcessStats.mLock) {
- service.tracker.setStarted(false, mAm.mProcessStats.getMemFactorLocked(),
- SystemClock.uptimeMillis());
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "stopServiceLocked()");
+ if (service.delayed) {
+ // If service isn't actually running, but is being held in the
+ // delayed list, then we need to keep it started but note that it
+ // should be stopped once no longer delayed.
+ if (DEBUG_DELAYED_STARTS) {
+ Slog.v(TAG_SERVICE, "Delaying stop of pending: " + service);
+ }
+ service.delayedStop = true;
+ return;
}
- }
- service.callStart = false;
- bringDownServiceIfNeededLocked(service, false, false, enqueueOomAdj);
+ final int uid = service.appInfo.uid;
+ final String packageName = service.name.getPackageName();
+ final String serviceName = service.name.getClassName();
+ FrameworkStatsLog.write(FrameworkStatsLog.SERVICE_STATE_CHANGED, uid, packageName,
+ serviceName, FrameworkStatsLog.SERVICE_STATE_CHANGED__STATE__STOP);
+ mAm.mBatteryStatsService.noteServiceStopRunning(uid, packageName, serviceName);
+ service.startRequested = false;
+ if (service.tracker != null) {
+ synchronized (mAm.mProcessStats.mLock) {
+ service.tracker.setStarted(false, mAm.mProcessStats.getMemFactorLocked(),
+ SystemClock.uptimeMillis());
+ }
+ }
+ service.callStart = false;
+
+ bringDownServiceIfNeededLocked(service, false, false, enqueueOomAdj);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
}
int stopServiceLocked(IApplicationThread caller, Intent service,
@@ -3303,7 +3311,7 @@
}
public void run() {
- synchronized(mAm) {
+ synchronized (mAm) {
performServiceRestartLocked(mService);
}
}
@@ -5780,92 +5788,108 @@
}
void serviceTimeout(ProcessRecord proc) {
- TimeoutRecord timeoutRecord = null;
- synchronized(mAm) {
- if (proc.isDebugging()) {
- // The app's being debugged, ignore timeout.
- return;
- }
- final ProcessServiceRecord psr = proc.mServices;
- if (psr.numberOfExecutingServices() == 0 || proc.getThread() == null) {
- return;
- }
- final long now = SystemClock.uptimeMillis();
- final long maxTime = now -
- (psr.shouldExecServicesFg() ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT);
- ServiceRecord timeout = null;
- long nextTime = 0;
- for (int i = psr.numberOfExecutingServices() - 1; i >= 0; i--) {
- ServiceRecord sr = psr.getExecutingServiceAt(i);
- if (sr.executingStart < maxTime) {
- timeout = sr;
- break;
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceTimeout()");
+ TimeoutRecord timeoutRecord = null;
+ synchronized (mAm) {
+ if (proc.isDebugging()) {
+ // The app's being debugged, ignore timeout.
+ return;
}
- if (sr.executingStart > nextTime) {
- nextTime = sr.executingStart;
+ final ProcessServiceRecord psr = proc.mServices;
+ if (psr.numberOfExecutingServices() == 0 || proc.getThread() == null) {
+ return;
+ }
+ final long now = SystemClock.uptimeMillis();
+ final long maxTime = now
+ - (psr.shouldExecServicesFg()
+ ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT);
+ ServiceRecord timeout = null;
+ long nextTime = 0;
+ for (int i = psr.numberOfExecutingServices() - 1; i >= 0; i--) {
+ ServiceRecord sr = psr.getExecutingServiceAt(i);
+ if (sr.executingStart < maxTime) {
+ timeout = sr;
+ break;
+ }
+ if (sr.executingStart > nextTime) {
+ nextTime = sr.executingStart;
+ }
+ }
+ if (timeout != null && mAm.mProcessList.isInLruListLOSP(proc)) {
+ Slog.w(TAG, "Timeout executing service: " + timeout);
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new FastPrintWriter(sw, false, 1024);
+ pw.println(timeout);
+ timeout.dump(pw, " ");
+ pw.close();
+ mLastAnrDump = sw.toString();
+ mAm.mHandler.removeCallbacks(mLastAnrDumpClearer);
+ mAm.mHandler.postDelayed(mLastAnrDumpClearer,
+ LAST_ANR_LIFETIME_DURATION_MSECS);
+ String anrMessage = "executing service " + timeout.shortInstanceName;
+ timeoutRecord = TimeoutRecord.forServiceExec(anrMessage);
+ } else {
+ Message msg = mAm.mHandler.obtainMessage(
+ ActivityManagerService.SERVICE_TIMEOUT_MSG);
+ msg.obj = proc;
+ mAm.mHandler.sendMessageAtTime(msg, psr.shouldExecServicesFg()
+ ? (nextTime + SERVICE_TIMEOUT) :
+ (nextTime + SERVICE_BACKGROUND_TIMEOUT));
}
}
- if (timeout != null && mAm.mProcessList.isInLruListLOSP(proc)) {
- Slog.w(TAG, "Timeout executing service: " + timeout);
- StringWriter sw = new StringWriter();
- PrintWriter pw = new FastPrintWriter(sw, false, 1024);
- pw.println(timeout);
- timeout.dump(pw, " ");
- pw.close();
- mLastAnrDump = sw.toString();
- mAm.mHandler.removeCallbacks(mLastAnrDumpClearer);
- mAm.mHandler.postDelayed(mLastAnrDumpClearer, LAST_ANR_LIFETIME_DURATION_MSECS);
- String anrMessage = "executing service " + timeout.shortInstanceName;
- timeoutRecord = TimeoutRecord.forServiceExec(anrMessage);
- } else {
- Message msg = mAm.mHandler.obtainMessage(
- ActivityManagerService.SERVICE_TIMEOUT_MSG);
- msg.obj = proc;
- mAm.mHandler.sendMessageAtTime(msg, psr.shouldExecServicesFg()
- ? (nextTime+SERVICE_TIMEOUT) : (nextTime + SERVICE_BACKGROUND_TIMEOUT));
- }
- }
- if (timeoutRecord != null) {
- mAm.mAnrHelper.appNotResponding(proc, timeoutRecord);
+ if (timeoutRecord != null) {
+ mAm.mAnrHelper.appNotResponding(proc, timeoutRecord);
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
}
void serviceForegroundTimeout(ServiceRecord r) {
- ProcessRecord app;
- // Grab a timestamp before lock is taken.
- long timeoutEndMs = SystemClock.uptimeMillis();
- synchronized (mAm) {
- if (!r.fgRequired || !r.fgWaiting || r.destroying) {
- return;
- }
-
- app = r.app;
- if (app != null && app.isDebugging()) {
- // The app's being debugged; let it ride
- return;
- }
-
- if (DEBUG_BACKGROUND_CHECK) {
- Slog.i(TAG, "Service foreground-required timeout for " + r);
- }
- r.fgWaiting = false;
- stopServiceLocked(r, false);
- }
-
- if (app != null) {
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "serviceForegroundTimeout()");
+ ProcessRecord app;
+ // Create a TimeoutRecord .
final String annotation = "Context.startForegroundService() did not then call "
+ "Service.startForeground(): " + r;
- Message msg = mAm.mHandler.obtainMessage(
- ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_ANR_MSG);
TimeoutRecord timeoutRecord = TimeoutRecord.forServiceStartWithEndTime(annotation,
- timeoutEndMs);
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = app;
- args.arg2 = timeoutRecord;
- msg.obj = args;
- mAm.mHandler.sendMessageDelayed(msg,
- mAm.mConstants.mServiceStartForegroundAnrDelayMs);
+ SystemClock.uptimeMillis());
+
+ timeoutRecord.mLatencyTracker.waitingOnAMSLockEnded();
+ synchronized (mAm) {
+ timeoutRecord.mLatencyTracker.waitingOnAMSLockEnded();
+ if (!r.fgRequired || !r.fgWaiting || r.destroying) {
+ return;
+ }
+
+ app = r.app;
+ if (app != null && app.isDebugging()) {
+ // The app's being debugged; let it ride
+ return;
+ }
+
+ if (DEBUG_BACKGROUND_CHECK) {
+ Slog.i(TAG, "Service foreground-required timeout for " + r);
+ }
+ r.fgWaiting = false;
+ stopServiceLocked(r, false);
+ }
+
+ if (app != null) {
+
+ Message msg = mAm.mHandler.obtainMessage(
+ ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_ANR_MSG);
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = app;
+ args.arg2 = timeoutRecord;
+ msg.obj = args;
+ mAm.mHandler.sendMessageDelayed(msg,
+ mAm.mConstants.mServiceStartForegroundAnrDelayMs);
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 1b68aba..d84b0e8 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -362,6 +362,7 @@
import com.android.internal.os.TimeoutRecord;
import com.android.internal.os.TransferPipe;
import com.android.internal.os.Zygote;
+import com.android.internal.os.anr.AnrLatencyTracker;
import com.android.internal.policy.AttributeCache;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.ArrayUtils;
@@ -3400,12 +3401,14 @@
* @param lastPids of dalvik VM processes to dump stack traces for last
* @param nativePids optional list of native pids to dump stack crawls
* @param logExceptionCreatingFile optional writer to which we log errors creating the file
+ * @param latencyTracker the latency tracker instance of the current ANR.
*/
public static File dumpStackTraces(ArrayList<Integer> firstPids,
ProcessCpuTracker processCpuTracker, SparseArray<Boolean> lastPids,
- ArrayList<Integer> nativePids, StringWriter logExceptionCreatingFile) {
+ ArrayList<Integer> nativePids, StringWriter logExceptionCreatingFile,
+ AnrLatencyTracker latencyTracker) {
return dumpStackTraces(firstPids, processCpuTracker, lastPids, nativePids,
- logExceptionCreatingFile, null, null, null);
+ logExceptionCreatingFile, null, null, null, latencyTracker);
}
/**
@@ -3416,13 +3419,14 @@
* @param logExceptionCreatingFile optional writer to which we log errors creating the file
* @param subject optional line related to the error
* @param criticalEventSection optional lines containing recent critical events.
+ * @param latencyTracker the latency tracker instance of the current ANR.
*/
public static File dumpStackTraces(ArrayList<Integer> firstPids,
ProcessCpuTracker processCpuTracker, SparseArray<Boolean> lastPids,
ArrayList<Integer> nativePids, StringWriter logExceptionCreatingFile,
- String subject, String criticalEventSection) {
+ String subject, String criticalEventSection, AnrLatencyTracker latencyTracker) {
return dumpStackTraces(firstPids, processCpuTracker, lastPids, nativePids,
- logExceptionCreatingFile, null, subject, criticalEventSection);
+ logExceptionCreatingFile, null, subject, criticalEventSection, latencyTracker);
}
/**
@@ -3432,83 +3436,97 @@
/* package */ static File dumpStackTraces(ArrayList<Integer> firstPids,
ProcessCpuTracker processCpuTracker, SparseArray<Boolean> lastPids,
ArrayList<Integer> nativePids, StringWriter logExceptionCreatingFile,
- long[] firstPidOffsets, String subject, String criticalEventSection) {
- ArrayList<Integer> extraPids = null;
-
- Slog.i(TAG, "dumpStackTraces pids=" + lastPids + " nativepids=" + nativePids);
-
- // Measure CPU usage as soon as we're called in order to get a realistic sampling
- // of the top users at the time of the request.
- if (processCpuTracker != null) {
- processCpuTracker.init();
- try {
- Thread.sleep(200);
- } catch (InterruptedException ignored) {
- }
-
- processCpuTracker.update();
-
- // We'll take the stack crawls of just the top apps using CPU.
- final int N = processCpuTracker.countWorkingStats();
- extraPids = new ArrayList<>();
- for (int i = 0; i < N && extraPids.size() < 5; i++) {
- ProcessCpuTracker.Stats stats = processCpuTracker.getWorkingStats(i);
- if (lastPids.indexOfKey(stats.pid) >= 0) {
- if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for extra pid " + stats.pid);
-
- extraPids.add(stats.pid);
- } else {
- Slog.i(TAG, "Skipping next CPU consuming process, not a java proc: "
- + stats.pid);
- }
- }
- }
-
- final File tracesDir = new File(ANR_TRACE_DIR);
- // Each set of ANR traces is written to a separate file and dumpstate will process
- // all such files and add them to a captured bug report if they're recent enough.
- maybePruneOldTraces(tracesDir);
-
- // NOTE: We should consider creating the file in native code atomically once we've
- // gotten rid of the old scheme of dumping and lot of the code that deals with paths
- // can be removed.
- File tracesFile;
+ long[] firstPidOffsets, String subject, String criticalEventSection,
+ AnrLatencyTracker latencyTracker) {
try {
- tracesFile = createAnrDumpFile(tracesDir);
- } catch (IOException e) {
- Slog.w(TAG, "Exception creating ANR dump file:", e);
- if (logExceptionCreatingFile != null) {
- logExceptionCreatingFile.append("----- Exception creating ANR dump file -----\n");
- e.printStackTrace(new PrintWriter(logExceptionCreatingFile));
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesStarted();
}
- return null;
- }
+ ArrayList<Integer> extraPids = null;
- if (subject != null || criticalEventSection != null) {
- try (FileOutputStream fos = new FileOutputStream(tracesFile, true)) {
- if (subject != null) {
- String header = "Subject: " + subject + "\n\n";
- fos.write(header.getBytes(StandardCharsets.UTF_8));
+ Slog.i(TAG, "dumpStackTraces pids=" + lastPids + " nativepids=" + nativePids);
+
+ // Measure CPU usage as soon as we're called in order to get a realistic sampling
+ // of the top users at the time of the request.
+ if (processCpuTracker != null) {
+ if (latencyTracker != null) {
+ latencyTracker.processCpuTrackerMethodsCalled();
}
- if (criticalEventSection != null) {
- fos.write(criticalEventSection.getBytes(StandardCharsets.UTF_8));
+ processCpuTracker.init();
+ try {
+ Thread.sleep(200);
+ } catch (InterruptedException ignored) {
}
+
+ processCpuTracker.update();
+
+ // We'll take the stack crawls of just the top apps using CPU.
+ final int workingStatsNumber = processCpuTracker.countWorkingStats();
+ extraPids = new ArrayList<>();
+ for (int i = 0; i < workingStatsNumber && extraPids.size() < 5; i++) {
+ ProcessCpuTracker.Stats stats = processCpuTracker.getWorkingStats(i);
+ if (lastPids.indexOfKey(stats.pid) >= 0) {
+ if (DEBUG_ANR) Slog.d(TAG, "Collecting stacks for extra pid " + stats.pid);
+
+ extraPids.add(stats.pid);
+ } else {
+ Slog.i(TAG, "Skipping next CPU consuming process, not a java proc: "
+ + stats.pid);
+ }
+ }
+ if (latencyTracker != null) {
+ latencyTracker.processCpuTrackerMethodsReturned();
+ }
+ }
+
+ final File tracesDir = new File(ANR_TRACE_DIR);
+ // Each set of ANR traces is written to a separate file and dumpstate will process
+ // all such files and add them to a captured bug report if they're recent enough.
+ maybePruneOldTraces(tracesDir);
+
+ // NOTE: We should consider creating the file in native code atomically once we've
+ // gotten rid of the old scheme of dumping and lot of the code that deals with paths
+ // can be removed.
+ File tracesFile;
+ try {
+ tracesFile = createAnrDumpFile(tracesDir);
} catch (IOException e) {
- Slog.w(TAG, "Exception writing to ANR dump file:", e);
+ Slog.w(TAG, "Exception creating ANR dump file:", e);
+ if (logExceptionCreatingFile != null) {
+ logExceptionCreatingFile.append(
+ "----- Exception creating ANR dump file -----\n");
+ e.printStackTrace(new PrintWriter(logExceptionCreatingFile));
+ }
+ if (latencyTracker != null) {
+ latencyTracker.anrSkippedDumpStackTraces();
+ }
+ return null;
+ }
+
+ if (subject != null || criticalEventSection != null) {
+ appendtoANRFile(tracesFile.getAbsolutePath(),
+ (subject != null ? "Subject: " + subject + "\n\n" : "")
+ + criticalEventSection != null ? criticalEventSection : "");
+ }
+
+ Pair<Long, Long> offsets = dumpStackTraces(
+ tracesFile.getAbsolutePath(), firstPids, nativePids, extraPids, latencyTracker);
+ if (firstPidOffsets != null) {
+ if (offsets == null) {
+ firstPidOffsets[0] = firstPidOffsets[1] = -1;
+ } else {
+ firstPidOffsets[0] = offsets.first; // Start offset to the ANR trace file
+ firstPidOffsets[1] = offsets.second; // End offset to the ANR trace file
+ }
+ }
+
+ return tracesFile;
+ } finally {
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesEnded();
}
}
- Pair<Long, Long> offsets = dumpStackTraces(
- tracesFile.getAbsolutePath(), firstPids, nativePids, extraPids);
- if (firstPidOffsets != null) {
- if (offsets == null) {
- firstPidOffsets[0] = firstPidOffsets[1] = -1;
- } else {
- firstPidOffsets[0] = offsets.first; // Start offset to the ANR trace file
- firstPidOffsets[1] = offsets.second; // End offset to the ANR trace file
- }
- }
- return tracesFile;
}
@GuardedBy("ActivityManagerService.class")
@@ -3569,6 +3587,7 @@
*/
private static long dumpJavaTracesTombstoned(int pid, String fileName, long timeoutMs) {
final long timeStart = SystemClock.elapsedRealtime();
+ int headerSize = writeUptimeStartHeaderForPid(pid, fileName);
boolean javaSuccess = Debug.dumpJavaBacktraceToFileTimeout(pid, fileName,
(int) (timeoutMs / 1000));
if (javaSuccess) {
@@ -3576,7 +3595,7 @@
// but better safe than sorry.
try {
long size = new File(fileName).length();
- if (size < JAVA_DUMP_MINIMUM_SIZE) {
+ if ((size - headerSize) < JAVA_DUMP_MINIMUM_SIZE) {
Slog.w(TAG, "Successfully created Java ANR file is empty!");
javaSuccess = false;
}
@@ -3596,11 +3615,32 @@
return SystemClock.elapsedRealtime() - timeStart;
}
+ private static int appendtoANRFile(String fileName, String text) {
+ try (FileOutputStream fos = new FileOutputStream(fileName, true)) {
+ byte[] header = text.getBytes(StandardCharsets.UTF_8);
+ fos.write(header);
+ return header.length;
+ } catch (IOException e) {
+ Slog.w(TAG, "Exception writing to ANR dump file:", e);
+ return 0;
+ }
+ }
+
+ /*
+ * Writes a header containing the process id and the current system uptime.
+ */
+ private static int writeUptimeStartHeaderForPid(int pid, String fileName) {
+ return appendtoANRFile(fileName, "----- dumping pid: " + pid + " at "
+ + SystemClock.uptimeMillis() + "\n");
+ }
+
+
/**
* @return The start/end offset of the trace of the very first PID
*/
- public static Pair<Long, Long> dumpStackTraces(String tracesFile, ArrayList<Integer> firstPids,
- ArrayList<Integer> nativePids, ArrayList<Integer> extraPids) {
+ public static Pair<Long, Long> dumpStackTraces(String tracesFile,
+ ArrayList<Integer> firstPids, ArrayList<Integer> nativePids,
+ ArrayList<Integer> extraPids, AnrLatencyTracker latencyTracker) {
Slog.i(TAG, "Dumping to " + tracesFile);
@@ -3619,6 +3659,9 @@
// First collect all of the stacks of the most important pids.
if (firstPids != null) {
+ if (latencyTracker != null) {
+ latencyTracker.dumpingFirstPidsStarted();
+ }
int num = firstPids.size();
for (int i = 0; i < num; i++) {
final int pid = firstPids.get(i);
@@ -3629,10 +3672,16 @@
tf = new File(tracesFile);
firstPidStart = tf.exists() ? tf.length() : 0;
}
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidStarted(pid);
+ }
Slog.i(TAG, "Collecting stacks for pid " + pid);
final long timeTaken = dumpJavaTracesTombstoned(pid, tracesFile,
remainingTime);
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidEnded();
+ }
remainingTime -= timeTaken;
if (remainingTime <= 0) {
@@ -3643,24 +3692,40 @@
if (firstPid) {
firstPidEnd = tf.length();
+ // Full latency dump
+ if (latencyTracker != null) {
+ appendtoANRFile(tracesFile,
+ latencyTracker.dumpAsCommaSeparatedArrayWithHeader());
+ }
}
if (DEBUG_ANR) {
Slog.d(TAG, "Done with pid " + firstPids.get(i) + " in " + timeTaken + "ms");
}
}
+ if (latencyTracker != null) {
+ latencyTracker.dumpingFirstPidsEnded();
+ }
}
// Next collect the stacks of the native pids
if (nativePids != null) {
+ if (latencyTracker != null) {
+ latencyTracker.dumpingNativePidsStarted();
+ }
for (int pid : nativePids) {
Slog.i(TAG, "Collecting stacks for native pid " + pid);
final long nativeDumpTimeoutMs = Math.min(NATIVE_DUMP_TIMEOUT_MS, remainingTime);
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidStarted(pid);
+ }
final long start = SystemClock.elapsedRealtime();
Debug.dumpNativeBacktraceToFileTimeout(
pid, tracesFile, (int) (nativeDumpTimeoutMs / 1000));
final long timeTaken = SystemClock.elapsedRealtime() - start;
-
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidEnded();
+ }
remainingTime -= timeTaken;
if (remainingTime <= 0) {
Slog.e(TAG, "Aborting stack trace dump (current native pid=" + pid +
@@ -3672,15 +3737,25 @@
Slog.d(TAG, "Done with native pid " + pid + " in " + timeTaken + "ms");
}
}
+ if (latencyTracker != null) {
+ latencyTracker.dumpingNativePidsEnded();
+ }
}
// Lastly, dump stacks for all extra PIDs from the CPU tracker.
if (extraPids != null) {
+ if (latencyTracker != null) {
+ latencyTracker.dumpingExtraPidsStarted();
+ }
for (int pid : extraPids) {
Slog.i(TAG, "Collecting stacks for extra pid " + pid);
-
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidStarted(pid);
+ }
final long timeTaken = dumpJavaTracesTombstoned(pid, tracesFile, remainingTime);
-
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidEnded();
+ }
remainingTime -= timeTaken;
if (remainingTime <= 0) {
Slog.e(TAG, "Aborting stack trace dump (current extra pid=" + pid +
@@ -3692,8 +3767,14 @@
Slog.d(TAG, "Done with extra pid " + pid + " in " + timeTaken + "ms");
}
}
+ if (latencyTracker != null) {
+ latencyTracker.dumpingExtraPidsEnded();
+ }
}
+ // Append the dumping footer with the current uptime
+ appendtoANRFile(tracesFile, "----- dumping ended at " + SystemClock.uptimeMillis() + "\n");
Slog.i(TAG, "Done dumping");
+
return firstPidStart >= 0 ? new Pair<>(firstPidStart, firstPidEnd) : null;
}
@@ -4655,7 +4736,7 @@
final String packageName = app.info.packageName;
mHandler.post(new Runnable() {
@Override
- public void run(){
+ public void run() {
try {
IBackupManager bm = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE));
@@ -6449,7 +6530,9 @@
TimeoutRecord timeoutRecord = TimeoutRecord.forApp("App requested: " + reason);
final int callingPid = Binder.getCallingPid();
+ timeoutRecord.mLatencyTracker.waitingOnPidLockStarted();
synchronized (mPidsSelfLocked) {
+ timeoutRecord.mLatencyTracker.waitingOnPidLockEnded();
final ProcessRecord app = mPidsSelfLocked.get(callingPid);
if (app == null) {
throw new SecurityException("Unknown process: " + callingPid);
@@ -8097,7 +8180,7 @@
synchronized(mPidsSelfLocked) {
for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {
ProcessRecord proc = mPidsSelfLocked.valueAt(i);
- if (!isAllowedWhileBooting(proc.info)){
+ if (!isAllowedWhileBooting(proc.info)) {
if (procsToKill == null) {
procsToKill = new ArrayList<ProcessRecord>();
}
@@ -12484,7 +12567,7 @@
+ backupTarget.appInfo + " died during backup");
mHandler.post(new Runnable() {
@Override
- public void run(){
+ public void run() {
try {
IBackupManager bm = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE));
@@ -15021,59 +15104,66 @@
@GuardedBy("this")
void finishInstrumentationLocked(ProcessRecord app, int resultCode, Bundle results) {
- final ActiveInstrumentation instr = app.getActiveInstrumentation();
- if (instr == null) {
- Slog.w(TAG, "finishInstrumentation called on non-instrumented: " + app);
- return;
- }
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "finishInstrumentationLocked()");
+ final ActiveInstrumentation instr = app.getActiveInstrumentation();
+ if (instr == null) {
+ Slog.w(TAG, "finishInstrumentation called on non-instrumented: " + app);
+ return;
+ }
- synchronized (mProcLock) {
- if (!instr.mFinished) {
- if (instr.mWatcher != null) {
- Bundle finalResults = instr.mCurResults;
- if (finalResults != null) {
- if (instr.mCurResults != null && results != null) {
- finalResults.putAll(results);
+ synchronized (mProcLock) {
+ if (!instr.mFinished) {
+ if (instr.mWatcher != null) {
+ Bundle finalResults = instr.mCurResults;
+ if (finalResults != null) {
+ if (instr.mCurResults != null && results != null) {
+ finalResults.putAll(results);
+ }
+ } else {
+ finalResults = results;
}
- } else {
- finalResults = results;
+ mInstrumentationReporter.reportFinished(instr.mWatcher,
+ instr.mClass, resultCode, finalResults);
}
- mInstrumentationReporter.reportFinished(instr.mWatcher,
- instr.mClass, resultCode, finalResults);
+
+ // Can't call out of the system process with a lock held, so post a message.
+ if (instr.mUiAutomationConnection != null) {
+ // Go back to the default mode of denying OP_NO_ISOLATED_STORAGE app op.
+ mAppOpsService.setMode(AppOpsManager.OP_NO_ISOLATED_STORAGE, app.uid,
+ app.info.packageName, AppOpsManager.MODE_ERRORED);
+ mAppOpsService.setAppOpsServiceDelegate(null);
+ getPermissionManagerInternal().stopShellPermissionIdentityDelegation();
+ mHandler.obtainMessage(SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG,
+ instr.mUiAutomationConnection).sendToTarget();
+ }
+ instr.mFinished = true;
}
- // Can't call out of the system process with a lock held, so post a message.
- if (instr.mUiAutomationConnection != null) {
- // Go back to the default mode of denying OP_NO_ISOLATED_STORAGE app op.
- mAppOpsService.setMode(AppOpsManager.OP_NO_ISOLATED_STORAGE, app.uid,
- app.info.packageName, AppOpsManager.MODE_ERRORED);
- mAppOpsService.setAppOpsServiceDelegate(null);
- getPermissionManagerInternal().stopShellPermissionIdentityDelegation();
- mHandler.obtainMessage(SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG,
- instr.mUiAutomationConnection).sendToTarget();
+ instr.removeProcess(app);
+ app.setActiveInstrumentation(null);
+ }
+ app.mProfile.clearHostingComponentType(HOSTING_COMPONENT_TYPE_INSTRUMENTATION);
+
+ if (app.isSdkSandbox) {
+ // For sharedUid apps this will kill all sdk sandbox processes, which is not ideal.
+ // TODO(b/209061624): should we call ProcessList.removeProcessLocked instead?
+ killUid(UserHandle.getAppId(app.uid), UserHandle.getUserId(app.uid),
+ "finished instr");
+ final SdkSandboxManagerLocal sandboxManagerLocal =
+ LocalManagerRegistry.getManager(SdkSandboxManagerLocal.class);
+ if (sandboxManagerLocal != null) {
+ sandboxManagerLocal.notifyInstrumentationFinished(
+ app.sdkSandboxClientAppPackage,
+ Process.getAppUidForSdkSandboxUid(app.uid));
}
- instr.mFinished = true;
+ } else if (!instr.mNoRestart) {
+ forceStopPackageLocked(app.info.packageName, -1, false, false, true, true, false,
+ app.userId,
+ "finished inst");
}
-
- instr.removeProcess(app);
- app.setActiveInstrumentation(null);
- }
- app.mProfile.clearHostingComponentType(HOSTING_COMPONENT_TYPE_INSTRUMENTATION);
-
- if (app.isSdkSandbox) {
- // For sharedUid apps this will kill all sdk sandbox processes, which is not ideal.
- // TODO(b/209061624): should we call ProcessList.removeProcessLocked instead?
- killUid(UserHandle.getAppId(app.uid), UserHandle.getUserId(app.uid), "finished instr");
- final SdkSandboxManagerLocal sandboxManagerLocal =
- LocalManagerRegistry.getManager(SdkSandboxManagerLocal.class);
- if (sandboxManagerLocal != null) {
- sandboxManagerLocal.notifyInstrumentationFinished(
- app.sdkSandboxClientAppPackage, Process.getAppUidForSdkSandboxUid(app.uid));
- }
- } else if (!instr.mNoRestart) {
- forceStopPackageLocked(app.info.packageName, -1, false, false, true, true, false,
- app.userId,
- "finished inst");
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
}
@@ -17767,7 +17857,9 @@
throw new SecurityException("Requires permission " + FILTER_EVENTS);
}
ProcessRecord proc;
+ timeoutRecord.mLatencyTracker.waitingOnPidLockStarted();
synchronized (mPidsSelfLocked) {
+ timeoutRecord.mLatencyTracker.waitingOnPidLockEnded();
proc = mPidsSelfLocked.get(pid);
}
final long timeoutMillis = proc != null ? proc.getInputDispatchingTimeoutMillis() :
@@ -17788,29 +17880,36 @@
ApplicationInfo aInfo, String parentShortComponentName,
WindowProcessController parentProcess, boolean aboveSystem,
TimeoutRecord timeoutRecord) {
- if (checkCallingPermission(FILTER_EVENTS) != PackageManager.PERMISSION_GRANTED) {
- throw new SecurityException("Requires permission " + FILTER_EVENTS);
- }
-
- if (proc != null) {
- synchronized (this) {
- if (proc.isDebugging()) {
- return false;
- }
-
- if (proc.getActiveInstrumentation() != null) {
- Bundle info = new Bundle();
- info.putString("shortMsg", "keyDispatchingTimedOut");
- info.putString("longMsg", timeoutRecord.mReason);
- finishInstrumentationLocked(proc, Activity.RESULT_CANCELED, info);
- return true;
- }
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "inputDispatchingTimedOut()");
+ if (checkCallingPermission(FILTER_EVENTS) != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Requires permission " + FILTER_EVENTS);
}
- mAnrHelper.appNotResponding(proc, activityShortComponentName, aInfo,
- parentShortComponentName, parentProcess, aboveSystem, timeoutRecord);
- }
- return true;
+ if (proc != null) {
+ timeoutRecord.mLatencyTracker.waitingOnAMSLockStarted();
+ synchronized (this) {
+ timeoutRecord.mLatencyTracker.waitingOnAMSLockEnded();
+ if (proc.isDebugging()) {
+ return false;
+ }
+
+ if (proc.getActiveInstrumentation() != null) {
+ Bundle info = new Bundle();
+ info.putString("shortMsg", "keyDispatchingTimedOut");
+ info.putString("longMsg", timeoutRecord.mReason);
+ finishInstrumentationLocked(proc, Activity.RESULT_CANCELED, info);
+ return true;
+ }
+ }
+ mAnrHelper.appNotResponding(proc, activityShortComponentName, aInfo,
+ parentShortComponentName, parentProcess, aboveSystem, timeoutRecord);
+ }
+
+ return true;
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+ }
}
/**
diff --git a/services/core/java/com/android/server/am/AnrHelper.java b/services/core/java/com/android/server/am/AnrHelper.java
index f1d8353..6de4118 100644
--- a/services/core/java/com/android/server/am/AnrHelper.java
+++ b/services/core/java/com/android/server/am/AnrHelper.java
@@ -21,6 +21,7 @@
import android.content.pm.ApplicationInfo;
import android.os.SystemClock;
+import android.os.Trace;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
@@ -79,29 +80,41 @@
ApplicationInfo aInfo, String parentShortComponentName,
WindowProcessController parentProcess, boolean aboveSystem,
TimeoutRecord timeoutRecord) {
- final int incomingPid = anrProcess.mPid;
- synchronized (mAnrRecords) {
- if (incomingPid == 0) {
- // Extreme corner case such as zygote is no response to return pid for the process.
- Slog.i(TAG, "Skip zero pid ANR, process=" + anrProcess.processName);
- return;
- }
- if (mProcessingPid == incomingPid) {
- Slog.i(TAG,
- "Skip duplicated ANR, pid=" + incomingPid + " " + timeoutRecord.mReason);
- return;
- }
- for (int i = mAnrRecords.size() - 1; i >= 0; i--) {
- if (mAnrRecords.get(i).mPid == incomingPid) {
- Slog.i(TAG,
- "Skip queued ANR, pid=" + incomingPid + " " + timeoutRecord.mReason);
+ try {
+ timeoutRecord.mLatencyTracker.appNotRespondingStarted();
+ final int incomingPid = anrProcess.mPid;
+ timeoutRecord.mLatencyTracker.waitingOnAnrRecordLockStarted();
+ synchronized (mAnrRecords) {
+ timeoutRecord.mLatencyTracker.waitingOnAnrRecordLockEnded();
+ if (incomingPid == 0) {
+ // Extreme corner case such as zygote is no response
+ // to return pid for the process.
+ Slog.i(TAG, "Skip zero pid ANR, process=" + anrProcess.processName);
return;
}
+ if (mProcessingPid == incomingPid) {
+ Slog.i(TAG,
+ "Skip duplicated ANR, pid=" + incomingPid + " "
+ + timeoutRecord.mReason);
+ return;
+ }
+ for (int i = mAnrRecords.size() - 1; i >= 0; i--) {
+ if (mAnrRecords.get(i).mPid == incomingPid) {
+ Slog.i(TAG,
+ "Skip queued ANR, pid=" + incomingPid + " "
+ + timeoutRecord.mReason);
+ return;
+ }
+ }
+ timeoutRecord.mLatencyTracker.anrRecordPlacingOnQueueWithSize(mAnrRecords.size());
+ mAnrRecords.add(new AnrRecord(anrProcess, activityShortComponentName, aInfo,
+ parentShortComponentName, parentProcess, aboveSystem, timeoutRecord));
}
- mAnrRecords.add(new AnrRecord(anrProcess, activityShortComponentName, aInfo,
- parentShortComponentName, parentProcess, aboveSystem, timeoutRecord));
+ startAnrConsumerIfNeeded();
+ } finally {
+ timeoutRecord.mLatencyTracker.appNotRespondingEnded();
}
- startAnrConsumerIfNeeded();
+
}
private void startAnrConsumerIfNeeded() {
@@ -126,6 +139,8 @@
}
final AnrRecord record = mAnrRecords.remove(0);
mProcessingPid = record.mPid;
+ record.mTimeoutRecord.mLatencyTracker.anrRecordsQueueSizeWhenPopped(
+ mAnrRecords.size());
return record;
}
}
@@ -143,8 +158,8 @@
continue;
}
final long startTime = SystemClock.uptimeMillis();
- // If there are many ANR at the same time, the latency may be larger. If the latency
- // is too large, the stack trace might not be meaningful.
+ // If there are many ANR at the same time, the latency may be larger.
+ // If the latency is too large, the stack trace might not be meaningful.
final long reportLatency = startTime - r.mTimestamp;
final boolean onlyDumpSelf = reportLatency > EXPIRED_REPORT_TIME_MS;
r.appNotResponding(onlyDumpSelf);
@@ -167,11 +182,17 @@
}
private void scheduleBinderHeavyHitterAutoSamplerIfNecessary() {
- final long now = SystemClock.uptimeMillis();
- if (mLastAnrTimeMs + CONSECUTIVE_ANR_TIME_MS > now) {
- mService.scheduleBinderHeavyHitterAutoSampler();
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+ "scheduleBinderHeavyHitterAutoSamplerIfNecessary()");
+ final long now = SystemClock.uptimeMillis();
+ if (mLastAnrTimeMs + CONSECUTIVE_ANR_TIME_MS > now) {
+ mService.scheduleBinderHeavyHitterAutoSampler();
+ }
+ mLastAnrTimeMs = now;
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- mLastAnrTimeMs = now;
}
private static class AnrRecord {
@@ -184,7 +205,6 @@
final WindowProcessController mParentProcess;
final boolean mAboveSystem;
final long mTimestamp = SystemClock.uptimeMillis();
-
AnrRecord(ProcessRecord anrProcess, String activityShortComponentName,
ApplicationInfo aInfo, String parentShortComponentName,
WindowProcessController parentProcess, boolean aboveSystem,
@@ -200,10 +220,14 @@
}
void appNotResponding(boolean onlyDumpSelf) {
- mApp.mErrorState.appNotResponding(mActivityShortComponentName, mAppInfo,
- mParentShortComponentName, mParentProcess, mAboveSystem,
- mTimeoutRecord,
- onlyDumpSelf);
+ try {
+ mTimeoutRecord.mLatencyTracker.anrProcessingStarted();
+ mApp.mErrorState.appNotResponding(mActivityShortComponentName, mAppInfo,
+ mParentShortComponentName, mParentProcess, mAboveSystem,
+ mTimeoutRecord, onlyDumpSelf);
+ } finally {
+ mTimeoutRecord.mLatencyTracker.anrProcessingEnded();
+ }
}
}
}
diff --git a/services/core/java/com/android/server/am/BroadcastQueueImpl.java b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
index 56112cf..8c55b14 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueImpl.java
@@ -58,7 +58,6 @@
import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.PowerExemptionManager.ReasonCode;
@@ -1566,110 +1565,116 @@
if (mDispatcher.isEmpty() || mDispatcher.getActiveBroadcastLocked() == null) {
return;
}
-
- long now = SystemClock.uptimeMillis();
- BroadcastRecord r = mDispatcher.getActiveBroadcastLocked();
- if (fromMsg) {
- if (!mService.mProcessesReady) {
- // Only process broadcast timeouts if the system is ready; some early
- // broadcasts do heavy work setting up system facilities
- return;
- }
-
- // If the broadcast is generally exempt from timeout tracking, we're done
- if (r.timeoutExempt) {
- if (DEBUG_BROADCAST) {
- Slog.i(TAG_BROADCAST, "Broadcast timeout but it's exempt: "
- + r.intent.getAction());
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastTimeoutLocked()");
+ try {
+ long now = SystemClock.uptimeMillis();
+ BroadcastRecord r = mDispatcher.getActiveBroadcastLocked();
+ if (fromMsg) {
+ if (!mService.mProcessesReady) {
+ // Only process broadcast timeouts if the system is ready; some early
+ // broadcasts do heavy work setting up system facilities
+ return;
}
- return;
- }
- long timeoutTime = r.receiverTime + mConstants.TIMEOUT;
- if (timeoutTime > now) {
- // We can observe premature timeouts because we do not cancel and reset the
- // broadcast timeout message after each receiver finishes. Instead, we set up
- // an initial timeout then kick it down the road a little further as needed
- // when it expires.
- if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
- "Premature timeout ["
- + mQueueName + "] @ " + now + ": resetting BROADCAST_TIMEOUT_MSG for "
- + timeoutTime);
- setBroadcastTimeoutLocked(timeoutTime);
- return;
- }
- }
-
- if (r.state == BroadcastRecord.WAITING_SERVICES) {
- // In this case the broadcast had already finished, but we had decided to wait
- // for started services to finish as well before going on. So if we have actually
- // waited long enough time timeout the broadcast, let's give up on the whole thing
- // and just move on to the next.
- Slog.i(TAG, "Waited long enough for: " + (r.curComponent != null
- ? r.curComponent.flattenToShortString() : "(null)"));
- r.curComponent = null;
- r.state = BroadcastRecord.IDLE;
- processNextBroadcastLocked(false, false);
- return;
- }
-
- // If the receiver app is being debugged we quietly ignore unresponsiveness, just
- // tidying up and moving on to the next broadcast without crashing or ANRing this
- // app just because it's stopped at a breakpoint.
- final boolean debugging = (r.curApp != null && r.curApp.isDebugging());
-
- long timeoutDurationMs = now - r.receiverTime;
- Slog.w(TAG, "Timeout of broadcast " + r + " - curFilter=" + r.curFilter + " curReceiver="
- + r.curReceiver + ", started " + timeoutDurationMs + "ms ago");
- r.receiverTime = now;
- if (!debugging) {
- r.anrCount++;
- }
-
- ProcessRecord app = null;
- TimeoutRecord timeoutRecord = null;
-
- Object curReceiver;
- if (r.nextReceiver > 0) {
- curReceiver = r.receivers.get(r.nextReceiver-1);
- r.delivery[r.nextReceiver-1] = BroadcastRecord.DELIVERY_TIMEOUT;
- } else {
- curReceiver = r.curReceiver;
- }
- Slog.w(TAG, "Receiver during timeout of " + r + " : " + curReceiver);
- logBroadcastReceiverDiscardLocked(r);
- if (curReceiver != null && curReceiver instanceof BroadcastFilter) {
- BroadcastFilter bf = (BroadcastFilter)curReceiver;
- if (bf.receiverList.pid != 0
- && bf.receiverList.pid != ActivityManagerService.MY_PID) {
- synchronized (mService.mPidsSelfLocked) {
- app = mService.mPidsSelfLocked.get(
- bf.receiverList.pid);
+ // If the broadcast is generally exempt from timeout tracking, we're done
+ if (r.timeoutExempt) {
+ if (DEBUG_BROADCAST) {
+ Slog.i(TAG_BROADCAST, "Broadcast timeout but it's exempt: "
+ + r.intent.getAction());
+ }
+ return;
+ }
+ long timeoutTime = r.receiverTime + mConstants.TIMEOUT;
+ if (timeoutTime > now) {
+ // We can observe premature timeouts because we do not cancel and reset the
+ // broadcast timeout message after each receiver finishes. Instead, we set up
+ // an initial timeout then kick it down the road a little further as needed
+ // when it expires.
+ if (DEBUG_BROADCAST) {
+ Slog.v(TAG_BROADCAST,
+ "Premature timeout ["
+ + mQueueName + "] @ " + now
+ + ": resetting BROADCAST_TIMEOUT_MSG for "
+ + timeoutTime);
+ }
+ setBroadcastTimeoutLocked(timeoutTime);
+ return;
}
}
- } else {
- app = r.curApp;
- }
- if (app != null) {
+ if (r.state == BroadcastRecord.WAITING_SERVICES) {
+ // In this case the broadcast had already finished, but we had decided to wait
+ // for started services to finish as well before going on. So if we have actually
+ // waited long enough time timeout the broadcast, let's give up on the whole thing
+ // and just move on to the next.
+ Slog.i(TAG, "Waited long enough for: " + (r.curComponent != null
+ ? r.curComponent.flattenToShortString() : "(null)"));
+ r.curComponent = null;
+ r.state = BroadcastRecord.IDLE;
+ processNextBroadcastLocked(false, false);
+ return;
+ }
+
+ // If the receiver app is being debugged we quietly ignore unresponsiveness, just
+ // tidying up and moving on to the next broadcast without crashing or ANRing this
+ // app just because it's stopped at a breakpoint.
+ final boolean debugging = (r.curApp != null && r.curApp.isDebugging());
+
+ long timeoutDurationMs = now - r.receiverTime;
+ Slog.w(TAG, "Timeout of broadcast " + r + " - curFilter=" + r.curFilter
+ + " curReceiver=" + r.curReceiver + ", started " + timeoutDurationMs
+ + "ms ago");
+ r.receiverTime = now;
+ if (!debugging) {
+ r.anrCount++;
+ }
+
+ ProcessRecord app = null;
+ Object curReceiver;
+ if (r.nextReceiver > 0) {
+ curReceiver = r.receivers.get(r.nextReceiver - 1);
+ r.delivery[r.nextReceiver - 1] = BroadcastRecord.DELIVERY_TIMEOUT;
+ } else {
+ curReceiver = r.curReceiver;
+ }
+ Slog.w(TAG, "Receiver during timeout of " + r + " : " + curReceiver);
+ logBroadcastReceiverDiscardLocked(r);
String anrMessage =
- "Broadcast of " + r.intent.toString() + ", waited " + timeoutDurationMs
- + "ms";
- timeoutRecord = TimeoutRecord.forBroadcastReceiver(anrMessage);
+ "Broadcast of " + r.intent.toString() + ", waited " + timeoutDurationMs + "ms";
+ TimeoutRecord timeoutRecord = TimeoutRecord.forBroadcastReceiver(anrMessage);
+ if (curReceiver != null && curReceiver instanceof BroadcastFilter) {
+ BroadcastFilter bf = (BroadcastFilter) curReceiver;
+ if (bf.receiverList.pid != 0
+ && bf.receiverList.pid != ActivityManagerService.MY_PID) {
+ timeoutRecord.mLatencyTracker.waitingOnPidLockStarted();
+ synchronized (mService.mPidsSelfLocked) {
+ timeoutRecord.mLatencyTracker.waitingOnPidLockEnded();
+ app = mService.mPidsSelfLocked.get(
+ bf.receiverList.pid);
+ }
+ }
+ } else {
+ app = r.curApp;
+ }
+
+ if (mPendingBroadcast == r) {
+ mPendingBroadcast = null;
+ }
+
+ // Move on to the next receiver.
+ finishReceiverLocked(r, r.resultCode, r.resultData,
+ r.resultExtras, r.resultAbort, false);
+ scheduleBroadcastsLocked();
+
+ // The ANR should only be triggered if we have a process record (app is non-null)
+ if (!debugging && app != null) {
+ mService.mAnrHelper.appNotResponding(app, timeoutRecord);
+ }
+
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- if (mPendingBroadcast == r) {
- mPendingBroadcast = null;
- }
-
- // Move on to the next receiver.
- finishReceiverLocked(r, r.resultCode, r.resultData,
- r.resultExtras, r.resultAbort, false);
- scheduleBroadcastsLocked();
-
- if (!debugging && timeoutRecord != null) {
- mService.mAnrHelper.appNotResponding(app, timeoutRecord);
- }
}
private final void addBroadcastToHistoryLocked(BroadcastRecord original) {
diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
index ceea01b..71d39964 100644
--- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
+++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
@@ -51,6 +51,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.ProcessCpuTracker;
import com.android.internal.os.TimeoutRecord;
+import com.android.internal.os.anr.AnrLatencyTracker;
import com.android.internal.util.FrameworkStatsLog;
import com.android.server.ResourcePressureUtil;
import com.android.server.criticalevents.CriticalEventLog;
@@ -258,11 +259,15 @@
boolean aboveSystem, TimeoutRecord timeoutRecord,
boolean onlyDumpSelf) {
String annotation = timeoutRecord.mReason;
+ AnrLatencyTracker latencyTracker = timeoutRecord.mLatencyTracker;
+
ArrayList<Integer> firstPids = new ArrayList<>(5);
SparseArray<Boolean> lastPids = new SparseArray<>(20);
mApp.getWindowProcessController().appEarlyNotResponding(annotation, () -> {
+ latencyTracker.waitingOnAMSLockStarted();
synchronized (mService) {
+ latencyTracker.waitingOnAMSLockEnded();
// Store annotation here as instance below races with this killLocked.
setAnrAnnotation(annotation);
mApp.killLocked("anr", ApplicationExitInfo.REASON_ANR, true);
@@ -271,37 +276,48 @@
long anrTime = SystemClock.uptimeMillis();
if (isMonitorCpuUsage()) {
+ latencyTracker.updateCpuStatsNowCalled();
mService.updateCpuStatsNow();
+ latencyTracker.updateCpuStatsNowReturned();
}
final boolean isSilentAnr;
final int pid = mApp.getPid();
final UUID errorId;
+ latencyTracker.waitingOnAMSLockStarted();
synchronized (mService) {
+ latencyTracker.waitingOnAMSLockEnded();
// Store annotation here as instance above will not be hit on all paths.
setAnrAnnotation(annotation);
// PowerManager.reboot() can block for a long time, so ignore ANRs while shutting down.
if (mService.mAtmInternal.isShuttingDown()) {
Slog.i(TAG, "During shutdown skipping ANR: " + this + " " + annotation);
+ latencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
return;
} else if (isNotResponding()) {
Slog.i(TAG, "Skipping duplicate ANR: " + this + " " + annotation);
+ latencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
return;
} else if (isCrashing()) {
Slog.i(TAG, "Crashing app skipping ANR: " + this + " " + annotation);
+ latencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
return;
} else if (mApp.isKilledByAm()) {
Slog.i(TAG, "App already killed by AM skipping ANR: " + this + " " + annotation);
+ latencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
return;
} else if (mApp.isKilled()) {
Slog.i(TAG, "Skipping died app ANR: " + this + " " + annotation);
+ latencyTracker.anrSkippedProcessErrorStateRecordAppNotResponding();
return;
}
// In case we come through here for the same app before completing
// this one, mark as anring now so we will bail out.
+ latencyTracker.waitingOnProcLockStarted();
synchronized (mProcLock) {
+ latencyTracker.waitingOnProcLockEnded();
setNotResponding(true);
}
@@ -361,9 +377,11 @@
}
// Get critical event log before logging the ANR so that it doesn't occur in the log.
+ latencyTracker.criticalEventLogStarted();
final String criticalEventLog =
CriticalEventLog.getInstance().logLinesForTraceFile(
mApp.getProcessClassEnum(), mApp.processName, mApp.uid);
+ latencyTracker.criticalEventLogEnded();
CriticalEventLog.getInstance().logAnr(annotation, mApp.getProcessClassEnum(),
mApp.processName, mApp.uid, mApp.mPid);
@@ -405,9 +423,14 @@
}
StringBuilder report = new StringBuilder();
- report.append(ResourcePressureUtil.currentPsiState());
+
+ latencyTracker.currentPsiStateCalled();
+ String currentPsiState = ResourcePressureUtil.currentPsiState();
+ latencyTracker.currentPsiStateReturned();
+ report.append(currentPsiState);
ProcessCpuTracker processCpuTracker = new ProcessCpuTracker(true);
+ latencyTracker.nativePidCollectionStarted();
// don't dump native PIDs for background ANRs unless it is the process of interest
String[] nativeProcs = null;
if (isSilentAnr || onlyDumpSelf) {
@@ -430,7 +453,7 @@
nativePids.add(i);
}
}
-
+ latencyTracker.nativePidCollectionEnded();
// For background ANRs, don't pass the ProcessCpuTracker to
// avoid spending 1/2 second collecting stats to rank lastPids.
StringWriter tracesFileException = new StringWriter();
@@ -438,7 +461,8 @@
final long[] offsets = new long[2];
File tracesFile = ActivityManagerService.dumpStackTraces(firstPids,
isSilentAnr ? null : processCpuTracker, isSilentAnr ? null : lastPids,
- nativePids, tracesFileException, offsets, annotation, criticalEventLog);
+ nativePids, tracesFileException, offsets, annotation, criticalEventLog,
+ latencyTracker);
if (isMonitorCpuUsage()) {
mService.updateCpuStatsNow();
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index 4a7e631..af73c2b 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -4373,9 +4373,8 @@
final PackageManager pm = mContext.getPackageManager();
final String supplementalPackageName = pm.getSdkSandboxPackageName();
if (Objects.equals(packageName, supplementalPackageName)) {
- int supplementalAppId = pm.getPackageUid(supplementalPackageName,
- PackageManager.PackageInfoFlags.of(0));
- uid = UserHandle.getUid(UserHandle.getUserId(uid), supplementalAppId);
+ uid = pm.getPackageUidAsUser(supplementalPackageName,
+ PackageManager.PackageInfoFlags.of(0), UserHandle.getUserId(uid));
}
} catch (PackageManager.NameNotFoundException e) {
// Shouldn't happen for the supplemental package
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
index 99bbc3f..32ff5e22 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
@@ -71,6 +71,9 @@
private static final String TAG = "HdmiCecLocalDeviceAudioSystem";
private static final boolean WAKE_ON_HOTPLUG = false;
+ private static final int MAX_CHANNELS = 8;
+ private static final HashMap<Integer, List<Integer>> AUDIO_CODECS_MAP =
+ mapAudioCodecWithAudioFormat();
// Whether the System Audio Control feature is enabled or not. True by default.
@GuardedBy("mLock")
@@ -485,17 +488,17 @@
}
}
- @AudioCodec int[] audioFormatCodes = parseAudioFormatCodes(message.getParams());
+ @AudioCodec int[] audioCodecs = parseAudioCodecs(message.getParams());
byte[] sadBytes;
if (config != null && config.size() > 0) {
- sadBytes = getSupportedShortAudioDescriptorsFromConfig(config, audioFormatCodes);
+ sadBytes = getSupportedShortAudioDescriptorsFromConfig(config, audioCodecs);
} else {
AudioDeviceInfo deviceInfo = getSystemAudioDeviceInfo();
if (deviceInfo == null) {
return Constants.ABORT_UNABLE_TO_DETERMINE;
}
- sadBytes = getSupportedShortAudioDescriptors(deviceInfo, audioFormatCodes);
+ sadBytes = getSupportedShortAudioDescriptors(deviceInfo, audioCodecs);
}
if (sadBytes.length == 0) {
@@ -508,11 +511,12 @@
}
}
- private byte[] getSupportedShortAudioDescriptors(
- AudioDeviceInfo deviceInfo, @AudioCodec int[] audioFormatCodes) {
- ArrayList<byte[]> sads = new ArrayList<>(audioFormatCodes.length);
- for (@AudioCodec int audioFormatCode : audioFormatCodes) {
- byte[] sad = getSupportedShortAudioDescriptor(deviceInfo, audioFormatCode);
+ @VisibleForTesting
+ byte[] getSupportedShortAudioDescriptors(
+ AudioDeviceInfo deviceInfo, @AudioCodec int[] audioCodecs) {
+ ArrayList<byte[]> sads = new ArrayList<>(audioCodecs.length);
+ for (@AudioCodec int audioCodec : audioCodecs) {
+ byte[] sad = getSupportedShortAudioDescriptor(deviceInfo, audioCodec);
if (sad != null) {
if (sad.length == 3) {
@@ -520,7 +524,7 @@
} else {
HdmiLogger.warning(
"Dropping Short Audio Descriptor with length %d for requested codec %x",
- sad.length, audioFormatCode);
+ sad.length, audioCodec);
}
}
}
@@ -528,7 +532,7 @@
}
private byte[] getSupportedShortAudioDescriptorsFromConfig(
- List<DeviceConfig> deviceConfig, @AudioCodec int[] audioFormatCodes) {
+ List<DeviceConfig> deviceConfig, @AudioCodec int[] audioCodecs) {
DeviceConfig deviceConfigToUse = null;
String audioDeviceName = SystemProperties.get(
Constants.PROPERTY_SYSTEM_AUDIO_MODE_AUDIO_PORT,
@@ -544,13 +548,13 @@
return new byte[0];
}
HashMap<Integer, byte[]> map = new HashMap<>();
- ArrayList<byte[]> sads = new ArrayList<>(audioFormatCodes.length);
+ ArrayList<byte[]> sads = new ArrayList<>(audioCodecs.length);
for (CodecSad codecSad : deviceConfigToUse.supportedCodecs) {
map.put(codecSad.audioCodec, codecSad.sad);
}
- for (int i = 0; i < audioFormatCodes.length; i++) {
- if (map.containsKey(audioFormatCodes[i])) {
- byte[] sad = map.get(audioFormatCodes[i]);
+ for (int i = 0; i < audioCodecs.length; i++) {
+ if (map.containsKey(audioCodecs[i])) {
+ byte[] sad = map.get(audioCodecs[i]);
if (sad != null && sad.length == 3) {
sads.add(sad);
}
@@ -572,42 +576,171 @@
/**
* Returns a 3 byte short audio descriptor as described in CEC 1.4 table 29 or null if the
- * audioFormatCode is not supported.
+ * audioCodec is not supported.
*/
@Nullable
- private byte[] getSupportedShortAudioDescriptor(
- AudioDeviceInfo deviceInfo, @AudioCodec int audioFormatCode) {
- switch (audioFormatCode) {
- case Constants.AUDIO_CODEC_NONE: {
- return null;
- }
- case Constants.AUDIO_CODEC_LPCM: {
- return getLpcmShortAudioDescriptor(deviceInfo);
- }
- // TODO(b/80297701): implement the rest of the codecs
- case Constants.AUDIO_CODEC_DD:
- case Constants.AUDIO_CODEC_MPEG1:
- case Constants.AUDIO_CODEC_MP3:
- case Constants.AUDIO_CODEC_MPEG2:
- case Constants.AUDIO_CODEC_AAC:
- case Constants.AUDIO_CODEC_DTS:
- case Constants.AUDIO_CODEC_ATRAC:
- case Constants.AUDIO_CODEC_ONEBITAUDIO:
- case Constants.AUDIO_CODEC_DDP:
- case Constants.AUDIO_CODEC_DTSHD:
- case Constants.AUDIO_CODEC_TRUEHD:
- case Constants.AUDIO_CODEC_DST:
- case Constants.AUDIO_CODEC_WMAPRO:
- default: {
- return null;
+ @VisibleForTesting
+ byte[] getSupportedShortAudioDescriptor(
+ AudioDeviceInfo deviceInfo, @AudioCodec int audioCodec) {
+ byte[] shortAudioDescriptor = new byte[3];
+
+ int[] deviceSupportedAudioFormats = deviceInfo.getEncodings();
+ // Return null when audioCodec or device does not support any audio formats.
+ if (!AUDIO_CODECS_MAP.containsKey(audioCodec) || deviceSupportedAudioFormats.length == 0) {
+ return null;
+ }
+ List<Integer> audioCodecSupportedAudioFormats = AUDIO_CODECS_MAP.get(audioCodec);
+
+ for (int supportedAudioFormat : deviceSupportedAudioFormats) {
+ if (audioCodecSupportedAudioFormats.contains(supportedAudioFormat)) {
+ // Initialise the first two bytes of short audio descriptor.
+ shortAudioDescriptor[0] = getFirstByteOfSAD(deviceInfo, audioCodec);
+ shortAudioDescriptor[1] = getSecondByteOfSAD(deviceInfo);
+ switch (audioCodec) {
+ case Constants.AUDIO_CODEC_NONE: {
+ return null;
+ }
+ case Constants.AUDIO_CODEC_LPCM: {
+ if (supportedAudioFormat == AudioFormat.ENCODING_PCM_16BIT) {
+ shortAudioDescriptor[2] = (byte) 0x01;
+ } else if (supportedAudioFormat
+ == AudioFormat.ENCODING_PCM_24BIT_PACKED) {
+ shortAudioDescriptor[2] = (byte) 0x04;
+ } else {
+ // Since no bit is reserved for these audio formats in LPCM codec.
+ shortAudioDescriptor[2] = (byte) 0x00;
+ }
+ return shortAudioDescriptor;
+ }
+ case Constants.AUDIO_CODEC_DD:
+ case Constants.AUDIO_CODEC_MPEG1:
+ case Constants.AUDIO_CODEC_MP3:
+ case Constants.AUDIO_CODEC_MPEG2:
+ case Constants.AUDIO_CODEC_AAC:
+ case Constants.AUDIO_CODEC_DTS: {
+ shortAudioDescriptor[2] = getThirdSadByteForCodecs2Through8(deviceInfo);
+ return shortAudioDescriptor;
+ }
+ case Constants.AUDIO_CODEC_DDP:
+ case Constants.AUDIO_CODEC_DTSHD:
+ case Constants.AUDIO_CODEC_TRUEHD: {
+ // Default value is 0x0 unless defined by Audio Codec Vendor.
+ shortAudioDescriptor[2] = (byte) 0x00;
+ return shortAudioDescriptor;
+ }
+ case Constants.AUDIO_CODEC_ATRAC:
+ case Constants.AUDIO_CODEC_ONEBITAUDIO:
+ case Constants.AUDIO_CODEC_DST:
+ case Constants.AUDIO_CODEC_WMAPRO:
+ // Not supported.
+ default: {
+ return null;
+ }
+ }
}
}
+ return null;
}
- @Nullable
- private byte[] getLpcmShortAudioDescriptor(AudioDeviceInfo deviceInfo) {
- // TODO(b/80297701): implement
- return null;
+ private static HashMap<Integer, List<Integer>> mapAudioCodecWithAudioFormat() {
+ // Mapping the values of @AudioCodec audio codecs with @AudioFormat audio formats.
+ HashMap<Integer, List<Integer>> audioCodecsMap = new HashMap<Integer, List<Integer>>();
+
+ audioCodecsMap.put(Constants.AUDIO_CODEC_NONE, List.of(AudioFormat.ENCODING_DEFAULT));
+ audioCodecsMap.put(
+ Constants.AUDIO_CODEC_LPCM,
+ List.of(
+ AudioFormat.ENCODING_PCM_8BIT,
+ AudioFormat.ENCODING_PCM_16BIT,
+ AudioFormat.ENCODING_PCM_FLOAT,
+ AudioFormat.ENCODING_PCM_24BIT_PACKED,
+ AudioFormat.ENCODING_PCM_32BIT));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_DD, List.of(AudioFormat.ENCODING_AC3));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_MPEG1, List.of(AudioFormat.ENCODING_AAC_HE_V1));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_MPEG2, List.of(AudioFormat.ENCODING_AAC_HE_V2));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_MP3, List.of(AudioFormat.ENCODING_MP3));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_AAC, List.of(AudioFormat.ENCODING_AAC_LC));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_DTS, List.of(AudioFormat.ENCODING_DTS));
+ audioCodecsMap.put(
+ Constants.AUDIO_CODEC_DDP,
+ List.of(AudioFormat.ENCODING_E_AC3, AudioFormat.ENCODING_E_AC3_JOC));
+ audioCodecsMap.put(Constants.AUDIO_CODEC_DTSHD, List.of(AudioFormat.ENCODING_DTS_HD));
+ audioCodecsMap.put(
+ Constants.AUDIO_CODEC_TRUEHD,
+ List.of(AudioFormat.ENCODING_DOLBY_TRUEHD, AudioFormat.ENCODING_DOLBY_MAT));
+
+ return audioCodecsMap;
+ }
+
+ private byte getFirstByteOfSAD(AudioDeviceInfo deviceInfo, @AudioCodec int audioCodec) {
+ byte firstByte = 0;
+ int maxNumberOfChannels = getMaxNumberOfChannels(deviceInfo);
+
+ // Fill bits 0-2 of the first byte.
+ firstByte |= (maxNumberOfChannels - 1);
+
+ // Fill bits 3-6 of the first byte.
+ firstByte |= (audioCodec << 3);
+
+ return firstByte;
+ }
+
+ private byte getSecondByteOfSAD(AudioDeviceInfo deviceInfo) {
+ ArrayList<Integer> samplingRates =
+ new ArrayList<Integer>(Arrays.asList(32, 44, 48, 88, 96, 176, 192));
+
+ // samplingRatesdevicesupports is guaranteed to be not null
+ int[] samplingRatesDeviceSupports = deviceInfo.getSampleRates();
+ if (samplingRatesDeviceSupports.length == 0) {
+ Slog.e(TAG, "Device supports arbitrary rates");
+ // Since device supports arbitrary rates, we will return 0x7f since bit 7 is reserved.
+ return (byte) 0x7f;
+ }
+ byte secondByte = 0;
+ for (int supportedSampleRate : samplingRatesDeviceSupports) {
+ if (samplingRates.contains(supportedSampleRate)) {
+ int index = samplingRates.indexOf(supportedSampleRate);
+ // Setting the bit of a sample rate which is being supported.
+ secondByte |= (1 << index);
+ }
+ }
+
+ return secondByte;
+ }
+
+ /**
+ * Empty array from deviceInfo.getChannelCounts() implies device supports arbitrary channel
+ * counts and hence we assume max channels are supported by the device.
+ */
+ private int getMaxNumberOfChannels(AudioDeviceInfo deviceInfo) {
+ int maxNumberOfChannels = MAX_CHANNELS;
+ int[] channelCounts = deviceInfo.getChannelCounts();
+ if (channelCounts.length != 0) {
+ maxNumberOfChannels = channelCounts[channelCounts.length - 1];
+ maxNumberOfChannels =
+ (maxNumberOfChannels > MAX_CHANNELS ? MAX_CHANNELS : maxNumberOfChannels);
+ }
+ return maxNumberOfChannels;
+ }
+
+ private byte getThirdSadByteForCodecs2Through8(AudioDeviceInfo deviceInfo) {
+ /*
+ * Here, we are assuming that max bit rate is closely equals to the max sampling rate the
+ * device supports.
+ */
+ int maxSamplingRate = 0;
+ int[] samplingRatesDeviceSupports = deviceInfo.getSampleRates();
+ if (samplingRatesDeviceSupports.length == 0) {
+ maxSamplingRate = 192;
+ } else {
+ for (int sampleRate : samplingRatesDeviceSupports) {
+ if (maxSamplingRate < sampleRate) {
+ maxSamplingRate = sampleRate;
+ }
+ }
+ }
+
+ return (byte) (maxSamplingRate / 8);
}
@Nullable
@@ -634,14 +767,14 @@
}
@AudioCodec
- private int[] parseAudioFormatCodes(byte[] params) {
- @AudioCodec int[] audioFormatCodes = new int[params.length];
+ private int[] parseAudioCodecs(byte[] params) {
+ @AudioCodec int[] audioCodecs = new int[params.length];
for (int i = 0; i < params.length; i++) {
byte val = params[i];
- audioFormatCodes[i] =
- val >= 1 && val <= Constants.AUDIO_CODEC_MAX ? val : Constants.AUDIO_CODEC_NONE;
+ audioCodecs[i] =
+ val >= 1 && val <= Constants.AUDIO_CODEC_MAX ? val : Constants.AUDIO_CODEC_NONE;
}
- return audioFormatCodes;
+ return audioCodecs;
}
@Override
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 729de41..ed17b9ca 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -2963,9 +2963,12 @@
try {
// Use PackageManager to load label
final PackageManager packageManager = mContext.getPackageManager();
- contentDescription = packageManager.getApplicationLabel(
- mIPackageManager.getApplicationInfo(packageName, 0,
- mSettings.getCurrentUserId()));
+ final ApplicationInfo applicationInfo = mIPackageManager
+ .getApplicationInfo(packageName, 0, mSettings.getCurrentUserId());
+ if (applicationInfo != null) {
+ contentDescription = packageManager
+ .getApplicationLabel(applicationInfo);
+ }
} catch (RemoteException e) {
/* ignore */
}
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index 9f6aa63..7242a56 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -271,7 +271,8 @@
// other processes clean up before deleting resources.
synchronized (mPm.mInstallLock) {
if (info.mArgs != null) {
- mRemovePackageHelper.cleanUpResources(info.mArgs);
+ mRemovePackageHelper.cleanUpResources(info.mArgs.mCodeFile,
+ info.mArgs.mInstructionSets);
}
boolean reEnableStub = false;
diff --git a/services/core/java/com/android/server/pm/InstallArgs.java b/services/core/java/com/android/server/pm/InstallArgs.java
index 65c2378..a94a4e2 100644
--- a/services/core/java/com/android/server/pm/InstallArgs.java
+++ b/services/core/java/com/android/server/pm/InstallArgs.java
@@ -70,10 +70,9 @@
UserHandle user, String[] instructionSets,
String abiOverride, String[] installGrantPermissions,
List<String> allowlistedRestrictedPermissions,
- int autoRevokePermissionsMode,
- String traceMethod, int traceCookie, SigningDetails signingDetails,
- int installReason, int installScenario, boolean forceQueryableOverride,
- int dataLoaderType, int packageSource) {
+ int autoRevokePermissionsMode, String traceMethod, int traceCookie,
+ SigningDetails signingDetails, int installReason, int installScenario,
+ boolean forceQueryableOverride, int dataLoaderType, int packageSource) {
mOriginInfo = originInfo;
mMoveInfo = moveInfo;
mInstallFlags = installFlags;
@@ -96,18 +95,6 @@
mPackageSource = packageSource;
}
- /** New install */
- InstallArgs(InstallingSession params) {
- this(params.mOriginInfo, params.mMoveInfo, params.mObserver, params.mInstallFlags,
- params.mInstallSource, params.mVolumeUuid,
- params.getUser(), null /*instructionSets*/, params.mPackageAbiOverride,
- params.mGrantedRuntimePermissions, params.mAllowlistedRestrictedPermissions,
- params.mAutoRevokePermissionsMode,
- params.mTraceMethod, params.mTraceCookie, params.mSigningDetails,
- params.mInstallReason, params.mInstallScenario, params.mForceQueryableOverride,
- params.mDataLoaderType, params.mPackageSource);
- }
-
/**
* Create args that describe an existing installed package. Typically used
* when cleaning up old installs, or used as a move source.
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index d201710..a25ee5e 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -105,7 +105,6 @@
import android.content.IntentSender;
import android.content.pm.ApplicationInfo;
import android.content.pm.DataLoaderType;
-import android.content.pm.IPackageInstallObserver2;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInfoLite;
import android.content.pm.PackageInstaller;
@@ -147,6 +146,7 @@
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseIntArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.F2fsUtils;
@@ -275,9 +275,9 @@
// Prune unused SharedUserSetting
if (mPm.mSettings.checkAndPruneSharedUserLPw(requestSharedUserSetting, false)) {
// Set the app ID in removed info for UID_REMOVED broadcasts
- if (reconciledPkg.mInstallResult != null
- && reconciledPkg.mInstallResult.mRemovedInfo != null) {
- reconciledPkg.mInstallResult.mRemovedInfo.mRemovedAppId =
+ if (reconciledPkg.mInstallRequest != null
+ && reconciledPkg.mInstallRequest.getRemovedInfo() != null) {
+ reconciledPkg.mInstallRequest.getRemovedInfo().mRemovedAppId =
requestSharedUserSetting.mAppId;
}
}
@@ -307,24 +307,26 @@
mPm.mSettings.convertSharedUserSettingsLPw(sharedUserSetting);
}
}
- if (reconciledPkg.mInstallArgs != null
- && reconciledPkg.mInstallArgs.mForceQueryableOverride) {
+ if (reconciledPkg.mInstallRequest != null
+ && reconciledPkg.mInstallRequest.isForceQueryableOverride()) {
pkgSetting.setForceQueryableOverride(true);
}
// If this is part of a standard install, set the initiating package name, else rely on
// previous device state.
- if (reconciledPkg.mInstallArgs != null) {
- InstallSource installSource = reconciledPkg.mInstallArgs.mInstallSource;
- if (installSource.initiatingPackageName != null) {
- final PackageSetting ips = mPm.mSettings.getPackageLPr(
- installSource.initiatingPackageName);
- if (ips != null) {
- installSource = installSource.setInitiatingPackageSignatures(
- ips.getSignatures());
+ if (reconciledPkg.mInstallRequest != null) {
+ InstallSource installSource = reconciledPkg.mInstallRequest.getInstallSource();
+ if (installSource != null) {
+ if (installSource.initiatingPackageName != null) {
+ final PackageSetting ips = mPm.mSettings.getPackageLPr(
+ installSource.initiatingPackageName);
+ if (ips != null) {
+ installSource = installSource.setInitiatingPackageSignatures(
+ ips.getSignatures());
+ }
}
+ pkgSetting.setInstallSource(installSource);
}
- pkgSetting.setInstallSource(installSource);
}
if ((scanFlags & SCAN_AS_APK_IN_APEX) != 0) {
@@ -418,8 +420,8 @@
reconciledPkg.mAllowedSharedLibraryInfos,
reconciledPkg.getCombinedAvailablePackages(), scanFlags);
- if (reconciledPkg.mInstallResult != null) {
- reconciledPkg.mInstallResult.mLibraryConsumers = clientLibPkgs;
+ if (reconciledPkg.mInstallRequest != null) {
+ reconciledPkg.mInstallRequest.setLibraryConsumers(clientLibPkgs);
}
if ((scanFlags & SCAN_BOOTING) != 0) {
@@ -615,20 +617,18 @@
mPm.updateSequenceNumberLP(pkgSetting, new int[]{ userId });
}
// start async restore with no post-install since we finish install here
- PackageInstalledInfo res = new PackageInstalledInfo(
- PackageManager.INSTALL_SUCCEEDED);
- res.mPkg = pkgSetting.getPkg();
- res.mNewUsers = new int[]{ userId };
- PostInstallData postInstallData =
- new PostInstallData(null, res, () -> {
+ InstallRequest request = new InstallRequest(userId,
+ PackageManager.INSTALL_SUCCEEDED, pkgSetting.getPkg(), new int[]{ userId },
+ () -> {
mPm.restorePermissionsAndUpdateRolesForNewUserInstall(packageName,
userId);
if (intentSender != null) {
- onRestoreComplete(res.mReturnCode, mContext, intentSender);
+ onRestoreComplete(PackageManager.INSTALL_SUCCEEDED, mContext,
+ intentSender);
}
});
- restoreAndPostInstall(userId, res, postInstallData);
+ restoreAndPostInstall(request);
}
} finally {
Binder.restoreCallingIdentity(callingId);
@@ -647,18 +647,17 @@
}
}
- /** @param data Post-install is performed only if this is non-null. */
- public void restoreAndPostInstall(
- int userId, PackageInstalledInfo res, @Nullable PostInstallData data) {
+ public void restoreAndPostInstall(InstallRequest request) {
+ final int userId = request.getUserId();
if (DEBUG_INSTALL) {
- Log.v(TAG, "restoreAndPostInstall userId=" + userId + " package=" + res.mPkg);
+ Log.v(TAG,
+ "restoreAndPostInstall userId=" + userId + " package=" + request.getPkg());
}
// A restore should be requested at this point if (a) the install
// succeeded, (b) the operation is not an update.
- final boolean update = res.mRemovedInfo != null
- && res.mRemovedInfo.mRemovedPackage != null;
- boolean doRestore = !update && res.mPkg != null;
+ final boolean update = request.isUpdate();
+ boolean doRestore = !update && request.getPkg() != null;
// Set up the post-install work request bookkeeping. This will be used
// and cleaned up by the post-install event handling regardless of whether
@@ -666,23 +665,17 @@
int token;
if (mPm.mNextInstallToken < 0) mPm.mNextInstallToken = 1;
token = mPm.mNextInstallToken++;
- if (data != null) {
- mPm.mRunningInstalls.put(token, data);
- } else if (DEBUG_INSTALL) {
- Log.v(TAG, "No post-install required for " + token);
- }
+ mPm.mRunningInstalls.put(token, request);
if (DEBUG_INSTALL) Log.v(TAG, "+ starting restore round-trip " + token);
- if (res.mReturnCode == PackageManager.INSTALL_SUCCEEDED && doRestore) {
+ if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED && doRestore) {
// Pass responsibility to the Backup Manager. It will perform a
// restore if appropriate, then pass responsibility back to the
// Package Manager to run the post-install observer callbacks
// and broadcasts.
- if (res.mFreezer != null) {
- res.mFreezer.close();
- }
- doRestore = performBackupManagerRestore(userId, token, res);
+ request.closeFreezer();
+ doRestore = performBackupManagerRestore(userId, token, request);
}
// If this is an update to a package that might be potentially downgraded, then we
@@ -690,8 +683,8 @@
// need to be snapshotted or restored for the package.
//
// TODO(narayan): Get this working for cases where userId == UserHandle.USER_ALL.
- if (res.mReturnCode == PackageManager.INSTALL_SUCCEEDED && !doRestore && update) {
- doRestore = performRollbackManagerRestore(userId, token, res, data);
+ if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED && !doRestore && update) {
+ doRestore = performRollbackManagerRestore(userId, token, request);
}
if (!doRestore) {
@@ -707,10 +700,10 @@
}
/**
- * Perform Backup Manager restore for a given {@link PackageInstalledInfo}.
+ * Perform Backup Manager restore for a given {@link InstallRequest}.
* Returns whether the restore successfully completed.
*/
- private boolean performBackupManagerRestore(int userId, int token, PackageInstalledInfo res) {
+ private boolean performBackupManagerRestore(int userId, int token, InstallRequest request) {
IBackupManager iBackupManager = mInjector.getIBackupManager();
if (iBackupManager != null) {
// For backwards compatibility as USER_ALL previously routed directly to USER_SYSTEM
@@ -725,7 +718,7 @@
try {
if (iBackupManager.isUserReadyForBackup(userId)) {
iBackupManager.restoreAtInstallForUser(
- userId, res.mPkg.getPackageName(), token);
+ userId, request.getPkg().getPackageName(), token);
} else {
Slog.w(TAG, "User " + userId + " is not ready. Restore at install "
+ "didn't take place.");
@@ -745,12 +738,11 @@
}
/**
- * Perform Rollback Manager restore for a given {@link PackageInstalledInfo}.
+ * Perform Rollback Manager restore for a given {@link InstallRequest}.
* Returns whether the restore successfully completed.
*/
- private boolean performRollbackManagerRestore(int userId, int token, PackageInstalledInfo res,
- PostInstallData data) {
- final String packageName = res.mPkg.getPackageName();
+ private boolean performRollbackManagerRestore(int userId, int token, InstallRequest request) {
+ final String packageName = request.getPkg().getPackageName();
final int[] allUsers = mPm.mUserManager.getUserIds();
final int[] installedUsers;
@@ -762,19 +754,20 @@
if (ps != null) {
appId = ps.getAppId();
ceDataInode = ps.getCeDataInode(userId);
+ // NOTE: We ignore the user specified in the InstallParam because we know this is
+ // an update, and hence need to restore data for all installed users.
+ installedUsers = ps.queryInstalledUsers(allUsers, true);
+ } else {
+ installedUsers = new int[0];
}
-
- // NOTE: We ignore the user specified in the InstallParam because we know this is
- // an update, and hence need to restore data for all installed users.
- installedUsers = ps.queryInstalledUsers(allUsers, true);
}
- boolean doSnapshotOrRestore = data != null && data.args != null
- && ((data.args.mInstallFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0
- || (data.args.mInstallFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0);
+ final int installFlags = request.getInstallFlags();
+ boolean doSnapshotOrRestore = ((installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0
+ || (installFlags & PackageManager.INSTALL_REQUEST_DOWNGRADE) != 0);
if (ps != null && doSnapshotOrRestore) {
- final String seInfo = AndroidPackageUtils.getSeInfo(res.mPkg, ps);
+ final String seInfo = AndroidPackageUtils.getSeInfo(request.getPkg(), ps);
final RollbackManagerInternal rollbackManager =
mInjector.getLocalService(RollbackManagerInternal.class);
rollbackManager.snapshotAndRestoreUserData(packageName,
@@ -817,9 +810,8 @@
@GuardedBy("mPm.mInstallLock")
private void installPackagesLI(List<InstallRequest> requests) {
final Map<String, ScanResult> preparedScans = new ArrayMap<>(requests.size());
- final Map<String, InstallArgs> installArgs = new ArrayMap<>(requests.size());
- final Map<String, PackageInstalledInfo> installResults = new ArrayMap<>(requests.size());
final Map<String, PrepareResult> prepareResults = new ArrayMap<>(requests.size());
+ final Map<String, InstallRequest> installRequests = new ArrayMap<>(requests.size());
final Map<String, Settings.VersionInfo> versionInfos = new ArrayMap<>(requests.size());
final Map<String, Boolean> createdAppId = new ArrayMap<>(requests.size());
boolean success = false;
@@ -832,32 +824,30 @@
try {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "preparePackage");
prepareResult =
- preparePackageLI(request.mArgs, request.mInstallResult);
+ preparePackageLI(request);
} catch (PrepareFailure prepareFailure) {
- request.mInstallResult.setError(prepareFailure.error,
+ request.setError(prepareFailure.error,
prepareFailure.getMessage());
- request.mInstallResult.mOrigPackage = prepareFailure.mConflictingPackage;
- request.mInstallResult.mOrigPermission = prepareFailure.mConflictingPermission;
+ request.setOriginPackage(prepareFailure.mConflictingPackage);
+ request.setOriginPermission(prepareFailure.mConflictingPermission);
return;
} finally {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
- request.mInstallResult.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
- request.mInstallResult.mInstallerPackageName =
- request.mArgs.mInstallSource.installerPackageName;
+ request.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
+ request.setInstallerPackageName(request.getSourceInstallerPackageName());
final String packageName = prepareResult.mPackageToScan.getPackageName();
prepareResults.put(packageName, prepareResult);
- installResults.put(packageName, request.mInstallResult);
- installArgs.put(packageName, request.mArgs);
+ installRequests.put(packageName, request);
try {
final ScanResult result = scanPackageTracedLI(
prepareResult.mPackageToScan, prepareResult.mParseFlags,
prepareResult.mScanFlags, System.currentTimeMillis(),
- request.mArgs.mUser, request.mArgs.mAbiOverride);
+ request.getUser(), request.getAbiOverride());
if (null != preparedScans.put(result.mPkgSetting.getPkg().getPackageName(),
result)) {
- request.mInstallResult.setError(
+ request.setError(
PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE,
"Duplicate package "
+ result.mPkgSetting.getPkg().getPackageName()
@@ -868,7 +858,7 @@
result.mRequest.mOldPkg, result.mPkgSetting.getPkg())) {
// TODO: INSTALL_FAILED_UPDATE_INCOMPATIBLE is about incomptabible
// signatures. Is there a better error code?
- request.mInstallResult.setError(
+ request.setError(
INSTALL_FAILED_UPDATE_INCOMPATIBLE,
"Update attempted to change value of "
+ PackageManager.PROPERTY_NO_APP_DATA_STORAGE);
@@ -883,15 +873,15 @@
versionInfos.put(result.mPkgSetting.getPkg().getPackageName(),
mPm.getSettingsVersionForPackage(result.mPkgSetting.getPkg()));
} catch (PackageManagerException e) {
- request.mInstallResult.setError("Scanning Failed.", e);
+ request.setError("Scanning Failed.", e);
return;
}
}
CommitRequest commitRequest;
synchronized (mPm.mLock) {
- ReconcileRequest reconcileRequest = new ReconcileRequest(preparedScans, installArgs,
- installResults, prepareResults,
+ ReconcileRequest reconcileRequest = new ReconcileRequest(preparedScans,
+ installRequests, prepareResults,
Collections.unmodifiableMap(mPm.mPackages), versionInfos);
Map<String, ReconciledPackage> reconciledPackages;
try {
@@ -901,7 +891,7 @@
mPm.mSettings.getKeySetManagerService(), mPm.mSettings);
} catch (ReconcileFailure e) {
for (InstallRequest request : requests) {
- request.mInstallResult.setError("Reconciliation failed...", e);
+ request.setError("Reconciliation failed...", e);
}
return;
} finally {
@@ -921,25 +911,24 @@
} finally {
if (success) {
for (InstallRequest request : requests) {
- final InstallArgs args = request.mArgs;
- if (args.mDataLoaderType != DataLoaderType.INCREMENTAL) {
+ if (request.getDataLoaderType() != DataLoaderType.INCREMENTAL) {
continue;
}
- if (args.mSigningDetails.getSignatureSchemeVersion() != SIGNING_BLOCK_V4) {
+ if (request.getSignatureSchemeVersion() != SIGNING_BLOCK_V4) {
continue;
}
// For incremental installs, we bypass the verifier prior to install. Now
// that we know the package is valid, send a notice to the verifier with
// the root hash of the base.apk.
- final String baseCodePath = request.mInstallResult.mPkg.getBaseApkPath();
- final String[] splitCodePaths = request.mInstallResult.mPkg.getSplitCodePaths();
- final Uri originUri = Uri.fromFile(args.mOriginInfo.mResolvedFile);
+ final String baseCodePath = request.getPkg().getBaseApkPath();
+ final String[] splitCodePaths = request.getPkg().getSplitCodePaths();
+ final Uri originUri = request.getOriginUri();
final int verificationId = mPm.mPendingVerificationToken++;
final String rootHashString = PackageManagerServiceUtils
.buildVerificationRootHashString(baseCodePath, splitCodePaths);
VerificationUtils.broadcastPackageVerified(verificationId, originUri,
PackageManager.VERIFICATION_ALLOW, rootHashString,
- args.mDataLoaderType, args.mUser, mContext);
+ request.getDataLoaderType(), request.getUser(), mContext);
}
} else {
for (ScanResult result : preparedScans.values()) {
@@ -951,11 +940,9 @@
// TODO(b/194319951): create a more descriptive reason than unknown
// mark all non-failure installs as UNKNOWN so we do not treat them as success
for (InstallRequest request : requests) {
- if (request.mInstallResult.mFreezer != null) {
- request.mInstallResult.mFreezer.close();
- }
- if (request.mInstallResult.mReturnCode == PackageManager.INSTALL_SUCCEEDED) {
- request.mInstallResult.mReturnCode = PackageManager.INSTALL_UNKNOWN;
+ request.closeFreezer();
+ if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
+ request.setReturnCode(PackageManager.INSTALL_UNKNOWN);
}
}
}
@@ -980,18 +967,19 @@
}
@GuardedBy("mPm.mInstallLock")
- private PrepareResult preparePackageLI(InstallArgs args, PackageInstalledInfo res)
+ private PrepareResult preparePackageLI(InstallRequest request)
throws PrepareFailure {
- final int installFlags = args.mInstallFlags;
- final boolean onExternal = args.mVolumeUuid != null;
+ final int installFlags = request.getInstallFlags();
+ final boolean onExternal = request.getVolumeUuid() != null;
final boolean instantApp = ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0);
final boolean fullApp = ((installFlags & PackageManager.INSTALL_FULL_APP) != 0);
final boolean virtualPreload =
((installFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
final boolean isApex = ((installFlags & PackageManager.INSTALL_APEX) != 0);
- final boolean isRollback = args.mInstallReason == PackageManager.INSTALL_REASON_ROLLBACK;
+ final boolean isRollback =
+ request.getInstallReason() == PackageManager.INSTALL_REASON_ROLLBACK;
@PackageManagerService.ScanFlags int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
- if (args.mMoveInfo != null) {
+ if (request.isMoveInstall()) {
// moving a complete application; perform an initial scan on the new install location
scanFlags |= SCAN_INITIAL;
}
@@ -1012,7 +1000,7 @@
}
final File tmpPackageFile = new File(
- isApex ? res.mApexInfo.modulePath : args.getCodePath());
+ isApex ? request.getApexInfo().modulePath : request.getCodePath());
if (DEBUG_INSTALL) Slog.d(TAG, "installPackageLI: path=" + tmpPackageFile);
// Validity check
@@ -1066,7 +1054,8 @@
}
}
- String pkgName = res.mName = parsedPackage.getPackageName();
+ String pkgName = parsedPackage.getPackageName();
+ request.setName(pkgName);
if (parsedPackage.isTestOnly()) {
if ((installFlags & PackageManager.INSTALL_ALLOW_TEST) == 0) {
throw new PrepareFailure(INSTALL_FAILED_TEST_ONLY, "installPackageLI");
@@ -1074,8 +1063,8 @@
}
// either use what we've been given or parse directly from the APK
- if (args.mSigningDetails != SigningDetails.UNKNOWN) {
- parsedPackage.setSigningDetails(args.mSigningDetails);
+ if (request.getSigningDetails() != SigningDetails.UNKNOWN) {
+ parsedPackage.setSigningDetails(request.getSigningDetails());
} else {
final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
final ParseResult<SigningDetails> result = ParsingPackageUtils.getSigningDetails(
@@ -1223,7 +1212,8 @@
if (ps.getPkg() != null) {
systemApp = ps.getPkg().isSystem();
}
- res.mOrigUsers = ps.queryInstalledUsers(mPm.mUserManager.getUserIds(), true);
+ request.setOriginUsers(
+ ps.queryInstalledUsers(mPm.mUserManager.getUserIds(), true));
}
final int numGroups = ArrayUtils.size(parsedPackage.getPermissionGroups());
@@ -1299,7 +1289,7 @@
// it as dangerous leading to the group auto-grant.
if ((perm.getProtectionLevel() & PermissionInfo.PROTECTION_MASK_BASE)
== PermissionInfo.PROTECTION_DANGEROUS) {
- if (bp != null && !bp.isRuntime()) {
+ if (!bp.isRuntime()) {
Slog.w(TAG, "Package " + parsedPackage.getPackageName()
+ " trying to change a non-runtime permission "
+ perm.getName()
@@ -1372,7 +1362,7 @@
}
}
- if (args.mMoveInfo != null) {
+ if (request.isMoveInstall()) {
// We did an in-place move, so dex is ready to roll
scanFlags |= SCAN_NO_DEX;
scanFlags |= SCAN_MOVE;
@@ -1380,7 +1370,7 @@
synchronized (mPm.mLock) {
final PackageSetting ps = mPm.mSettings.getPackageLPr(pkgName);
if (ps == null) {
- res.setError(INSTALL_FAILED_INTERNAL_ERROR,
+ request.setError(INSTALL_FAILED_INTERNAL_ERROR,
"Missing settings for moved package " + pkgName);
}
@@ -1403,7 +1393,7 @@
}
boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
&& pkgSetting.getPkgState().isUpdatedSystemApp();
- final String abiOverride = deriveAbiOverride(args.mAbiOverride);
+ final String abiOverride = deriveAbiOverride(request.getAbiOverride());
boolean isUpdatedSystemAppInferred = oldPackage != null && oldPackage.isSystem();
final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
derivedAbi = mPackageAbiHelper.derivePackageAbi(parsedPackage,
@@ -1419,7 +1409,7 @@
}
if (!isApex) {
- doRenameLI(args, res.mReturnCode, res.mReturnMsg, parsedPackage);
+ doRenameLI(request, parsedPackage);
try {
setUpFsVerityIfPossible(parsedPackage);
@@ -1430,8 +1420,8 @@
}
} else {
// Use the path returned by apexd
- parsedPackage.setPath(res.mApexInfo.modulePath);
- parsedPackage.setBaseApkPath(res.mApexInfo.modulePath);
+ parsedPackage.setPath(request.getApexInfo().modulePath);
+ parsedPackage.setBaseApkPath(request.getApexInfo().modulePath);
}
final PackageFreezer freezer =
@@ -1559,8 +1549,8 @@
// don't allow an upgrade from full to ephemeral
if (isInstantApp) {
- if (args.mUser == null
- || args.mUser.getIdentifier() == UserHandle.USER_ALL) {
+ if (request.getUser() == null
+ || request.getUserId() == UserHandle.USER_ALL) {
for (int currentUser : allUsers) {
if (!ps.getInstantApp(currentUser)) {
// can't downgrade from full to instant
@@ -1571,10 +1561,10 @@
PackageManager.INSTALL_FAILED_SESSION_INVALID);
}
}
- } else if (!ps.getInstantApp(args.mUser.getIdentifier())) {
+ } else if (!ps.getInstantApp(request.getUserId())) {
// can't downgrade from full to instant
Slog.w(TAG, "Can't replace full app with instant app: " + pkgName11
- + " for user: " + args.mUser.getIdentifier());
+ + " for user: " + request.getUserId());
throw new PrepareFailure(
PackageManager.INSTALL_FAILED_SESSION_INVALID);
}
@@ -1582,25 +1572,29 @@
}
// Update what is removed
- res.mRemovedInfo = new PackageRemovedInfo(mPm);
- res.mRemovedInfo.mUid = oldPackage.getUid();
- res.mRemovedInfo.mRemovedPackage = oldPackage.getPackageName();
- res.mRemovedInfo.mInstallerPackageName = ps.getInstallSource().installerPackageName;
- res.mRemovedInfo.mIsStaticSharedLib =
+ PackageRemovedInfo removedInfo = new PackageRemovedInfo(mPm);
+ removedInfo.mUid = oldPackage.getUid();
+ removedInfo.mRemovedPackage = oldPackage.getPackageName();
+ removedInfo.mInstallerPackageName =
+ ps.getInstallSource().installerPackageName;
+ removedInfo.mIsStaticSharedLib =
parsedPackage.getStaticSharedLibName() != null;
- res.mRemovedInfo.mIsUpdate = true;
- res.mRemovedInfo.mOrigUsers = installedUsers;
- res.mRemovedInfo.mInstallReasons = new SparseArray<>(installedUsers.length);
+ removedInfo.mIsUpdate = true;
+ removedInfo.mOrigUsers = installedUsers;
+ removedInfo.mInstallReasons = new SparseIntArray(installedUsers.length);
for (int i = 0; i < installedUsers.length; i++) {
final int userId = installedUsers[i];
- res.mRemovedInfo.mInstallReasons.put(userId, ps.getInstallReason(userId));
+ removedInfo.mInstallReasons.put(userId,
+ ps.getInstallReason(userId));
}
- res.mRemovedInfo.mUninstallReasons = new SparseArray<>(uninstalledUsers.length);
+ removedInfo.mUninstallReasons = new SparseIntArray(uninstalledUsers.length);
for (int i = 0; i < uninstalledUsers.length; i++) {
final int userId = uninstalledUsers[i];
- res.mRemovedInfo.mUninstallReasons.put(userId, ps.getUninstallReason(userId));
+ removedInfo.mUninstallReasons.put(userId,
+ ps.getUninstallReason(userId));
}
- res.mRemovedInfo.mIsExternal = oldPackage.isExternalStorage();
+ removedInfo.mIsExternal = oldPackage.isExternalStorage();
+ request.setRemovedInfo(removedInfo);
sysPkg = oldPackage.isSystem();
if (sysPkg) {
@@ -1625,7 +1619,7 @@
Slog.d(TAG, "replaceSystemPackageLI: new=" + parsedPackage
+ ", old=" + oldPackage);
}
- res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
+ request.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
targetParseFlags = systemParseFlags;
targetScanFlags = systemScanFlags;
} else { // non system replace
@@ -1674,7 +1668,7 @@
oldPackage, parsedPackage, replace /* clearCodeCache */, sysPkg,
ps, disabledPs);
} finally {
- res.mFreezer = freezer;
+ request.setFreezer(freezer);
if (shouldCloseFreezerBeforeReturn) {
freezer.close();
}
@@ -1686,24 +1680,26 @@
* scanned package should be updated to reflect the rename.
*/
@GuardedBy("mPm.mInstallLock")
- private void doRenameLI(InstallArgs args, int status, String statusMsg,
+ private void doRenameLI(InstallRequest request,
ParsedPackage parsedPackage) throws PrepareFailure {
- if (args.mMoveInfo != null) {
+ final int status = request.getReturnCode();
+ final String statusMsg = request.getReturnMsg();
+ if (request.isMoveInstall()) {
if (status != PackageManager.INSTALL_SUCCEEDED) {
- mRemovePackageHelper.cleanUpForMoveInstall(args.mMoveInfo.mToUuid,
- args.mMoveInfo.mPackageName, args.mMoveInfo.mFromCodePath);
+ mRemovePackageHelper.cleanUpForMoveInstall(request.getMoveToUuid(),
+ request.getMovePackageName(), request.getMoveFromCodePath());
throw new PrepareFailure(status, statusMsg);
}
return;
}
// For file installations
if (status != PackageManager.INSTALL_SUCCEEDED) {
- mRemovePackageHelper.removeCodePath(args.mCodeFile);
+ mRemovePackageHelper.removeCodePath(request.getCodeFile());
throw new PrepareFailure(status, statusMsg);
}
- final File targetDir = resolveTargetDir(args);
- final File beforeCodeFile = args.mCodeFile;
+ final File targetDir = resolveTargetDir(request.getInstallFlags(), request.getCodeFile());
+ final File beforeCodeFile = request.getCodeFile();
final File afterCodeFile = PackageManagerServiceUtils.getNextCodePath(targetDir,
parsedPackage.getPackageName());
@@ -1732,7 +1728,7 @@
}
// Reflect the rename internally
- args.mCodeFile = afterCodeFile;
+ request.setCodeFile(afterCodeFile);
// Reflect the rename in scanned details
try {
@@ -1750,12 +1746,12 @@
// TODO(b/168126411): Once staged install flow starts using the same folder as non-staged
// flow, we won't need this method anymore.
- private File resolveTargetDir(InstallArgs args) {
- boolean isStagedInstall = (args.mInstallFlags & INSTALL_STAGED) != 0;
+ private File resolveTargetDir(int installFlags, File codeFile) {
+ boolean isStagedInstall = (installFlags & INSTALL_STAGED) != 0;
if (isStagedInstall) {
return Environment.getDataAppDirectory(null);
} else {
- return args.mCodeFile.getParentFile();
+ return codeFile.getParentFile();
}
}
@@ -1905,7 +1901,7 @@
final ScanRequest scanRequest = scanResult.mRequest;
final ParsedPackage parsedPackage = scanRequest.mParsedPackage;
final String packageName = parsedPackage.getPackageName();
- final PackageInstalledInfo res = reconciledPkg.mInstallResult;
+ final InstallRequest installRequest = reconciledPkg.mInstallRequest;
final RemovePackageHelper removePackageHelper = new RemovePackageHelper(mPm);
final DeletePackageHelper deletePackageHelper = new DeletePackageHelper(mPm);
@@ -1921,9 +1917,10 @@
.setFirstInstallTimeFromReplaced(deletedPkgSetting, request.mAllUsers)
.setLastUpdateTime(System.currentTimeMillis());
- res.mRemovedInfo.mBroadcastAllowList = mPm.mAppsFilter.getVisibilityAllowList(
- mPm.snapshotComputer(), reconciledPkg.mPkgSetting, request.mAllUsers,
- mPm.mSettings.getPackagesLocked());
+ installRequest.getRemovedInfo().mBroadcastAllowList =
+ mPm.mAppsFilter.getVisibilityAllowList(mPm.snapshotComputer(),
+ reconciledPkg.mPkgSetting, request.mAllUsers,
+ mPm.mSettings.getPackagesLocked());
if (reconciledPkg.mPrepareResult.mSystem) {
// Remove existing system package
removePackageHelper.removePackage(oldPackage, true);
@@ -1931,7 +1928,7 @@
// We didn't need to disable the .apk as a current system package,
// which means we are replacing another update that is already
// installed. We need to make sure to delete the older one's .apk.
- res.mRemovedInfo.mArgs = new InstallArgs(
+ installRequest.getRemovedInfo().mArgs = new InstallArgs(
oldPackage.getPath(),
getAppDexInstructionSets(
AndroidPackageUtils.getPrimaryCpuAbi(oldPackage,
@@ -1939,7 +1936,7 @@
AndroidPackageUtils.getSecondaryCpuAbi(oldPackage,
deletedPkgSetting)));
} else {
- res.mRemovedInfo.mArgs = null;
+ installRequest.getRemovedInfo().mArgs = null;
}
} else {
try {
@@ -1957,7 +1954,7 @@
// Update the in-memory copy of the previous code paths.
PackageSetting ps1 = mPm.mSettings.getPackageLPr(
reconciledPkg.mPrepareResult.mExistingPackage.getPackageName());
- if ((reconciledPkg.mInstallArgs.mInstallFlags & PackageManager.DONT_KILL_APP)
+ if ((installRequest.getInstallFlags() & PackageManager.DONT_KILL_APP)
== 0) {
Set<String> oldCodePaths = ps1.getOldCodePaths();
if (oldCodePaths == null) {
@@ -1970,12 +1967,11 @@
ps1.setOldCodePaths(null);
}
- if (reconciledPkg.mInstallResult.mReturnCode
- == PackageManager.INSTALL_SUCCEEDED) {
+ if (installRequest.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
PackageSetting ps2 = mPm.mSettings.getPackageLPr(
parsedPackage.getPackageName());
if (ps2 != null) {
- res.mRemovedInfo.mRemovedForAllUsers =
+ installRequest.getRemovedInfo().mRemovedForAllUsers =
mPm.mPackages.get(ps2.getPackageName()) == null;
}
}
@@ -1984,15 +1980,16 @@
AndroidPackage pkg = commitReconciledScanResultLocked(
reconciledPkg, request.mAllUsers);
- updateSettingsLI(pkg, reconciledPkg, request.mAllUsers, res);
+ updateSettingsLI(pkg, reconciledPkg, request.mAllUsers, installRequest);
final PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
if (ps != null) {
- res.mNewUsers = ps.queryInstalledUsers(mPm.mUserManager.getUserIds(), true);
+ installRequest.setNewUsers(
+ ps.queryInstalledUsers(mPm.mUserManager.getUserIds(), true));
ps.setUpdateAvailable(false /*updateAvailable*/);
}
- if (res.mReturnCode == PackageManager.INSTALL_SUCCEEDED) {
- mPm.updateSequenceNumberLP(ps, res.mNewUsers);
+ if (installRequest.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
+ mPm.updateSequenceNumberLP(ps, installRequest.getNewUsers());
mPm.updateInstantAppInstallerLocked(packageName);
}
}
@@ -2005,20 +2002,18 @@
}
private void updateSettingsLI(AndroidPackage newPackage, ReconciledPackage reconciledPkg,
- int[] allUsers, PackageInstalledInfo res) {
- updateSettingsInternalLI(newPackage, reconciledPkg, allUsers, res);
+ int[] allUsers, InstallRequest installRequest) {
+ updateSettingsInternalLI(newPackage, reconciledPkg, allUsers, installRequest);
}
private void updateSettingsInternalLI(AndroidPackage pkg, ReconciledPackage reconciledPkg,
- int[] allUsers, PackageInstalledInfo res) {
+ int[] allUsers, InstallRequest installRequest) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "updateSettings");
final String pkgName = pkg.getPackageName();
- final int[] installedForUsers = res.mOrigUsers;
- final InstallArgs installArgs = reconciledPkg.mInstallArgs;
- final int installReason = installArgs.mInstallReason;
- InstallSource installSource = installArgs.mInstallSource;
- final String installerPackageName = installSource.installerPackageName;
+ final int[] installedForUsers = installRequest.getOriginUsers();
+ final int installReason = installRequest.getInstallReason();
+ final String installerPackageName = installRequest.getSourceInstallerPackageName();
if (DEBUG_INSTALL) Slog.d(TAG, "New package installed in " + pkg.getPath());
synchronized (mPm.mLock) {
@@ -2026,15 +2021,15 @@
// of the package implies that the user actually wants to run that new code,
// so we enable the package.
final PackageSetting ps = mPm.mSettings.getPackageLPr(pkgName);
- final int userId = installArgs.mUser.getIdentifier();
+ final int userId = installRequest.getUserId();
if (ps != null) {
if (pkg.isSystem()) {
if (DEBUG_INSTALL) {
Slog.d(TAG, "Implicitly enabling system package on upgrade: " + pkgName);
}
// Enable system package for requested users
- if (res.mOrigUsers != null) {
- for (int origUserId : res.mOrigUsers) {
+ if (installedForUsers != null) {
+ for (int origUserId : installedForUsers) {
if (userId == UserHandle.USER_ALL || userId == origUserId) {
ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT,
origUserId, installerPackageName);
@@ -2101,20 +2096,27 @@
// When replacing an existing package, preserve the original install reason for all
// users that had the package installed before. Similarly for uninstall reasons.
final Set<Integer> previousUserIds = new ArraySet<>();
- if (res.mRemovedInfo != null && res.mRemovedInfo.mInstallReasons != null) {
- final int installReasonCount = res.mRemovedInfo.mInstallReasons.size();
+ if (installRequest.getRemovedInfo() != null
+ && installRequest.getRemovedInfo().mInstallReasons != null) {
+ final int installReasonCount =
+ installRequest.getRemovedInfo().mInstallReasons.size();
for (int i = 0; i < installReasonCount; i++) {
- final int previousUserId = res.mRemovedInfo.mInstallReasons.keyAt(i);
+ final int previousUserId =
+ installRequest.getRemovedInfo().mInstallReasons.keyAt(i);
final int previousInstallReason =
- res.mRemovedInfo.mInstallReasons.valueAt(i);
+ installRequest.getRemovedInfo().mInstallReasons.valueAt(i);
ps.setInstallReason(previousInstallReason, previousUserId);
previousUserIds.add(previousUserId);
}
}
- if (res.mRemovedInfo != null && res.mRemovedInfo.mUninstallReasons != null) {
- for (int i = 0; i < res.mRemovedInfo.mUninstallReasons.size(); i++) {
- final int previousUserId = res.mRemovedInfo.mUninstallReasons.keyAt(i);
- final int previousReason = res.mRemovedInfo.mUninstallReasons.valueAt(i);
+ if (installRequest.getRemovedInfo() != null
+ && installRequest.getRemovedInfo().mUninstallReasons != null) {
+ for (int i = 0; i < installRequest.getRemovedInfo().mUninstallReasons.size();
+ i++) {
+ final int previousUserId =
+ installRequest.getRemovedInfo().mUninstallReasons.keyAt(i);
+ final int previousReason =
+ installRequest.getRemovedInfo().mUninstallReasons.valueAt(i);
ps.setUninstallReason(previousReason, previousUserId);
}
}
@@ -2153,41 +2155,41 @@
final PermissionManagerServiceInternal.PackageInstalledParams.Builder
permissionParamsBuilder =
new PermissionManagerServiceInternal.PackageInstalledParams.Builder();
- final boolean grantPermissions = (installArgs.mInstallFlags
+ final boolean grantPermissions = (installRequest.getInstallFlags()
& PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
if (grantPermissions) {
final List<String> grantedPermissions =
- installArgs.mInstallGrantPermissions != null
- ? Arrays.asList(installArgs.mInstallGrantPermissions)
+ installRequest.getInstallGrantPermissions() != null
+ ? Arrays.asList(installRequest.getInstallGrantPermissions())
: pkg.getRequestedPermissions();
permissionParamsBuilder.setGrantedPermissions(grantedPermissions);
}
final boolean allowlistAllRestrictedPermissions =
- (installArgs.mInstallFlags
+ (installRequest.getInstallFlags()
& PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS) != 0;
final List<String> allowlistedRestrictedPermissions =
allowlistAllRestrictedPermissions ? pkg.getRequestedPermissions()
- : installArgs.mAllowlistedRestrictedPermissions;
+ : installRequest.getAllowlistedRestrictedPermissions();
if (allowlistedRestrictedPermissions != null) {
permissionParamsBuilder.setAllowlistedRestrictedPermissions(
allowlistedRestrictedPermissions);
}
- final int autoRevokePermissionsMode = installArgs.mAutoRevokePermissionsMode;
+ final int autoRevokePermissionsMode = installRequest.getAutoRevokePermissionsMode();
permissionParamsBuilder.setAutoRevokePermissionsMode(autoRevokePermissionsMode);
final ScanResult scanResult = reconciledPkg.mScanResult;
mPm.mPermissionManager.onPackageInstalled(pkg, scanResult.mPreviousAppId,
permissionParamsBuilder.build(), userId);
// Apply restricted settings on potentially dangerous packages.
- if (installArgs.mPackageSource == PackageInstaller.PACKAGE_SOURCE_LOCAL_FILE
- || installArgs.mPackageSource
+ if (installRequest.getPackageSource() == PackageInstaller.PACKAGE_SOURCE_LOCAL_FILE
+ || installRequest.getPackageSource()
== PackageInstaller.PACKAGE_SOURCE_DOWNLOADED_FILE) {
enableRestrictedSettings(pkgName, pkg.getUid());
}
}
- res.mName = pkgName;
- res.mUid = pkg.getUid();
- res.mPkg = pkg;
- res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
+ installRequest.setName(pkgName);
+ installRequest.setUid(pkg.getUid());
+ installRequest.setPkg(pkg);
+ installRequest.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
//to update install status
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "writeSettings");
mPm.writeSettingsLPrTEMP();
@@ -2252,13 +2254,13 @@
// can be used for optimizations.
mArtManagerService.prepareAppProfiles(
pkg,
- mPm.resolveUserIds(reconciledPkg.mInstallArgs.mUser.getIdentifier()),
+ mPm.resolveUserIds(reconciledPkg.mInstallRequest.getUserId()),
/* updateReferenceProfileContent= */ true);
// Compute the compilation reason from the installation scenario.
final int compilationReason =
mDexManager.getCompilationReasonForInstallScenario(
- reconciledPkg.mInstallArgs.mInstallScenario);
+ reconciledPkg.mInstallRequest.getInstallScenario());
// Construct the DexoptOptions early to see if we should skip running dexopt.
//
@@ -2267,8 +2269,9 @@
//
// Also, don't fail application installs if the dexopt step fails.
final boolean isBackupOrRestore =
- reconciledPkg.mInstallArgs.mInstallReason == INSTALL_REASON_DEVICE_RESTORE
- || reconciledPkg.mInstallArgs.mInstallReason
+ reconciledPkg.mInstallRequest.getInstallReason()
+ == INSTALL_REASON_DEVICE_RESTORE
+ || reconciledPkg.mInstallRequest.getInstallReason()
== INSTALL_REASON_DEVICE_SETUP;
final int dexoptFlags = DexoptOptions.DEXOPT_BOOT_COMPLETE
@@ -2580,35 +2583,31 @@
}
}
- void handlePackagePostInstall(PackageInstalledInfo res, InstallArgs installArgs,
- boolean launchedForRestore) {
+ void handlePackagePostInstall(InstallRequest request, boolean launchedForRestore) {
final boolean killApp =
- (installArgs.mInstallFlags & PackageManager.INSTALL_DONT_KILL_APP) == 0;
+ (request.getInstallFlags() & PackageManager.INSTALL_DONT_KILL_APP) == 0;
final boolean virtualPreload =
- ((installArgs.mInstallFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
- final String installerPackage = installArgs.mInstallSource.installerPackageName;
- final IPackageInstallObserver2 installObserver = installArgs.mObserver;
- final int dataLoaderType = installArgs.mDataLoaderType;
- final boolean succeeded = res.mReturnCode == PackageManager.INSTALL_SUCCEEDED;
- final boolean update = res.mRemovedInfo != null && res.mRemovedInfo.mRemovedPackage != null;
- final String packageName = res.mName;
+ ((request.getInstallFlags() & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0);
+ final String installerPackage = request.getInstallerPackageName();
+ final int dataLoaderType = request.getDataLoaderType();
+ final boolean succeeded = request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED;
+ final boolean update = request.isUpdate();
+ final String packageName = request.getName();
final PackageStateInternal pkgSetting =
succeeded ? mPm.snapshotComputer().getPackageStateInternal(packageName) : null;
final boolean removedBeforeUpdate = (pkgSetting == null)
|| (pkgSetting.isSystem() && !pkgSetting.getPath().getPath().equals(
- res.mPkg.getPath()));
+ request.getPkg().getPath()));
if (succeeded && removedBeforeUpdate) {
Slog.e(TAG, packageName + " was removed before handlePackagePostInstall "
+ "could be executed");
- res.mReturnCode = INSTALL_FAILED_PACKAGE_CHANGED;
- res.mReturnMsg = "Package was removed before install could complete.";
+ request.setReturnCode(INSTALL_FAILED_PACKAGE_CHANGED);
+ request.setReturnMessage("Package was removed before install could complete.");
// Remove the update failed package's older resources safely now
- InstallArgs args = res.mRemovedInfo != null ? res.mRemovedInfo.mArgs : null;
- if (args != null) {
- mRemovePackageHelper.cleanUpResources(args);
- }
- mPm.notifyInstallObserver(res, installObserver);
+ mRemovePackageHelper.cleanUpResources(request.getOldCodeFile(),
+ request.getOldInstructionSet());
+ mPm.notifyInstallObserver(request);
return;
}
@@ -2617,28 +2616,31 @@
mPm.mPerUidReadTimeoutsCache = null;
// Send the removed broadcasts
- if (res.mRemovedInfo != null) {
- if (res.mRemovedInfo.mIsExternal) {
+ if (request.getRemovedInfo() != null) {
+ if (request.getRemovedInfo().mIsExternal) {
if (DEBUG_INSTALL) {
- Slog.i(TAG, "upgrading pkg " + res.mRemovedInfo.mRemovedPackage
+ Slog.i(TAG, "upgrading pkg " + request.getRemovedInfo().mRemovedPackage
+ " is ASEC-hosted -> UNAVAILABLE");
}
- final String[] pkgNames = new String[]{res.mRemovedInfo.mRemovedPackage};
- final int[] uids = new int[]{res.mRemovedInfo.mUid};
+ final String[] pkgNames = new String[]{
+ request.getRemovedInfo().mRemovedPackage};
+ final int[] uids = new int[]{request.getRemovedInfo().mUid};
mBroadcastHelper.sendResourcesChangedBroadcast(mPm::snapshotComputer,
false /* mediaStatus */, true /* replacing */, pkgNames, uids);
}
- res.mRemovedInfo.sendPackageRemovedBroadcasts(killApp, false /*removedBySystem*/);
+ request.getRemovedInfo().sendPackageRemovedBroadcasts(
+ killApp, false /*removedBySystem*/);
}
final String installerPackageName =
- res.mInstallerPackageName != null
- ? res.mInstallerPackageName
- : res.mRemovedInfo != null
- ? res.mRemovedInfo.mInstallerPackageName
+ request.getInstallerPackageName() != null
+ ? request.getInstallerPackageName()
+ : request.getRemovedInfo() != null
+ ? request.getRemovedInfo().mInstallerPackageName
: null;
- mPm.notifyInstantAppPackageInstalled(res.mPkg.getPackageName(), res.mNewUsers);
+ mPm.notifyInstantAppPackageInstalled(request.getPkg().getPackageName(),
+ request.getNewUsers());
// Determine the set of users who are adding this package for
// the first time vs. those who are seeing an update.
@@ -2646,8 +2648,9 @@
int[] firstInstantUserIds = EMPTY_INT_ARRAY;
int[] updateUserIds = EMPTY_INT_ARRAY;
int[] instantUserIds = EMPTY_INT_ARRAY;
- final boolean allNewUsers = res.mOrigUsers == null || res.mOrigUsers.length == 0;
- for (int newUser : res.mNewUsers) {
+ final boolean allNewUsers = request.getOriginUsers() == null
+ || request.getOriginUsers().length == 0;
+ for (int newUser : request.getNewUsers()) {
final boolean isInstantApp = pkgSetting.getUserStateOrDefault(newUser)
.isInstantApp();
if (allNewUsers) {
@@ -2659,7 +2662,7 @@
continue;
}
boolean isNew = true;
- for (int origUser : res.mOrigUsers) {
+ for (int origUser : request.getOriginUsers()) {
if (origUser == newUser) {
isNew = false;
break;
@@ -2681,20 +2684,20 @@
}
// Send installed broadcasts if the package is not a static shared lib.
- if (res.mPkg.getStaticSharedLibName() == null) {
- mPm.mProcessLoggingHandler.invalidateBaseApkHash(res.mPkg.getBaseApkPath());
+ if (request.getPkg().getStaticSharedLibName() == null) {
+ mPm.mProcessLoggingHandler.invalidateBaseApkHash(request.getPkg().getBaseApkPath());
// Send added for users that see the package for the first time
// sendPackageAddedForNewUsers also deals with system apps
- int appId = UserHandle.getAppId(res.mUid);
- boolean isSystem = res.mPkg.isSystem();
+ int appId = UserHandle.getAppId(request.getUid());
+ boolean isSystem = request.getPkg().isSystem();
mPm.sendPackageAddedForNewUsers(mPm.snapshotComputer(), packageName,
isSystem || virtualPreload, virtualPreload /*startReceiver*/, appId,
firstUserIds, firstInstantUserIds, dataLoaderType);
// Send added for users that don't see the package for the first time
Bundle extras = new Bundle();
- extras.putInt(Intent.EXTRA_UID, res.mUid);
+ extras.putInt(Intent.EXTRA_UID, request.getUid());
if (update) {
extras.putBoolean(Intent.EXTRA_REPLACING, true);
}
@@ -2743,8 +2746,8 @@
mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
packageName, extras, 0 /*flags*/,
null /*targetPackage*/, null /*finishedReceiver*/,
- updateUserIds, instantUserIds, res.mRemovedInfo.mBroadcastAllowList,
- null);
+ updateUserIds, instantUserIds,
+ request.getRemovedInfo().mBroadcastAllowList, null);
if (installerPackageName != null) {
mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName,
extras, 0 /*flags*/,
@@ -2768,7 +2771,7 @@
null /*broadcastAllowList*/,
mBroadcastHelper.getTemporaryAppAllowlistBroadcastOptions(
REASON_PACKAGE_REPLACED).toBundle());
- } else if (launchedForRestore && !res.mPkg.isSystem()) {
+ } else if (launchedForRestore && !request.getPkg().isSystem()) {
// First-install and we did a restore, so we're responsible for the
// first-launch broadcast.
if (DEBUG_BACKUP) {
@@ -2780,17 +2783,17 @@
}
// Send broadcast package appeared if external for all users
- if (res.mPkg.isExternalStorage()) {
+ if (request.getPkg().isExternalStorage()) {
if (!update) {
final StorageManager storageManager =
mInjector.getSystemService(StorageManager.class);
VolumeInfo volume =
storageManager.findVolumeByUuid(
StorageManager.convert(
- res.mPkg.getVolumeUuid()).toString());
+ request.getPkg().getVolumeUuid()).toString());
int packageExternalStorageType =
PackageManagerServiceUtils.getPackageExternalStorageType(volume,
- res.mPkg.isExternalStorage());
+ request.getPkg().isExternalStorage());
// If the package was installed externally, log it.
if (packageExternalStorageType != StorageEnums.UNKNOWN) {
FrameworkStatsLog.write(
@@ -2799,19 +2802,20 @@
}
}
if (DEBUG_INSTALL) {
- Slog.i(TAG, "upgrading pkg " + res.mPkg + " is external");
+ Slog.i(TAG, "upgrading pkg " + request.getPkg() + " is external");
}
final String[] pkgNames = new String[]{packageName};
- final int[] uids = new int[]{res.mPkg.getUid()};
+ final int[] uids = new int[]{request.getPkg().getUid()};
mBroadcastHelper.sendResourcesChangedBroadcast(mPm::snapshotComputer,
true /* mediaStatus */, true /* replacing */, pkgNames, uids);
}
- } else if (!ArrayUtils.isEmpty(res.mLibraryConsumers)) { // if static shared lib
+ } else if (!ArrayUtils.isEmpty(request.getLibraryConsumers())) { // if static shared lib
// No need to kill consumers if it's installation of new version static shared lib.
final Computer snapshot = mPm.snapshotComputer();
- final boolean dontKillApp = !update && res.mPkg.getStaticSharedLibName() != null;
- for (int i = 0; i < res.mLibraryConsumers.size(); i++) {
- AndroidPackage pkg = res.mLibraryConsumers.get(i);
+ final boolean dontKillApp = !update
+ && request.getPkg().getStaticSharedLibName() != null;
+ for (int i = 0; i < request.getLibraryConsumers().size(); i++) {
+ AndroidPackage pkg = request.getLibraryConsumers().get(i);
// send broadcast that all consumers of the static shared library have changed
mPm.sendPackageChangedBroadcast(snapshot, pkg.getPackageName(), dontKillApp,
new ArrayList<>(Collections.singletonList(pkg.getPackageName())),
@@ -2828,9 +2832,9 @@
}
if (allNewUsers && !update) {
- mPm.notifyPackageAdded(packageName, res.mUid);
+ mPm.notifyPackageAdded(packageName, request.getUid());
} else {
- mPm.notifyPackageChanged(packageName, res.mUid);
+ mPm.notifyPackageChanged(packageName, request.getUid());
}
// Log current value of "unknown sources" setting
@@ -2838,7 +2842,8 @@
getUnknownSourcesSettings());
// Remove the replaced package's older resources safely now
- InstallArgs args = res.mRemovedInfo != null ? res.mRemovedInfo.mArgs : null;
+ InstallArgs args = request.getRemovedInfo() != null
+ ? request.getRemovedInfo().mArgs : null;
if (args != null) {
if (!killApp) {
// If we didn't kill the app, defer the deletion of code/resource files, since
@@ -2847,7 +2852,7 @@
// ApplicationInfo changes have propagated to all application threads.
mPm.scheduleDeferredNoKillPostDelete(args);
} else {
- mRemovePackageHelper.cleanUpResources(args);
+ mRemovePackageHelper.cleanUpResources(args.mCodeFile, args.mInstructionSets);
}
} else {
// Force a gc to clear up things. Ask for a background one, it's fine to go on
@@ -2874,21 +2879,21 @@
final boolean deferInstallObserver = succeeded && update;
if (deferInstallObserver) {
if (killApp) {
- mPm.scheduleDeferredPendingKillInstallObserver(res, installObserver);
+ mPm.scheduleDeferredPendingKillInstallObserver(request);
} else {
- mPm.scheduleDeferredNoKillInstallObserver(res, installObserver);
+ mPm.scheduleDeferredNoKillInstallObserver(request);
}
} else {
- mPm.notifyInstallObserver(res, installObserver);
+ mPm.notifyInstallObserver(request);
}
// Prune unused static shared libraries which have been cached a period of time
mPm.schedulePruneUnusedStaticSharedLibraries(true /* delay */);
// Log tracing if needed
- if (installArgs.mTraceMethod != null) {
- Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, installArgs.mTraceMethod,
- installArgs.mTraceCookie);
+ if (request.getTraceMethod() != null) {
+ Trace.asyncTraceEnd(TRACE_TAG_PACKAGE_MANAGER, request.getTraceMethod(),
+ request.getTraceCookie());
}
}
@@ -3936,10 +3941,10 @@
+ "; " + pkgSetting.getPathString()
+ " --> " + parsedPackage.getPath());
- final InstallArgs args = new InstallArgs(
- pkgSetting.getPathString(), getAppDexInstructionSets(
- pkgSetting.getPrimaryCpuAbi(), pkgSetting.getSecondaryCpuAbi()));
- mRemovePackageHelper.cleanUpResources(args);
+ mRemovePackageHelper.cleanUpResources(
+ new File(pkgSetting.getPathString()),
+ getAppDexInstructionSets(pkgSetting.getPrimaryCpuAbi(),
+ pkgSetting.getSecondaryCpuAbi()));
synchronized (mPm.mLock) {
mPm.mSettings.enableSystemPackageLPw(pkgSetting.getPackageName());
}
@@ -4021,10 +4026,9 @@
+ parsedPackage.getLongVersionCode()
+ "; " + pkgSetting.getPathString() + " --> "
+ parsedPackage.getPath());
- InstallArgs args = new InstallArgs(
- pkgSetting.getPathString(), getAppDexInstructionSets(
- pkgSetting.getPrimaryCpuAbi(), pkgSetting.getSecondaryCpuAbi()));
- mRemovePackageHelper.cleanUpResources(args);
+ mRemovePackageHelper.cleanUpResources(new File(pkgSetting.getPathString()),
+ getAppDexInstructionSets(
+ pkgSetting.getPrimaryCpuAbi(), pkgSetting.getSecondaryCpuAbi()));
} else {
// The application on /system is older than the application on /data. Hide
// the application on /system and the version on /data will be scanned later
diff --git a/services/core/java/com/android/server/pm/InstallRequest.java b/services/core/java/com/android/server/pm/InstallRequest.java
index 753d012..36bbf41 100644
--- a/services/core/java/com/android/server/pm/InstallRequest.java
+++ b/services/core/java/com/android/server/pm/InstallRequest.java
@@ -16,12 +16,389 @@
package com.android.server.pm;
-final class InstallRequest {
- public final InstallArgs mArgs;
- public final PackageInstalledInfo mInstallResult;
+import static android.content.pm.PackageManager.INSTALL_REASON_UNKNOWN;
+import static android.content.pm.PackageManager.INSTALL_SCENARIO_DEFAULT;
- InstallRequest(InstallArgs args, PackageInstalledInfo res) {
- mArgs = args;
- mInstallResult = res;
+import static com.android.server.pm.PackageManagerService.TAG;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.apex.ApexInfo;
+import android.app.AppOpsManager;
+import android.content.pm.DataLoaderType;
+import android.content.pm.IPackageInstallObserver2;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.content.pm.SigningDetails;
+import android.net.Uri;
+import android.os.UserHandle;
+import android.util.ExceptionUtils;
+import android.util.Slog;
+
+import com.android.server.pm.pkg.AndroidPackage;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+final class InstallRequest {
+ private final int mUserId;
+ @Nullable
+ private final InstallArgs mInstallArgs;
+ @NonNull
+ private final PackageInstalledInfo mInstalledInfo;
+ @Nullable
+ private Runnable mPostInstallRunnable;
+ @Nullable
+ private PackageRemovedInfo mRemovedInfo;
+
+ // New install
+ InstallRequest(InstallingSession params) {
+ mUserId = params.getUser().getIdentifier();
+ mInstallArgs = new InstallArgs(params.mOriginInfo, params.mMoveInfo, params.mObserver,
+ params.mInstallFlags, params.mInstallSource, params.mVolumeUuid,
+ params.getUser(), null /*instructionSets*/, params.mPackageAbiOverride,
+ params.mGrantedRuntimePermissions, params.mAllowlistedRestrictedPermissions,
+ params.mAutoRevokePermissionsMode,
+ params.mTraceMethod, params.mTraceCookie, params.mSigningDetails,
+ params.mInstallReason, params.mInstallScenario, params.mForceQueryableOverride,
+ params.mDataLoaderType, params.mPackageSource);
+ mInstalledInfo = new PackageInstalledInfo();
+ }
+
+ // Install existing package as user
+ InstallRequest(int userId, int returnCode, AndroidPackage pkg, int[] newUsers,
+ Runnable runnable) {
+ mUserId = userId;
+ mInstallArgs = null;
+ mInstalledInfo = new PackageInstalledInfo();
+ mInstalledInfo.mReturnCode = returnCode;
+ mInstalledInfo.mPkg = pkg;
+ mInstalledInfo.mNewUsers = newUsers;
+ mPostInstallRunnable = runnable;
+ }
+
+ private static class PackageInstalledInfo {
+ String mName;
+ int mUid = -1;
+ // The set of users that originally had this package installed.
+ int[] mOrigUsers;
+ // The set of users that now have this package installed.
+ int[] mNewUsers;
+ AndroidPackage mPkg;
+ int mReturnCode;
+ String mReturnMsg;
+ String mInstallerPackageName;
+ // The set of packages consuming this shared library or null if no consumers exist.
+ ArrayList<AndroidPackage> mLibraryConsumers;
+ PackageFreezer mFreezer;
+ // In some error cases we want to convey more info back to the observer
+ String mOrigPackage;
+ String mOrigPermission;
+ // The ApexInfo returned by ApexManager#installPackage, used by rebootless APEX install
+ ApexInfo mApexInfo;
+ }
+
+ public String getName() {
+ return mInstalledInfo.mName;
+ }
+
+ public String getReturnMsg() {
+ return mInstalledInfo.mReturnMsg;
+ }
+
+ public OriginInfo getOriginInfo() {
+ return mInstallArgs == null ? null : mInstallArgs.mOriginInfo;
+ }
+
+ public PackageRemovedInfo getRemovedInfo() {
+ return mRemovedInfo;
+ }
+
+ public String getOrigPackage() {
+ return mInstalledInfo.mOrigPackage;
+ }
+
+ public String getOrigPermission() {
+ return mInstalledInfo.mOrigPermission;
+ }
+
+ @Nullable
+ public File getCodeFile() {
+ return mInstallArgs == null ? null : mInstallArgs.mCodeFile;
+ }
+
+ @Nullable
+ public String getCodePath() {
+ return (mInstallArgs != null && mInstallArgs.mCodeFile != null)
+ ? mInstallArgs.mCodeFile.getAbsolutePath() : null;
+ }
+
+ @Nullable
+ public String getAbiOverride() {
+ return mInstallArgs == null ? null : mInstallArgs.mAbiOverride;
+ }
+
+ public int getReturnCode() {
+ return mInstalledInfo.mReturnCode;
+ }
+
+ @Nullable
+ public IPackageInstallObserver2 getObserver() {
+ return mInstallArgs == null ? null : mInstallArgs.mObserver;
+ }
+
+ public boolean isMoveInstall() {
+ return mInstallArgs != null && mInstallArgs.mMoveInfo != null;
+ }
+
+ @Nullable
+ public String getMoveToUuid() {
+ return (mInstallArgs != null && mInstallArgs.mMoveInfo != null)
+ ? mInstallArgs.mMoveInfo.mToUuid : null;
+ }
+
+ @Nullable
+ public String getMovePackageName() {
+ return (mInstallArgs != null && mInstallArgs.mMoveInfo != null)
+ ? mInstallArgs.mMoveInfo.mPackageName : null;
+ }
+
+ @Nullable
+ public String getMoveFromCodePath() {
+ return (mInstallArgs != null && mInstallArgs.mMoveInfo != null)
+ ? mInstallArgs.mMoveInfo.mFromCodePath : null;
+ }
+
+ @Nullable
+ public File getOldCodeFile() {
+ return (mRemovedInfo != null && mRemovedInfo.mArgs != null)
+ ? mRemovedInfo.mArgs.mCodeFile : null;
+ }
+
+ @Nullable
+ public String[] getOldInstructionSet() {
+ return (mRemovedInfo != null && mRemovedInfo.mArgs != null)
+ ? mRemovedInfo.mArgs.mInstructionSets : null;
+ }
+
+ public UserHandle getUser() {
+ return new UserHandle(mUserId);
+ }
+
+ public int getUserId() {
+ return mUserId;
+ }
+
+ public int getInstallFlags() {
+ return mInstallArgs == null ? 0 : mInstallArgs.mInstallFlags;
+ }
+
+ public int getInstallReason() {
+ return mInstallArgs == null ? INSTALL_REASON_UNKNOWN : mInstallArgs.mInstallReason;
+ }
+
+ @Nullable
+ public String getVolumeUuid() {
+ return mInstallArgs == null ? null : mInstallArgs.mVolumeUuid;
+ }
+
+ public AndroidPackage getPkg() {
+ return mInstalledInfo.mPkg;
+ }
+
+ @Nullable
+ public String getTraceMethod() {
+ return mInstallArgs == null ? null : mInstallArgs.mTraceMethod;
+ }
+
+ public int getTraceCookie() {
+ return mInstallArgs == null ? 0 : mInstallArgs.mTraceCookie;
+ }
+
+ public boolean isUpdate() {
+ return mRemovedInfo != null && mRemovedInfo.mRemovedPackage != null;
+ }
+
+ @Nullable
+ public String getRemovedPackage() {
+ return mRemovedInfo != null ? mRemovedInfo.mRemovedPackage : null;
+ }
+
+ public boolean isInstallForExistingUser() {
+ return mInstallArgs == null;
+ }
+
+ @Nullable
+ public InstallSource getInstallSource() {
+ return mInstallArgs == null ? null : mInstallArgs.mInstallSource;
+ }
+
+ @Nullable
+ public String getInstallerPackageName() {
+ return (mInstallArgs != null && mInstallArgs.mInstallSource != null)
+ ? mInstallArgs.mInstallSource.installerPackageName : null;
+ }
+
+ public int getDataLoaderType() {
+ return mInstallArgs == null ? DataLoaderType.NONE : mInstallArgs.mDataLoaderType;
+ }
+
+ public int getSignatureSchemeVersion() {
+ return mInstallArgs == null ? SigningDetails.SignatureSchemeVersion.UNKNOWN
+ : mInstallArgs.mSigningDetails.getSignatureSchemeVersion();
+ }
+
+ @NonNull
+ public SigningDetails getSigningDetails() {
+ return mInstallArgs == null ? SigningDetails.UNKNOWN : mInstallArgs.mSigningDetails;
+ }
+
+ @Nullable
+ public Uri getOriginUri() {
+ return mInstallArgs == null ? null : Uri.fromFile(mInstallArgs.mOriginInfo.mResolvedFile);
+ }
+
+ public ApexInfo getApexInfo() {
+ return mInstalledInfo.mApexInfo;
+ }
+
+ public String getSourceInstallerPackageName() {
+ return mInstallArgs.mInstallSource.installerPackageName;
+ }
+
+ public boolean isRollback() {
+ return mInstallArgs != null
+ && mInstallArgs.mInstallReason == PackageManager.INSTALL_REASON_ROLLBACK;
+ }
+
+ public int[] getNewUsers() {
+ return mInstalledInfo.mNewUsers;
+ }
+
+ public int[] getOriginUsers() {
+ return mInstalledInfo.mOrigUsers;
+ }
+
+ public int getUid() {
+ return mInstalledInfo.mUid;
+ }
+
+ @Nullable
+ public String[] getInstallGrantPermissions() {
+ return mInstallArgs == null ? null : mInstallArgs.mInstallGrantPermissions;
+ }
+
+ public ArrayList<AndroidPackage> getLibraryConsumers() {
+ return mInstalledInfo.mLibraryConsumers;
+ }
+
+ @Nullable
+ public List<String> getAllowlistedRestrictedPermissions() {
+ return mInstallArgs == null ? null : mInstallArgs.mAllowlistedRestrictedPermissions;
+ }
+
+ public int getAutoRevokePermissionsMode() {
+ return mInstallArgs == null
+ ? AppOpsManager.MODE_DEFAULT : mInstallArgs.mAutoRevokePermissionsMode;
+ }
+
+ public int getPackageSource() {
+ return mInstallArgs == null
+ ? PackageInstaller.PACKAGE_SOURCE_UNSPECIFIED : mInstallArgs.mPackageSource;
+ }
+
+ public int getInstallScenario() {
+ return mInstallArgs == null ? INSTALL_SCENARIO_DEFAULT : mInstallArgs.mInstallScenario;
+ }
+
+ public boolean isForceQueryableOverride() {
+ return mInstallArgs != null && mInstallArgs.mForceQueryableOverride;
+ }
+
+ public void closeFreezer() {
+ if (mInstalledInfo.mFreezer != null) {
+ mInstalledInfo.mFreezer.close();
+ }
+ }
+
+ public void runPostInstallRunnable() {
+ if (mPostInstallRunnable != null) {
+ mPostInstallRunnable.run();
+ }
+ }
+
+ public void setCodeFile(File codeFile) {
+ if (mInstallArgs != null) {
+ mInstallArgs.mCodeFile = codeFile;
+ }
+ }
+
+ public void setError(int code, String msg) {
+ setReturnCode(code);
+ setReturnMessage(msg);
+ Slog.w(TAG, msg);
+ }
+
+ public void setError(String msg, PackageManagerException e) {
+ mInstalledInfo.mReturnCode = e.error;
+ setReturnMessage(ExceptionUtils.getCompleteMessage(msg, e));
+ Slog.w(TAG, msg, e);
+ }
+
+ public void setReturnCode(int returnCode) {
+ mInstalledInfo.mReturnCode = returnCode;
+ }
+
+ public void setReturnMessage(String returnMsg) {
+ mInstalledInfo.mReturnMsg = returnMsg;
+ }
+
+ public void setApexInfo(ApexInfo apexInfo) {
+ mInstalledInfo.mApexInfo = apexInfo;
+ }
+
+ public void setPkg(AndroidPackage pkg) {
+ mInstalledInfo.mPkg = pkg;
+ }
+
+ public void setUid(int uid) {
+ mInstalledInfo.mUid = uid;
+ }
+
+ public void setNewUsers(int[] newUsers) {
+ mInstalledInfo.mNewUsers = newUsers;
+ }
+
+ public void setOriginPackage(String originPackage) {
+ mInstalledInfo.mOrigPackage = originPackage;
+ }
+
+ public void setOriginPermission(String originPermission) {
+ mInstalledInfo.mOrigPermission = originPermission;
+ }
+
+ public void setInstallerPackageName(String installerPackageName) {
+ mInstalledInfo.mInstallerPackageName = installerPackageName;
+ }
+
+ public void setName(String packageName) {
+ mInstalledInfo.mName = packageName;
+ }
+
+ public void setOriginUsers(int[] userIds) {
+ mInstalledInfo.mOrigUsers = userIds;
+ }
+
+ public void setFreezer(PackageFreezer freezer) {
+ mInstalledInfo.mFreezer = freezer;
+ }
+
+ public void setRemovedInfo(PackageRemovedInfo removedInfo) {
+ mRemovedInfo = removedInfo;
+ }
+
+ public void setLibraryConsumers(ArrayList<AndroidPackage> libraryConsumers) {
+ mInstalledInfo.mLibraryConsumers = libraryConsumers;
}
}
diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java
index a7f1727..8d5a5e1 100644
--- a/services/core/java/com/android/server/pm/InstallingSession.java
+++ b/services/core/java/com/android/server/pm/InstallingSession.java
@@ -253,68 +253,69 @@
}
private void processPendingInstall() {
- InstallArgs args = new InstallArgs(this);
+ InstallRequest installRequest = new InstallRequest(this);
if (mRet == PackageManager.INSTALL_SUCCEEDED) {
- mRet = copyApk(args);
+ mRet = copyApk(installRequest);
}
if (mRet == PackageManager.INSTALL_SUCCEEDED) {
F2fsUtils.releaseCompressedBlocks(
- mPm.mContext.getContentResolver(), new File(args.getCodePath()));
+ mPm.mContext.getContentResolver(), new File(installRequest.getCodePath()));
}
+ installRequest.setReturnCode(mRet);
if (mParentInstallingSession != null) {
- mParentInstallingSession.tryProcessInstallRequest(args, mRet);
+ mParentInstallingSession.tryProcessInstallRequest(installRequest);
} else {
- PackageInstalledInfo res = new PackageInstalledInfo(mRet);
// Queue up an async operation since the package installation may take a little while.
mPm.mHandler.post(() -> processInstallRequests(
- res.mReturnCode == PackageManager.INSTALL_SUCCEEDED /* success */,
- Collections.singletonList(new InstallRequest(args, res))));
+ mRet == PackageManager.INSTALL_SUCCEEDED /* success */,
+ Collections.singletonList(installRequest)));
}
}
- private int copyApk(InstallArgs args) {
+ private int copyApk(InstallRequest request) {
if (mMoveInfo == null) {
- return copyApkForFileInstall(args);
+ return copyApkForFileInstall(request);
} else {
- return copyApkForMoveInstall(args);
+ return copyApkForMoveInstall(request);
}
}
- private int copyApkForFileInstall(InstallArgs args) {
+ private int copyApkForFileInstall(InstallRequest request) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "copyApk");
try {
if (mOriginInfo.mStaged) {
if (DEBUG_INSTALL) {
Slog.d(TAG, mOriginInfo.mFile + " already staged; skipping copy");
}
- args.mCodeFile = mOriginInfo.mFile;
+ request.setCodeFile(mOriginInfo.mFile);
return PackageManager.INSTALL_SUCCEEDED;
}
try {
final boolean isEphemeral =
(mInstallFlags & PackageManager.INSTALL_INSTANT_APP) != 0;
- args.mCodeFile =
- mPm.mInstallerService.allocateStageDirLegacy(mVolumeUuid, isEphemeral);
+ request.setCodeFile(
+ mPm.mInstallerService.allocateStageDirLegacy(mVolumeUuid, isEphemeral));
} catch (IOException e) {
Slog.w(TAG, "Failed to create copy file: " + e);
return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
}
int ret = PackageManagerServiceUtils.copyPackage(
- mOriginInfo.mFile.getAbsolutePath(), args.mCodeFile);
+ mOriginInfo.mFile.getAbsolutePath(), request.getCodeFile());
if (ret != PackageManager.INSTALL_SUCCEEDED) {
Slog.e(TAG, "Failed to copy package");
return ret;
}
- final boolean isIncremental = isIncrementalPath(args.mCodeFile.getAbsolutePath());
- final File libraryRoot = new File(args.mCodeFile, LIB_DIR_NAME);
+ final boolean isIncremental = isIncrementalPath(
+ request.getCodeFile().getAbsolutePath());
+ final File libraryRoot = new File(request.getCodeFile(), LIB_DIR_NAME);
NativeLibraryHelper.Handle handle = null;
try {
- handle = NativeLibraryHelper.Handle.create(args.mCodeFile);
+ handle = NativeLibraryHelper.Handle.create(request.getCodeFile());
ret = NativeLibraryHelper.copyNativeBinariesWithOverride(handle, libraryRoot,
- args.mAbiOverride, isIncremental);
+ request.getAbiOverride(), isIncremental);
} catch (IOException e) {
Slog.e(TAG, "Copying native libraries failed", e);
ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
@@ -328,7 +329,7 @@
}
}
- private int copyApkForMoveInstall(InstallArgs args) {
+ private int copyApkForMoveInstall(InstallRequest request) {
if (DEBUG_INSTALL) {
Slog.d(TAG, "Moving " + mMoveInfo.mPackageName + " from "
+ mMoveInfo.mFromUuid + " to " + mMoveInfo.mToUuid);
@@ -345,8 +346,9 @@
}
final String toPathName = new File(mMoveInfo.mFromCodePath).getName();
- args.mCodeFile = new File(Environment.getDataAppDirectory(mMoveInfo.mToUuid), toPathName);
- if (DEBUG_INSTALL) Slog.d(TAG, "codeFile after move is " + args.mCodeFile);
+ request.setCodeFile(
+ new File(Environment.getDataAppDirectory(mMoveInfo.mToUuid), toPathName));
+ if (DEBUG_INSTALL) Slog.d(TAG, "codeFile after move is " + request.getCodeFile());
return PackageManager.INSTALL_SUCCEEDED;
}
@@ -460,7 +462,7 @@
List<InstallRequest> apexInstallRequests = new ArrayList<>();
List<InstallRequest> apkInstallRequests = new ArrayList<>();
for (InstallRequest request : installRequests) {
- if ((request.mArgs.mInstallFlags & PackageManager.INSTALL_APEX) != 0) {
+ if ((request.getInstallFlags() & PackageManager.INSTALL_APEX) != 0) {
apexInstallRequests.add(request);
} else {
apkInstallRequests.add(request);
@@ -485,7 +487,7 @@
// processInstallRequestAsync. In that case just notify the observer about the
// failure.
InstallRequest request = apexInstallRequests.get(0);
- mPm.notifyInstallObserver(request.mInstallResult, request.mArgs.mObserver);
+ mPm.notifyInstallObserver(request);
}
return;
}
@@ -496,28 +498,25 @@
private void processApkInstallRequests(boolean success, List<InstallRequest> installRequests) {
if (success) {
for (InstallRequest request : installRequests) {
- if (request.mInstallResult.mReturnCode != PackageManager.INSTALL_SUCCEEDED) {
- cleanUpForFailedInstall(request.mArgs);
+ if (request.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) {
+ cleanUpForFailedInstall(request);
}
}
mInstallPackageHelper.installPackagesTraced(installRequests);
for (InstallRequest request : installRequests) {
- doPostInstall(request.mInstallResult.mReturnCode, request.mArgs);
+ doPostInstall(request);
}
}
for (InstallRequest request : installRequests) {
- mInstallPackageHelper.restoreAndPostInstall(request.mArgs.mUser.getIdentifier(),
- request.mInstallResult,
- new PostInstallData(request.mArgs,
- request.mInstallResult, null));
+ mInstallPackageHelper.restoreAndPostInstall(request);
}
}
- private void doPostInstall(int status, InstallArgs args) {
+ private void doPostInstall(InstallRequest request) {
if (mMoveInfo != null) {
- if (status == PackageManager.INSTALL_SUCCEEDED) {
+ if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
mRemovePackageHelper.cleanUpForMoveInstall(mMoveInfo.mFromUuid,
mMoveInfo.mPackageName, mMoveInfo.mFromCodePath);
} else {
@@ -525,18 +524,18 @@
mMoveInfo.mPackageName, mMoveInfo.mFromCodePath);
}
} else {
- if (status != PackageManager.INSTALL_SUCCEEDED) {
- mRemovePackageHelper.removeCodePath(args.mCodeFile);
+ if (request.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) {
+ mRemovePackageHelper.removeCodePath(request.getCodeFile());
}
}
}
- private void cleanUpForFailedInstall(InstallArgs args) {
- if (args.mMoveInfo != null) {
- mRemovePackageHelper.cleanUpForMoveInstall(args.mMoveInfo.mToUuid,
- args.mMoveInfo.mPackageName, args.mMoveInfo.mFromCodePath);
+ private void cleanUpForFailedInstall(InstallRequest request) {
+ if (request.isMoveInstall()) {
+ mRemovePackageHelper.cleanUpForMoveInstall(request.getMoveToUuid(),
+ request.getMovePackageName(), request.getMoveFromCodePath());
} else {
- mRemovePackageHelper.removeCodePath(args.mCodeFile);
+ mRemovePackageHelper.removeCodePath(request.getCodeFile());
}
}
@@ -560,7 +559,7 @@
InstallRequest request = requests.get(0);
try {
// Should directory scanning logic be moved to ApexManager for better test coverage?
- final File dir = request.mArgs.mOriginInfo.mResolvedFile;
+ final File dir = request.getOriginInfo().mResolvedFile;
final File[] apexes = dir.listFiles();
if (apexes == null) {
throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR,
@@ -580,7 +579,7 @@
// The newly installed APEX will not be reverted even if
// processApkInstallRequests() fails. Need a way to keep info stored in apexd
// and PMS in sync in the face of install failures.
- request.mInstallResult.mApexInfo = apexInfo;
+ request.setApexInfo(apexInfo);
mPm.mHandler.post(() -> processApkInstallRequests(true, requests));
return;
} else {
@@ -588,10 +587,10 @@
}
}
} catch (PackageManagerException e) {
- request.mInstallResult.setError("APEX installation failed", e);
+ request.setError("APEX installation failed", e);
}
PackageManagerService.invalidatePackageInfoCache();
- mPm.notifyInstallObserver(request.mInstallResult, request.mArgs.mObserver);
+ mPm.notifyInstallObserver(request);
}
/**
@@ -600,7 +599,7 @@
*/
private class MultiPackageInstallingSession {
private final List<InstallingSession> mChildInstallingSessions;
- private final Map<InstallArgs, Integer> mCurrentState;
+ private final Map<InstallRequest, Integer> mCurrentState;
@NonNull
final PackageManagerService mPm;
final UserHandle mUser;
@@ -636,8 +635,8 @@
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
- public void tryProcessInstallRequest(InstallArgs args, int currentStatus) {
- mCurrentState.put(args, currentStatus);
+ public void tryProcessInstallRequest(InstallRequest request) {
+ mCurrentState.put(request, request.getReturnCode());
if (mCurrentState.size() != mChildInstallingSessions.size()) {
return;
}
@@ -651,9 +650,9 @@
}
}
final List<InstallRequest> installRequests = new ArrayList<>(mCurrentState.size());
- for (Map.Entry<InstallArgs, Integer> entry : mCurrentState.entrySet()) {
- installRequests.add(new InstallRequest(entry.getKey(),
- new PackageInstalledInfo(completeStatus)));
+ for (Map.Entry<InstallRequest, Integer> entry : mCurrentState.entrySet()) {
+ entry.getKey().setReturnCode(completeStatus);
+ installRequests.add(entry.getKey());
}
int finalCompleteStatus = completeStatus;
mPm.mHandler.post(() -> processInstallRequests(
diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java
index 1ea4d62..4e8b0a1 100644
--- a/services/core/java/com/android/server/pm/PackageHandler.java
+++ b/services/core/java/com/android/server/pm/PackageHandler.java
@@ -89,18 +89,14 @@
case POST_INSTALL: {
if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
- PostInstallData data = mPm.mRunningInstalls.get(msg.arg1);
+ InstallRequest request = mPm.mRunningInstalls.get(msg.arg1);
final boolean didRestore = (msg.arg2 != 0);
mPm.mRunningInstalls.delete(msg.arg1);
- if (data != null && data.res.mFreezer != null) {
- data.res.mFreezer.close();
- }
-
- if (data != null && data.mPostInstallRunnable != null) {
- data.mPostInstallRunnable.run();
- } else if (data != null && data.args != null) {
- mInstallPackageHelper.handlePackagePostInstall(data.res, data.args, didRestore);
+ request.closeFreezer();
+ request.runPostInstallRunnable();
+ if (!request.isInstallForExistingUser()) {
+ mInstallPackageHelper.handlePackagePostInstall(request, didRestore);
} else if (DEBUG_INSTALL) {
// No post-install when we run restore from installExistingPackageForUser
Slog.i(TAG, "Nothing to do for post-install token " + msg.arg1);
@@ -111,7 +107,7 @@
case DEFERRED_NO_KILL_POST_DELETE: {
InstallArgs args = (InstallArgs) msg.obj;
if (args != null) {
- mRemovePackageHelper.cleanUpResources(args);
+ mRemovePackageHelper.cleanUpResources(args.mCodeFile, args.mInstructionSets);
}
} break;
case DEFERRED_NO_KILL_INSTALL_OBSERVER:
diff --git a/services/core/java/com/android/server/pm/PackageInstalledInfo.java b/services/core/java/com/android/server/pm/PackageInstalledInfo.java
deleted file mode 100644
index 247abf3..0000000
--- a/services/core/java/com/android/server/pm/PackageInstalledInfo.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2021 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 com.android.server.pm;
-
-import static com.android.server.pm.PackageManagerService.TAG;
-
-import android.apex.ApexInfo;
-import android.util.ExceptionUtils;
-import android.util.Slog;
-
-import com.android.server.pm.pkg.AndroidPackage;
-
-import java.util.ArrayList;
-
-final class PackageInstalledInfo {
- String mName;
- int mUid;
- // The set of users that originally had this package installed.
- int[] mOrigUsers;
- // The set of users that now have this package installed.
- int[] mNewUsers;
- AndroidPackage mPkg;
- int mReturnCode;
- String mReturnMsg;
- String mInstallerPackageName;
- PackageRemovedInfo mRemovedInfo;
- // The set of packages consuming this shared library or null if no consumers exist.
- ArrayList<AndroidPackage> mLibraryConsumers;
- PackageFreezer mFreezer;
-
- // In some error cases we want to convey more info back to the observer
- String mOrigPackage;
- String mOrigPermission;
-
- // The ApexInfo returned by ApexManager#installPackage, used by rebootless APEX install
- ApexInfo mApexInfo;
-
- PackageInstalledInfo(int currentStatus) {
- mReturnCode = currentStatus;
- mUid = -1;
- mPkg = null;
- mRemovedInfo = null;
- }
-
- public void setError(int code, String msg) {
- setReturnCode(code);
- setReturnMessage(msg);
- Slog.w(TAG, msg);
- }
-
- public void setError(String msg, PackageManagerException e) {
- mReturnCode = e.error;
- setReturnMessage(ExceptionUtils.getCompleteMessage(msg, e));
- Slog.w(TAG, msg, e);
- }
-
- public void setReturnCode(int returnCode) {
- mReturnCode = returnCode;
- }
-
- private void setReturnMessage(String returnMsg) {
- mReturnMsg = returnMsg;
- }
-}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 259202f..39a6eb7 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -82,7 +82,6 @@
import android.content.pm.IOnChecksumsReadyListener;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver2;
-import android.content.pm.IPackageInstallObserver2;
import android.content.pm.IPackageLoadingProgressCallback;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageMoveObserver;
@@ -826,10 +825,10 @@
@Watched(manual = true)
private final ResolveInfo mInstantAppInstallerInfo = new ResolveInfo();
- private final Map<String, Pair<PackageInstalledInfo, IPackageInstallObserver2>>
+ private final Map<String, InstallRequest>
mNoKillInstallObservers = Collections.synchronizedMap(new HashMap<>());
- private final Map<String, Pair<PackageInstalledInfo, IPackageInstallObserver2>>
+ private final Map<String, InstallRequest>
mPendingKillInstallObservers = Collections.synchronizedMap(new HashMap<>());
// Internal interface for permission manager
@@ -908,7 +907,7 @@
// Stores a list of users whose package restrictions file needs to be updated
final ArraySet<Integer> mDirtyUsers = new ArraySet<>();
- final SparseArray<PostInstallData> mRunningInstalls = new SparseArray<>();
+ final SparseArray<InstallRequest> mRunningInstalls = new SparseArray<>();
int mNextInstallToken = 1; // nonzero; will be wrapped back to 1 when ++ overflows
final @NonNull String[] mRequiredVerifierPackages;
@@ -1155,32 +1154,30 @@
}
void notifyInstallObserver(String packageName, boolean killApp) {
- final Pair<PackageInstalledInfo, IPackageInstallObserver2> pair =
+ final InstallRequest installRequest =
killApp ? mPendingKillInstallObservers.remove(packageName)
: mNoKillInstallObservers.remove(packageName);
- if (pair != null) {
- notifyInstallObserver(pair.first, pair.second);
+ if (installRequest != null) {
+ notifyInstallObserver(installRequest);
}
}
- void notifyInstallObserver(PackageInstalledInfo info,
- IPackageInstallObserver2 installObserver) {
- if (installObserver != null) {
+ void notifyInstallObserver(InstallRequest request) {
+ if (request.getObserver() != null) {
try {
- Bundle extras = extrasForInstallResult(info);
- installObserver.onPackageInstalled(info.mName, info.mReturnCode,
- info.mReturnMsg, extras);
+ Bundle extras = extrasForInstallResult(request);
+ request.getObserver().onPackageInstalled(request.getName(),
+ request.getReturnCode(), request.getReturnMsg(), extras);
} catch (RemoteException e) {
Slog.i(TAG, "Observer no longer exists.");
}
}
}
- void scheduleDeferredNoKillInstallObserver(PackageInstalledInfo info,
- IPackageInstallObserver2 observer) {
- String packageName = info.mPkg.getPackageName();
- mNoKillInstallObservers.put(packageName, Pair.create(info, observer));
+ void scheduleDeferredNoKillInstallObserver(InstallRequest request) {
+ String packageName = request.getPkg().getPackageName();
+ mNoKillInstallObservers.put(packageName, request);
Message message = mHandler.obtainMessage(DEFERRED_NO_KILL_INSTALL_OBSERVER, packageName);
mHandler.sendMessageDelayed(message, DEFERRED_NO_KILL_INSTALL_OBSERVER_DELAY_MS);
}
@@ -1196,10 +1193,9 @@
delay ? getPruneUnusedSharedLibrariesDelay() : 0);
}
- void scheduleDeferredPendingKillInstallObserver(PackageInstalledInfo info,
- IPackageInstallObserver2 observer) {
- final String packageName = info.mPkg.getPackageName();
- mPendingKillInstallObservers.put(packageName, Pair.create(info, observer));
+ void scheduleDeferredPendingKillInstallObserver(InstallRequest request) {
+ final String packageName = request.getPkg().getPackageName();
+ mPendingKillInstallObservers.put(packageName, request);
final Message message = mHandler.obtainMessage(DEFERRED_PENDING_KILL_INSTALL_OBSERVER,
packageName);
mHandler.sendMessageDelayed(message, DEFERRED_PENDING_KILL_INSTALL_OBSERVER_DELAY_MS);
@@ -1312,21 +1308,22 @@
}
}
- private static Bundle extrasForInstallResult(PackageInstalledInfo res) {
+ private static Bundle extrasForInstallResult(InstallRequest request) {
Bundle extras = null;
- switch (res.mReturnCode) {
+ switch (request.getReturnCode()) {
case PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION: {
extras = new Bundle();
extras.putString(PackageManager.EXTRA_FAILURE_EXISTING_PERMISSION,
- res.mOrigPermission);
+ request.getOrigPermission());
extras.putString(PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE,
- res.mOrigPackage);
+ request.getOrigPackage());
break;
}
case PackageManager.INSTALL_SUCCEEDED: {
extras = new Bundle();
extras.putBoolean(Intent.EXTRA_REPLACING,
- res.mRemovedInfo != null && res.mRemovedInfo.mRemovedPackage != null);
+ request.getRemovedInfo() != null
+ && request.getRemovedInfo().mRemovedPackage != null);
break;
}
}
@@ -3111,14 +3108,14 @@
// state for observers to see the FIRST_LAUNCH signal.
mHandler.post(() -> {
for (int i = 0; i < mRunningInstalls.size(); i++) {
- final PostInstallData data = mRunningInstalls.valueAt(i);
- if (data.res.mReturnCode != PackageManager.INSTALL_SUCCEEDED) {
+ final InstallRequest installRequest = mRunningInstalls.valueAt(i);
+ if (installRequest.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) {
continue;
}
- if (packageName.equals(data.res.mPkg.getPackageName())) {
+ if (packageName.equals(installRequest.getPkg().getPackageName())) {
// right package; but is it for the right user?
- for (int uIndex = 0; uIndex < data.res.mNewUsers.length; uIndex++) {
- if (userId == data.res.mNewUsers[uIndex]) {
+ for (int uIndex = 0; uIndex < installRequest.getNewUsers().length; uIndex++) {
+ if (userId == installRequest.getNewUsers()[uIndex]) {
if (DEBUG_BACKUP) {
Slog.i(TAG, "Package " + packageName
+ " being restored so deferring FIRST_LAUNCH");
diff --git a/services/core/java/com/android/server/pm/PackageRemovedInfo.java b/services/core/java/com/android/server/pm/PackageRemovedInfo.java
index 28ad4b6..3c863d0 100644
--- a/services/core/java/com/android/server/pm/PackageRemovedInfo.java
+++ b/services/core/java/com/android/server/pm/PackageRemovedInfo.java
@@ -28,6 +28,7 @@
import android.os.Bundle;
import android.os.PowerExemptionManager;
import android.util.SparseArray;
+import android.util.SparseIntArray;
import com.android.internal.util.ArrayUtils;
import com.android.server.LocalServices;
@@ -42,8 +43,8 @@
int[] mRemovedUsers = null;
int[] mBroadcastUsers = null;
int[] mInstantUserIds = null;
- SparseArray<Integer> mInstallReasons;
- SparseArray<Integer> mUninstallReasons;
+ SparseIntArray mInstallReasons;
+ SparseIntArray mUninstallReasons;
boolean mIsRemovedPackageSystemUpdate = false;
boolean mIsUpdate;
boolean mDataRemoved;
diff --git a/services/core/java/com/android/server/pm/PostInstallData.java b/services/core/java/com/android/server/pm/PostInstallData.java
deleted file mode 100644
index 65d2a65..0000000
--- a/services/core/java/com/android/server/pm/PostInstallData.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 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 com.android.server.pm;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-
-/**
- * Record-keeping of restore-after-install operations that are currently in flight
- * between the Package Manager and the Backup Manager
- */
-public final class PostInstallData {
- @Nullable
- public final InstallArgs args;
- @NonNull
- public final PackageInstalledInfo res;
- @Nullable
- public final Runnable mPostInstallRunnable;
-
- PostInstallData(@Nullable InstallArgs args, @NonNull PackageInstalledInfo res,
- @Nullable Runnable postInstallRunnable) {
- this.args = args;
- this.res = res;
- mPostInstallRunnable = postInstallRunnable;
- }
-}
diff --git a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
index 0f7c652..165b450 100644
--- a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
+++ b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
@@ -77,11 +77,10 @@
}
// the following may be null if we're just reconciling on boot (and not during install)
- final InstallArgs installArgs = request.mInstallArgs.get(installPackageName);
- final PackageInstalledInfo res = request.mInstallResults.get(installPackageName);
+ final InstallRequest installRequest = request.mInstallRequests.get(installPackageName);
final PrepareResult prepareResult = request.mPreparedPackages.get(installPackageName);
- final boolean isInstall = installArgs != null;
- if (isInstall && (res == null || prepareResult == null)) {
+ final boolean isInstall = installRequest != null;
+ if (isInstall && prepareResult == null) {
throw new ReconcileFailure("Reconcile arguments are not balanced for "
+ installPackageName + "!");
}
@@ -92,7 +91,8 @@
final boolean killApp = (scanResult.mRequest.mScanFlags & SCAN_DONT_KILL_APP) == 0;
final int deleteFlags = PackageManager.DELETE_KEEP_DATA
| (killApp ? 0 : PackageManager.DELETE_DONT_KILL_APP);
- deletePackageAction = DeletePackageHelper.mayDeletePackageLocked(res.mRemovedInfo,
+ deletePackageAction = DeletePackageHelper.mayDeletePackageLocked(
+ installRequest.getRemovedInfo(),
prepareResult.mOriginalPs, prepareResult.mDisabledPs,
deleteFlags, null /* all users */);
if (deletePackageAction == null) {
@@ -146,8 +146,8 @@
request.mVersionInfos.get(installPackageName);
final boolean compareCompat = isCompatSignatureUpdateNeeded(versionInfo);
final boolean compareRecover = isRecoverSignatureUpdateNeeded(versionInfo);
- final boolean isRollback = installArgs != null
- && installArgs.mInstallReason == PackageManager.INSTALL_REASON_ROLLBACK;
+ final boolean isRollback = installRequest != null
+ && installRequest.isRollback();
final boolean compatMatch =
PackageManagerServiceUtils.verifySignatures(signatureCheckPs,
sharedUserSetting, disabledPkgSetting,
@@ -257,8 +257,8 @@
}
result.put(installPackageName,
- new ReconciledPackage(request, installArgs, scanResult.mPkgSetting,
- res, request.mPreparedPackages.get(installPackageName), scanResult,
+ new ReconciledPackage(request, installRequest, scanResult.mPkgSetting,
+ request.mPreparedPackages.get(installPackageName), scanResult,
deletePackageAction, allowedSharedLibInfos, signingDetails,
sharedUserSignaturesChanged, removeAppKeySetData));
}
diff --git a/services/core/java/com/android/server/pm/ReconcileRequest.java b/services/core/java/com/android/server/pm/ReconcileRequest.java
index 84b292f..3568c15 100644
--- a/services/core/java/com/android/server/pm/ReconcileRequest.java
+++ b/services/core/java/com/android/server/pm/ReconcileRequest.java
@@ -34,20 +34,17 @@
public final Map<String, ScanResult> mScannedPackages;
public final Map<String, AndroidPackage> mAllPackages;
- public final Map<String, InstallArgs> mInstallArgs;
- public final Map<String, PackageInstalledInfo> mInstallResults;
+ public final Map<String, InstallRequest> mInstallRequests;
public final Map<String, PrepareResult> mPreparedPackages;
public final Map<String, Settings.VersionInfo> mVersionInfos;
ReconcileRequest(Map<String, ScanResult> scannedPackages,
- Map<String, InstallArgs> installArgs,
- Map<String, PackageInstalledInfo> installResults,
+ Map<String, InstallRequest> installRequests,
Map<String, PrepareResult> preparedPackages,
Map<String, AndroidPackage> allPackages,
Map<String, Settings.VersionInfo> versionInfos) {
mScannedPackages = scannedPackages;
- mInstallArgs = installArgs;
- mInstallResults = installResults;
+ mInstallRequests = installRequests;
mPreparedPackages = preparedPackages;
mAllPackages = allPackages;
mVersionInfos = versionInfos;
@@ -56,7 +53,7 @@
ReconcileRequest(Map<String, ScanResult> scannedPackages,
Map<String, AndroidPackage> allPackages,
Map<String, Settings.VersionInfo> versionInfos) {
- this(scannedPackages, Collections.emptyMap(), Collections.emptyMap(),
+ this(scannedPackages, Collections.emptyMap(),
Collections.emptyMap(), allPackages, versionInfos);
}
}
diff --git a/services/core/java/com/android/server/pm/ReconciledPackage.java b/services/core/java/com/android/server/pm/ReconciledPackage.java
index 3bb5a1b..d4da6c7 100644
--- a/services/core/java/com/android/server/pm/ReconciledPackage.java
+++ b/services/core/java/com/android/server/pm/ReconciledPackage.java
@@ -37,9 +37,8 @@
public final PackageSetting mPkgSetting;
public final ScanResult mScanResult;
// TODO: Remove install-specific details from the reconcile result
- public final PackageInstalledInfo mInstallResult;
@Nullable public final PrepareResult mPrepareResult;
- @Nullable public final InstallArgs mInstallArgs;
+ @Nullable public final InstallRequest mInstallRequest;
public final DeletePackageAction mDeletePackageAction;
public final List<SharedLibraryInfo> mAllowedSharedLibraryInfos;
public final SigningDetails mSigningDetails;
@@ -48,9 +47,8 @@
public final boolean mRemoveAppKeySetData;
ReconciledPackage(ReconcileRequest request,
- InstallArgs installArgs,
+ InstallRequest installRequest,
PackageSetting pkgSetting,
- PackageInstalledInfo installResult,
PrepareResult prepareResult,
ScanResult scanResult,
DeletePackageAction deletePackageAction,
@@ -59,9 +57,8 @@
boolean sharedUserSignaturesChanged,
boolean removeAppKeySetData) {
mRequest = request;
- mInstallArgs = installArgs;
+ mInstallRequest = installRequest;
mPkgSetting = pkgSetting;
- mInstallResult = installResult;
mPrepareResult = prepareResult;
mScanResult = scanResult;
mDeletePackageAction = deletePackageAction;
diff --git a/services/core/java/com/android/server/pm/RemovePackageHelper.java b/services/core/java/com/android/server/pm/RemovePackageHelper.java
index a025965..55d4b36 100644
--- a/services/core/java/com/android/server/pm/RemovePackageHelper.java
+++ b/services/core/java/com/android/server/pm/RemovePackageHelper.java
@@ -385,29 +385,29 @@
}
}
- void cleanUpResources(InstallArgs args) {
+ void cleanUpResources(File codeFile, String[] instructionSets) {
synchronized (mPm.mInstallLock) {
- cleanUpResourcesLI(args);
+ cleanUpResourcesLI(codeFile, instructionSets);
}
}
// Need installer lock especially for dex file removal.
@GuardedBy("mPm.mInstallLock")
- private void cleanUpResourcesLI(InstallArgs args) {
+ private void cleanUpResourcesLI(File codeFile, String[] instructionSets) {
// Try enumerating all code paths before deleting
List<String> allCodePaths = Collections.EMPTY_LIST;
- if (args.mCodeFile != null && args.mCodeFile.exists()) {
+ if (codeFile != null && codeFile.exists()) {
final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing();
final ParseResult<PackageLite> result = ApkLiteParseUtils.parsePackageLite(
- input.reset(), args.mCodeFile, /* flags */ 0);
+ input.reset(), codeFile, /* flags */ 0);
if (result.isSuccess()) {
// Ignore error; we tried our best
allCodePaths = result.getResult().getAllApkPaths();
}
}
- removeCodePathLI(args.mCodeFile);
- removeDexFilesLI(allCodePaths, args.mInstructionSets);
+ removeCodePathLI(codeFile);
+ removeDexFilesLI(allCodePaths, instructionSets);
}
@GuardedBy("mPm.mInstallLock")
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 073776f..37abeac 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -781,7 +781,7 @@
for (String voiceInteractPackageName : voiceInteractPackageNames) {
grantPermissionsToSystemPackage(pm, voiceInteractPackageName, userId,
CONTACTS_PERMISSIONS, CALENDAR_PERMISSIONS, MICROPHONE_PERMISSIONS,
- PHONE_PERMISSIONS, SMS_PERMISSIONS, ALWAYS_LOCATION_PERMISSIONS,
+ PHONE_PERMISSIONS, SMS_PERMISSIONS, COARSE_BACKGROUND_LOCATION_PERMISSIONS,
NEARBY_DEVICES_PERMISSIONS, NOTIFICATION_PERMISSIONS);
}
}
diff --git a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
index 6078d4a..8a82d6e 100644
--- a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
+++ b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
@@ -34,6 +34,7 @@
import android.content.pm.ServiceInfo;
import android.content.pm.SigningDetails;
import android.os.Bundle;
+import android.processor.immutability.Immutable;
import android.util.ArraySet;
import android.util.Pair;
import android.util.SparseArray;
@@ -65,6 +66,7 @@
* @hide
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+@Immutable
public interface AndroidPackage {
/**
@@ -86,6 +88,7 @@
* @see ActivityInfo
* @see PackageInfo#activities
*/
+ @Immutable.Ignore
@NonNull
List<ParsedActivity> getActivities();
@@ -101,6 +104,7 @@
/**
* @see R.styleable#AndroidManifestApexSystemService
*/
+ @Immutable.Ignore
@NonNull
List<ParsedApexSystemService> getApexSystemServices();
@@ -111,6 +115,7 @@
@Nullable
String getAppComponentFactory();
+ @Immutable.Ignore
@NonNull
List<ParsedAttribution> getAttributions();
@@ -189,6 +194,7 @@
* @see PackageInfo#configPreferences
* @see R.styleable#AndroidManifestUsesConfiguration
*/
+ @Immutable.Ignore
@NonNull
List<ConfigurationInfo> getConfigPreferences();
@@ -208,6 +214,7 @@
* @see PackageInfo#featureGroups
* @see R.styleable#AndroidManifestUsesFeature
*/
+ @Immutable.Ignore
@NonNull
List<FeatureGroupInfo> getFeatureGroups();
@@ -247,6 +254,7 @@
* @see InstrumentationInfo
* @see PackageInfo#instrumentation
*/
+ @Immutable.Ignore
@NonNull
List<ParsedInstrumentation> getInstrumentations();
@@ -257,6 +265,7 @@
* @see R.styleable#AndroidManifestKeySet
* @see R.styleable#AndroidManifestPublicKey
*/
+ @Immutable.Ignore
@NonNull
Map<String, ArraySet<PublicKey>> getKeySetMapping();
@@ -341,6 +350,7 @@
/**
* TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?)
*/
+ @Immutable.Ignore
@Nullable
Bundle getMetaData();
@@ -356,6 +366,7 @@
/**
* @see R.styleable#AndroidManifestExtensionSdk
*/
+ @Immutable.Ignore
@Nullable
SparseIntArray getMinExtensionVersions();
@@ -464,6 +475,7 @@
/**
* @see android.content.pm.PermissionGroupInfo
*/
+ @Immutable.Ignore
@NonNull
List<ParsedPermissionGroup> getPermissionGroups();
@@ -471,6 +483,7 @@
* @see PermissionInfo
* @see PackageInfo#permissions
*/
+ @Immutable.Ignore
@NonNull
List<ParsedPermission> getPermissions();
@@ -480,6 +493,7 @@
* Map of component className to intent info inside that component. TODO(b/135203078): Is this
* actually used/working?
*/
+ @Immutable.Ignore
@NonNull
List<Pair<String, ParsedIntentInfo>> getPreferredActivityFilters();
@@ -493,12 +507,14 @@
/**
* @see android.content.pm.ProcessInfo
*/
+ @Immutable.Ignore
@NonNull
Map<String, ParsedProcess> getProcesses();
/**
* Returns the properties set on the application
*/
+ @Immutable.Ignore
@NonNull
Map<String, PackageManager.Property> getProperties();
@@ -522,6 +538,7 @@
* @see ProviderInfo
* @see PackageInfo#providers
*/
+ @Immutable.Ignore
@NonNull
List<ParsedProvider> getProviders();
@@ -530,6 +547,7 @@
*
* @see R.styleable#AndroidManifestQueriesIntent
*/
+ @Immutable.Ignore
@NonNull
List<Intent> getQueriesIntents();
@@ -566,6 +584,7 @@
* @see ActivityInfo
* @see PackageInfo#receivers
*/
+ @Immutable.Ignore
@NonNull
List<ParsedActivity> getReceivers();
@@ -573,6 +592,7 @@
* @see PackageInfo#reqFeatures
* @see R.styleable#AndroidManifestUsesFeature
*/
+ @Immutable.Ignore
@NonNull
List<FeatureInfo> getRequestedFeatures();
@@ -615,6 +635,7 @@
*
* @see R.styleable#AndroidManifestRestrictUpdate
*/
+ @Immutable.Ignore
@Nullable
byte[] getRestrictUpdateHash();
@@ -662,6 +683,7 @@
* @see ServiceInfo
* @see PackageInfo#services
*/
+ @Immutable.Ignore
@NonNull
List<ParsedService> getServices();
@@ -682,6 +704,7 @@
* The signature data of all APKs in this package, which must be exactly the same across the
* base and splits.
*/
+ @Immutable.Ignore
@NonNull
SigningDetails getSigningDetails();
@@ -689,6 +712,7 @@
* @see ApplicationInfo#splitClassLoaderNames
* @see R.styleable#AndroidManifestApplication_classLoader
*/
+ @Immutable.Ignore
@Nullable
String[] getSplitClassLoaderNames();
@@ -696,18 +720,21 @@
* @see ApplicationInfo#splitSourceDirs
* @see ApplicationInfo#getSplitCodePaths
*/
+ @Immutable.Ignore
@NonNull
String[] getSplitCodePaths();
/**
* @see ApplicationInfo#splitDependencies
*/
+ @Immutable.Ignore
@NonNull
SparseArray<int[]> getSplitDependencies();
/**
* Flags of any split APKs; ordered by parsed splitName
*/
+ @Immutable.Ignore
@Nullable
int[] getSplitFlags();
@@ -717,12 +744,14 @@
* @see ApplicationInfo#splitNames
* @see PackageInfo#splitNames
*/
+ @Immutable.Ignore
@NonNull
String[] getSplitNames();
/**
* @see PackageInfo#splitRevisionCodes
*/
+ @Immutable.Ignore
@NonNull
int[] getSplitRevisionCodes();
@@ -818,6 +847,7 @@
@NonNull
List<String> getUsesOptionalNativeLibraries();
+ @Immutable.Ignore
@NonNull
List<ParsedUsesPermission> getUsesPermissions();
@@ -832,12 +862,14 @@
/**
* @see R.styleable#AndroidManifestUsesSdkLibrary_certDigest
*/
+ @Immutable.Ignore
@Nullable
String[][] getUsesSdkLibrariesCertDigests();
/**
* @see R.styleable#AndroidManifestUsesSdkLibrary_versionMajor
*/
+ @Immutable.Ignore
@Nullable
long[] getUsesSdkLibrariesVersionsMajor();
@@ -852,12 +884,14 @@
/**
* @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest
*/
+ @Immutable.Ignore
@Nullable
String[][] getUsesStaticLibrariesCertDigests();
/**
* @see R.styleable#AndroidManifestUsesStaticLibrary_version
*/
+ @Immutable.Ignore
@Nullable
long[] getUsesStaticLibrariesVersions();
diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java
index f0e386c..12e9671 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageState.java
@@ -25,6 +25,7 @@
import android.content.pm.PackageManager;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.SigningInfo;
+import android.processor.immutability.Immutable;
import android.util.SparseArray;
import com.android.server.pm.PackageSetting;
@@ -55,6 +56,7 @@
* @hide
*/
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+@Immutable
public interface PackageState {
/**
@@ -109,6 +111,7 @@
* Keys are indexes into the array represented by {@link PackageManager.NotifyReason}, values
* are in epoch milliseconds.
*/
+ @Immutable.Ignore
@Size(PackageManager.NOTIFY_PACKAGE_USE_REASONS_COUNT)
@NonNull
long[] getLastPackageUsageTime();
@@ -172,9 +175,11 @@
*/
int getSharedUserAppId();
+ @Immutable.Ignore
@NonNull
SigningInfo getSigningInfo();
+ @Immutable.Ignore
@NonNull
SparseArray<? extends PackageUserState> getUserStates();
@@ -199,30 +204,35 @@
/**
* @see R.styleable#AndroidManifestUsesLibrary
*/
+ @Immutable.Ignore
@NonNull
List<SharedLibraryInfo> getUsesLibraryInfos();
/**
* @see R.styleable#AndroidManifestUsesSdkLibrary
*/
+ @Immutable.Ignore
@NonNull
String[] getUsesSdkLibraries();
/**
* @see R.styleable#AndroidManifestUsesSdkLibrary_versionMajor
*/
+ @Immutable.Ignore
@NonNull
long[] getUsesSdkLibrariesVersionsMajor();
/**
* @see R.styleable#AndroidManifestUsesStaticLibrary
*/
+ @Immutable.Ignore
@NonNull
String[] getUsesStaticLibraries();
/**
* @see R.styleable#AndroidManifestUsesStaticLibrary_version
*/
+ @Immutable.Ignore
@NonNull
long[] getUsesStaticLibrariesVersions();
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserState.java b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
index e19e555..2d25385 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
@@ -21,6 +21,7 @@
import android.content.pm.PackageManager;
import android.content.pm.overlay.OverlayPaths;
import android.os.UserHandle;
+import android.processor.immutability.Immutable;
import android.util.ArraySet;
import java.util.Map;
@@ -35,6 +36,7 @@
*/
// TODO(b/173807334): Expose API
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
+@Immutable.Ignore(reason = "Exposed through PackageState pending refactor")
public interface PackageUserState {
/** @hide */
diff --git a/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java b/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java
index ba85e07..c66a5c1 100644
--- a/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java
+++ b/services/core/java/com/android/server/pm/pkg/component/ParsedProvider.java
@@ -20,6 +20,7 @@
import android.annotation.Nullable;
import android.content.pm.PathPermission;
import android.os.PatternMatcher;
+import android.processor.immutability.Immutable;
import java.util.List;
@@ -34,12 +35,14 @@
boolean isMultiProcess();
+ @Immutable.Ignore
@NonNull
List<PathPermission> getPathPermissions();
@Nullable
String getReadPermission();
+ @Immutable.Ignore
@NonNull
List<PatternMatcher> getUriPermissionPatterns();
diff --git a/services/core/java/com/android/server/utils/AlarmQueue.java b/services/core/java/com/android/server/utils/AlarmQueue.java
index 41373cd..09ba195 100644
--- a/services/core/java/com/android/server/utils/AlarmQueue.java
+++ b/services/core/java/com/android/server/utils/AlarmQueue.java
@@ -64,8 +64,11 @@
* The pair is the key and its associated alarm time (in the elapsed realtime timebase).
*/
private static class AlarmPriorityQueue<Q> extends PriorityQueue<Pair<Q, Long>> {
+ private static final Comparator<Pair<?, Long>> sTimeComparator =
+ (o1, o2) -> Long.compare(o1.second, o2.second);
+
AlarmPriorityQueue() {
- super(1, Comparator.comparingLong(o -> o.second));
+ super(1, sTimeComparator);
}
/**
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index f8cbd8b3d..7067ae4 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -197,10 +197,16 @@
* launched successfully.
*/
static final class LaunchingState {
- /** The device uptime of {@link #notifyActivityLaunching}. */
- private final long mCurrentUpTimeMs = SystemClock.uptimeMillis();
- /** The timestamp of {@link #notifyActivityLaunching}. */
- private long mCurrentTransitionStartTimeNs;
+ /**
+ * The device uptime of {@link #notifyActivityLaunching}. It can be used as a key for
+ * observer to identify which callbacks belong to a launch event.
+ */
+ final long mStartUptimeNs = SystemClock.uptimeNanos();
+ /**
+ * The timestamp of {@link #notifyActivityLaunching}. It is used to provide the time
+ * relative to the wall-time.
+ */
+ final long mStartRealtimeNs = SystemClock.elapsedRealtimeNanos();
/** Non-null when a {@link TransitionInfo} is created for this state. */
private TransitionInfo mAssociatedTransitionInfo;
/** The sequence id for trace. It is used to map the traces before resolving intent. */
@@ -263,13 +269,7 @@
* @see LaunchingState#mAssociatedTransitionInfo
*/
final LaunchingState mLaunchingState;
- /**
- * The timestamp of the first {@link #notifyActivityLaunching}. It can be used as a key for
- * observer to identify which callbacks belong to a launch event.
- */
- final long mTransitionStartTimeNs;
- /** The device uptime in millis when this transition info is created. */
- final long mTransitionDeviceUptimeMs;
+
/** The type can be cold (new process), warm (new activity), or hot (bring to front). */
final int mTransitionType;
/** Whether the process was already running when the transition started. */
@@ -289,11 +289,11 @@
@SourceInfo.SourceType int mSourceType;
/** The time from the source event (e.g. touch) to {@link #notifyActivityLaunching}. */
int mSourceEventDelayMs = INVALID_DELAY;
- /** The time from {@link #mTransitionStartTimeNs} to {@link #notifyTransitionStarting}. */
+ /** The time from {@link #notifyActivityLaunching} to {@link #notifyTransitionStarting}. */
int mCurrentTransitionDelayMs;
- /** The time from {@link #mTransitionStartTimeNs} to {@link #notifyStartingWindowDrawn}. */
+ /** The time from {@link #notifyActivityLaunching} to {@link #notifyStartingWindowDrawn}. */
int mStartingWindowDelayMs = INVALID_DELAY;
- /** The time from {@link #mTransitionStartTimeNs} to {@link #notifyBindApplication}. */
+ /** The time from {@link #notifyActivityLaunching} to {@link #notifyBindApplication}. */
int mBindApplicationDelayMs = INVALID_DELAY;
/** Elapsed time from when we launch an activity to when its windows are drawn. */
int mWindowsDrawnDelayMs;
@@ -339,13 +339,11 @@
ActivityOptions options, int transitionType, boolean processRunning,
boolean processSwitch, int processState, int processOomAdj) {
mLaunchingState = launchingState;
- mTransitionStartTimeNs = launchingState.mCurrentTransitionStartTimeNs;
mTransitionType = transitionType;
mProcessRunning = processRunning;
mProcessSwitch = processSwitch;
mProcessState = processState;
mProcessOomAdj = processOomAdj;
- mTransitionDeviceUptimeMs = launchingState.mCurrentUpTimeMs;
setLatestLaunchedActivity(r);
// The launching state can be reused by consecutive launch. Its original association
// shouldn't be changed by a separated transition.
@@ -356,8 +354,8 @@
final SourceInfo sourceInfo = options.getSourceInfo();
if (sourceInfo != null) {
mSourceType = sourceInfo.type;
- mSourceEventDelayMs =
- (int) (launchingState.mCurrentUpTimeMs - sourceInfo.eventTimeMs);
+ mSourceEventDelayMs = (int) (TimeUnit.NANOSECONDS.toMillis(
+ launchingState.mStartUptimeNs) - sourceInfo.eventTimeMs);
}
}
}
@@ -403,12 +401,13 @@
}
int calculateCurrentDelay() {
- return calculateDelay(SystemClock.elapsedRealtimeNanos());
+ return calculateDelay(SystemClock.uptimeNanos());
}
int calculateDelay(long timestampNs) {
// Shouldn't take more than 25 days to launch an app, so int is fine here.
- return (int) TimeUnit.NANOSECONDS.toMillis(timestampNs - mTransitionStartTimeNs);
+ return (int) TimeUnit.NANOSECONDS.toMillis(
+ timestampNs - mLaunchingState.mStartUptimeNs);
}
@Override
@@ -583,7 +582,6 @@
*/
LaunchingState notifyActivityLaunching(Intent intent, @Nullable ActivityRecord caller,
int callingUid) {
- final long transitionStartTimeNs = SystemClock.elapsedRealtimeNanos();
TransitionInfo existingInfo = null;
if (callingUid != IGNORE_CALLER) {
// Associate the launching event to an active transition if the caller is found in its
@@ -608,12 +606,10 @@
if (existingInfo == null) {
final LaunchingState launchingState = new LaunchingState();
- launchingState.mCurrentTransitionStartTimeNs = transitionStartTimeNs;
// Only notify the observer for a new launching event.
- launchObserverNotifyIntentStarted(intent, transitionStartTimeNs);
+ launchObserverNotifyIntentStarted(intent, launchingState.mStartUptimeNs);
return launchingState;
}
- existingInfo.mLaunchingState.mCurrentTransitionStartTimeNs = transitionStartTimeNs;
return existingInfo.mLaunchingState;
}
@@ -716,7 +712,7 @@
launchObserverNotifyActivityLaunched(newInfo);
} else {
// As abort for no process switch.
- launchObserverNotifyIntentFailed(newInfo.mTransitionStartTimeNs);
+ launchObserverNotifyIntentFailed(newInfo.mLaunchingState.mStartUptimeNs);
}
scheduleCheckActivityToBeDrawnIfSleeping(launchedActivity);
@@ -749,9 +745,10 @@
* to invisible (removed from active transition) or it was already drawn.
*/
@Nullable
- TransitionInfoSnapshot notifyWindowsDrawn(@NonNull ActivityRecord r, long timestampNs) {
+ TransitionInfoSnapshot notifyWindowsDrawn(@NonNull ActivityRecord r) {
if (DEBUG_METRICS) Slog.i(TAG, "notifyWindowsDrawn " + r);
+ final long timestampNs = SystemClock.uptimeNanos();
final TransitionInfo info = getActiveTransitionInfo(r);
if (info == null || info.mIsDrawn) {
if (DEBUG_METRICS) Slog.i(TAG, "notifyWindowsDrawn not pending drawn " + info);
@@ -778,7 +775,7 @@
}
if (DEBUG_METRICS) Slog.i(TAG, "notifyStartingWindowDrawn " + r);
info.mLoggedStartingWindowDrawn = true;
- info.mStartingWindowDelayMs = info.calculateDelay(SystemClock.elapsedRealtimeNanos());
+ info.mStartingWindowDelayMs = info.calculateCurrentDelay();
}
/**
@@ -790,7 +787,7 @@
void notifyTransitionStarting(ArrayMap<WindowContainer, Integer> activityToReason) {
if (DEBUG_METRICS) Slog.i(TAG, "notifyTransitionStarting " + activityToReason);
- final long timestampNs = SystemClock.elapsedRealtimeNanos();
+ final long timestampNs = SystemClock.uptimeNanos();
for (int index = activityToReason.size() - 1; index >= 0; index--) {
final WindowContainer<?> wc = activityToReason.keyAt(index);
final ActivityRecord activity = wc.asActivityRecord();
@@ -948,7 +945,7 @@
}
if (DEBUG_METRICS) Slog.i(TAG, "abort launch cause=" + cause);
state.stopTrace(true /* abort */, null /* endInfo */);
- launchObserverNotifyIntentFailed(state.mCurrentTransitionStartTimeNs);
+ launchObserverNotifyIntentFailed(state.mStartUptimeNs);
}
/** Aborts tracking of current launch metrics. */
@@ -1013,13 +1010,13 @@
// This will avoid any races with other operations that modify the ActivityRecord.
final TransitionInfoSnapshot infoSnapshot = new TransitionInfoSnapshot(info);
if (info.isInterestingToLoggerAndObserver()) {
- final long timestamp = info.mTransitionStartTimeNs;
- final long uptime = info.mTransitionDeviceUptimeMs;
+ final long timestampNs = info.mLaunchingState.mStartRealtimeNs;
+ final long uptimeNs = info.mLaunchingState.mStartUptimeNs;
final int transitionDelay = info.mCurrentTransitionDelayMs;
final int processState = info.mProcessState;
final int processOomAdj = info.mProcessOomAdj;
mLoggerHandler.post(() -> logAppTransition(
- timestamp, uptime, transitionDelay, infoSnapshot, isHibernating,
+ timestampNs, uptimeNs, transitionDelay, infoSnapshot, isHibernating,
processState, processOomAdj));
}
mLoggerHandler.post(() -> logAppDisplayed(infoSnapshot));
@@ -1031,7 +1028,7 @@
}
// This gets called on another thread without holding the activity manager lock.
- private void logAppTransition(long transitionStartTimeNs, long transitionDeviceUptimeMs,
+ private void logAppTransition(long transitionStartTimeNs, long transitionDeviceUptimeNs,
int currentTransitionDelayMs, TransitionInfoSnapshot info, boolean isHibernating,
int processState, int processOomAdj) {
final LogMaker builder = new LogMaker(APP_TRANSITION);
@@ -1049,7 +1046,7 @@
}
builder.addTaggedData(APP_TRANSITION_IS_EPHEMERAL, isInstantApp ? 1 : 0);
builder.addTaggedData(APP_TRANSITION_DEVICE_UPTIME_SECONDS,
- TimeUnit.MILLISECONDS.toSeconds(transitionDeviceUptimeMs));
+ TimeUnit.NANOSECONDS.toSeconds(transitionDeviceUptimeNs));
builder.addTaggedData(APP_TRANSITION_DELAY_MS, currentTransitionDelayMs);
builder.setSubtype(info.reason);
if (info.startingWindowDelayMs != INVALID_DELAY) {
@@ -1188,10 +1185,11 @@
return null;
}
- final long currentTimestampNs = SystemClock.elapsedRealtimeNanos();
+ final long currentTimestampNs = SystemClock.uptimeNanos();
final long startupTimeMs = info.mPendingFullyDrawn != null
? info.mWindowsDrawnDelayMs
- : TimeUnit.NANOSECONDS.toMillis(currentTimestampNs - info.mTransitionStartTimeNs);
+ : TimeUnit.NANOSECONDS.toMillis(
+ currentTimestampNs - info.mLaunchingState.mStartUptimeNs);
final TransitionInfoSnapshot infoSnapshot =
new TransitionInfoSnapshot(info, r, (int) startupTimeMs);
mLoggerHandler.post(() -> logAppFullyDrawn(infoSnapshot));
@@ -1603,7 +1601,7 @@
}
info.mLaunchTraceName = "launching: " + info.mLastLaunchedActivity.packageName;
Trace.asyncTraceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, info.mLaunchTraceName,
- (int) info.mTransitionStartTimeNs /* cookie */);
+ (int) info.mLaunchingState.mStartRealtimeNs /* cookie */);
}
/** Stops trace for the launch is completed or cancelled. */
@@ -1613,7 +1611,7 @@
return;
}
Trace.asyncTraceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER, info.mLaunchTraceName,
- (int) info.mTransitionStartTimeNs /* cookie */);
+ (int) info.mLaunchingState.mStartRealtimeNs /* cookie */);
info.mLaunchTraceName = null;
}
@@ -1658,7 +1656,7 @@
convertTransitionTypeToLaunchObserverTemperature(info.mTransitionType);
// Beginning a launch is timing sensitive and so should be observed as soon as possible.
- mLaunchObserver.onActivityLaunched(info.mTransitionStartTimeNs,
+ mLaunchObserver.onActivityLaunched(info.mLaunchingState.mStartUptimeNs,
info.mLastLaunchedActivity.mActivityComponent, temperature);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
@@ -1670,7 +1668,7 @@
private void launchObserverNotifyReportFullyDrawn(TransitionInfo info, long timestampNs) {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
"MetricsLogger:launchObserverNotifyReportFullyDrawn");
- mLaunchObserver.onReportFullyDrawn(info.mTransitionStartTimeNs, timestampNs);
+ mLaunchObserver.onReportFullyDrawn(info.mLaunchingState.mStartUptimeNs, timestampNs);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
@@ -1682,7 +1680,7 @@
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
"MetricsLogger:launchObserverNotifyActivityLaunchCancelled");
- mLaunchObserver.onActivityLaunchCancelled(info.mTransitionStartTimeNs);
+ mLaunchObserver.onActivityLaunchCancelled(info.mLaunchingState.mStartUptimeNs);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
@@ -1695,7 +1693,7 @@
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
"MetricsLogger:launchObserverNotifyActivityLaunchFinished");
- mLaunchObserver.onActivityLaunchFinished(info.mTransitionStartTimeNs,
+ mLaunchObserver.onActivityLaunchFinished(info.mLaunchingState.mStartUptimeNs,
info.mLastLaunchedActivity.mActivityComponent, timestampNs);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 0637ed3..98d3adc 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6549,9 +6549,9 @@
}
/** Called when the windows associated app window container are drawn. */
- private void onWindowsDrawn(long timestampNs) {
+ private void onWindowsDrawn() {
final TransitionInfoSnapshot info = mTaskSupervisor
- .getActivityMetricsLogger().notifyWindowsDrawn(this, timestampNs);
+ .getActivityMetricsLogger().notifyWindowsDrawn(this);
final boolean validInfo = info != null;
final int windowsDrawnDelayMs = validInfo ? info.windowsDrawnDelayMs : INVALID_DELAY;
final @WaitResult.LaunchState int launchState =
@@ -6678,7 +6678,7 @@
+ numInteresting + " visible=" + numVisible);
if (nowDrawn != mReportedDrawn) {
if (nowDrawn) {
- onWindowsDrawn(SystemClock.elapsedRealtimeNanos());
+ onWindowsDrawn();
}
mReportedDrawn = nowDrawn;
}
@@ -6789,27 +6789,37 @@
* @return True if input dispatching should be aborted.
*/
public boolean inputDispatchingTimedOut(TimeoutRecord timeoutRecord, int windowPid) {
- ActivityRecord anrActivity;
- WindowProcessController anrApp;
- boolean blameActivityProcess;
- synchronized (mAtmService.mGlobalLock) {
- anrActivity = getWaitingHistoryRecordLocked();
- anrApp = app;
- blameActivityProcess = hasProcess()
- && (app.getPid() == windowPid || windowPid == INVALID_PID);
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+ "ActivityRecord#inputDispatchingTimedOut()");
+ ActivityRecord anrActivity;
+ WindowProcessController anrApp;
+ boolean blameActivityProcess;
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockStarted();
+ synchronized (mAtmService.mGlobalLock) {
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockEnded();
+ anrActivity = getWaitingHistoryRecordLocked();
+ anrApp = app;
+ blameActivityProcess = hasProcess()
+ && (app.getPid() == windowPid || windowPid == INVALID_PID);
+ }
+
+ if (blameActivityProcess) {
+ return mAtmService.mAmInternal.inputDispatchingTimedOut(anrApp.mOwner,
+ anrActivity.shortComponentName, anrActivity.info.applicationInfo,
+ shortComponentName, app, false, timeoutRecord);
+ } else {
+ // In this case another process added windows using this activity token.
+ // So, we call the generic service input dispatch timed out method so
+ // that the right process is blamed.
+ long timeoutMillis = mAtmService.mAmInternal.inputDispatchingTimedOut(
+ windowPid, false /* aboveSystem */, timeoutRecord);
+ return timeoutMillis <= 0;
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- if (blameActivityProcess) {
- return mAtmService.mAmInternal.inputDispatchingTimedOut(anrApp.mOwner,
- anrActivity.shortComponentName, anrActivity.info.applicationInfo,
- shortComponentName, app, false, timeoutRecord);
- } else {
- // In this case another process added windows using this activity token. So, we call the
- // generic service input dispatch timed out method so that the right process is blamed.
- long timeoutMillis = mAtmService.mAmInternal.inputDispatchingTimedOut(
- windowPid, false /* aboveSystem */, timeoutRecord);
- return timeoutMillis <= 0;
- }
}
private ActivityRecord getWaitingHistoryRecordLocked() {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 8f5d838..e1f40a8 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -5296,7 +5296,7 @@
if (app != null && app.getPid() > 0) {
ArrayList<Integer> firstPids = new ArrayList<Integer>();
firstPids.add(app.getPid());
- dumpStackTraces(tracesFile.getAbsolutePath(), firstPids, null, null);
+ dumpStackTraces(tracesFile.getAbsolutePath(), firstPids, null, null, null);
}
File lastTracesFile = null;
diff --git a/services/core/java/com/android/server/wm/AnrController.java b/services/core/java/com/android/server/wm/AnrController.java
index 01098de..df72260 100644
--- a/services/core/java/com/android/server/wm/AnrController.java
+++ b/services/core/java/com/android/server/wm/AnrController.java
@@ -27,6 +27,7 @@
import android.os.IBinder;
import android.os.Process;
import android.os.SystemClock;
+import android.os.Trace;
import android.util.ArrayMap;
import android.util.Slog;
import android.util.SparseArray;
@@ -64,47 +65,55 @@
void notifyAppUnresponsive(InputApplicationHandle applicationHandle,
TimeoutRecord timeoutRecord) {
- preDumpIfLockTooSlow();
- final ActivityRecord activity;
- synchronized (mService.mGlobalLock) {
- activity = ActivityRecord.forTokenLocked(applicationHandle.token);
- if (activity == null) {
- Slog.e(TAG_WM, "Unknown app appToken:" + applicationHandle.name
- + ". Dropping notifyNoFocusedWindowAnr request");
- return;
- }
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "notifyAppUnresponsive()");
+ preDumpIfLockTooSlow();
+ final ActivityRecord activity;
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockStarted();
+ synchronized (mService.mGlobalLock) {
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockEnded();
+ activity = ActivityRecord.forTokenLocked(applicationHandle.token);
+ if (activity == null) {
+ Slog.e(TAG_WM, "Unknown app appToken:" + applicationHandle.name
+ + ". Dropping notifyNoFocusedWindowAnr request");
+ return;
+ }
- // App is unresponsive, but we are actively trying to give focus to a window.
- // Blame the window if possible since the window may not belong to the app.
- DisplayContent display = mService.mRoot.getDisplayContent(activity.getDisplayId());
- IBinder focusToken = display == null ? null : display.getInputMonitor().mInputFocus;
- InputTarget focusTarget = mService.getInputTargetFromToken(focusToken);
+ // App is unresponsive, but we are actively trying to give focus to a window.
+ // Blame the window if possible since the window may not belong to the app.
+ DisplayContent display = mService.mRoot.getDisplayContent(activity.getDisplayId());
+ IBinder focusToken =
+ display == null ? null : display.getInputMonitor().mInputFocus;
+ InputTarget focusTarget = mService.getInputTargetFromToken(focusToken);
- if (focusTarget != null) {
- // Check if we have a recent focus request, newer than the dispatch timeout, then
- // ignore the focus request.
- WindowState targetWindowState = focusTarget.getWindowState();
- boolean requestIsValid = SystemClock.uptimeMillis()
- - display.getInputMonitor().mInputFocusRequestTimeMillis
- >= getInputDispatchingTimeoutMillisLocked(
- targetWindowState.getActivityRecord());
+ if (focusTarget != null) {
+ // Check if we have a recent focus request, newer than the dispatch timeout,
+ // then ignore the focus request.
+ WindowState targetWindowState = focusTarget.getWindowState();
+ boolean requestIsValid = SystemClock.uptimeMillis()
+ - display.getInputMonitor().mInputFocusRequestTimeMillis
+ >= getInputDispatchingTimeoutMillisLocked(
+ targetWindowState.getActivityRecord());
- if (requestIsValid) {
- if (notifyWindowUnresponsive(focusToken, timeoutRecord)) {
- Slog.i(TAG_WM, "Blamed " + focusTarget.getWindowState().getName()
- + " using pending focus request. Focused activity: "
- + activity.getName());
- return;
+ if (requestIsValid) {
+ if (notifyWindowUnresponsive(focusToken, timeoutRecord)) {
+ Slog.i(TAG_WM, "Blamed " + focusTarget.getWindowState().getName()
+ + " using pending focus request. Focused activity: "
+ + activity.getName());
+ return;
+ }
}
}
+
+ Slog.i(TAG_WM, "ANR in " + activity.getName() + ". Reason: "
+ + timeoutRecord.mReason);
+ dumpAnrStateLocked(activity, null /* windowState */, timeoutRecord.mReason);
+ mUnresponsiveAppByDisplay.put(activity.getDisplayId(), activity);
}
-
-
- Slog.i(TAG_WM, "ANR in " + activity.getName() + ". Reason: " + timeoutRecord.mReason);
- dumpAnrStateLocked(activity, null /* windowState */, timeoutRecord.mReason);
- mUnresponsiveAppByDisplay.put(activity.getDisplayId(), activity);
+ activity.inputDispatchingTimedOut(timeoutRecord, INVALID_PID);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- activity.inputDispatchingTimedOut(timeoutRecord, INVALID_PID);
}
@@ -117,14 +126,20 @@
*/
void notifyWindowUnresponsive(@NonNull IBinder token, @NonNull OptionalInt pid,
@NonNull TimeoutRecord timeoutRecord) {
- if (notifyWindowUnresponsive(token, timeoutRecord)) {
- return;
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "notifyWindowUnresponsive()");
+ if (notifyWindowUnresponsive(token, timeoutRecord)) {
+ return;
+ }
+ if (!pid.isPresent()) {
+ Slog.w(TAG_WM, "Failed to notify that window token=" + token
+ + " was unresponsive.");
+ return;
+ }
+ notifyWindowUnresponsive(pid.getAsInt(), timeoutRecord);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- if (!pid.isPresent()) {
- Slog.w(TAG_WM, "Failed to notify that window token=" + token + " was unresponsive.");
- return;
- }
- notifyWindowUnresponsive(pid.getAsInt(), timeoutRecord);
}
/**
@@ -139,7 +154,9 @@
final int pid;
final boolean aboveSystem;
final ActivityRecord activity;
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockStarted();
synchronized (mService.mGlobalLock) {
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockEnded();
InputTarget target = mService.getInputTargetFromToken(inputToken);
if (target == null) {
return false;
@@ -168,7 +185,9 @@
private void notifyWindowUnresponsive(int pid, TimeoutRecord timeoutRecord) {
Slog.i(TAG_WM,
"ANR in input window owned by pid=" + pid + ". Reason: " + timeoutRecord.mReason);
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockStarted();
synchronized (mService.mGlobalLock) {
+ timeoutRecord.mLatencyTracker.waitingOnGlobalLockEnded();
dumpAnrStateLocked(null /* activity */, null /* windowState */, timeoutRecord.mReason);
}
@@ -254,68 +273,83 @@
if (mLastPreDumpTimeMs > 0 && now - mLastPreDumpTimeMs < PRE_DUMP_MIN_INTERVAL_MS) {
return;
}
-
- final boolean[] shouldDumpSf = { true };
- final ArrayMap<String, Runnable> monitors = new ArrayMap<>(2);
- monitors.put(TAG_WM, mService::monitor);
- monitors.put("ActivityManager", mService.mAmInternal::monitor);
- final CountDownLatch latch = new CountDownLatch(monitors.size());
- // The pre-dump will execute if one of the monitors doesn't complete within the timeout.
- for (int i = 0; i < monitors.size(); i++) {
- final String name = monitors.keyAt(i);
- final Runnable monitor = monitors.valueAt(i);
- // Always create new thread to avoid noise of existing threads. Suppose here won't
- // create too many threads because it means that watchdog will be triggered first.
- new Thread() {
- @Override
- public void run() {
- monitor.run();
- latch.countDown();
- final long elapsed = SystemClock.uptimeMillis() - now;
- if (elapsed > PRE_DUMP_MONITOR_TIMEOUT_MS) {
- Slog.i(TAG_WM, "Pre-dump acquired " + name + " in " + elapsed + "ms");
- } else if (TAG_WM.equals(name)) {
- // Window manager is the main client of SurfaceFlinger. If window manager
- // is responsive, the stack traces of SurfaceFlinger may not be important.
- shouldDumpSf[0] = false;
- }
- };
- }.start();
- }
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "preDumpIfLockTooSlow()");
try {
- if (latch.await(PRE_DUMP_MONITOR_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
- return;
+ final boolean[] shouldDumpSf = { true };
+ final ArrayMap<String, Runnable> monitors = new ArrayMap<>(2);
+ monitors.put(TAG_WM, mService::monitor);
+ monitors.put("ActivityManager", mService.mAmInternal::monitor);
+ final CountDownLatch latch = new CountDownLatch(monitors.size());
+ // The pre-dump will execute if one of the monitors doesn't complete within
+ // the timeout.
+ for (int i = 0; i < monitors.size(); i++) {
+ final String name = monitors.keyAt(i);
+ final Runnable monitor = monitors.valueAt(i);
+ // Always create new thread to avoid noise of existing threads. Suppose here won't
+ // create too many threads because it means that watchdog will be triggered first.
+ new Thread() {
+ @Override
+ public void run() {
+ monitor.run();
+ latch.countDown();
+ final long elapsed = SystemClock.uptimeMillis() - now;
+ if (elapsed > PRE_DUMP_MONITOR_TIMEOUT_MS) {
+ Slog.i(TAG_WM, "Pre-dump acquired " + name + " in " + elapsed + "ms");
+ } else if (TAG_WM.equals(name)) {
+ // Window manager is the main client of SurfaceFlinger.
+ // If window manager is responsive, the stack traces
+ // of SurfaceFlinger may not be important.
+ shouldDumpSf[0] = false;
+ }
+ };
+ }.start();
}
- } catch (InterruptedException ignored) { }
- mLastPreDumpTimeMs = now;
- Slog.i(TAG_WM, "Pre-dump for unresponsive");
+ try {
+ if (latch.await(PRE_DUMP_MONITOR_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+ return;
+ }
+ } catch (InterruptedException ignored) { }
+ mLastPreDumpTimeMs = now;
+ Slog.i(TAG_WM, "Pre-dump for unresponsive");
- final ArrayList<Integer> firstPids = new ArrayList<>(1);
- firstPids.add(WindowManagerService.MY_PID);
- ArrayList<Integer> nativePids = null;
- final int[] pids = shouldDumpSf[0]
- ? Process.getPidsForCommands(new String[] { "/system/bin/surfaceflinger" })
- : null;
- if (pids != null) {
- nativePids = new ArrayList<>(1);
- for (int pid : pids) {
- nativePids.add(pid);
+ final ArrayList<Integer> firstPids = new ArrayList<>(1);
+ firstPids.add(WindowManagerService.MY_PID);
+ ArrayList<Integer> nativePids = null;
+ final int[] pids = shouldDumpSf[0]
+ ? Process.getPidsForCommands(new String[] { "/system/bin/surfaceflinger" })
+ : null;
+ if (pids != null) {
+ nativePids = new ArrayList<>(1);
+ for (int pid : pids) {
+ nativePids.add(pid);
+ }
}
+
+ String criticalEvents =
+ CriticalEventLog.getInstance().logLinesForSystemServerTraceFile();
+ final File tracesFile = ActivityManagerService.dumpStackTraces(firstPids,
+ null /* processCpuTracker */, null /* lastPids */, nativePids,
+ null /* logExceptionCreatingFile */, "Pre-dump", criticalEvents,
+ null/* AnrLatencyTracker */);
+ if (tracesFile != null) {
+ tracesFile.renameTo(
+ new File(tracesFile.getParent(), tracesFile.getName() + "_pre"));
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
- String criticalEvents = CriticalEventLog.getInstance().logLinesForSystemServerTraceFile();
- final File tracesFile = ActivityManagerService.dumpStackTraces(firstPids,
- null /* processCpuTracker */, null /* lastPids */, nativePids,
- null /* logExceptionCreatingFile */, "Pre-dump", criticalEvents);
- if (tracesFile != null) {
- tracesFile.renameTo(new File(tracesFile.getParent(), tracesFile.getName() + "_pre"));
- }
}
private void dumpAnrStateLocked(ActivityRecord activity, WindowState windowState,
String reason) {
- mService.saveANRStateLocked(activity, windowState, reason);
- mService.mAtmService.saveANRState(reason);
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "dumpAnrStateLocked()");
+ mService.saveANRStateLocked(activity, windowState, reason);
+ mService.mAtmService.saveANRState(reason);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+ }
}
private boolean isWindowAboveSystem(@NonNull WindowState windowState) {
diff --git a/services/core/java/com/android/server/wm/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java
index 27550d9..3d00686 100644
--- a/services/core/java/com/android/server/wm/Letterbox.java
+++ b/services/core/java/com/android/server/wm/Letterbox.java
@@ -273,8 +273,8 @@
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP) {
- mDoubleTapCallbackX.accept((int) e.getX());
- mDoubleTapCallbackY.accept((int) e.getY());
+ mDoubleTapCallbackX.accept((int) e.getRawX());
+ mDoubleTapCallbackY.accept((int) e.getRawY());
return true;
}
return false;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index b3f3548..f66ba38 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -1487,8 +1487,8 @@
} else {
final String resolvedType =
homeIntent.resolveTypeIfNeeded(mService.mContext.getContentResolver());
- final ResolveInfo info = AppGlobals.getPackageManager()
- .resolveIntent(homeIntent, resolvedType, flags, userId);
+ final ResolveInfo info = mTaskSupervisor.resolveIntent(homeIntent, resolvedType,
+ userId, flags, Binder.getCallingUid());
if (info != null) {
aInfo = info.activityInfo;
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 728102e..837045c 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -16,6 +16,7 @@
package com.android.server.wm;
+import static android.app.ActivityManager.isStartResultSuccessful;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static android.app.ActivityTaskManager.RESIZE_MODE_FORCED;
import static android.app.ActivityTaskManager.RESIZE_MODE_SYSTEM_SCREEN_ROTATION;
@@ -5343,54 +5344,32 @@
if (parent != null && foundParentInTask) {
final int callingUid = srec.info.applicationInfo.uid;
- final int parentLaunchMode = parent.info.launchMode;
- final int destIntentFlags = destIntent.getFlags();
- if (parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE ||
- parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK ||
- parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP ||
- (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
- boolean abort;
- try {
- abort = !mTaskSupervisor.checkStartAnyActivityPermission(destIntent,
- parent.info, null /* resultWho */, -1 /* requestCode */, srec.getPid(),
- callingUid, srec.info.packageName, null /* callingFeatureId */,
- false /* ignoreTargetSecurity */, false /* launchingInTask */, srec.app,
- null /* resultRecord */, null /* resultRootTask */);
- } catch (SecurityException e) {
- abort = true;
+ try {
+ ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
+ destIntent.getComponent(), ActivityManagerService.STOCK_PM_FLAGS,
+ srec.mUserId);
+ // TODO(b/64750076): Check if calling pid should really be -1.
+ final int res = mAtmService.getActivityStartController()
+ .obtainStarter(destIntent, "navigateUpTo")
+ .setCaller(srec.app.getThread())
+ .setActivityInfo(aInfo)
+ .setResultTo(parent.token)
+ .setIntentGrants(destGrants)
+ .setCallingPid(-1)
+ .setCallingUid(callingUid)
+ .setCallingPackage(srec.packageName)
+ .setCallingFeatureId(parent.launchedFromFeatureId)
+ .setRealCallingPid(-1)
+ .setRealCallingUid(callingUid)
+ .setComponentSpecified(true)
+ .execute();
+ foundParentInTask = isStartResultSuccessful(res);
+ if (res == ActivityManager.START_SUCCESS) {
+ parent.finishIfPossible(resultCode, resultData, resultGrants,
+ "navigate-top", true /* oomAdj */);
}
- if (abort) {
- android.util.EventLog.writeEvent(0x534e4554, "238605611", callingUid, "");
- foundParentInTask = false;
- } else {
- parent.deliverNewIntentLocked(callingUid, destIntent, destGrants,
- srec.packageName);
- }
- } else {
- try {
- ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
- destIntent.getComponent(), ActivityManagerService.STOCK_PM_FLAGS,
- srec.mUserId);
- // TODO(b/64750076): Check if calling pid should really be -1.
- final int res = mAtmService.getActivityStartController()
- .obtainStarter(destIntent, "navigateUpTo")
- .setCaller(srec.app.getThread())
- .setActivityInfo(aInfo)
- .setResultTo(parent.token)
- .setCallingPid(-1)
- .setCallingUid(callingUid)
- .setCallingPackage(srec.packageName)
- .setCallingFeatureId(parent.launchedFromFeatureId)
- .setRealCallingPid(-1)
- .setRealCallingUid(callingUid)
- .setComponentSpecified(true)
- .execute();
- foundParentInTask = res == ActivityManager.START_SUCCESS;
- } catch (RemoteException e) {
- foundParentInTask = false;
- }
- parent.finishIfPossible(resultCode, resultData, resultGrants,
- "navigate-top", true /* oomAdj */);
+ } catch (RemoteException e) {
+ foundParentInTask = false;
}
}
Binder.restoreCallingIdentity(origId);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
index 1d52b7f..376399a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
@@ -384,7 +384,7 @@
}
private ActivityMetricsLogger.TransitionInfoSnapshot notifyWindowsDrawn(ActivityRecord r) {
- return mActivityMetricsLogger.notifyWindowsDrawn(r, SystemClock.elapsedRealtimeNanos());
+ return mActivityMetricsLogger.notifyWindowsDrawn(r);
}
@Test
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 046ff66..7f5beb1 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -233,6 +233,7 @@
final SparseArray<ActivityData> mVisibleActivities = new SparseArray();
@GuardedBy("mLock")
private final SparseArray<LaunchTimeAlarmQueue> mLaunchTimeAlarmQueues = new SparseArray<>();
+ @GuardedBy("mUsageEventListeners") // Don't hold the main lock when calling out
private final ArraySet<UsageStatsManagerInternal.UsageEventListener> mUsageEventListeners =
new ArraySet<>();
private final CopyOnWriteArraySet<UsageStatsManagerInternal.EstimatedLaunchTimeChangedListener>
@@ -1189,9 +1190,11 @@
service.reportEvent(event);
}
- final int size = mUsageEventListeners.size();
- for (int i = 0; i < size; ++i) {
- mUsageEventListeners.valueAt(i).onUsageEvent(userId, event);
+ synchronized (mUsageEventListeners) {
+ final int size = mUsageEventListeners.size();
+ for (int i = 0; i < size; ++i) {
+ mUsageEventListeners.valueAt(i).onUsageEvent(userId, event);
+ }
}
}
@@ -1682,7 +1685,7 @@
* Called via the local interface.
*/
private void registerListener(@NonNull UsageStatsManagerInternal.UsageEventListener listener) {
- synchronized (mLock) {
+ synchronized (mUsageEventListeners) {
mUsageEventListeners.add(listener);
}
}
@@ -1692,7 +1695,7 @@
*/
private void unregisterListener(
@NonNull UsageStatsManagerInternal.UsageEventListener listener) {
- synchronized (mLock) {
+ synchronized (mUsageEventListeners) {
mUsageEventListeners.remove(listener);
}
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 70b5123..b6944eb 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -489,7 +489,10 @@
/**
* Control whether users receive a simplified network settings UI and improved network
* selection.
+ *
+ * @deprecated Never implemented. Has no behavior impact when override. DO NOT USE.
*/
+ @Deprecated
public static final String
KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool";
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 0109ae6..cb985bf 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -18,7 +18,6 @@
import static android.text.TextUtils.formatSimple;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage;
@@ -38,9 +37,6 @@
import android.os.Parcel;
import android.os.ParcelUuid;
import android.os.Parcelable;
-import android.telephony.SubscriptionManager.ProfileClass;
-import android.telephony.SubscriptionManager.SimDisplayNameSource;
-import android.telephony.SubscriptionManager.SubscriptionType;
import android.telephony.SubscriptionManager.UsageSetting;
import android.text.TextUtils;
import android.util.DisplayMetrics;
@@ -59,6 +55,7 @@
* A Parcelable class for Subscription Information.
*/
public class SubscriptionInfo implements Parcelable {
+
/**
* Size of text to render on the icon.
*/
@@ -68,180 +65,162 @@
* Subscription Identifier, this is a device unique number
* and not an index into an array
*/
- private final int mId;
+ private int mId;
/**
- * The ICCID of the SIM that is associated with this subscription, empty if unknown.
+ * The GID for a SIM that maybe associated with this subscription, empty if unknown
*/
- @NonNull
- private final String mIccId;
+ private String mIccId;
/**
- * The index of the SIM slot that currently contains the subscription and not necessarily unique
- * and maybe {@link SubscriptionManager#INVALID_SIM_SLOT_INDEX} if unknown or the subscription
- * is inactive.
+ * The index of the slot that currently contains the subscription
+ * and not necessarily unique and maybe INVALID_SLOT_ID if unknown
*/
- private final int mSimSlotIndex;
+ private int mSimSlotIndex;
/**
- * The name displayed to the user that identifies this subscription. This name is used
- * in Settings page and can be renamed by the user.
+ * The name displayed to the user that identifies this subscription
*/
- @NonNull
- private final CharSequence mDisplayName;
+ private CharSequence mDisplayName;
/**
- * The name displayed to the user that identifies subscription provider name. This name is the
- * SPN displayed in status bar and many other places. Can't be renamed by the user.
+ * String that identifies SPN/PLMN
+ * TODO : Add a new field that identifies only SPN for a sim
*/
- @NonNull
- private final CharSequence mCarrierName;
+ private CharSequence mCarrierName;
/**
* The subscription carrier id.
- *
* @see TelephonyManager#getSimCarrierId()
*/
- private final int mCarrierId;
+ private int mCarrierId;
/**
- * The source of the {@link #mCarrierName}.
+ * The source of the name, NAME_SOURCE_DEFAULT_SOURCE, NAME_SOURCE_SIM_SPN,
+ * NAME_SOURCE_SIM_PNN, or NAME_SOURCE_USER_INPUT.
*/
- @SimDisplayNameSource
- private final int mNameSource;
+ private int mNameSource;
/**
- * The color to be used for tinting the icon when displaying to the user.
+ * The color to be used for tinting the icon when displaying to the user
*/
- private final int mIconTint;
+ private int mIconTint;
/**
- * The number presented to the user identify this subscription.
+ * A number presented to the user identify this subscription
*/
- @NonNull
- private final String mNumber;
+ private String mNumber;
/**
- * Whether user enables data roaming for this subscription or not. Either
- * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or
- * {@link SubscriptionManager#DATA_ROAMING_DISABLE}.
+ * Data roaming state, DATA_ROAMING_ENABLE, DATA_ROAMING_DISABLE
*/
- private final int mDataRoaming;
+ private int mDataRoaming;
/**
- * SIM icon bitmap cache.
+ * SIM icon bitmap cache
+ */
+ @Nullable private Bitmap mIconBitmap;
+
+ /**
+ * Mobile Country Code
+ */
+ private String mMcc;
+
+ /**
+ * Mobile Network Code
+ */
+ private String mMnc;
+
+ /**
+ * EHPLMNs associated with the subscription
+ */
+ private String[] mEhplmns;
+
+ /**
+ * HPLMNs associated with the subscription
+ */
+ private String[] mHplmns;
+
+ /**
+ * ISO Country code for the subscription's provider
+ */
+ private String mCountryIso;
+
+ /**
+ * Whether the subscription is an embedded one.
+ */
+ private boolean mIsEmbedded;
+
+ /**
+ * The access rules for this subscription, if it is embedded and defines any.
+ * This does not include access rules for non-embedded subscriptions.
*/
@Nullable
- private Bitmap mIconBitmap;
-
- /**
- * Mobile Country Code.
- */
- @Nullable
- private final String mMcc;
-
- /**
- * Mobile Network Code.
- */
- @Nullable
- private final String mMnc;
-
- /**
- * EHPLMNs associated with the subscription.
- */
- @NonNull
- private final String[] mEhplmns;
-
- /**
- * HPLMNs associated with the subscription.
- */
- @NonNull
- private final String[] mHplmns;
-
- /**
- * ISO Country code for the subscription's provider.
- */
- @NonNull
- private final String mCountryIso;
-
- /**
- * Whether the subscription is from eSIM.
- */
- private final boolean mIsEmbedded;
-
- /**
- * The access rules for this subscription, if it is embedded and defines any. This does not
- * include access rules for non-embedded subscriptions.
- */
- @Nullable
- private final UiccAccessRule[] mNativeAccessRules;
+ private UiccAccessRule[] mNativeAccessRules;
/**
* The carrier certificates for this subscription that are saved in carrier configs.
* This does not include access rules from the Uicc, whether embedded or non-embedded.
*/
@Nullable
- private final UiccAccessRule[] mCarrierConfigAccessRules;
+ private UiccAccessRule[] mCarrierConfigAccessRules;
/**
* The string ID of the SIM card. It is the ICCID of the active profile for a UICC card and the
* EID for an eUICC card.
*/
- @NonNull
- private final String mCardString;
+ private String mCardString;
/**
- * The card ID of the SIM card. This maps uniquely to {@link #mCardString}.
+ * The card ID of the SIM card. This maps uniquely to the card string.
*/
- private final int mCardId;
+ private int mCardId;
/**
* Whether the subscription is opportunistic.
*/
- private final boolean mIsOpportunistic;
+ private boolean mIsOpportunistic;
/**
- * A UUID assigned to the subscription group. {@code null} if not assigned.
- *
- * @see SubscriptionManager#createSubscriptionGroup(List)
+ * A UUID assigned to the subscription group. It returns null if not assigned.
+ * Check {@link SubscriptionManager#createSubscriptionGroup(List)} for more details.
*/
@Nullable
- private final ParcelUuid mGroupUuid;
+ private ParcelUuid mGroupUUID;
/**
- * A package name that specifies who created the group. Empty if not available.
+ * A package name that specifies who created the group. Null if mGroupUUID is null.
*/
- @NonNull
- private final String mGroupOwner;
+ private String mGroupOwner;
/**
- * Whether group of the subscription is disabled. This is only useful if it's a grouped
- * opportunistic subscription. In this case, if all primary (non-opportunistic) subscriptions
- * in the group are deactivated (unplugged pSIM or deactivated eSIM profile), we should disable
- * this opportunistic subscription.
+ * Whether group of the subscription is disabled.
+ * This is only useful if it's a grouped opportunistic subscription. In this case, if all
+ * primary (non-opportunistic) subscriptions in the group are deactivated (unplugged pSIM
+ * or deactivated eSIM profile), we should disable this opportunistic subscription.
*/
- private final boolean mIsGroupDisabled;
+ private boolean mIsGroupDisabled = false;
/**
- * The profile class populated from the profile metadata if present. Otherwise,
- * the profile class defaults to {@link SubscriptionManager#PROFILE_CLASS_UNSET} if there is no
- * profile metadata or the subscription is not on an eUICC ({@link #isEmbedded} returns
- * {@code false}).
+ * Profile class, PROFILE_CLASS_TESTING, PROFILE_CLASS_OPERATIONAL
+ * PROFILE_CLASS_PROVISIONING, or PROFILE_CLASS_UNSET.
+ * A profile on the eUICC can be defined as test, operational, provisioning, or unset.
+ * The profile class will be populated from the profile metadata if present. Otherwise,
+ * the profile class defaults to unset if there is no profile metadata or the subscription
+ * is not on an eUICC ({@link #isEmbedded} returns false).
*/
- @ProfileClass
- private final int mProfileClass;
+ private int mProfileClass;
/**
- * Type of the subscription.
+ * Type of subscription
*/
- @SubscriptionType
- private final int mType;
+ private int mSubscriptionType;
/**
* Whether uicc applications are configured to enable or disable.
* By default it's true.
*/
- private final boolean mAreUiccApplicationsEnabled;
+ private boolean mAreUiccApplicationsEnabled = true;
/**
* The port index of the Uicc card.
@@ -251,16 +230,25 @@
/**
* Subscription's preferred usage setting.
*/
- @UsageSetting
- private final int mUsageSetting;
+ private @UsageSetting int mUsageSetting = SubscriptionManager.USAGE_SETTING_UNKNOWN;
+
+ /**
+ * Public copy constructor.
+ * @hide
+ */
+ public SubscriptionInfo(SubscriptionInfo info) {
+ this(info.mId, info.mIccId, info.mSimSlotIndex, info.mDisplayName, info.mCarrierName,
+ info.mNameSource, info.mIconTint, info.mNumber, info.mDataRoaming, info.mIconBitmap,
+ info.mMcc, info.mMnc, info.mCountryIso, info.mIsEmbedded, info.mNativeAccessRules,
+ info.mCardString, info.mCardId, info.mIsOpportunistic,
+ info.mGroupUUID == null ? null : info.mGroupUUID.toString(), info.mIsGroupDisabled,
+ info.mCarrierId, info.mProfileClass, info.mSubscriptionType, info.mGroupOwner,
+ info.mCarrierConfigAccessRules, info.mAreUiccApplicationsEnabled);
+ }
/**
* @hide
- *
- * @deprecated Use {@link SubscriptionInfo.Builder}.
*/
- // TODO: Clean up after external usages moved to builder model.
- @Deprecated
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded,
@@ -274,11 +262,7 @@
/**
* @hide
- *
- * @deprecated Use {@link SubscriptionInfo.Builder}.
*/
- // TODO: Clean up after external usages moved to builder model.
- @Deprecated
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded,
@@ -292,11 +276,7 @@
/**
* @hide
- *
- * @deprecated Use {@link SubscriptionInfo.Builder}.
*/
- // TODO: Clean up after external usages moved to builder model.
- @Deprecated
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded,
@@ -313,11 +293,7 @@
/**
* @hide
- *
- * @deprecated Use {@link SubscriptionInfo.Builder}.
*/
- // TODO: Clean up after external usages moved to builder model.
- @Deprecated
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded,
@@ -335,94 +311,49 @@
/**
* @hide
- *
- * @deprecated Use {@link SubscriptionInfo.Builder}.
*/
- // TODO: Clean up after external usages moved to builder model.
- @Deprecated
public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
Bitmap icon, String mcc, String mnc, String countryIso, boolean isEmbedded,
@Nullable UiccAccessRule[] nativeAccessRules, String cardString, int cardId,
- boolean isOpportunistic, @Nullable String groupUuid, boolean isGroupDisabled,
+ boolean isOpportunistic, @Nullable String groupUUID, boolean isGroupDisabled,
int carrierId, int profileClass, int subType, @Nullable String groupOwner,
@Nullable UiccAccessRule[] carrierConfigAccessRules,
boolean areUiccApplicationsEnabled, int portIndex, @UsageSetting int usageSetting) {
this.mId = id;
this.mIccId = iccId;
this.mSimSlotIndex = simSlotIndex;
- this.mDisplayName = displayName;
+ this.mDisplayName = displayName;
this.mCarrierName = carrierName;
this.mNameSource = nameSource;
this.mIconTint = iconTint;
this.mNumber = number;
this.mDataRoaming = roaming;
this.mIconBitmap = icon;
- this.mMcc = TextUtils.emptyIfNull(mcc);
- this.mMnc = TextUtils.emptyIfNull(mnc);
- this.mHplmns = null;
- this.mEhplmns = null;
- this.mCountryIso = TextUtils.emptyIfNull(countryIso);
+ this.mMcc = mcc;
+ this.mMnc = mnc;
+ this.mCountryIso = countryIso;
this.mIsEmbedded = isEmbedded;
this.mNativeAccessRules = nativeAccessRules;
- this.mCardString = TextUtils.emptyIfNull(cardString);
+ this.mCardString = cardString;
this.mCardId = cardId;
this.mIsOpportunistic = isOpportunistic;
- this.mGroupUuid = groupUuid == null ? null : ParcelUuid.fromString(groupUuid);
+ this.mGroupUUID = groupUUID == null ? null : ParcelUuid.fromString(groupUUID);
this.mIsGroupDisabled = isGroupDisabled;
this.mCarrierId = carrierId;
this.mProfileClass = profileClass;
- this.mType = subType;
- this.mGroupOwner = TextUtils.emptyIfNull(groupOwner);
+ this.mSubscriptionType = subType;
+ this.mGroupOwner = groupOwner;
this.mCarrierConfigAccessRules = carrierConfigAccessRules;
this.mAreUiccApplicationsEnabled = areUiccApplicationsEnabled;
this.mPortIndex = portIndex;
this.mUsageSetting = usageSetting;
}
-
/**
- * Constructor from builder.
- *
- * @param builder Builder of {@link SubscriptionInfo}.
- */
- private SubscriptionInfo(@NonNull Builder builder) {
- this.mId = builder.mId;
- this.mIccId = builder.mIccId;
- this.mSimSlotIndex = builder.mSimSlotIndex;
- this.mDisplayName = builder.mDisplayName;
- this.mCarrierName = builder.mCarrierName;
- this.mNameSource = builder.mNameSource;
- this.mIconTint = builder.mIconTint;
- this.mNumber = builder.mNumber;
- this.mDataRoaming = builder.mDataRoaming;
- this.mIconBitmap = builder.mIconBitmap;
- this.mMcc = builder.mMcc;
- this.mMnc = builder.mMnc;
- this.mEhplmns = builder.mEhplmns;
- this.mHplmns = builder.mHplmns;
- this.mCountryIso = builder.mCountryIso;
- this.mIsEmbedded = builder.mIsEmbedded;
- this.mNativeAccessRules = builder.mNativeAccessRules;
- this.mCardString = builder.mCardString;
- this.mCardId = builder.mCardId;
- this.mIsOpportunistic = builder.mIsOpportunistic;
- this.mGroupUuid = builder.mGroupUuid;
- this.mIsGroupDisabled = builder.mIsGroupDisabled;
- this.mCarrierId = builder.mCarrierId;
- this.mProfileClass = builder.mProfileClass;
- this.mType = builder.mType;
- this.mGroupOwner = builder.mGroupOwner;
- this.mCarrierConfigAccessRules = builder.mCarrierConfigAccessRules;
- this.mAreUiccApplicationsEnabled = builder.mAreUiccApplicationsEnabled;
- this.mPortIndex = builder.mPortIndex;
- this.mUsageSetting = builder.mUsageSetting;
- }
-
- /**
- * @return The subscription ID.
+ * @return the subscription ID.
*/
public int getSubscriptionId() {
- return mId;
+ return this.mId;
}
/**
@@ -439,56 +370,78 @@
* @return the ICC ID, or an empty string if one of these requirements is not met
*/
public String getIccId() {
- return mIccId;
+ return this.mIccId;
}
/**
- * @return The index of the SIM slot that currently contains the subscription and not
- * necessarily unique and maybe {@link SubscriptionManager#INVALID_SIM_SLOT_INDEX} if unknown or
- * the subscription is inactive.
+ * @hide
+ */
+ public void clearIccId() {
+ this.mIccId = "";
+ }
+
+ /**
+ * @return the slot index of this Subscription's SIM card.
*/
public int getSimSlotIndex() {
- return mSimSlotIndex;
+ return this.mSimSlotIndex;
}
/**
- * @return The carrier id of this subscription carrier.
- *
+ * @return the carrier id of this Subscription carrier.
* @see TelephonyManager#getSimCarrierId()
*/
public int getCarrierId() {
- return mCarrierId;
+ return this.mCarrierId;
}
/**
- * @return The name displayed to the user that identifies this subscription. This name is
- * used in Settings page and can be renamed by the user.
- *
- * @see #getCarrierName()
+ * @return the name displayed to the user that identifies this subscription
*/
public CharSequence getDisplayName() {
- return mDisplayName;
+ return this.mDisplayName;
}
/**
- * @return The name displayed to the user that identifies subscription provider name. This name
- * is the SPN displayed in status bar and many other places. Can't be renamed by the user.
- *
- * @see #getDisplayName()
- */
- public CharSequence getCarrierName() {
- return mCarrierName;
- }
-
- /**
- * @return The source of the {@link #getCarrierName()}.
- *
+ * Sets the name displayed to the user that identifies this subscription
* @hide
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- @SimDisplayNameSource
+ public void setDisplayName(CharSequence name) {
+ this.mDisplayName = name;
+ }
+
+ /**
+ * @return the name displayed to the user that identifies Subscription provider name
+ */
+ public CharSequence getCarrierName() {
+ return this.mCarrierName;
+ }
+
+ /**
+ * Sets the name displayed to the user that identifies Subscription provider name
+ * @hide
+ */
+ public void setCarrierName(CharSequence name) {
+ this.mCarrierName = name;
+ }
+
+ /**
+ * @return the source of the name, eg NAME_SOURCE_DEFAULT_SOURCE, NAME_SOURCE_SIM_SPN or
+ * NAME_SOURCE_USER_INPUT.
+ * @hide
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public int getNameSource() {
- return mNameSource;
+ return this.mNameSource;
+ }
+
+ /**
+ * @hide
+ */
+ public void setAssociatedPlmns(String[] ehplmns, String[] hplmns) {
+ mEhplmns = ehplmns;
+ mHplmns = hplmns;
}
/**
@@ -546,6 +499,15 @@
}
/**
+ * Sets the color displayed to the user that identifies this subscription
+ * @hide
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
+ public void setIconTint(int iconTint) {
+ this.mIconTint = iconTint;
+ }
+
+ /**
* Returns the number of this subscription.
*
* Starting with API level 30, returns the number of this subscription if the calling app meets
@@ -571,23 +533,28 @@
}
/**
- * Whether user enables data roaming for this subscription or not. Either
- * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or
- * {@link SubscriptionManager#DATA_ROAMING_DISABLE}.
+ * @hide
*/
- public int getDataRoaming() {
- return mDataRoaming;
+ public void clearNumber() {
+ mNumber = "";
}
/**
- * @return The mobile country code.
- *
+ * @return the data roaming state for this subscription, either
+ * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or {@link SubscriptionManager#DATA_ROAMING_DISABLE}.
+ */
+ public int getDataRoaming() {
+ return this.mDataRoaming;
+ }
+
+ /**
+ * @return the MCC.
* @deprecated Use {@link #getMccString()} instead.
*/
@Deprecated
public int getMcc() {
try {
- return mMcc == null ? 0 : Integer.parseInt(mMcc);
+ return this.mMcc == null ? 0 : Integer.valueOf(this.mMcc);
} catch (NumberFormatException e) {
Log.w(SubscriptionInfo.class.getSimpleName(), "MCC string is not a number");
return 0;
@@ -595,14 +562,13 @@
}
/**
- * @return The mobile network code.
- *
+ * @return the MNC.
* @deprecated Use {@link #getMncString()} instead.
*/
@Deprecated
public int getMnc() {
try {
- return mMnc == null ? 0 : Integer.parseInt(mMnc);
+ return this.mMnc == null ? 0 : Integer.valueOf(this.mMnc);
} catch (NumberFormatException e) {
Log.w(SubscriptionInfo.class.getSimpleName(), "MNC string is not a number");
return 0;
@@ -610,40 +576,36 @@
}
/**
- * @return The mobile country code.
+ * @return The MCC, as a string.
*/
- @Nullable
- public String getMccString() {
- return mMcc;
+ public @Nullable String getMccString() {
+ return this.mMcc;
}
/**
- * @return The mobile network code.
+ * @return The MNC, as a string.
*/
- @Nullable
- public String getMncString() {
- return mMnc;
+ public @Nullable String getMncString() {
+ return this.mMnc;
}
/**
- * @return The ISO country code. Empty if not available.
+ * @return the ISO country code
*/
public String getCountryIso() {
- return mCountryIso;
+ return this.mCountryIso;
}
- /**
- * @return {@code true} if the subscription is from eSIM.
- */
+ /** @return whether the subscription is an eUICC one. */
public boolean isEmbedded() {
- return mIsEmbedded;
+ return this.mIsEmbedded;
}
/**
* An opportunistic subscription connects to a network that is
* limited in functionality and / or coverage.
*
- * @return Whether subscription is opportunistic.
+ * @return whether subscription is opportunistic.
*/
public boolean isOpportunistic() {
return mIsOpportunistic;
@@ -655,18 +617,23 @@
* Such that those subscriptions will have some affiliated behaviors such as opportunistic
* subscription may be invisible to the user.
*
- * @return Group UUID a String of group UUID if it belongs to a group. Otherwise
- * {@code null}.
+ * @return group UUID a String of group UUID if it belongs to a group. Otherwise
+ * it will return null.
*/
- @Nullable
- public ParcelUuid getGroupUuid() {
- return mGroupUuid;
+ public @Nullable ParcelUuid getGroupUuid() {
+ return mGroupUUID;
}
/**
* @hide
*/
- @NonNull
+ public void clearGroupUuid() {
+ this.mGroupUUID = null;
+ }
+
+ /**
+ * @hide
+ */
public List<String> getEhplmns() {
return mEhplmns == null ? Collections.emptyList() : Arrays.asList(mEhplmns);
}
@@ -674,45 +641,36 @@
/**
* @hide
*/
- @NonNull
public List<String> getHplmns() {
return mHplmns == null ? Collections.emptyList() : Arrays.asList(mHplmns);
}
/**
- * @return The owner package of group the subscription belongs to.
+ * Return owner package of group the subscription belongs to.
*
* @hide
*/
- @NonNull
- public String getGroupOwner() {
+ public @Nullable String getGroupOwner() {
return mGroupOwner;
}
/**
- * @return The profile class populated from the profile metadata if present. Otherwise,
- * the profile class defaults to {@link SubscriptionManager#PROFILE_CLASS_UNSET} if there is no
- * profile metadata or the subscription is not on an eUICC ({@link #isEmbedded} return
- * {@code false}).
- *
+ * @return the profile class of this subscription.
* @hide
*/
@SystemApi
- @ProfileClass
- public int getProfileClass() {
- return mProfileClass;
+ public @SubscriptionManager.ProfileClass int getProfileClass() {
+ return this.mProfileClass;
}
/**
* This method returns the type of a subscription. It can be
* {@link SubscriptionManager#SUBSCRIPTION_TYPE_LOCAL_SIM} or
* {@link SubscriptionManager#SUBSCRIPTION_TYPE_REMOTE_SIM}.
- *
- * @return The type of the subscription.
+ * @return the type of subscription
*/
- @SubscriptionType
- public int getSubscriptionType() {
- return mType;
+ public @SubscriptionManager.SubscriptionType int getSubscriptionType() {
+ return mSubscriptionType;
}
/**
@@ -721,7 +679,7 @@
* returns true).
*
* @param context Context of the application to check.
- * @return Whether the app is authorized to manage this subscription per its metadata.
+ * @return whether the app is authorized to manage this subscription per its metadata.
* @hide
* @deprecated - Do not use.
*/
@@ -742,7 +700,7 @@
*/
@Deprecated
public boolean canManageSubscription(Context context, String packageName) {
- List<UiccAccessRule> allAccessRules = getAccessRules();
+ List<UiccAccessRule> allAccessRules = getAllAccessRules();
if (allAccessRules == null) {
return false;
}
@@ -765,14 +723,24 @@
}
/**
- * @return The {@link UiccAccessRule}s that are stored in Uicc, dictating who is authorized to
- * manage this subscription.
- *
+ * @return the {@link UiccAccessRule}s that are stored in Uicc, dictating who
+ * is authorized to manage this subscription.
+ * TODO and fix it properly in R / master: either deprecate this and have 3 APIs
+ * native + carrier + all, or have this return all by default.
* @hide
*/
@SystemApi
- @Nullable
- public List<UiccAccessRule> getAccessRules() {
+ public @Nullable List<UiccAccessRule> getAccessRules() {
+ if (mNativeAccessRules == null) return null;
+ return Arrays.asList(mNativeAccessRules);
+ }
+
+ /**
+ * @return the {@link UiccAccessRule}s that are both stored on Uicc and in carrierConfigs
+ * dictating who is authorized to manage this subscription.
+ * @hide
+ */
+ public @Nullable List<UiccAccessRule> getAllAccessRules() {
List<UiccAccessRule> merged = new ArrayList<>();
if (mNativeAccessRules != null) {
merged.addAll(getAccessRules());
@@ -794,38 +762,50 @@
* href="https://developer.android.com/work/managed-profiles">Work profiles</a>. Profile
* owner access is deprecated and will be removed in a future release.
*
- * @return The card string of the SIM card which contains the subscription or an empty string
+ * @return the card string of the SIM card which contains the subscription or an empty string
* if these requirements are not met. The card string is the ICCID for UICCs or the EID for
* eUICCs.
- *
+ * @hide
+ * //TODO rename usages in LPA: UiccSlotUtil.java, UiccSlotsManager.java, UiccSlotInfoTest.java
+ */
+ public String getCardString() {
+ return this.mCardString;
+ }
+
+ /**
* @hide
*/
- @NonNull
- public String getCardString() {
- return mCardString;
+ public void clearCardString() {
+ this.mCardString = "";
}
/**
- * @return The card ID of the SIM card which contains the subscription.
- *
- * @see UiccCardInfo#getCardId().
+ * Returns the card ID of the SIM card which contains the subscription (see
+ * {@link UiccCardInfo#getCardId()}.
+ * @return the cardId
*/
public int getCardId() {
- return mCardId;
+ return this.mCardId;
}
/**
- * @return The port index of the SIM card which contains the subscription.
+ * Returns the port index of the SIM card which contains the subscription.
+ *
+ * @return the portIndex
*/
public int getPortIndex() {
- return mPortIndex;
+ return this.mPortIndex;
}
/**
- * @return {@code true} if the group of the subscription is disabled. This is only useful if
- * it's a grouped opportunistic subscription. In this case, if all primary (non-opportunistic)
- * subscriptions in the group are deactivated (unplugged pSIM or deactivated eSIM profile), we
- * should disable this opportunistic subscription.
- *
+ * Set whether the subscription's group is disabled.
+ * @hide
+ */
+ public void setGroupDisabled(boolean isGroupDisabled) {
+ this.mIsGroupDisabled = isGroupDisabled;
+ }
+
+ /**
+ * Return whether the subscription's group is disabled.
* @hide
*/
@SystemApi
@@ -834,7 +814,7 @@
}
/**
- * @return {@code true} if Uicc applications are set to be enabled or disabled.
+ * Return whether uicc applications are set to be enabled or disabled.
* @hide
*/
@SystemApi
@@ -845,50 +825,56 @@
/**
* Get the usage setting for this subscription.
*
- * @return The usage setting used for this subscription.
+ * @return the usage setting used for this subscription.
*/
- @UsageSetting
- public int getUsageSetting() {
+ public @UsageSetting int getUsageSetting() {
return mUsageSetting;
}
- @NonNull
- public static final Parcelable.Creator<SubscriptionInfo> CREATOR =
- new Parcelable.Creator<SubscriptionInfo>() {
+ public static final @android.annotation.NonNull
+ Parcelable.Creator<SubscriptionInfo> CREATOR =
+ new Parcelable.Creator<SubscriptionInfo>() {
@Override
public SubscriptionInfo createFromParcel(Parcel source) {
- return new Builder()
- .setId(source.readInt())
- .setIccId(source.readString())
- .setSimSlotIndex(source.readInt())
- .setDisplayName(TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source))
- .setCarrierName(TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source))
- .setNameSource(source.readInt())
- .setIconTint(source.readInt())
- .setNumber(source.readString())
- .setDataRoaming(source.readInt())
- .setMcc(source.readString())
- .setMnc(source.readString())
- .setCountryIso(source.readString())
- .setEmbedded(source.readBoolean())
- .setNativeAccessRules(source.createTypedArray(UiccAccessRule.CREATOR))
- .setCardString(source.readString())
- .setCardId(source.readInt())
- .setPortIndex(source.readInt())
- .setOpportunistic(source.readBoolean())
- .setGroupUuid(source.readString8())
- .setGroupDisabled(source.readBoolean())
- .setCarrierId(source.readInt())
- .setProfileClass(source.readInt())
- .setType(source.readInt())
- .setEhplmns(source.createStringArray())
- .setHplmns(source.createStringArray())
- .setGroupOwner(source.readString())
- .setCarrierConfigAccessRules(source.createTypedArray(
- UiccAccessRule.CREATOR))
- .setUiccApplicationsEnabled(source.readBoolean())
- .setUsageSetting(source.readInt())
- .build();
+ int id = source.readInt();
+ String iccId = source.readString();
+ int simSlotIndex = source.readInt();
+ CharSequence displayName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+ CharSequence carrierName = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+ int nameSource = source.readInt();
+ int iconTint = source.readInt();
+ String number = source.readString();
+ int dataRoaming = source.readInt();
+ String mcc = source.readString();
+ String mnc = source.readString();
+ String countryIso = source.readString();
+ boolean isEmbedded = source.readBoolean();
+ UiccAccessRule[] nativeAccessRules = source.createTypedArray(UiccAccessRule.CREATOR);
+ String cardString = source.readString();
+ int cardId = source.readInt();
+ int portId = source.readInt();
+ boolean isOpportunistic = source.readBoolean();
+ String groupUUID = source.readString();
+ boolean isGroupDisabled = source.readBoolean();
+ int carrierid = source.readInt();
+ int profileClass = source.readInt();
+ int subType = source.readInt();
+ String[] ehplmns = source.createStringArray();
+ String[] hplmns = source.createStringArray();
+ String groupOwner = source.readString();
+ UiccAccessRule[] carrierConfigAccessRules = source.createTypedArray(
+ UiccAccessRule.CREATOR);
+ boolean areUiccApplicationsEnabled = source.readBoolean();
+ int usageSetting = source.readInt();
+
+ SubscriptionInfo info = new SubscriptionInfo(id, iccId, simSlotIndex, displayName,
+ carrierName, nameSource, iconTint, number, dataRoaming, /* icon= */ null,
+ mcc, mnc, countryIso, isEmbedded, nativeAccessRules, cardString, cardId,
+ isOpportunistic, groupUUID, isGroupDisabled, carrierid, profileClass, subType,
+ groupOwner, carrierConfigAccessRules, areUiccApplicationsEnabled,
+ portId, usageSetting);
+ info.setAssociatedPlmns(ehplmns, hplmns);
+ return info;
}
@Override
@@ -918,11 +904,11 @@
dest.writeInt(mCardId);
dest.writeInt(mPortIndex);
dest.writeBoolean(mIsOpportunistic);
- dest.writeString8(mGroupUuid == null ? null : mGroupUuid.toString());
+ dest.writeString(mGroupUUID == null ? null : mGroupUUID.toString());
dest.writeBoolean(mIsGroupDisabled);
dest.writeInt(mCarrierId);
dest.writeInt(mProfileClass);
- dest.writeInt(mType);
+ dest.writeInt(mSubscriptionType);
dest.writeStringArray(mEhplmns);
dest.writeStringArray(mHplmns);
dest.writeString(mGroupOwner);
@@ -937,11 +923,6 @@
}
/**
- * Get ICCID stripped PII information on user build.
- *
- * @param iccId The original ICCID.
- * @return The stripped string.
- *
* @hide
*/
public static String givePrintableIccid(String iccId) {
@@ -970,12 +951,12 @@
+ " nativeAccessRules=" + Arrays.toString(mNativeAccessRules)
+ " cardString=" + cardStringToPrint + " cardId=" + mCardId
+ " portIndex=" + mPortIndex
- + " isOpportunistic=" + mIsOpportunistic + " groupUuid=" + mGroupUuid
+ + " isOpportunistic=" + mIsOpportunistic + " groupUUID=" + mGroupUUID
+ " isGroupDisabled=" + mIsGroupDisabled
+ " profileClass=" + mProfileClass
+ " ehplmns=" + Arrays.toString(mEhplmns)
+ " hplmns=" + Arrays.toString(mHplmns)
- + " mType=" + mType
+ + " subscriptionType=" + mSubscriptionType
+ " groupOwner=" + mGroupOwner
+ " carrierConfigAccessRules=" + Arrays.toString(mCarrierConfigAccessRules)
+ " areUiccApplicationsEnabled=" + mAreUiccApplicationsEnabled
@@ -985,7 +966,7 @@
@Override
public int hashCode() {
return Objects.hash(mId, mSimSlotIndex, mNameSource, mIconTint, mDataRoaming, mIsEmbedded,
- mIsOpportunistic, mGroupUuid, mIccId, mNumber, mMcc, mMnc, mCountryIso, mCardString,
+ mIsOpportunistic, mGroupUUID, mIccId, mNumber, mMcc, mMnc, mCountryIso, mCardString,
mCardId, mDisplayName, mCarrierName, Arrays.hashCode(mNativeAccessRules),
mIsGroupDisabled, mCarrierId, mProfileClass, mGroupOwner,
mAreUiccApplicationsEnabled, mPortIndex, mUsageSetting);
@@ -993,9 +974,16 @@
@Override
public boolean equals(Object obj) {
- if (this == obj) return true;
- if (obj == null || getClass() != obj.getClass()) return false;
- SubscriptionInfo toCompare = (SubscriptionInfo) obj;
+ if (obj == null) return false;
+ if (obj == this) return true;
+
+ SubscriptionInfo toCompare;
+ try {
+ toCompare = (SubscriptionInfo) obj;
+ } catch (ClassCastException ex) {
+ return false;
+ }
+
return mId == toCompare.mId
&& mSimSlotIndex == toCompare.mSimSlotIndex
&& mNameSource == toCompare.mNameSource
@@ -1006,7 +994,7 @@
&& mIsGroupDisabled == toCompare.mIsGroupDisabled
&& mAreUiccApplicationsEnabled == toCompare.mAreUiccApplicationsEnabled
&& mCarrierId == toCompare.mCarrierId
- && Objects.equals(mGroupUuid, toCompare.mGroupUuid)
+ && Objects.equals(mGroupUUID, toCompare.mGroupUUID)
&& Objects.equals(mIccId, toCompare.mIccId)
&& Objects.equals(mNumber, toCompare.mNumber)
&& Objects.equals(mMcc, toCompare.mMcc)
@@ -1024,629 +1012,4 @@
&& Arrays.equals(mHplmns, toCompare.mHplmns)
&& mUsageSetting == toCompare.mUsageSetting;
}
-
- /**
- * The builder class of {@link SubscriptionInfo}.
- *
- * @hide
- */
- public static class Builder {
- /**
- * The subscription id.
- */
- private int mId = 0;
-
- /**
- * The ICCID of the SIM that is associated with this subscription, empty if unknown.
- */
- @NonNull
- private String mIccId = "";
-
- /**
- * The index of the SIM slot that currently contains the subscription and not necessarily
- * unique and maybe {@link SubscriptionManager#INVALID_SIM_SLOT_INDEX} if unknown or the
- * subscription is inactive.
- */
- private int mSimSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
-
- /**
- * The name displayed to the user that identifies this subscription. This name is used
- * in Settings page and can be renamed by the user.
- */
- @NonNull
- private CharSequence mDisplayName = "";
-
- /**
- * The name displayed to the user that identifies subscription provider name. This name
- * is the SPN displayed in status bar and many other places. Can't be renamed by the user.
- */
- @NonNull
- private CharSequence mCarrierName = "";
-
- /**
- * The source of the carrier name.
- */
- @SimDisplayNameSource
- private int mNameSource = SubscriptionManager.NAME_SOURCE_CARRIER_ID;
-
- /**
- * The color to be used for tinting the icon when displaying to the user.
- */
- private int mIconTint = 0;
-
- /**
- * The number presented to the user identify this subscription.
- */
- @NonNull
- private String mNumber = "";
-
- /**
- * Whether user enables data roaming for this subscription or not. Either
- * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or
- * {@link SubscriptionManager#DATA_ROAMING_DISABLE}.
- */
- private int mDataRoaming = SubscriptionManager.DATA_ROAMING_DISABLE;
-
- /**
- * SIM icon bitmap cache.
- */
- @Nullable
- private Bitmap mIconBitmap = null;
-
- /**
- * The mobile country code.
- */
- @Nullable
- private String mMcc = null;
-
- /**
- * The mobile network code.
- */
- @Nullable
- private String mMnc = null;
-
- /**
- * EHPLMNs associated with the subscription.
- */
- @NonNull
- private String[] mEhplmns = new String[0];
-
- /**
- * HPLMNs associated with the subscription.
- */
- @NonNull
- private String[] mHplmns = new String[0];
-
- /**
- * The ISO Country code for the subscription's provider.
- */
- @NonNull
- private String mCountryIso = "";
-
- /**
- * Whether the subscription is from eSIM.
- */
- private boolean mIsEmbedded = false;
-
- /**
- * The native access rules for this subscription, if it is embedded and defines any. This
- * does not include access rules for non-embedded subscriptions.
- */
- @Nullable
- private UiccAccessRule[] mNativeAccessRules = null;
-
- /**
- * The card string of the SIM card.
- */
- @NonNull
- private String mCardString = "";
-
- /**
- * The card ID of the SIM card which contains the subscription.
- */
- private int mCardId = -1;
-
- /**
- * Whether the subscription is opportunistic or not.
- */
- private boolean mIsOpportunistic = false;
-
- /**
- * The group UUID of the subscription group.
- */
- @Nullable
- private ParcelUuid mGroupUuid = null;
-
- /**
- * Whether group of the subscription is disabled. This is only useful if it's a grouped
- * opportunistic subscription. In this case, if all primary (non-opportunistic)
- * subscriptions in the group are deactivated (unplugged pSIM or deactivated eSIM profile),
- * we should disable this opportunistic subscription.
- */
- private boolean mIsGroupDisabled = false;
-
- /**
- * The carrier id.
- *
- * @see TelephonyManager#getSimCarrierId()
- */
- private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
-
- /**
- * The profile class populated from the profile metadata if present. Otherwise, the profile
- * class defaults to {@link SubscriptionManager#PROFILE_CLASS_UNSET} if there is no profile
- * metadata or the subscription is not on an eUICC ({@link #isEmbedded} returns
- * {@code false}).
- */
- @ProfileClass
- private int mProfileClass = SubscriptionManager.PROFILE_CLASS_UNSET;
-
- /**
- * The subscription type.
- */
- @SubscriptionType
- private int mType = SubscriptionManager.SUBSCRIPTION_TYPE_LOCAL_SIM;
-
- /**
- * The owner package of group the subscription belongs to.
- */
- @NonNull
- private String mGroupOwner = "";
-
- /**
- * The carrier certificates for this subscription that are saved in carrier configs.
- * This does not include access rules from the Uicc, whether embedded or non-embedded.
- */
- @Nullable
- private UiccAccessRule[] mCarrierConfigAccessRules = null;
-
- /**
- * Whether Uicc applications are configured to enable or not.
- */
- private boolean mAreUiccApplicationsEnabled = true;
-
- /**
- * the port index of the Uicc card.
- */
- private int mPortIndex = 0;
-
- /**
- * Subscription's preferred usage setting.
- */
- @UsageSetting
- private int mUsageSetting = SubscriptionManager.USAGE_SETTING_UNKNOWN;
-
- /**
- * Default constructor.
- */
- public Builder() {
- }
-
- /**
- * Constructor from {@link SubscriptionInfo}.
- *
- * @param info The subscription info.
- */
- public Builder(@NonNull SubscriptionInfo info) {
- mId = info.mId;
- mIccId = info.mIccId;
- mSimSlotIndex = info.mSimSlotIndex;
- mDisplayName = info.mDisplayName;
- mCarrierName = info.mCarrierName;
- mNameSource = info.mNameSource;
- mIconTint = info.mIconTint;
- mNumber = info.mNumber;
- mDataRoaming = info.mDataRoaming;
- mIconBitmap = info.mIconBitmap;
- mMcc = info.mMcc;
- mMnc = info.mMnc;
- mEhplmns = info.mEhplmns;
- mHplmns = info.mHplmns;
- mCountryIso = info.mCountryIso;
- mIsEmbedded = info.mIsEmbedded;
- mNativeAccessRules = info.mNativeAccessRules;
- mCardString = info.mCardString;
- mCardId = info.mCardId;
- mIsOpportunistic = info.mIsOpportunistic;
- mGroupUuid = info.mGroupUuid;
- mIsGroupDisabled = info.mIsGroupDisabled;
- mCarrierId = info.mCarrierId;
- mProfileClass = info.mProfileClass;
- mType = info.mType;
- mGroupOwner = info.mGroupOwner;
- mCarrierConfigAccessRules = info.mCarrierConfigAccessRules;
- mAreUiccApplicationsEnabled = info.mAreUiccApplicationsEnabled;
- mPortIndex = info.mPortIndex;
- mUsageSetting = info.mUsageSetting;
- }
-
- /**
- * Set the subscription id.
- *
- * @param id The subscription id.
- * @return The builder.
- */
- @NonNull
- public Builder setId(int id) {
- mId = id;
- return this;
- }
-
- /**
- * Set the ICCID of the SIM that is associated with this subscription.
- *
- * @param iccId The ICCID of the SIM that is associated with this subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setIccId(@Nullable String iccId) {
- mIccId = TextUtils.emptyIfNull(iccId);
- return this;
- }
-
- /**
- * Set the SIM index of the slot that currently contains the subscription. Set to
- * {@link SubscriptionManager#INVALID_SIM_SLOT_INDEX} if the subscription is inactive.
- *
- * @param simSlotIndex The SIM slot index.
- * @return The builder.
- */
- @NonNull
- public Builder setSimSlotIndex(int simSlotIndex) {
- mSimSlotIndex = simSlotIndex;
- return this;
- }
-
- /**
- * The name displayed to the user that identifies this subscription. This name is used
- * in Settings page and can be renamed by the user.
- *
- * @param displayName The display name.
- * @return The builder.
- */
- @NonNull
- public Builder setDisplayName(@Nullable CharSequence displayName) {
- mDisplayName = displayName == null ? "" : displayName;
- return this;
- }
-
- /**
- * The name displayed to the user that identifies subscription provider name. This name
- * is the SPN displayed in status bar and many other places. Can't be renamed by the user.
- *
- * @param carrierName The carrier name.
- * @return The builder.
- */
- @NonNull
- public Builder setCarrierName(@Nullable CharSequence carrierName) {
- mCarrierName = carrierName == null ? "" : carrierName;
- return this;
- }
-
- /**
- * Set the source of the carrier name.
- *
- * @param nameSource The source of the carrier name.
- * @return The builder.
- */
- @NonNull
- public Builder setNameSource(@SimDisplayNameSource int nameSource) {
- mNameSource = nameSource;
- return this;
- }
-
- /**
- * Set the color to be used for tinting the icon when displaying to the user.
- *
- * @param iconTint The color to be used for tinting the icon when displaying to the user.
- * @return The builder.
- */
- @NonNull
- public Builder setIconTint(int iconTint) {
- mIconTint = iconTint;
- return this;
- }
-
- /**
- * Set the number presented to the user identify this subscription.
- *
- * @param number the number presented to the user identify this subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setNumber(@Nullable String number) {
- mNumber = TextUtils.emptyIfNull(number);
- return this;
- }
-
- /**
- * Set whether user enables data roaming for this subscription or not.
- *
- * @param dataRoaming Data roaming mode. Either
- * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or
- * {@link SubscriptionManager#DATA_ROAMING_DISABLE}
- * @return The builder.
- */
- @NonNull
- public Builder setDataRoaming(int dataRoaming) {
- mDataRoaming = dataRoaming;
- return this;
- }
-
- /**
- * Set SIM icon bitmap cache.
- *
- * @param iconBitmap SIM icon bitmap cache.
- * @return The builder.
- */
- @NonNull
- public Builder setIcon(@Nullable Bitmap iconBitmap) {
- mIconBitmap = iconBitmap;
- return this;
- }
-
- /**
- * Set the mobile country code.
- *
- * @param mcc The mobile country code.
- * @return The builder.
- */
- @NonNull
- public Builder setMcc(@Nullable String mcc) {
- mMcc = mcc;
- return this;
- }
-
- /**
- * Set the mobile network code.
- *
- * @param mnc Mobile network code.
- * @return The builder.
- */
- @NonNull
- public Builder setMnc(@Nullable String mnc) {
- mMnc = mnc;
- return this;
- }
-
- /**
- * Set EHPLMNs associated with the subscription.
- *
- * @param ehplmns EHPLMNs associated with the subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setEhplmns(@Nullable String[] ehplmns) {
- mEhplmns = ehplmns == null ? new String[0] : ehplmns;
- return this;
- }
-
- /**
- * Set HPLMNs associated with the subscription.
- *
- * @param hplmns HPLMNs associated with the subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setHplmns(@Nullable String[] hplmns) {
- mHplmns = hplmns == null ? new String[0] : hplmns;
- return this;
- }
-
- /**
- * Set the ISO Country code for the subscription's provider.
- *
- * @param countryIso The ISO Country code for the subscription's provider.
- * @return The builder.
- */
- @NonNull
- public Builder setCountryIso(@Nullable String countryIso) {
- mCountryIso = TextUtils.emptyIfNull(countryIso);
- return this;
- }
-
- /**
- * Set whether the subscription is from eSIM or not.
- *
- * @param isEmbedded {@code true} if the subscription is from eSIM.
- * @return The builder.
- */
- @NonNull
- public Builder setEmbedded(boolean isEmbedded) {
- mIsEmbedded = isEmbedded;
- return this;
- }
-
- /**
- * Set the native access rules for this subscription, if it is embedded and defines any.
- * This does not include access rules for non-embedded subscriptions.
- *
- * @param nativeAccessRules The native access rules for this subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setNativeAccessRules(@Nullable UiccAccessRule[] nativeAccessRules) {
- mNativeAccessRules = nativeAccessRules;
- return this;
- }
-
- /**
- * Set the card string of the SIM card.
- *
- * @param cardString The card string of the SIM card.
- * @return The builder.
- *
- * @see #getCardString()
- */
- @NonNull
- public Builder setCardString(@Nullable String cardString) {
- mCardString = TextUtils.emptyIfNull(cardString);
- return this;
- }
-
- /**
- * Set the card ID of the SIM card which contains the subscription.
- *
- * @param cardId The card ID of the SIM card which contains the subscription.
- * @return The builder.
- */
- @NonNull
- public Builder setCardId(int cardId) {
- mCardId = cardId;
- return this;
- }
-
- /**
- * Set whether the subscription is opportunistic or not.
- *
- * @param isOpportunistic {@code true} if the subscription is opportunistic.
- * @return The builder.
- */
- @NonNull
- public Builder setOpportunistic(boolean isOpportunistic) {
- mIsOpportunistic = isOpportunistic;
- return this;
- }
-
- /**
- * Set the group UUID of the subscription group.
- *
- * @param groupUuid The group UUID.
- * @return The builder.
- *
- * @see #getGroupUuid()
- */
- @NonNull
- public Builder setGroupUuid(@Nullable String groupUuid) {
- mGroupUuid = groupUuid == null ? null : ParcelUuid.fromString(groupUuid);
- return this;
- }
-
- /**
- * Whether group of the subscription is disabled. This is only useful if it's a grouped
- * opportunistic subscription. In this case, if all primary (non-opportunistic)
- * subscriptions in the group are deactivated (unplugged pSIM or deactivated eSIM profile),
- * we should disable this opportunistic subscription.
- *
- * @param isGroupDisabled {@code true} if group of the subscription is disabled.
- * @return The builder.
- */
- @NonNull
- public Builder setGroupDisabled(boolean isGroupDisabled) {
- mIsGroupDisabled = isGroupDisabled;
- return this;
- }
-
- /**
- * Set the subscription carrier id.
- *
- * @param carrierId The carrier id.
- * @return The builder
- *
- * @see TelephonyManager#getSimCarrierId()
- */
- @NonNull
- public Builder setCarrierId(int carrierId) {
- mCarrierId = carrierId;
- return this;
- }
-
- /**
- * Set the profile class populated from the profile metadata if present.
- *
- * @param profileClass the profile class populated from the profile metadata if present.
- * @return The builder
- *
- * @see #getProfileClass()
- */
- @NonNull
- public Builder setProfileClass(@ProfileClass int profileClass) {
- mProfileClass = profileClass;
- return this;
- }
-
- /**
- * Set the subscription type.
- *
- * @param type Subscription type.
- * @return The builder.
- */
- @NonNull
- public Builder setType(@SubscriptionType int type) {
- mType = type;
- return this;
- }
-
- /**
- * Set the owner package of group the subscription belongs to.
- *
- * @param groupOwner Owner package of group the subscription belongs to.
- * @return The builder.
- */
- @NonNull
- public Builder setGroupOwner(@Nullable String groupOwner) {
- mGroupOwner = TextUtils.emptyIfNull(groupOwner);
- return this;
- }
-
- /**
- * Set the carrier certificates for this subscription that are saved in carrier configs.
- * This does not include access rules from the Uicc, whether embedded or non-embedded.
- *
- * @param carrierConfigAccessRules The carrier certificates for this subscription
- * @return The builder.
- */
- @NonNull
- public Builder setCarrierConfigAccessRules(
- @Nullable UiccAccessRule[] carrierConfigAccessRules) {
- mCarrierConfigAccessRules = carrierConfigAccessRules;
- return this;
- }
-
- /**
- * Set whether Uicc applications are configured to enable or not.
- *
- * @param uiccApplicationsEnabled {@code true} if Uicc applications are configured to
- * enable.
- * @return The builder.
- */
- @NonNull
- public Builder setUiccApplicationsEnabled(boolean uiccApplicationsEnabled) {
- mAreUiccApplicationsEnabled = uiccApplicationsEnabled;
- return this;
- }
-
- /**
- * Set the port index of the Uicc card.
- *
- * @param portIndex The port index of the Uicc card.
- * @return The builder.
- */
- @NonNull
- public Builder setPortIndex(int portIndex) {
- mPortIndex = portIndex;
- return this;
- }
-
- /**
- * Set subscription's preferred usage setting.
- *
- * @param usageSetting Subscription's preferred usage setting.
- * @return The builder.
- */
- @NonNull
- public Builder setUsageSetting(@UsageSetting int usageSetting) {
- mUsageSetting = usageSetting;
- return this;
- }
-
- /**
- * Build the {@link SubscriptionInfo}.
- *
- * @return The {@link SubscriptionInfo} instance.
- */
- public SubscriptionInfo build() {
- return new SubscriptionInfo(this);
- }
- }
}
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 5a2b4fc..6bc14bf 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -3099,7 +3099,7 @@
@SystemApi
public boolean canManageSubscription(@NonNull SubscriptionInfo info,
@NonNull String packageName) {
- if (info == null || info.getAccessRules() == null || packageName == null) {
+ if (info == null || info.getAllAccessRules() == null || packageName == null) {
return false;
}
PackageManager packageManager = mContext.getPackageManager();
@@ -3111,7 +3111,7 @@
logd("Unknown package: " + packageName);
return false;
}
- for (UiccAccessRule rule : info.getAccessRules()) {
+ for (UiccAccessRule rule : info.getAllAccessRules()) {
if (rule.getCarrierPrivilegeStatus(packageInfo)
== TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
return true;
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index b4244dd..12b4114 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -191,6 +191,9 @@
@EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
private static final long CALLBACK_ON_MORE_ERROR_CODE_CHANGE = 130595455L;
+ // Null IMEI anomaly uuid
+ private static final UUID IMEI_ANOMALY_UUID = UUID.fromString(
+ "83905f14-6455-450c-be29-8206f0427fe9");
/**
* The key to use when placing the result of {@link #requestModemActivityInfo(ResultReceiver)}
* into the ResultReceiver Bundle.
@@ -2181,7 +2184,11 @@
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_GSM)
public String getImei() {
- return getImei(getSlotIndex());
+ String imei = getImei(getSlotIndex());
+ if (imei == null) {
+ AnomalyReporter.reportAnomaly(IMEI_ANOMALY_UUID, "getImei: IMEI is null.");
+ }
+ return imei;
}
/**
@@ -2224,7 +2231,10 @@
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_GSM)
public String getImei(int slotIndex) {
ITelephony telephony = getITelephony();
- if (telephony == null) return null;
+ if (telephony == null) {
+ AnomalyReporter.reportAnomaly(IMEI_ANOMALY_UUID, "getImei: telephony is null");
+ return null;
+ }
try {
return telephony.getImeiForSlot(slotIndex, getOpPackageName(), getAttributionTag());
diff --git a/tools/fonts/Android.bp b/tools/fonts/Android.bp
index eeb9e3c..f8629f9 100644
--- a/tools/fonts/Android.bp
+++ b/tools/fonts/Android.bp
@@ -24,12 +24,7 @@
python_defaults {
name: "fonts_python_defaults",
version: {
- py2: {
- enabled: false,
- embedded_launcher: false,
- },
py3: {
- enabled: true,
embedded_launcher: true,
},
},
diff --git a/tools/processors/immutability/Android.bp b/tools/processors/immutability/Android.bp
new file mode 100644
index 0000000..985874b
--- /dev/null
+++ b/tools/processors/immutability/Android.bp
@@ -0,0 +1,67 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
+java_library_host {
+ name: "ImmutabilityAnnotationProcessorHostLibrary",
+ srcs: [
+ "src/**/*.kt",
+ "src/**/*.java",
+ ],
+ use_tools_jar: true,
+ // The --add-modules/exports flags below don't work for kotlinc yet, so pin this module to Java
+ // language level 8 (see b/139342589):
+ java_version: "1.8",
+ openjdk9: {
+ javacflags: [
+ "--add-modules=jdk.compiler",
+ "--add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+ "--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
+ "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
+ "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+ ],
+ },
+}
+
+java_plugin {
+ name: "ImmutabilityAnnotationProcessor",
+ processor_class: "android.processor.immutability.ImmutabilityProcessor",
+ static_libs: ["ImmutabilityAnnotationProcessorHostLibrary"],
+}
+
+java_library {
+ name: "ImmutabilityAnnotation",
+ srcs: ["src/**/Immutable.java"],
+ sdk_version: "core_current",
+ host_supported: true,
+}
+
+java_test_host {
+ name: "ImmutabilityAnnotationProcessorUnitTests",
+
+ srcs: ["test/**/*.kt"],
+
+ static_libs: [
+ "compile-testing-prebuilt",
+ "truth-prebuilt",
+ "junit",
+ "kotlin-reflect",
+ "ImmutabilityAnnotationProcessorHostLibrary",
+ ],
+
+ // Bundle the source file so it can be loaded into the test compiler
+ java_resources: [":ImmutabilityAnnotationJavaSource"],
+
+ test_suites: ["general-tests"],
+}
+
+filegroup {
+ name: "ImmutabilityAnnotationJavaSource",
+ srcs: ["src/android/processor/immutability/Immutable.java"],
+ path: "src/android/processor/immutability/",
+}
diff --git a/tools/processors/immutability/OWNERS b/tools/processors/immutability/OWNERS
new file mode 100644
index 0000000..86ae581
--- /dev/null
+++ b/tools/processors/immutability/OWNERS
@@ -0,0 +1 @@
+include /PACKAGE_MANAGER_OWNERS
diff --git a/tools/processors/immutability/TEST_MAPPING b/tools/processors/immutability/TEST_MAPPING
new file mode 100644
index 0000000..4e8e238
--- /dev/null
+++ b/tools/processors/immutability/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+ "presubmit": [
+ {
+ "name": "ImmutabilityAnnotationProcessorUnitTests"
+ }
+ ]
+}
diff --git a/tools/processors/immutability/src/android/processor/immutability/ImmutabilityProcessor.kt b/tools/processors/immutability/src/android/processor/immutability/ImmutabilityProcessor.kt
new file mode 100644
index 0000000..43fc3a7
--- /dev/null
+++ b/tools/processors/immutability/src/android/processor/immutability/ImmutabilityProcessor.kt
@@ -0,0 +1,370 @@
+/*
+ * Copyright (C) 2022 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 android.processor.immutability
+
+import com.sun.tools.javac.code.Symbol
+import com.sun.tools.javac.code.Type
+import javax.annotation.processing.AbstractProcessor
+import javax.annotation.processing.ProcessingEnvironment
+import javax.annotation.processing.RoundEnvironment
+import javax.lang.model.SourceVersion
+import javax.lang.model.element.Element
+import javax.lang.model.element.ElementKind
+import javax.lang.model.element.Modifier
+import javax.lang.model.element.TypeElement
+import javax.lang.model.type.TypeKind
+import javax.lang.model.type.TypeMirror
+import javax.tools.Diagnostic
+
+val IMMUTABLE_ANNOTATION_NAME = Immutable::class.qualifiedName
+
+class ImmutabilityProcessor : AbstractProcessor() {
+
+ companion object {
+ /**
+ * Types that are already immutable.
+ */
+ private val IGNORED_TYPES = listOf(
+ "java.io.File",
+ "java.lang.Boolean",
+ "java.lang.Byte",
+ "java.lang.CharSequence",
+ "java.lang.Character",
+ "java.lang.Double",
+ "java.lang.Float",
+ "java.lang.Integer",
+ "java.lang.Long",
+ "java.lang.Short",
+ "java.lang.String",
+ "java.lang.Void",
+ "android.os.Parcelable.Creator",
+ )
+
+ private val IGNORED_METHODS = listOf(
+ "writeToParcel",
+ )
+ }
+
+ private lateinit var collectionType: TypeMirror
+ private lateinit var mapType: TypeMirror
+
+ private lateinit var ignoredTypes: List<TypeMirror>
+
+ private val seenTypesByPolicy = mutableMapOf<Set<Immutable.Policy.Exception>, Set<Type>>()
+
+ override fun getSupportedSourceVersion() = SourceVersion.latest()!!
+
+ override fun getSupportedAnnotationTypes() = setOf(Immutable::class.qualifiedName)
+
+ override fun init(processingEnv: ProcessingEnvironment) {
+ super.init(processingEnv)
+ collectionType = processingEnv.erasedType("java.util.Collection")!!
+ mapType = processingEnv.erasedType("java.util.Map")!!
+ ignoredTypes = IGNORED_TYPES.mapNotNull { processingEnv.erasedType(it) }
+ }
+
+ override fun process(
+ annotations: MutableSet<out TypeElement>,
+ roundEnvironment: RoundEnvironment
+ ): Boolean {
+ annotations.find {
+ it.qualifiedName.toString() == IMMUTABLE_ANNOTATION_NAME
+ } ?: return false
+ roundEnvironment.getElementsAnnotatedWith(Immutable::class.java)
+ .forEach {
+ visitClass(
+ parentChain = emptyList(),
+ seenTypesByPolicy = seenTypesByPolicy,
+ elementToPrint = it,
+ classType = it as Symbol.TypeSymbol,
+ parentPolicyExceptions = emptySet()
+ )
+ }
+ return true
+ }
+
+ /**
+ * @return true if any error was encountered at this level or any child level
+ */
+ private fun visitClass(
+ parentChain: List<String>,
+ seenTypesByPolicy: MutableMap<Set<Immutable.Policy.Exception>, Set<Type>>,
+ elementToPrint: Element,
+ classType: Symbol.TypeSymbol,
+ parentPolicyExceptions: Set<Immutable.Policy.Exception>,
+ ): Boolean {
+ if (classType.getAnnotation(Immutable.Ignore::class.java) != null) return false
+
+ val policyAnnotation = classType.getAnnotation(Immutable.Policy::class.java)
+ val newPolicyExceptions = parentPolicyExceptions + policyAnnotation?.exceptions.orEmpty()
+
+ // If already seen this type with the same policies applied, skip it
+ val seenTypes = seenTypesByPolicy[newPolicyExceptions]
+ val type = classType.asType()
+ if (seenTypes?.contains(type) == true) return false
+ seenTypesByPolicy[newPolicyExceptions] = seenTypes.orEmpty() + type
+
+ val allowFinalClassesFinalFields =
+ newPolicyExceptions.contains(Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS)
+
+ val filteredElements = classType.enclosedElements
+ .filterNot(::isIgnored)
+
+ val hasFieldError = filteredElements
+ .filter { it.getKind() == ElementKind.FIELD }
+ .fold(false) { anyError, field ->
+ if (field.isStatic) {
+ if (!field.isPrivate) {
+ var finalityError = !field.modifiers.contains(Modifier.FINAL)
+ if (finalityError) {
+ printError(parentChain, field, MessageUtils.staticNonFinalFailure())
+ }
+
+ // Must call visitType first so it doesn't get short circuited by the ||
+ visitType(
+ parentChain = parentChain,
+ seenTypesByPolicy = seenTypesByPolicy,
+ symbol = field,
+ type = field.type,
+ parentPolicyExceptions = parentPolicyExceptions
+ ) || anyError || finalityError
+ }
+ return@fold anyError
+ } else {
+ val isFinal = field.modifiers.contains(Modifier.FINAL)
+ if (!isFinal || !allowFinalClassesFinalFields) {
+ printError(parentChain, field, MessageUtils.memberNotMethodFailure())
+ return@fold true
+ }
+
+ return@fold anyError
+ }
+ }
+
+ // Scan inner classes before methods so that any violations isolated to the file prints
+ // the error on the class declaration rather than on the method that returns the type.
+ // Although it doesn't matter too much either way.
+ val hasClassError = filteredElements
+ .filter { it.getKind() == ElementKind.CLASS }
+ .map { it as Symbol.ClassSymbol }
+ .fold(false) { anyError, innerClass ->
+ // Must call visitClass first so it doesn't get short circuited by the ||
+ visitClass(
+ parentChain,
+ seenTypesByPolicy,
+ innerClass,
+ innerClass,
+ newPolicyExceptions
+ ) || anyError
+ }
+
+ val newChain = parentChain + "$classType"
+
+ val hasMethodError = filteredElements
+ .filter { it.getKind() == ElementKind.METHOD }
+ .map { it as Symbol.MethodSymbol }
+ .filterNot { IGNORED_METHODS.contains(it.name.toString()) }
+ .fold(false) { anyError, method ->
+ // Must call visitMethod first so it doesn't get short circuited by the ||
+ visitMethod(newChain, seenTypesByPolicy, method, newPolicyExceptions) || anyError
+ }
+
+ val className = classType.simpleName.toString()
+ val isRegularClass = classType.getKind() == ElementKind.CLASS
+
+ var anyError = hasFieldError || hasClassError || hasMethodError
+
+ // If final classes are not considered OR there's a non-field failure, also check for
+ // interface/@Immutable, assuming the class is malformed
+ if ((isRegularClass && !allowFinalClassesFinalFields) || hasMethodError || hasClassError) {
+ if (classType.getAnnotation(Immutable::class.java) == null) {
+ printError(
+ parentChain,
+ elementToPrint,
+ MessageUtils.classNotImmutableFailure(className)
+ )
+ anyError = true
+ }
+
+ if (classType.getKind() != ElementKind.INTERFACE) {
+ printError(parentChain, elementToPrint, MessageUtils.nonInterfaceClassFailure())
+ anyError = true
+ }
+ }
+
+ if (isRegularClass && !anyError && allowFinalClassesFinalFields
+ && !classType.modifiers.contains(Modifier.FINAL)
+ ) {
+ printError(parentChain, elementToPrint, MessageUtils.classNotFinalFailure(className))
+ return true
+ }
+
+ return anyError
+ }
+
+ /**
+ * @return true if any error was encountered at this level or any child level
+ */
+ private fun visitMethod(
+ parentChain: List<String>,
+ seenTypesByPolicy: MutableMap<Set<Immutable.Policy.Exception>, Set<Type>>,
+ method: Symbol.MethodSymbol,
+ parentPolicyExceptions: Set<Immutable.Policy.Exception>,
+ ): Boolean {
+ val returnType = method.returnType
+ val typeName = returnType.toString()
+ when (returnType.kind) {
+ TypeKind.BOOLEAN,
+ TypeKind.BYTE,
+ TypeKind.SHORT,
+ TypeKind.INT,
+ TypeKind.LONG,
+ TypeKind.CHAR,
+ TypeKind.FLOAT,
+ TypeKind.DOUBLE,
+ TypeKind.NONE,
+ TypeKind.NULL -> {
+ // Do nothing
+ }
+ TypeKind.VOID -> {
+ if (!method.isConstructor) {
+ printError(parentChain, method, MessageUtils.voidReturnFailure())
+ return true
+ }
+ }
+ TypeKind.ARRAY -> {
+ printError(parentChain, method, MessageUtils.arrayFailure())
+ return true
+ }
+ TypeKind.DECLARED -> {
+ return visitType(
+ parentChain,
+ seenTypesByPolicy,
+ method,
+ method.returnType,
+ parentPolicyExceptions
+ )
+ }
+ TypeKind.ERROR,
+ TypeKind.TYPEVAR,
+ TypeKind.WILDCARD,
+ TypeKind.PACKAGE,
+ TypeKind.EXECUTABLE,
+ TypeKind.OTHER,
+ TypeKind.UNION,
+ TypeKind.INTERSECTION,
+ // Java 9+
+ // TypeKind.MODULE,
+ null -> {
+ printError(
+ parentChain, method,
+ MessageUtils.genericTypeKindFailure(typeName = typeName)
+ )
+ return true
+ }
+ else -> {
+ printError(
+ parentChain, method,
+ MessageUtils.genericTypeKindFailure(typeName = typeName)
+ )
+ return true
+ }
+ }
+
+ return false
+ }
+
+ /**
+ * @return true if any error was encountered at this level or any child level
+ */
+ private fun visitType(
+ parentChain: List<String>,
+ seenTypesByPolicy: MutableMap<Set<Immutable.Policy.Exception>, Set<Type>>,
+ symbol: Symbol,
+ type: Type,
+ parentPolicyExceptions: Set<Immutable.Policy.Exception>,
+ nonInterfaceClassFailure: () -> String = { MessageUtils.nonInterfaceReturnFailure() },
+ ): Boolean {
+ if (type.isPrimitive) return false
+ if (type.isPrimitiveOrVoid) {
+ printError(parentChain, symbol, MessageUtils.voidReturnFailure())
+ return true
+ }
+
+ if (ignoredTypes.any { processingEnv.typeUtils.isAssignable(type, it) }) {
+ return false
+ }
+
+ val policyAnnotation = symbol.getAnnotation(Immutable.Policy::class.java)
+ val newPolicyExceptions = parentPolicyExceptions + policyAnnotation?.exceptions.orEmpty()
+
+ // Collection (and Map) types are ignored for the interface check as they have immutability
+ // enforced through a runtime exception which must be verified in a separate runtime test
+ val isMap = processingEnv.typeUtils.isAssignable(type, mapType)
+ if (!processingEnv.typeUtils.isAssignable(type, collectionType) && !isMap) {
+ if (!type.isInterface && !newPolicyExceptions
+ .contains(Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS)
+ ) {
+ printError(parentChain, symbol, nonInterfaceClassFailure())
+ return true
+ } else {
+ return visitClass(
+ parentChain, seenTypesByPolicy, symbol,
+ processingEnv.typeUtils.asElement(type) as Symbol.TypeSymbol,
+ newPolicyExceptions,
+ )
+ }
+ }
+
+ var anyError = false
+
+ type.typeArguments.forEachIndexed { index, typeArg ->
+ val argError =
+ visitType(parentChain, seenTypesByPolicy, symbol, typeArg, newPolicyExceptions) {
+ MessageUtils.nonInterfaceReturnFailure(
+ prefix = when {
+ !isMap -> ""
+ index == 0 -> "Key " + typeArg.asElement().simpleName
+ else -> "Value " + typeArg.asElement().simpleName
+ }, index = index
+ )
+ }
+ anyError = anyError || argError
+ }
+
+ return anyError
+ }
+
+ private fun printError(
+ parentChain: List<String>,
+ element: Element,
+ message: String,
+ ) = processingEnv.messager.printMessage(
+ Diagnostic.Kind.ERROR,
+ // Drop one from the parent chain so that the directly enclosing class isn't logged.
+ // It exists in the list at this point in the traversal so that further children can
+ // include the right reference.
+ parentChain.dropLast(1).joinToString() + "\n\t" + message,
+ element,
+ )
+
+ private fun ProcessingEnvironment.erasedType(typeName: String) =
+ elementUtils.getTypeElement(typeName)?.asType()?.let(typeUtils::erasure)
+
+ private fun isIgnored(symbol: Symbol) =
+ symbol.getAnnotation(Immutable.Ignore::class.java) != null
+}
\ No newline at end of file
diff --git a/tools/processors/immutability/src/android/processor/immutability/Immutable.java b/tools/processors/immutability/src/android/processor/immutability/Immutable.java
new file mode 100644
index 0000000..ba822ba
--- /dev/null
+++ b/tools/processors/immutability/src/android/processor/immutability/Immutable.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 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 android.processor.immutability;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Marks a class as immutable. When used with the Immutability processor, verifies at compile that
+ * the class is truly immutable. Immutable is defined as:
+ * <ul>
+ * <li>Only exposes methods and/or static final constants</li>
+ * <li>Every exposed type is an @Immutable interface or otherwise immutable class</li>
+ * <ul>
+ * <li>Implicitly immutable types like {@link String} are ignored</li>
+ * <li>{@link Collection} and {@link Map} and their subclasses where immutability is
+ * enforced at runtime are ignored</li>
+ * </ul>
+ * <li>Every method must return a type (no void methods allowed)</li>
+ * <li>All inner classes must be @Immutable interfaces</li>
+ * </ul>
+ */
+public @interface Immutable {
+
+ /**
+ * Marks a specific class, field, or method as ignored for immutability validation.
+ */
+ @Retention(RetentionPolicy.CLASS) // Not SOURCE as that isn't retained for some reason
+ @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
+ @interface Ignore {
+ String reason() default "";
+ }
+
+ /**
+ * Marks an element and its reachable children with a specific policy.
+ */
+ @Retention(RetentionPolicy.CLASS)
+ @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
+ @interface Policy {
+ Exception[] exceptions() default {};
+
+ enum Exception {
+ /**
+ * Allow final classes with only final fields. By default these are not allowed because
+ * direct field access disallows hard removal of APIs (by having their getters return
+ * mocks/stubs) and also prevents field compaction, which can occur with booleans
+ * stuffed into a number as flags.
+ *
+ * This exception is allowed though because several framework classes are built around
+ * the final field access model and it would be unnecessarily difficult to migrate or
+ * wrap each type.
+ */
+ FINAL_CLASSES_WITH_FINAL_FIELDS,
+ }
+ }
+}
diff --git a/tools/processors/immutability/src/android/processor/immutability/MessageUtils.kt b/tools/processors/immutability/src/android/processor/immutability/MessageUtils.kt
new file mode 100644
index 0000000..7fa2fb5
--- /dev/null
+++ b/tools/processors/immutability/src/android/processor/immutability/MessageUtils.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2022 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 android.processor.immutability
+
+object MessageUtils {
+
+ fun classNotImmutableFailure(className: String) = "$className should be marked @Immutable"
+
+ fun classNotFinalFailure(className: String) = "$className should be marked final"
+
+ fun memberNotMethodFailure() = "Member must be a method"
+
+ fun nonInterfaceClassFailure() = "Class was not an interface"
+
+ fun nonInterfaceReturnFailure(prefix: String, index: Int = -1) =
+ if (prefix.isEmpty()) {
+ "Type at index $index was not an interface"
+ } else {
+ "$prefix was not an interface"
+ }
+
+ fun genericTypeKindFailure(typeName: CharSequence) = "TypeKind $typeName unsupported"
+
+ fun arrayFailure() = "Array types are not supported as they can be mutated by callers"
+
+ fun nonInterfaceReturnFailure() = "Must return an interface"
+
+ fun voidReturnFailure() = "Cannot return void"
+
+ fun staticNonFinalFailure() = "Static member must be final"
+}
\ No newline at end of file
diff --git a/tools/processors/immutability/test/android/processor/ImmutabilityProcessorTest.kt b/tools/processors/immutability/test/android/processor/ImmutabilityProcessorTest.kt
new file mode 100644
index 0000000..f26357f
--- /dev/null
+++ b/tools/processors/immutability/test/android/processor/ImmutabilityProcessorTest.kt
@@ -0,0 +1,310 @@
+/*
+ * Copyright (C) 2022 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 android.processor
+
+import android.processor.immutability.IMMUTABLE_ANNOTATION_NAME
+import android.processor.immutability.ImmutabilityProcessor
+import android.processor.immutability.MessageUtils
+import com.google.common.truth.Expect
+import com.google.testing.compile.CompilationSubject.assertThat
+import com.google.testing.compile.Compiler.javac
+import com.google.testing.compile.JavaFileObjects
+import org.junit.Rule
+import org.junit.Test
+import java.util.*
+import javax.tools.JavaFileObject
+
+class ImmutabilityProcessorTest {
+
+ companion object {
+ private const val PACKAGE_PREFIX = "android.processor.immutability"
+ private const val DATA_CLASS_NAME = "DataClass"
+ private val ANNOTATION = JavaFileObjects.forResource("Immutable.java")
+
+ private val FINAL_CLASSES = listOf(
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.NonFinalClassFinalFields",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ public class NonFinalClassFinalFields {
+ private final String finalField;
+ public NonFinalClassFinalFields(String value) {
+ this.finalField = value;
+ }
+ }
+ """.trimIndent()
+ ),
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.NonFinalClassNonFinalFields",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ public class NonFinalClassNonFinalFields {
+ private String nonFinalField;
+ }
+ """.trimIndent()
+ ),
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.FinalClassFinalFields",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ public final class FinalClassFinalFields {
+ private final String finalField;
+ public FinalClassFinalFields(String value) {
+ this.finalField = value;
+ }
+ }
+ """.trimIndent()
+ ),
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.FinalClassNonFinalFields",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ public final class FinalClassNonFinalFields {
+ private String nonFinalField;
+ }
+ """.trimIndent()
+ )
+ )
+ }
+
+ @get:Rule
+ val expect = Expect.create()
+
+ @Test
+ fun validInterface() = test(
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.$DATA_CLASS_NAME",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ import $IMMUTABLE_ANNOTATION_NAME;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.List;
+
+ @Immutable
+ public interface $DATA_CLASS_NAME {
+ InnerInterface DEFAULT = new InnerInterface() {
+ @Override
+ public String getValue() {
+ return "";
+ }
+ @Override
+ public List<String> getArray() {
+ return Collections.emptyList();
+ }
+ };
+
+ String getValue();
+ ArrayList<String> getArray();
+ InnerInterface getInnerInterface();
+
+ @Immutable
+ interface InnerInterface {
+ String getValue();
+ List<String> getArray();
+ }
+ }
+ """.trimIndent()
+ ), errors = emptyList()
+ )
+
+ @Test
+ fun abstractClass() = test(
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.$DATA_CLASS_NAME",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ import $IMMUTABLE_ANNOTATION_NAME;
+ import java.util.Map;
+
+ @Immutable
+ public abstract class $DATA_CLASS_NAME {
+ public static final String IMMUTABLE = "";
+ public static final InnerClass NOT_IMMUTABLE = null;
+ public static InnerClass NOT_FINAL = null;
+
+ // Field finality doesn't matter, methods are always enforced so that future
+ // field compaction or deprecation is possible
+ private final String fieldFinal = "";
+ private String fieldNonFinal;
+ public abstract void sideEffect();
+ public abstract String[] getArray();
+ public abstract InnerClass getInnerClassOne();
+ public abstract InnerClass getInnerClassTwo();
+ @Immutable.Ignore
+ public abstract InnerClass getIgnored();
+ public abstract InnerInterface getInnerInterface();
+
+ public abstract Map<String, String> getValidMap();
+ public abstract Map<InnerClass, InnerClass> getInvalidMap();
+
+ public static final class InnerClass {
+ public String innerField;
+ public String[] getArray() { return null; }
+ }
+
+ public interface InnerInterface {
+ String[] getArray();
+ InnerClass getInnerClass();
+ }
+ }
+ """.trimIndent()
+ ), errors = listOf(
+ nonInterfaceClassFailure(line = 7),
+ nonInterfaceReturnFailure(line = 9),
+ staticNonFinalFailure(line = 10),
+ nonInterfaceReturnFailure(line = 10),
+ memberNotMethodFailure(line = 14),
+ memberNotMethodFailure(line = 15),
+ voidReturnFailure(line = 16),
+ arrayFailure(line = 17),
+ nonInterfaceReturnFailure(line = 18),
+ nonInterfaceReturnFailure(line = 19),
+ classNotImmutableFailure(line = 22, className = "InnerInterface"),
+ nonInterfaceReturnFailure(line = 25, prefix = "Key InnerClass"),
+ nonInterfaceReturnFailure(line = 25, prefix = "Value InnerClass"),
+ classNotImmutableFailure(line = 27, className = "InnerClass"),
+ nonInterfaceClassFailure(line = 27),
+ memberNotMethodFailure(line = 28),
+ arrayFailure(line = 29),
+ arrayFailure(line = 33),
+ nonInterfaceReturnFailure(line = 34),
+ )
+ )
+
+ @Test
+ fun finalClasses() = test(
+ JavaFileObjects.forSourceString(
+ "$PACKAGE_PREFIX.$DATA_CLASS_NAME",
+ /* language=JAVA */ """
+ package $PACKAGE_PREFIX;
+
+ import java.util.List;
+
+ @Immutable
+ public interface $DATA_CLASS_NAME {
+ NonFinalClassFinalFields getNonFinalFinal();
+ List<NonFinalClassNonFinalFields> getNonFinalNonFinal();
+ FinalClassFinalFields getFinalFinal();
+ List<FinalClassNonFinalFields> getFinalNonFinal();
+
+ @Immutable.Policy(exceptions = {Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS})
+ NonFinalClassFinalFields getPolicyNonFinalFinal();
+
+ @Immutable.Policy(exceptions = {Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS})
+ List<NonFinalClassNonFinalFields> getPolicyNonFinalNonFinal();
+
+ @Immutable.Policy(exceptions = {Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS})
+ FinalClassFinalFields getPolicyFinalFinal();
+
+ @Immutable.Policy(exceptions = {Immutable.Policy.Exception.FINAL_CLASSES_WITH_FINAL_FIELDS})
+ List<FinalClassNonFinalFields> getPolicyFinalNonFinal();
+ }
+ """.trimIndent()
+ ), errors = listOf(
+ nonInterfaceReturnFailure(line = 7),
+ nonInterfaceReturnFailure(line = 8, index = 0),
+ nonInterfaceReturnFailure(line = 9),
+ nonInterfaceReturnFailure(line = 10, index = 0),
+ classNotFinalFailure(line = 13, "NonFinalClassFinalFields"),
+ ), otherErrors = listOf(
+ memberNotMethodFailure(line = 4) to FINAL_CLASSES[1],
+ memberNotMethodFailure(line = 4) to FINAL_CLASSES[3],
+ )
+ )
+
+ private fun test(
+ source: JavaFileObject,
+ errors: List<CompilationError>,
+ otherErrors: List<Pair<CompilationError, JavaFileObject>> = emptyList(),
+ ) {
+ val compilation = javac()
+ .withProcessors(ImmutabilityProcessor())
+ .compile(FINAL_CLASSES + ANNOTATION + listOf(source))
+ val allErrors = otherErrors + errors.map { it to source }
+ allErrors.forEach { (error, file) ->
+ try {
+ assertThat(compilation)
+ .hadErrorContaining(error.message)
+ .inFile(file)
+ .onLine(error.line)
+ } catch (e: AssertionError) {
+ // Wrap the exception so that the line number is logged
+ val wrapped = AssertionError("Expected $error, ${e.message}").apply {
+ stackTrace = e.stackTrace
+ }
+
+ // Wrap again with Expect so that all errors are reported. This is very bad code
+ // but can only be fixed by updating compile-testing with a better Truth Subject
+ // implementation.
+ expect.that(wrapped).isNull()
+ }
+ }
+
+ try {
+ assertThat(compilation).hadErrorCount(allErrors.size)
+ } catch (e: AssertionError) {
+ expect.withMessage(
+ compilation.errors()
+ .joinToString(separator = "\n") {
+ "${it.lineNumber}: ${it.getMessage(Locale.ENGLISH)?.trim()}"
+ }
+ ).that(e).isNull()
+ }
+ }
+
+ private fun classNotImmutableFailure(line: Long, className: String) =
+ CompilationError(line = line, message = MessageUtils.classNotImmutableFailure(className))
+
+ private fun nonInterfaceClassFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.nonInterfaceClassFailure())
+
+ private fun nonInterfaceReturnFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.nonInterfaceReturnFailure())
+
+ private fun nonInterfaceReturnFailure(line: Long, prefix: String = "", index: Int = -1) =
+ CompilationError(
+ line = line,
+ message = MessageUtils.nonInterfaceReturnFailure(prefix = prefix, index = index)
+ )
+
+ private fun memberNotMethodFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.memberNotMethodFailure())
+
+ private fun voidReturnFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.voidReturnFailure())
+
+ private fun staticNonFinalFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.staticNonFinalFailure())
+
+ private fun arrayFailure(line: Long) =
+ CompilationError(line = line, message = MessageUtils.arrayFailure())
+
+ private fun classNotFinalFailure(line: Long, className: String) =
+ CompilationError(line = line, message = MessageUtils.classNotFinalFailure(className))
+
+ data class CompilationError(
+ val line: Long,
+ val message: String,
+ )
+}
\ No newline at end of file