Merge "Determine rear display status only based on device states" into udc-dev
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobService.java b/apex/jobscheduler/framework/java/android/app/job/JobService.java
index f48e078..3b5f11b 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobService.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobService.java
@@ -265,7 +265,8 @@
* @see JobInfo.Builder#setRequiredNetworkType(int)
*/
public void onNetworkChanged(@NonNull JobParameters params) {
- Log.w(TAG, "onNetworkChanged() not implemented. Must override in a subclass.");
+ Log.w(TAG, "onNetworkChanged() not implemented in " + getClass().getName()
+ + ". Must override in a subclass.");
}
/**
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index 6eeff82..577260e 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -1577,8 +1577,6 @@
mJobPackageTracker.notePending(jobStatus);
mPendingJobQueue.add(jobStatus);
maybeRunPendingJobsLocked();
- } else {
- evaluateControllerStatesLocked(jobStatus);
}
}
return JobScheduler.RESULT_SUCCESS;
@@ -3050,8 +3048,6 @@
Slog.d(TAG, " queued " + job.toShortString());
}
newReadyJobs.add(job);
- } else {
- evaluateControllerStatesLocked(job);
}
}
@@ -3171,7 +3167,6 @@
} else if (mPendingJobQueue.remove(job)) {
noteJobNonPending(job);
}
- evaluateControllerStatesLocked(job);
}
}
@@ -3297,7 +3292,7 @@
@GuardedBy("mLock")
boolean isReadyToBeExecutedLocked(JobStatus job, boolean rejectActive) {
- final boolean jobReady = job.isReady();
+ final boolean jobReady = job.isReady() || evaluateControllerStatesLocked(job);
if (DEBUG) {
Slog.v(TAG, "isReadyToBeExecutedLocked: " + job.toShortString()
@@ -3372,12 +3367,17 @@
return !appIsBad;
}
+ /**
+ * Gets each controller to evaluate the job's state
+ * and then returns the value of {@link JobStatus#isReady()}.
+ */
@VisibleForTesting
- void evaluateControllerStatesLocked(final JobStatus job) {
+ boolean evaluateControllerStatesLocked(final JobStatus job) {
for (int c = mControllers.size() - 1; c >= 0; --c) {
final StateController sc = mControllers.get(c);
sc.evaluateStateLocked(job);
}
+ return job.isReady();
}
/**
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
index c707069..2550a27 100644
--- a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
+++ b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
@@ -1351,6 +1351,7 @@
}
@Override
+ @EconomyManager.EnabledMode
public int getEnabledMode() {
return InternalResourceService.this.getEnabledMode();
}
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 2d9a99c..ae63816 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -538,6 +538,7 @@
public class DevicePolicyManager {
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public void acknowledgeNewUserDisclaimer();
+ method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void calculateHasIncompatibleAccounts();
method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void clearOrganizationId();
method @RequiresPermission(android.Manifest.permission.CLEAR_FREEZE_PERIOD) public void clearSystemUpdatePolicyFreezePeriodRecord();
method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceNetworkLogs();
@@ -2074,6 +2075,14 @@
public final class SoundTriggerManager {
method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public static android.media.soundtrigger.SoundTriggerInstrumentation attachInstrumentation(@NonNull java.util.concurrent.Executor, @NonNull android.media.soundtrigger.SoundTriggerInstrumentation.GlobalCallback);
+ method @NonNull public android.media.soundtrigger.SoundTriggerManager createManagerForModule(@NonNull android.hardware.soundtrigger.SoundTrigger.ModuleProperties);
+ method @NonNull public android.media.soundtrigger.SoundTriggerManager createManagerForTestModule();
+ method @NonNull public static java.util.List<android.hardware.soundtrigger.SoundTrigger.ModuleProperties> listModuleProperties();
+ method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public int loadSoundModel(@NonNull android.hardware.soundtrigger.SoundTrigger.SoundModel);
+ }
+
+ public static class SoundTriggerManager.Model {
+ method @NonNull public android.hardware.soundtrigger.SoundTrigger.SoundModel getSoundModel();
}
}
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 08a1af4..3d4b6bf 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -209,10 +209,10 @@
* The overlay will maintain the same relative position within the window bounds as the window
* moves. The overlay will also maintain the same relative position within the window bounds if
* the window is resized.
- * To attach an overlay to a window, use {@link attachAccessibilityOverlayToWindow}.
+ * To attach an overlay to a window, use {@link #attachAccessibilityOverlayToWindow}.
* Attaching an overlay to the display means that the overlay is independent of the active
* windows on that display.
- * To attach an overlay to a display, use {@link attachAccessibilityOverlayToDisplay}. </p>
+ * To attach an overlay to a display, use {@link #attachAccessibilityOverlayToDisplay}. </p>
* <p> When positioning an overlay that is attached to a window, the service must use window
* coordinates. In order to position an overlay on top of an existing UI element it is necessary
* to know the bounds of that element in window coordinates. To find the bounds in window
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 808f25e..d4a96b4 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -1018,7 +1018,7 @@
*
* @param motionEventSources A bit mask of {@link android.view.InputDevice} sources.
* @see AccessibilityService#onMotionEvent
- * @see MotionEventSources
+ * @see #MotionEventSources
*/
public void setMotionEventSources(@MotionEventSources int motionEventSources) {
mMotionEventSources = motionEventSources;
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 95e446d..021f932 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -45,6 +45,7 @@
import android.os.WorkSource;
import android.util.ArraySet;
import android.util.Pair;
+import android.util.StatsEvent;
import com.android.internal.os.TimeoutRecord;
@@ -1217,4 +1218,10 @@
*/
public abstract void notifyMediaProjectionEvent(int uid, @NonNull IBinder projectionToken,
@MediaProjectionTokenEvent int event);
+
+ /**
+ * @return The stats event for the cached apps high watermark since last pull.
+ */
+ @NonNull
+ public abstract StatsEvent getCachedAppsHighWatermarkStats(int atomTag, boolean resetAfterPull);
}
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index d73f0cc..61d6787 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -21,6 +21,8 @@
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.content.Intent.FLAG_RECEIVER_FOREGROUND;
import static android.view.Display.INVALID_DISPLAY;
import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED;
@@ -1818,7 +1820,9 @@
* @hide
*/
public int getPendingIntentLaunchFlags() {
- return mPendingIntentLaunchFlags;
+ // b/243794108: Ignore all flags except the new task flag, to be reconsidered in b/254490217
+ return mPendingIntentLaunchFlags &
+ (FLAG_ACTIVITY_NEW_TASK | FLAG_RECEIVER_FOREGROUND);
}
/**
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index bf69531..b5efb73 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -1668,10 +1668,13 @@
static final class ReceiverDispatcher {
final static class InnerReceiver extends IIntentReceiver.Stub {
+ final IApplicationThread mApplicationThread;
final WeakReference<LoadedApk.ReceiverDispatcher> mDispatcher;
final LoadedApk.ReceiverDispatcher mStrongRef;
- InnerReceiver(LoadedApk.ReceiverDispatcher rd, boolean strong) {
+ InnerReceiver(IApplicationThread thread, LoadedApk.ReceiverDispatcher rd,
+ boolean strong) {
+ mApplicationThread = thread;
mDispatcher = new WeakReference<LoadedApk.ReceiverDispatcher>(rd);
mStrongRef = strong ? rd : null;
}
@@ -1718,7 +1721,8 @@
if (extras != null) {
extras.setAllowFds(false);
}
- mgr.finishReceiver(this, resultCode, data, extras, false, intent.getFlags());
+ mgr.finishReceiver(mApplicationThread.asBinder(), resultCode, data,
+ extras, false, intent.getFlags());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1825,7 +1829,7 @@
}
mAppThread = appThread;
- mIIntentReceiver = new InnerReceiver(this, !registered);
+ mIIntentReceiver = new InnerReceiver(mAppThread, this, !registered);
mReceiver = receiver;
mContext = context;
mActivityThread = activityThread;
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 63da0a2..d375760 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -2916,6 +2916,14 @@
}
}
+ if (isStyle(CallStyle.class) & extras != null) {
+ Person callPerson = extras.getParcelable(EXTRA_CALL_PERSON);
+ if (callPerson != null) {
+ visitor.accept(callPerson.getIconUri());
+ }
+ visitIconUri(visitor, extras.getParcelable(EXTRA_VERIFICATION_ICON));
+ }
+
if (mBubbleMetadata != null) {
visitIconUri(visitor, mBubbleMetadata.getIcon());
}
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index dbba0c6..4f5da99 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -506,10 +506,10 @@
// InputManager stores its own static instance for historical purposes.
registerService(Context.INPUT_SERVICE, InputManager.class,
- new ServiceFetcher<InputManager>() {
+ new CachedServiceFetcher<InputManager>() {
@Override
- public InputManager getService(ContextImpl ctx) {
- return InputManager.getInstance(ctx.getOuterContext());
+ public InputManager createService(ContextImpl ctx) {
+ return new InputManager(ctx.getOuterContext());
}});
registerService(Context.DISPLAY_SERVICE, DisplayManager.class,
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index ebd525e..6592019 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -303,7 +303,7 @@
private final Context mContext;
private final boolean mWcgEnabled;
private final ColorManagementProxy mCmProxy;
- private Boolean mIsLockscreenLiveWallpaperEnabled = null;
+ private static Boolean sIsLockscreenLiveWallpaperEnabled = null;
/**
* Special drawable that draws a wallpaper as fast as possible. Assumes
@@ -823,18 +823,18 @@
@TestApi
public boolean isLockscreenLiveWallpaperEnabled() {
if (sGlobals == null) {
- mIsLockscreenLiveWallpaperEnabled = SystemProperties.getBoolean(
+ sIsLockscreenLiveWallpaperEnabled = SystemProperties.getBoolean(
"persist.wm.debug.lockscreen_live_wallpaper", false);
}
- if (mIsLockscreenLiveWallpaperEnabled == null) {
+ if (sIsLockscreenLiveWallpaperEnabled == null) {
try {
- mIsLockscreenLiveWallpaperEnabled =
+ sIsLockscreenLiveWallpaperEnabled =
sGlobals.mService.isLockscreenLiveWallpaperEnabled();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
- return mIsLockscreenLiveWallpaperEnabled;
+ return sIsLockscreenLiveWallpaperEnabled;
}
/**
@@ -2757,7 +2757,7 @@
public static InputStream openDefaultWallpaper(Context context, @SetWallpaperFlags int which) {
final String whichProp;
final int defaultResId;
- if (which == FLAG_LOCK) {
+ if (which == FLAG_LOCK && !sIsLockscreenLiveWallpaperEnabled) {
/* Factory-default lock wallpapers are not yet supported
whichProp = PROP_LOCK_WALLPAPER;
defaultResId = com.android.internal.R.drawable.default_lock_wallpaper;
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 4d3338b..a8a2ad1 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -16825,6 +16825,23 @@
}
/**
+ * Recalculate the incompatible accounts cache.
+ *
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS)
+ public void calculateHasIncompatibleAccounts() {
+ if (mService != null) {
+ try {
+ mService.calculateHasIncompatibleAccounts();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ }
+
+ /**
* @return {@code true} if bypassing the device policy management role qualification is allowed
* with the current state of the device.
*
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 9b0b18a..9795cab 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -608,4 +608,6 @@
boolean isDeviceFinanced(String callerPackageName);
String getFinancedDeviceKioskRoleHolder(String callerPackageName);
+
+ void calculateHasIncompatibleAccounts();
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 154068e..307f306 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -16,6 +16,7 @@
package android.content;
+import static android.app.sdksandbox.SdkSandboxManager.ACTION_START_SANDBOXED_ACTIVITY;
import static android.content.ContentProvider.maybeAddUserId;
import android.Manifest;
@@ -12348,7 +12349,9 @@
null, new String[] { getType() },
new ClipData.Item(text, htmlText, null, stream));
setClipData(clipData);
- addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ if (stream != null) {
+ addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ }
return true;
}
} catch (ClassCastException e) {
@@ -12387,7 +12390,9 @@
}
setClipData(clipData);
- addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ if (streams != null) {
+ addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ }
return true;
}
} catch (ClassCastException e) {
@@ -12463,4 +12468,19 @@
public boolean isDocument() {
return (mFlags & FLAG_ACTIVITY_NEW_DOCUMENT) == FLAG_ACTIVITY_NEW_DOCUMENT;
}
+
+ /** @hide */
+ public boolean isSandboxActivity(@NonNull Context context) {
+ if (mAction != null && mAction.equals(ACTION_START_SANDBOXED_ACTIVITY)) {
+ return true;
+ }
+ final String sandboxPackageName = context.getPackageManager().getSdkSandboxPackageName();
+ if (mPackage != null && mPackage.equals(sandboxPackageName)) {
+ return true;
+ }
+ if (mComponent != null && mComponent.getPackageName().equals(sandboxPackageName)) {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 048289f..960d10a 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2628,6 +2628,15 @@
return Build.VERSION_CODES.CUR_DEVELOPMENT;
}
+ // STOPSHIP: hack for the pre-release SDK
+ if (platformSdkCodenames.length == 0
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
+ targetCode)) {
+ Slog.w(TAG, "Package requires development platform " + targetCode
+ + ", returning current version " + Build.VERSION.SDK_INT);
+ return Build.VERSION.SDK_INT;
+ }
+
// Otherwise, we're looking at an incompatible pre-release SDK.
if (platformSdkCodenames.length > 0) {
outError[0] = "Requires development platform " + targetCode
@@ -2699,6 +2708,15 @@
return Build.VERSION_CODES.CUR_DEVELOPMENT;
}
+ // STOPSHIP: hack for the pre-release SDK
+ if (platformSdkCodenames.length == 0
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
+ minCode)) {
+ Slog.w(TAG, "Package requires min development platform " + minCode
+ + ", returning current version " + Build.VERSION.SDK_INT);
+ return Build.VERSION.SDK_INT;
+ }
+
// Otherwise, we're looking at an incompatible pre-release SDK.
if (platformSdkCodenames.length > 0) {
outError[0] = "Requires development platform " + minCode
diff --git a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
index 3e1c5bb..8cc4cdb 100644
--- a/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
+++ b/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java
@@ -316,6 +316,15 @@
return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
}
+ // STOPSHIP: hack for the pre-release SDK
+ if (platformSdkCodenames.length == 0
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
+ minCode)) {
+ Slog.w(TAG, "Parsed package requires min development platform " + minCode
+ + ", returning current version " + Build.VERSION.SDK_INT);
+ return input.success(Build.VERSION.SDK_INT);
+ }
+
// Otherwise, we're looking at an incompatible pre-release SDK.
if (platformSdkCodenames.length > 0) {
return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK,
@@ -368,19 +377,27 @@
return input.success(targetVers);
}
+ // If it's a pre-release SDK and the codename matches this platform, it
+ // definitely targets this SDK.
+ if (matchTargetCode(platformSdkCodenames, targetCode)) {
+ return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
+ }
+
+ // STOPSHIP: hack for the pre-release SDK
+ if (platformSdkCodenames.length == 0
+ && Build.VERSION.KNOWN_CODENAMES.stream().max(String::compareTo).orElse("").equals(
+ targetCode)) {
+ Slog.w(TAG, "Parsed package requires development platform " + targetCode
+ + ", returning current version " + Build.VERSION.SDK_INT);
+ return input.success(Build.VERSION.SDK_INT);
+ }
+
try {
if (allowUnknownCodenames && UnboundedSdkLevel.isAtMost(targetCode)) {
return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
}
} catch (IllegalArgumentException e) {
- // isAtMost() throws it when encountering an older SDK codename
- return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, e.getMessage());
- }
-
- // If it's a pre-release SDK and the codename matches this platform, it
- // definitely targets this SDK.
- if (matchTargetCode(platformSdkCodenames, targetCode)) {
- return input.success(Build.VERSION_CODES.CUR_DEVELOPMENT);
+ return input.error(PackageManager.INSTALL_FAILED_OLDER_SDK, "Bad package SDK");
}
// Otherwise, we're looking at an incompatible pre-release SDK.
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index ce6e1c7..08ba5b6 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -557,15 +557,25 @@
boolean applyToSize) {
inoutDm.density = inoutDm.noncompatDensity * invertedRatio;
inoutDm.densityDpi = (int) ((inoutDm.noncompatDensityDpi * invertedRatio) + .5f);
+ // Note: since this is changing the scaledDensity, you might think we also need to change
+ // inoutDm.fontScaleConverter to accurately calculate non-linear font scaling. But we're not
+ // going to do that, for a couple of reasons (see b/265695259 for details):
+ // 1. The first case is only for apps targeting SDK < 4. These ancient apps will just have
+ // to live with linear font scaling. We don't want to make anything more unpredictable.
+ // 2. The second case where this is called is for scaling down games. But it is called in
+ // two situations:
+ // a. When from ResourcesImpl.updateConfiguration(), we will set the fontScaleConverter
+ // *after* this method is called. That's the only place where the app will actually
+ // use the DisplayMetrics for scaling fonts in its resources.
+ // b. Sometime later by WindowManager in onResume or other windowing events. In this case
+ // the DisplayMetrics object is never used by the app/resources, so it's ok if
+ // fontScaleConverter is null because it's not being used to scale fonts anyway.
inoutDm.scaledDensity = inoutDm.noncompatScaledDensity * invertedRatio;
inoutDm.xdpi = inoutDm.noncompatXdpi * invertedRatio;
inoutDm.ydpi = inoutDm.noncompatYdpi * invertedRatio;
if (applyToSize) {
inoutDm.widthPixels = (int) (inoutDm.widthPixels * invertedRatio + 0.5f);
inoutDm.heightPixels = (int) (inoutDm.heightPixels * invertedRatio + 0.5f);
-
- float fontScale = inoutDm.scaledDensity / inoutDm.density;
- inoutDm.fontScaleConverter = FontScaleConverterFactory.forScale(fontScale);
}
}
diff --git a/core/java/android/content/res/FontScaleConverterFactory.java b/core/java/android/content/res/FontScaleConverterFactory.java
index 6b09c30..5eb6526 100644
--- a/core/java/android/content/res/FontScaleConverterFactory.java
+++ b/core/java/android/content/res/FontScaleConverterFactory.java
@@ -34,6 +34,8 @@
@VisibleForTesting
static final SparseArray<FontScaleConverter> LOOKUP_TABLES = new SparseArray<>();
+ private static float sMinScaleBeforeCurvesApplied = 1.05f;
+
static {
// These were generated by frameworks/base/tools/fonts/font-scaling-array-generator.js and
// manually tweaked for optimum readability.
@@ -82,11 +84,30 @@
new float[] { 16f, 20f, 24f, 26f, 30f, 34f, 36f, 38f, 100})
);
+ sMinScaleBeforeCurvesApplied = getScaleFromKey(LOOKUP_TABLES.keyAt(0)) - 0.02f;
+ if (sMinScaleBeforeCurvesApplied <= 1.0f) {
+ throw new IllegalStateException(
+ "You should only apply non-linear scaling to font scales > 1"
+ );
+ }
}
private FontScaleConverterFactory() {}
/**
+ * Returns true if non-linear font scaling curves would be in effect for the given scale, false
+ * if the scaling would follow a linear curve or for no scaling.
+ *
+ * <p>Example usage:
+ * <code>isNonLinearFontScalingActive(getResources().getConfiguration().fontScale)</code>
+ *
+ * @hide
+ */
+ public static boolean isNonLinearFontScalingActive(float fontScale) {
+ return fontScale >= sMinScaleBeforeCurvesApplied;
+ }
+
+ /**
* Finds a matching FontScaleConverter for the given fontScale factor.
*
* @param fontScale the scale factor, usually from {@link Configuration#fontScale}.
@@ -97,10 +118,7 @@
*/
@Nullable
public static FontScaleConverter forScale(float fontScale) {
- if (fontScale <= 1) {
- // We don't need non-linear curves for shrinking text or for 100%.
- // Also, fontScale==0 should not have a curve either.
- // And ignore negative font scales; that's just silly.
+ if (!isNonLinearFontScalingActive(fontScale)) {
return null;
}
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index 6d8c4a9..c2aebd7 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -450,6 +450,27 @@
}
/**
+ * Returns the {@link Sensor} object identified by the given sensor handle.
+ *
+ * The raw sensor handle integer is an implementation detail and as such this method should only
+ * be used by internal system components.
+ *
+ * @param sensorHandle The integer handle uniquely identifying the sensor.
+ * @return A Sensor object identified by the given {@code sensorHandle}, if such a sensor
+ * exists, {@code null} otherwise.
+ *
+ * @hide
+ */
+ public @Nullable Sensor getSensorByHandle(int sensorHandle) {
+ for (final Sensor sensor : getFullSensorList()) {
+ if (sensor.getHandle() == sensorHandle) {
+ return sensor;
+ }
+ }
+ return null;
+ }
+
+ /**
* Use this method to get a list of available dynamic sensors of a certain type.
* Make multiple calls to get sensors of different types or use
* {@link android.hardware.Sensor#TYPE_ALL Sensor.TYPE_ALL} to get all dynamic sensors.
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index 73157e6..d8ab6f7 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -222,6 +222,12 @@
/** @hide */
@Override
+ public Sensor getSensorByHandle(int sensorHandle) {
+ return mHandleToSensor.get(sensorHandle);
+ }
+
+ /** @hide */
+ @Override
protected List<Sensor> getFullDynamicSensorList() {
// only set up broadcast receiver if the application tries to find dynamic sensors or
// explicitly register a DynamicSensorCallback
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index 72a3f6c..b453304 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -53,12 +53,16 @@
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
+import libcore.util.EmptyArray;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.Executor;
+import java.util.function.Predicate;
/**
@@ -86,9 +90,6 @@
@GuardedBy("mLock")
private final WeakDisplayCache mDisplayCache = new WeakDisplayCache();
- @GuardedBy("mLock")
- private final ArrayList<Display> mTempDisplays = new ArrayList<Display>();
-
/**
* Broadcast receiver that indicates when the Wifi display status changes.
* <p>
@@ -627,9 +628,7 @@
* @return The display object, or null if there is no valid display with the given id.
*/
public Display getDisplay(int displayId) {
- synchronized (mLock) {
- return getOrCreateDisplayLocked(displayId, false /*assumeValid*/);
- }
+ return getOrCreateDisplay(displayId, false /*assumeValid*/);
}
/**
@@ -661,75 +660,67 @@
boolean includeDisabled = (category != null
&& category.equals(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED));
final int[] displayIds = mGlobal.getDisplayIds(includeDisabled);
- synchronized (mLock) {
- try {
- if (DISPLAY_CATEGORY_PRESENTATION.equals(category)) {
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_WIFI,
- Display.FLAG_PRESENTATION);
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_EXTERNAL,
- Display.FLAG_PRESENTATION);
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_OVERLAY,
- Display.FLAG_PRESENTATION);
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_VIRTUAL,
- Display.FLAG_PRESENTATION);
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_INTERNAL,
- Display.FLAG_PRESENTATION);
- } else if (DISPLAY_CATEGORY_REAR.equals(category)) {
- addDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_INTERNAL,
- Display.FLAG_REAR);
- } else if (category == null
- || DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED.equals(category)) {
- addAllDisplaysLocked(mTempDisplays, displayIds);
- }
- return mTempDisplays.toArray(new Display[mTempDisplays.size()]);
- } finally {
- mTempDisplays.clear();
- }
+ if (DISPLAY_CATEGORY_PRESENTATION.equals(category)) {
+ return getDisplays(displayIds, DisplayManager::isPresentationDisplay);
+ } else if (DISPLAY_CATEGORY_REAR.equals(category)) {
+ return getDisplays(displayIds, DisplayManager::isRearDisplay);
+ } else if (category == null || DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED.equals(category)) {
+ return getDisplays(displayIds, Objects::nonNull);
}
+ return (Display[]) EmptyArray.OBJECT;
}
- @GuardedBy("mLock")
- private void addAllDisplaysLocked(ArrayList<Display> displays, int[] displayIds) {
- for (int i = 0; i < displayIds.length; i++) {
- Display display = getOrCreateDisplayLocked(displayIds[i], true /*assumeValid*/);
- if (display != null) {
- displays.add(display);
- }
- }
- }
-
- @GuardedBy("mLock")
- private void addDisplaysLocked(
- ArrayList<Display> displays, int[] displayIds, int matchType, int flagMask) {
+ private Display[] getDisplays(int[] displayIds, Predicate<Display> predicate) {
+ ArrayList<Display> tmpDisplays = new ArrayList<>();
for (int displayId : displayIds) {
- if (displayId == DEFAULT_DISPLAY) {
- continue;
+ Display display = getOrCreateDisplay(displayId, /*assumeValid=*/true);
+ if (predicate.test(display)) {
+ tmpDisplays.add(display);
}
+ }
+ return tmpDisplays.toArray(new Display[tmpDisplays.size()]);
+ }
- Display display = getOrCreateDisplayLocked(displayId, /* assumeValid= */ true);
- if (display != null
- && (display.getFlags() & flagMask) == flagMask
- && display.getType() == matchType) {
- displays.add(display);
- }
+ private static boolean isPresentationDisplay(@Nullable Display display) {
+ if (display == null || (display.getDisplayId() == DEFAULT_DISPLAY)
+ || (display.getFlags() & Display.FLAG_PRESENTATION) == 0) {
+ return false;
+ }
+ switch (display.getType()) {
+ case Display.TYPE_INTERNAL:
+ case Display.TYPE_EXTERNAL:
+ case Display.TYPE_WIFI:
+ case Display.TYPE_OVERLAY:
+ case Display.TYPE_VIRTUAL:
+ return true;
+ default:
+ return false;
}
}
- @GuardedBy("mLock")
- private Display getOrCreateDisplayLocked(int displayId, boolean assumeValid) {
- Display display = mDisplayCache.get(displayId);
- if (display == null) {
- // TODO: We cannot currently provide any override configurations for metrics on displays
- // other than the display the context is associated with.
- final Resources resources = mContext.getDisplayId() == displayId
- ? mContext.getResources() : null;
+ private static boolean isRearDisplay(@Nullable Display display) {
+ return display != null && display.getDisplayId() != DEFAULT_DISPLAY
+ && display.getType() == Display.TYPE_INTERNAL
+ && (display.getFlags() & Display.FLAG_REAR) != 0;
+ }
- display = mGlobal.getCompatibleDisplay(displayId, resources);
- if (display != null) {
- mDisplayCache.put(display);
+ private Display getOrCreateDisplay(int displayId, boolean assumeValid) {
+ Display display;
+ synchronized (mLock) {
+ display = mDisplayCache.get(displayId);
+ if (display == null) {
+ // TODO: We cannot currently provide any override configurations for metrics on
+ // displays other than the display the context is associated with.
+ final Resources resources = mContext.getDisplayId() == displayId
+ ? mContext.getResources() : null;
+
+ display = mGlobal.getCompatibleDisplay(displayId, resources);
+ if (display != null) {
+ mDisplayCache.put(display);
+ }
+ } else if (!assumeValid && !display.isValid()) {
+ display = null;
}
- } else if (!assumeValid && !display.isValid()) {
- display = null;
}
return display;
}
diff --git a/core/java/android/hardware/face/FaceManager.java b/core/java/android/hardware/face/FaceManager.java
index 55b20e1..3bc240c 100644
--- a/core/java/android/hardware/face/FaceManager.java
+++ b/core/java/android/hardware/face/FaceManager.java
@@ -44,6 +44,7 @@
import android.os.RemoteException;
import android.os.Trace;
import android.os.UserHandle;
+import android.provider.Settings;
import android.util.Slog;
import android.view.Surface;
@@ -127,6 +128,11 @@
@Override // binder call
public void onRemoved(Face face, int remaining) {
mHandler.obtainMessage(MSG_REMOVED, remaining, 0, face).sendToTarget();
+ if (remaining == 0) {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.FACE_UNLOCK_RE_ENROLL, 0,
+ UserHandle.USER_CURRENT);
+ }
}
@Override
@@ -342,6 +348,14 @@
return;
}
+ if (getEnrolledFaces(userId).size()
+ >= mContext.getResources().getInteger(R.integer.config_faceMaxTemplatesPerUser)) {
+ callback.onEnrollmentError(FACE_ERROR_HW_UNAVAILABLE,
+ getErrorString(mContext, FACE_ERROR_HW_UNAVAILABLE,
+ 0 /* vendorCode */));
+ return;
+ }
+
if (mService != null) {
try {
mEnrollmentCallback = callback;
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index eb8136e..84de1a6 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -832,7 +832,7 @@
}
/**
- * Removes all face templates for the given user.
+ * Removes all fingerprint templates for the given user.
* @hide
*/
@RequiresPermission(MANAGE_FINGERPRINT)
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 9cacfff..a0cceae 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -39,7 +39,6 @@
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.Vibrator;
-import android.sysprop.InputProperties;
import android.util.Log;
import android.view.Display;
import android.view.InputDevice;
@@ -53,11 +52,8 @@
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
-import com.android.internal.annotations.VisibleForTesting;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -73,20 +69,10 @@
// To enable these logs, run: 'adb shell setprop log.tag.InputManager DEBUG' (requires restart)
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static InputManager sInstance;
-
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private final IInputManager mIm;
/**
- * We hold a weak reference to the context to avoid leaking it indefinitely,
- * since we currently store the input manager instance as a static variable that
- * will outlive any context.
- */
- @Nullable
- private WeakReference<Context> mWeakContext;
-
- /**
* Whether a PointerIcon is shown for stylus pointers.
* Obtain using {@link #isStylusPointerIconEnabled()}.
*/
@@ -255,99 +241,43 @@
*/
public static final int SWITCH_STATE_ON = 1;
- private static String sVelocityTrackerStrategy;
+ private final InputManagerGlobal mGlobal;
+ private final Context mContext;
- private InputManagerGlobal mGlobal;
-
- private InputManager() {
+ /** @hide */
+ public InputManager(Context context) {
mGlobal = InputManagerGlobal.getInstance();
mIm = mGlobal.getInputManagerService();
- try {
- sVelocityTrackerStrategy = mIm.getVelocityTrackerStrategy();
- } catch (RemoteException ex) {
- Log.w(TAG, "Could not get VelocityTracker strategy: " + ex);
- }
+ mContext = context;
}
/**
* Gets an instance of the input manager.
*
- * @return The input manager instance.
+ * Warning: The usage of this method is not supported!
*
- * @hide
- */
- @VisibleForTesting
- public static InputManager resetInstance(IInputManager inputManagerService) {
- synchronized (InputManager.class) {
- InputManagerGlobal.resetInstance(inputManagerService);
- sInstance = new InputManager();
- return sInstance;
- }
- }
-
- /**
- * Clear the instance of the input manager.
+ * @return The input manager instance.
+ * Use {@link Context#getSystemService(Class)}
+ * to obtain the InputManager instance.
*
- * @hide
- */
- @VisibleForTesting
- public static void clearInstance() {
- synchronized (InputManager.class) {
- InputManagerGlobal.clearInstance();
- sInstance = null;
- }
- }
-
- /**
- * Gets an instance of the input manager.
+ * TODO (b/277717573): Soft remove this API in version V.
+ * TODO (b/277039664): Migrate app usage off this API.
*
- * @return The input manager instance.
- * @deprecated Use {@link Context#getSystemService(Class)} or {@link #getInstance(Context)}
- * to obtain the InputManager instance.
* @hide
*/
@Deprecated
@UnsupportedAppUsage
public static InputManager getInstance() {
- return getInstance(ActivityThread.currentApplication());
+ return Objects.requireNonNull(ActivityThread.currentApplication())
+ .getSystemService(InputManager.class);
}
/**
- * Gets an instance of the input manager.
- *
- * @return The input manager instance.
- * @hide
- */
- public static InputManager getInstance(Context context) {
- synchronized (InputManager.class) {
- if (sInstance == null) {
- sInstance = new InputManager();
- }
- if (sInstance.mWeakContext == null || sInstance.mWeakContext.get() == null) {
- sInstance.mWeakContext = new WeakReference(context);
- }
- return sInstance;
- }
- }
-
- @NonNull
- private Context getContext() {
- WeakReference<Context> weakContext = Objects.requireNonNull(mWeakContext,
- "A context is required for InputManager. Get the InputManager instance using "
- + "Context#getSystemService before calling this method.");
- // If we get at this point, an app calling this function could potentially expect a
- // Context that has disappeared due to garbage collection. Holding a weak reference
- // is a temporary solution that should be resolved before the release of a
- // production version. This is being tracked in b/267758905
- return Objects.requireNonNull(weakContext.get(), "missing Context");
- }
-
- /**
- * Get the current VelocityTracker strategy. Only works when the system has fully booted up.
+ * Get the current VelocityTracker strategy.
* @hide
*/
public String getVelocityTrackerStrategy() {
- return sVelocityTrackerStrategy;
+ return mGlobal.getVelocityTrackerStrategy();
}
/**
@@ -584,11 +514,7 @@
@NonNull
public KeyboardLayout[] getKeyboardLayoutsForInputDevice(
@NonNull InputDeviceIdentifier identifier) {
- try {
- return mIm.getKeyboardLayoutsForInputDevice(identifier);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ return mGlobal.getKeyboardLayoutsForInputDevice(identifier);
}
/**
@@ -647,19 +573,8 @@
@RequiresPermission(Manifest.permission.SET_KEYBOARD_LAYOUT)
public void setCurrentKeyboardLayoutForInputDevice(@NonNull InputDeviceIdentifier identifier,
@NonNull String keyboardLayoutDescriptor) {
- if (identifier == null) {
- throw new IllegalArgumentException("identifier must not be null");
- }
- if (keyboardLayoutDescriptor == null) {
- throw new IllegalArgumentException("keyboardLayoutDescriptor must not be null");
- }
-
- try {
- mIm.setCurrentKeyboardLayoutForInputDevice(identifier,
- keyboardLayoutDescriptor);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
+ mGlobal.setCurrentKeyboardLayoutForInputDevice(identifier,
+ keyboardLayoutDescriptor);
}
/**
@@ -956,8 +871,7 @@
*/
@FloatRange(from = 0, to = 1)
public float getMaximumObscuringOpacityForTouch() {
- Context context = ActivityThread.currentApplication();
- return InputSettings.getMaximumObscuringOpacityForTouch(context);
+ return InputSettings.getMaximumObscuringOpacityForTouch(mContext);
}
/**
@@ -1123,9 +1037,7 @@
*/
public boolean isStylusPointerIconEnabled() {
if (mIsStylusPointerIconEnabled == null) {
- mIsStylusPointerIconEnabled = getContext().getResources()
- .getBoolean(com.android.internal.R.bool.config_enableStylusPointerIcon)
- || InputProperties.force_enable_stylus_pointer_icon().orElse(false);
+ mIsStylusPointerIconEnabled = InputSettings.isStylusPointerIconEnabled(mContext);
}
return mIsStylusPointerIconEnabled;
}
diff --git a/core/java/android/hardware/input/InputManagerGlobal.java b/core/java/android/hardware/input/InputManagerGlobal.java
index 701980d..c0877d3 100644
--- a/core/java/android/hardware/input/InputManagerGlobal.java
+++ b/core/java/android/hardware/input/InputManagerGlobal.java
@@ -102,17 +102,26 @@
private static InputManagerGlobal sInstance;
+ private final String mVelocityTrackerStrategy;
+
private final IInputManager mIm;
public InputManagerGlobal(IInputManager im) {
mIm = im;
+ String strategy = null;
+ try {
+ strategy = mIm.getVelocityTrackerStrategy();
+ } catch (RemoteException ex) {
+ Log.w(TAG, "Could not get VelocityTracker strategy: " + ex);
+ }
+ mVelocityTrackerStrategy = strategy;
}
/**
* Gets an instance of the input manager global singleton.
*
- * @return The display manager instance, may be null early in system startup
- * before the display manager has been fully initialized.
+ * @return The input manager instance, may be null early in system startup
+ * before the input manager has been fully initialized.
*/
public static InputManagerGlobal getInstance() {
synchronized (InputManagerGlobal.class) {
@@ -152,6 +161,14 @@
}
/**
+ * Get the current VelocityTracker strategy.
+ * Only works when the system has fully booted up.
+ */
+ public String getVelocityTrackerStrategy() {
+ return mVelocityTrackerStrategy;
+ }
+
+ /**
* @see InputManager#getInputDevice(int)
*/
@Nullable
@@ -309,9 +326,7 @@
* @see InputManager#registerInputDeviceListener
*/
public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) {
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
- }
+ Objects.requireNonNull(listener, "listener must not be null");
synchronized (mInputDeviceListeners) {
populateInputDevicesLocked();
@@ -407,9 +422,7 @@
* @see InputManager#getInputDeviceByDescriptor
*/
InputDevice getInputDeviceByDescriptor(String descriptor) {
- if (descriptor == null) {
- throw new IllegalArgumentException("descriptor must not be null.");
- }
+ Objects.requireNonNull(descriptor, "descriptor must not be null.");
synchronized (mInputDeviceListeners) {
populateInputDevicesLocked();
@@ -526,9 +539,8 @@
*/
void registerOnTabletModeChangedListener(
OnTabletModeChangedListener listener, Handler handler) {
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
- }
+ Objects.requireNonNull(listener, "listener must not be null");
+
synchronized (mOnTabletModeChangedListeners) {
if (mOnTabletModeChangedListeners == null) {
initializeTabletModeListenerLocked();
@@ -546,9 +558,8 @@
* @see InputManager#unregisterOnTabletModeChangedListener(OnTabletModeChangedListener)
*/
void unregisterOnTabletModeChangedListener(OnTabletModeChangedListener listener) {
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
- }
+ Objects.requireNonNull(listener, "listener must not be null");
+
synchronized (mOnTabletModeChangedListeners) {
int idx = findOnTabletModeChangedListenerLocked(listener);
if (idx >= 0) {
@@ -603,7 +614,7 @@
/**
* @see InputManager#addInputDeviceBatteryListener(int, Executor, InputDeviceBatteryListener)
*/
- void addInputDeviceBatteryListener(int deviceId, @NonNull Executor executor,
+ public void addInputDeviceBatteryListener(int deviceId, @NonNull Executor executor,
@NonNull InputDeviceBatteryListener listener) {
Objects.requireNonNull(executor, "executor should not be null");
Objects.requireNonNull(listener, "listener should not be null");
@@ -714,7 +725,7 @@
}
/**
- * @see InputManager#getInputDeviceBatteryState(int, boolean)
+ * @see #getInputDeviceBatteryState(int, boolean)
*/
@NonNull
public BatteryState getInputDeviceBatteryState(int deviceId, boolean hasBattery) {
@@ -877,6 +888,38 @@
}
/**
+ * @see InputManager#getKeyboardLayoutsForInputDevice(InputDeviceIdentifier)
+ */
+ @NonNull
+ public KeyboardLayout[] getKeyboardLayoutsForInputDevice(
+ @NonNull InputDeviceIdentifier identifier) {
+ try {
+ return mIm.getKeyboardLayoutsForInputDevice(identifier);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * @see InputManager#setCurrentKeyboardLayoutForInputDevice
+ * (InputDeviceIdentifier, String)
+ */
+ @RequiresPermission(Manifest.permission.SET_KEYBOARD_LAYOUT)
+ public void setCurrentKeyboardLayoutForInputDevice(
+ @NonNull InputDeviceIdentifier identifier,
+ @NonNull String keyboardLayoutDescriptor) {
+ Objects.requireNonNull(identifier, "identifier must not be null");
+ Objects.requireNonNull(keyboardLayoutDescriptor,
+ "keyboardLayoutDescriptor must not be null");
+ try {
+ mIm.setCurrentKeyboardLayoutForInputDevice(identifier,
+ keyboardLayoutDescriptor);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* @see InputDevice#getSensorManager()
*/
@NonNull
@@ -1162,9 +1205,8 @@
*/
public boolean injectInputEvent(InputEvent event, int mode, int targetUid) {
- if (event == null) {
- throw new IllegalArgumentException("event must not be null");
- }
+ Objects.requireNonNull(event , "event must not be null");
+
if (mode != InputEventInjectionSync.NONE
&& mode != InputEventInjectionSync.WAIT_FOR_FINISHED
&& mode != InputEventInjectionSync.WAIT_FOR_RESULT) {
@@ -1210,7 +1252,7 @@
/**
* @see InputManager#requestPointerCapture(IBinder, boolean)
*/
- void requestPointerCapture(IBinder windowToken, boolean enable) {
+ public void requestPointerCapture(IBinder windowToken, boolean enable) {
try {
mIm.requestPointerCapture(windowToken, enable);
} catch (RemoteException ex) {
diff --git a/core/java/android/hardware/input/InputSettings.java b/core/java/android/hardware/input/InputSettings.java
index cdf9ea5..6cd32ff 100644
--- a/core/java/android/hardware/input/InputSettings.java
+++ b/core/java/android/hardware/input/InputSettings.java
@@ -25,6 +25,7 @@
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
+import android.sysprop.InputProperties;
/**
* InputSettings encapsulates reading and writing settings related to input
@@ -316,4 +317,15 @@
Settings.System.TOUCHPAD_RIGHT_CLICK_ZONE, enabled ? 1 : 0,
UserHandle.USER_CURRENT);
}
+
+ /**
+ * Whether a pointer icon will be shown over the location of a
+ * stylus pointer.
+ * @hide
+ */
+ public static boolean isStylusPointerIconEnabled(@NonNull Context context) {
+ return context.getResources()
+ .getBoolean(com.android.internal.R.bool.config_enableStylusPointerIcon)
+ || InputProperties.force_enable_stylus_pointer_icon().orElse(false);
+ }
}
diff --git a/core/java/android/hardware/usb/UsbPortStatus.java b/core/java/android/hardware/usb/UsbPortStatus.java
index e1662b8..b4fe3a2 100644
--- a/core/java/android/hardware/usb/UsbPortStatus.java
+++ b/core/java/android/hardware/usb/UsbPortStatus.java
@@ -588,10 +588,10 @@
* Returns non compliant reasons, if any, for the connected
* charger/cable/accessory/USB port.
*
- * @return array including {@link #NON_COMPLIANT_REASON_DEBUG_ACCESSORY},
- * {@link #NON_COMPLIANT_REASON_BC12},
- * {@link #NON_COMPLIANT_REASON_MISSING_RP},
- * or {@link #NON_COMPLIANT_REASON_TYPEC}
+ * @return array including {@link #COMPLIANCE_WARNING_OTHER},
+ * {@link #COMPLIANCE_WARNING_DEBUG_ACCESSORY},
+ * {@link #COMPLIANCE_WARNING_BC_1_2},
+ * or {@link #COMPLIANCE_WARNING_MISSING_RP}
*/
@CheckResult
@NonNull
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index b2208d1..bf3d52d 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -1499,6 +1499,15 @@
public static final native int killProcessGroup(int uid, int pid);
/**
+ * Send a signal to all processes in a group under the given PID, but do not wait for the
+ * processes to be fully cleaned up, or for the cgroup to be removed before returning.
+ * Callers should also ensure that killProcessGroup is called later to ensure the cgroup is
+ * fully removed, otherwise system resources may leak.
+ * @hide
+ */
+ public static final native int sendSignalToProcessGroup(int uid, int pid, int signal);
+
+ /**
* Freeze the cgroup for the given UID.
* This cgroup may contain child cgroups which will also be frozen. If this cgroup or its
* children contain processes with Binder interfaces, those interfaces should be frozen before
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index aa5a0d0..2efb265 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1748,6 +1748,21 @@
public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
/**
+ * Activity Action: Show Communal settings.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you
+ * safeguard against this.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_COMMUNAL_SETTING = "android.settings.COMMUNAL_SETTINGS";
+
+ /**
* Activity Action: Show Notification assistant settings.
* <p>
* In some cases, a matching Activity may not exist, so ensure you
@@ -3022,14 +3037,23 @@
public void destroy() {
try {
// If this process is the system server process, mArray is the same object as
- // the memory int array kept inside SetingsProvider, so skipping the close()
- if (!Settings.isInSystemServer()) {
+ // the memory int array kept inside SettingsProvider, so skipping the close()
+ if (!Settings.isInSystemServer() && !mArray.isClosed()) {
mArray.close();
}
} catch (IOException e) {
Log.e(TAG, "Error closing backing array", e);
}
}
+
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ destroy();
+ } finally {
+ super.finalize();
+ }
+ }
}
private static final class ContentProviderHolder {
@@ -10178,9 +10202,7 @@
*
* Face unlock re enroll.
* 0 = No re enrollment.
- * 1 = Re enrollment is suggested.
- * 2 = Re enrollment is required after a set time period.
- * 3 = Re enrollment is required immediately.
+ * 1 = Re enrollment is required.
*
* @hide
*/
@@ -14891,6 +14913,14 @@
public static final String ENABLE_TARE = "enable_tare";
/**
+ * Whether to show the TARE page in Developer Options or not.
+ * 1 = true, everything else = false
+ *
+ * @hide
+ */
+ public static final String SHOW_TARE_DEVELOPER_OPTIONS = "show_tare_developer_options";
+
+ /**
* Settings for AlarmManager's TARE EconomicPolicy (list of its economic factors).
*
* Keys are listed in {@link android.app.tare.EconomyManager}.
diff --git a/core/java/android/security/net/config/ManifestConfigSource.java b/core/java/android/security/net/config/ManifestConfigSource.java
index b885e72..0e20997 100644
--- a/core/java/android/security/net/config/ManifestConfigSource.java
+++ b/core/java/android/security/net/config/ManifestConfigSource.java
@@ -25,7 +25,7 @@
/** @hide */
public class ManifestConfigSource implements ConfigSource {
- private static final boolean DBG = true;
+ private static final boolean DBG = false;
private static final String LOG_TAG = "NetworkSecurityConfig";
private final Object mLock = new Object();
diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
index fb2f4ad..1a1df6f 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -165,8 +165,7 @@
Slog.w(TAG, "Context is null in isSystemProviderWithValidPermission");
return false;
}
- return PermissionUtils.isSystemApp(context, serviceInfo.packageName)
- && PermissionUtils.hasPermission(context, serviceInfo.packageName,
+ return PermissionUtils.hasPermission(context, serviceInfo.packageName,
Manifest.permission.PROVIDE_DEFAULT_ENABLED_CREDENTIAL_SERVICE);
}
diff --git a/core/java/android/service/credentials/PermissionUtils.java b/core/java/android/service/credentials/PermissionUtils.java
index d958111..2baf709 100644
--- a/core/java/android/service/credentials/PermissionUtils.java
+++ b/core/java/android/service/credentials/PermissionUtils.java
@@ -17,7 +17,6 @@
package android.service.credentials;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
/**
@@ -33,21 +32,5 @@
return context.getPackageManager().checkPermission(permission, packageName)
== PackageManager.PERMISSION_GRANTED;
}
-
- /** Checks whether the given package name is a system app on the device **/
- public static boolean isSystemApp(Context context, String packageName) {
- try {
- ApplicationInfo appInfo =
- context.getPackageManager()
- .getApplicationInfo(packageName,
- PackageManager.ApplicationInfoFlags.of(
- PackageManager.MATCH_SYSTEM_ONLY));
- if (appInfo != null) {
- return true;
- }
- } catch (PackageManager.NameNotFoundException e) {
- }
- return false;
- }
}
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 74ab709..9d3d70d 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -512,7 +512,6 @@
public Engine(Supplier<Long> clockFunction, Handler handler) {
mClockFunction = clockFunction;
mHandler = handler;
- mMergedConfiguration.setOverrideConfiguration(getResources().getConfiguration());
}
/**
@@ -1502,6 +1501,8 @@
mWallpaperDimAmount = mDefaultDimAmount;
mPreviousWallpaperDimAmount = mWallpaperDimAmount;
mDisplayState = mDisplay.getCommittedState();
+ mMergedConfiguration.setOverrideConfiguration(
+ mDisplayContext.getResources().getConfiguration());
if (DEBUG) Log.v(TAG, "onCreate(): " + this);
Trace.beginSection("WPMS.Engine.onCreate");
diff --git a/core/java/android/util/IntArray.java b/core/java/android/util/IntArray.java
index bc0e35d..511cb2d 100644
--- a/core/java/android/util/IntArray.java
+++ b/core/java/android/util/IntArray.java
@@ -43,7 +43,7 @@
* Creates an empty IntArray with the default initial capacity.
*/
public IntArray() {
- this(10);
+ this(0);
}
/**
diff --git a/core/java/android/util/LongArray.java b/core/java/android/util/LongArray.java
index 53dddeb..9f269ed 100644
--- a/core/java/android/util/LongArray.java
+++ b/core/java/android/util/LongArray.java
@@ -48,7 +48,7 @@
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public LongArray() {
- this(10);
+ this(0);
}
/**
diff --git a/core/java/android/util/TypedValue.java b/core/java/android/util/TypedValue.java
index b93e338..330a9fc 100644
--- a/core/java/android/util/TypedValue.java
+++ b/core/java/android/util/TypedValue.java
@@ -385,10 +385,22 @@
*
* @return The complex unit type.
*/
- public int getComplexUnit()
- {
- return COMPLEX_UNIT_MASK & (data>>TypedValue.COMPLEX_UNIT_SHIFT);
- }
+ public int getComplexUnit() {
+ return getUnitFromComplexDimension(data);
+ }
+
+ /**
+ * Return the complex unit type for the given complex dimension. For example, a dimen type
+ * with value 12sp will return {@link #COMPLEX_UNIT_SP}. Use with values created with {@link
+ * #createComplexDimension(int, int)} etc.
+ *
+ * @return The complex unit type.
+ *
+ * @hide
+ */
+ public static int getUnitFromComplexDimension(int complexDimension) {
+ return COMPLEX_UNIT_MASK & (complexDimension >> TypedValue.COMPLEX_UNIT_SHIFT);
+ }
/**
* Converts an unpacked complex data value holding a dimension to its final floating point pixel
diff --git a/core/java/android/view/InputMonitor.java b/core/java/android/view/InputMonitor.java
index 8801fe0..4996f5a 100644
--- a/core/java/android/view/InputMonitor.java
+++ b/core/java/android/view/InputMonitor.java
@@ -43,7 +43,8 @@
private final InputChannel mInputChannel;
@NonNull
private final IInputMonitorHost mHost;
-
+ @NonNull
+ private final SurfaceControl mSurface;
/**
* Takes all of the current pointer events streams that are currently being sent to this
@@ -70,6 +71,7 @@
*/
public void dispose() {
mInputChannel.dispose();
+ mSurface.release();
try {
mHost.dispose();
} catch (RemoteException e) {
@@ -95,13 +97,17 @@
@DataClass.Generated.Member
public InputMonitor(
@NonNull InputChannel inputChannel,
- @NonNull IInputMonitorHost host) {
+ @NonNull IInputMonitorHost host,
+ @NonNull SurfaceControl surface) {
this.mInputChannel = inputChannel;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mInputChannel);
this.mHost = host;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mHost);
+ this.mSurface = surface;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mSurface);
// onConstructed(); // You can define this method to get a callback
}
@@ -116,6 +122,11 @@
return mHost;
}
+ @DataClass.Generated.Member
+ public @NonNull SurfaceControl getSurface() {
+ return mSurface;
+ }
+
@Override
@DataClass.Generated.Member
public String toString() {
@@ -124,7 +135,8 @@
return "InputMonitor { " +
"inputChannel = " + mInputChannel + ", " +
- "host = " + mHost +
+ "host = " + mHost + ", " +
+ "surface = " + mSurface +
" }";
}
@@ -136,6 +148,7 @@
dest.writeTypedObject(mInputChannel, flags);
dest.writeStrongInterface(mHost);
+ dest.writeTypedObject(mSurface, flags);
}
@Override
@@ -151,6 +164,7 @@
InputChannel inputChannel = (InputChannel) in.readTypedObject(InputChannel.CREATOR);
IInputMonitorHost host = IInputMonitorHost.Stub.asInterface(in.readStrongBinder());
+ SurfaceControl surface = (SurfaceControl) in.readTypedObject(SurfaceControl.CREATOR);
this.mInputChannel = inputChannel;
com.android.internal.util.AnnotationValidations.validate(
@@ -158,6 +172,9 @@
this.mHost = host;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mHost);
+ this.mSurface = surface;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mSurface);
// onConstructed(); // You can define this method to get a callback
}
@@ -177,10 +194,10 @@
};
@DataClass.Generated(
- time = 1637697281750L,
+ time = 1679692514588L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/view/InputMonitor.java",
- inputSignatures = "private static final java.lang.String TAG\nprivate static final boolean DEBUG\nprivate final @android.annotation.NonNull android.view.InputChannel mInputChannel\nprivate final @android.annotation.NonNull android.view.IInputMonitorHost mHost\npublic void pilferPointers()\npublic void dispose()\nclass InputMonitor extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true)")
+ inputSignatures = "private static final java.lang.String TAG\nprivate static final boolean DEBUG\nprivate final @android.annotation.NonNull android.view.InputChannel mInputChannel\nprivate final @android.annotation.NonNull android.view.IInputMonitorHost mHost\nprivate final @android.annotation.NonNull android.view.SurfaceControl mSurface\npublic void pilferPointers()\npublic void dispose()\nclass InputMonitor extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true)")
@Deprecated
private void __metadata() {}
diff --git a/core/java/android/view/InsetsAnimationControlImpl.java b/core/java/android/view/InsetsAnimationControlImpl.java
index 75f1666..6c5f195 100644
--- a/core/java/android/view/InsetsAnimationControlImpl.java
+++ b/core/java/android/view/InsetsAnimationControlImpl.java
@@ -480,9 +480,9 @@
: inset != 0;
if (outState != null && source != null) {
- outState.getOrCreateSource(source.getId(), source.getType())
+ outState.addSource(new InsetsSource(source)
.setVisible(visible)
- .setFrame(mTmpFrame);
+ .setFrame(mTmpFrame));
}
// If the system is controlling the insets source, the leash can be null.
diff --git a/core/java/android/view/InsetsFrameProvider.java b/core/java/android/view/InsetsFrameProvider.java
index 2d7dc31..a69af24 100644
--- a/core/java/android/view/InsetsFrameProvider.java
+++ b/core/java/android/view/InsetsFrameProvider.java
@@ -23,6 +23,7 @@
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
+import android.view.InsetsSource.Flags;
import android.view.WindowInsets.Type.InsetsType;
import java.util.Arrays;
@@ -86,6 +87,13 @@
private Insets mInsetsSize = null;
/**
+ * Various behavioral options/flags. Default is none.
+ *
+ * @see Flags
+ */
+ private @Flags int mFlags;
+
+ /**
* If null, the size set in insetsSize will be applied to all window types. If it contains
* element of some types, the insets reported to the window with that types will be overridden.
*/
@@ -149,6 +157,15 @@
return mSource;
}
+ public InsetsFrameProvider setFlags(@Flags int flags, @Flags int mask) {
+ mFlags = (mFlags & ~mask) | (flags & mask);
+ return this;
+ }
+
+ public @Flags int getFlags() {
+ return mFlags;
+ }
+
public InsetsFrameProvider setInsetsSize(Insets insetsSize) {
mInsetsSize = insetsSize;
return this;
@@ -198,6 +215,7 @@
sb.append(", index=").append(mIndex);
sb.append(", type=").append(WindowInsets.Type.toString(mType));
sb.append(", source=").append(sourceToString(mSource));
+ sb.append(", flags=[").append(InsetsSource.flagsToString(mFlags)).append("]");
if (mInsetsSize != null) {
sb.append(", insetsSize=").append(mInsetsSize);
}
@@ -230,6 +248,7 @@
mIndex = in.readInt();
mType = in.readInt();
mSource = in.readInt();
+ mFlags = in.readInt();
mInsetsSize = in.readTypedObject(Insets.CREATOR);
mInsetsSizeOverrides = in.createTypedArray(InsetsSizeOverride.CREATOR);
mArbitraryRectangle = in.readTypedObject(Rect.CREATOR);
@@ -241,6 +260,7 @@
out.writeInt(mIndex);
out.writeInt(mType);
out.writeInt(mSource);
+ out.writeInt(mFlags);
out.writeTypedObject(mInsetsSize, flags);
out.writeTypedArray(mInsetsSizeOverrides, flags);
out.writeTypedObject(mArbitraryRectangle, flags);
@@ -260,7 +280,7 @@
}
final InsetsFrameProvider other = (InsetsFrameProvider) o;
return Objects.equals(mOwner, other.mOwner) && mIndex == other.mIndex
- && mType == other.mType && mSource == other.mSource
+ && mType == other.mType && mSource == other.mSource && mFlags == other.mFlags
&& Objects.equals(mInsetsSize, other.mInsetsSize)
&& Arrays.equals(mInsetsSizeOverrides, other.mInsetsSizeOverrides)
&& Objects.equals(mArbitraryRectangle, other.mArbitraryRectangle);
@@ -268,7 +288,7 @@
@Override
public int hashCode() {
- return Objects.hash(mOwner, mIndex, mType, mSource, mInsetsSize,
+ return Objects.hash(mOwner, mIndex, mType, mSource, mFlags, mInsetsSize,
Arrays.hashCode(mInsetsSizeOverrides), mArbitraryRectangle);
}
diff --git a/core/java/android/view/InsetsSource.java b/core/java/android/view/InsetsSource.java
index 3947738..bd48771 100644
--- a/core/java/android/view/InsetsSource.java
+++ b/core/java/android/view/InsetsSource.java
@@ -22,6 +22,7 @@
import static android.view.InsetsSourceProto.VISIBLE_FRAME;
import static android.view.WindowInsets.Type.ime;
+import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -33,7 +34,10 @@
import android.view.WindowInsets.Type.InsetsType;
import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
+import java.util.StringJoiner;
/**
* Represents the state of a single entity generating insets for clients.
@@ -45,6 +49,24 @@
public static final int ID_IME = createId(null, 0, ime());
/**
+ * Controls whether this source suppresses the scrim. If the scrim is ignored, the system won't
+ * draw a semi-transparent scrim behind the system bar area even when the bar contrast is
+ * enforced.
+ *
+ * @see android.R.styleable#Window_enforceStatusBarContrast
+ * @see android.R.styleable#Window_enforceNavigationBarContrast
+ */
+ public static final int FLAG_SUPPRESS_SCRIM = 1;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = true, prefix = "FLAG_", value = {
+ FLAG_SUPPRESS_SCRIM,
+ })
+ public @interface Flags {}
+
+ private @Flags int mFlags;
+
+ /**
* An unique integer to identify this source across processes.
*/
private final int mId;
@@ -75,6 +97,7 @@
mVisibleFrame = other.mVisibleFrame != null
? new Rect(other.mVisibleFrame)
: null;
+ mFlags = other.mFlags;
mInsetsRoundedCornerFrame = other.mInsetsRoundedCornerFrame;
}
@@ -84,6 +107,7 @@
mVisibleFrame = other.mVisibleFrame != null
? new Rect(other.mVisibleFrame)
: null;
+ mFlags = other.mFlags;
mInsetsRoundedCornerFrame = other.mInsetsRoundedCornerFrame;
}
@@ -107,6 +131,11 @@
return this;
}
+ public InsetsSource setFlags(@Flags int flags) {
+ mFlags = flags;
+ return this;
+ }
+
public int getId() {
return mId;
}
@@ -127,6 +156,10 @@
return mVisible;
}
+ public @Flags int getFlags() {
+ return mFlags;
+ }
+
boolean isUserControllable() {
// If mVisibleFrame is null, it will be the same area as mFrame.
return mVisibleFrame == null || !mVisibleFrame.isEmpty();
@@ -254,6 +287,14 @@
+ WindowInsets.Type.indexOf(type);
}
+ public static String flagsToString(@Flags int flags) {
+ final StringJoiner joiner = new StringJoiner(" ");
+ if ((flags & FLAG_SUPPRESS_SCRIM) != 0) {
+ joiner.add("SUPPRESS_SCRIM");
+ }
+ return joiner.toString();
+ }
+
/**
* Export the state of {@link InsetsSource} into a protocol buffer output stream.
*
@@ -280,6 +321,7 @@
pw.print(" visibleFrame="); pw.print(mVisibleFrame.toShortString());
}
pw.print(" visible="); pw.print(mVisible);
+ pw.print(" flags="); pw.print(flagsToString(mFlags));
pw.print(" insetsRoundedCornerFrame="); pw.print(mInsetsRoundedCornerFrame);
pw.println();
}
@@ -302,6 +344,7 @@
if (mId != that.mId) return false;
if (mType != that.mType) return false;
if (mVisible != that.mVisible) return false;
+ if (mFlags != that.mFlags) return false;
if (excludeInvisibleImeFrames && !mVisible && mType == WindowInsets.Type.ime()) return true;
if (!Objects.equals(mVisibleFrame, that.mVisibleFrame)) return false;
if (mInsetsRoundedCornerFrame != that.mInsetsRoundedCornerFrame) return false;
@@ -310,7 +353,8 @@
@Override
public int hashCode() {
- return Objects.hash(mId, mType, mFrame, mVisibleFrame, mVisible, mInsetsRoundedCornerFrame);
+ return Objects.hash(mId, mType, mFrame, mVisibleFrame, mVisible, mFlags,
+ mInsetsRoundedCornerFrame);
}
public InsetsSource(Parcel in) {
@@ -323,6 +367,7 @@
mVisibleFrame = null;
}
mVisible = in.readBoolean();
+ mFlags = in.readInt();
mInsetsRoundedCornerFrame = in.readBoolean();
}
@@ -343,6 +388,7 @@
dest.writeInt(0);
}
dest.writeBoolean(mVisible);
+ dest.writeInt(mFlags);
dest.writeBoolean(mInsetsRoundedCornerFrame);
}
@@ -352,6 +398,7 @@
+ " mType=" + WindowInsets.Type.toString(mType)
+ " mFrame=" + mFrame.toShortString()
+ " mVisible=" + mVisible
+ + " mFlags=[" + flagsToString(mFlags) + "]"
+ (mInsetsRoundedCornerFrame ? " insetsRoundedCornerFrame" : "")
+ "}";
}
diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java
index bd249c4..5b974cd 100644
--- a/core/java/android/view/InsetsState.java
+++ b/core/java/android/view/InsetsState.java
@@ -143,9 +143,14 @@
boolean[] typeVisibilityMap = new boolean[Type.SIZE];
final Rect relativeFrame = new Rect(frame);
final Rect relativeFrameMax = new Rect(frame);
+ @InsetsType int suppressScrimTypes = 0;
for (int i = mSources.size() - 1; i >= 0; i--) {
final InsetsSource source = mSources.valueAt(i);
+ if ((source.getFlags() & InsetsSource.FLAG_SUPPRESS_SCRIM) != 0) {
+ suppressScrimTypes |= source.getType();
+ }
+
processSource(source, relativeFrame, false /* ignoreVisibility */, typeInsetsMap,
idSideMap, typeVisibilityMap);
@@ -177,7 +182,7 @@
}
return new WindowInsets(typeInsetsMap, typeMaxInsetsMap, typeVisibilityMap, isScreenRound,
- alwaysConsumeSystemBars, calculateRelativeCutout(frame),
+ alwaysConsumeSystemBars, suppressScrimTypes, calculateRelativeCutout(frame),
calculateRelativeRoundedCorners(frame),
calculateRelativePrivacyIndicatorBounds(frame),
calculateRelativeDisplayShape(frame),
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index bd6224b..d987217 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -410,6 +410,13 @@
}
/**
+ * @hide
+ */
+ public @NonNull AttachedSurfaceControl getRootSurfaceControl() {
+ return mViewRoot;
+ }
+
+ /**
* Set the root view of the SurfaceControlViewHost. This view will render in to
* the SurfaceControl, and receive input based on the SurfaceControls positioning on
* screen. It will be laid as if it were in a window of the passed in width and height.
diff --git a/core/java/android/view/VelocityTracker.java b/core/java/android/view/VelocityTracker.java
index 4a7ed64..4464d19 100644
--- a/core/java/android/view/VelocityTracker.java
+++ b/core/java/android/view/VelocityTracker.java
@@ -18,7 +18,7 @@
import android.annotation.IntDef;
import android.compat.annotation.UnsupportedAppUsage;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.util.ArrayMap;
import android.util.Pools.SynchronizedPool;
@@ -286,7 +286,8 @@
private VelocityTracker(@VelocityTrackerStrategy int strategy) {
// If user has not selected a specific strategy
if (strategy == VELOCITY_TRACKER_STRATEGY_DEFAULT) {
- final String strategyProperty = InputManager.getInstance().getVelocityTrackerStrategy();
+ final String strategyProperty = InputManagerGlobal.getInstance()
+ .getVelocityTrackerStrategy();
// Check if user specified strategy by overriding system property.
if (strategyProperty == null || strategyProperty.isEmpty()) {
mStrategy = strategy;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 86e7fb0..2b29e78 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -133,7 +133,9 @@
import android.graphics.drawable.GradientDrawable;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
-import android.hardware.input.InputManager;
+import android.hardware.display.DisplayManagerGlobal;
+import android.hardware.input.InputManagerGlobal;
+import android.hardware.input.InputSettings;
import android.media.AudioManager;
import android.os.Binder;
import android.os.Build;
@@ -443,9 +445,7 @@
@UnsupportedAppUsage
final IWindowSession mWindowSession;
@NonNull Display mDisplay;
- final DisplayManager mDisplayManager;
final String mBasePackageName;
- final InputManager mInputManager;
final int[] mTmpLocation = new int[2];
@@ -550,6 +550,9 @@
// Whether to draw this surface as DISPLAY_DECORATION.
boolean mDisplayDecorationCached = false;
+ // Is the stylus pointer icon enabled
+ private final boolean mIsStylusPointerIconEnabled;
+
/**
* Update the Choreographer's FrameInfo object with the timing information for the current
* ViewRootImpl instance. Erase the data in the current ViewFrameInfo to prepare for the next
@@ -994,14 +997,14 @@
mFallbackEventHandler = new PhoneFallbackEventHandler(context);
// TODO(b/222696368): remove getSfInstance usage and use vsyncId for transactions
mChoreographer = Choreographer.getInstance();
- mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
- mInputManager = context.getSystemService(InputManager.class);
mInsetsController = new InsetsController(new ViewRootInsetsControllerHost(this));
mHandwritingInitiator = new HandwritingInitiator(
mViewConfiguration,
mContext.getSystemService(InputMethodManager.class));
mViewBoundsSandboxingEnabled = getViewBoundsSandboxingEnabled();
+ mIsStylusPointerIconEnabled =
+ InputSettings.isStylusPointerIconEnabled(mContext);
String processorOverrideName = context.getResources().getString(
R.string.config_inputEventCompatProcessorOverrideClassName);
@@ -1488,7 +1491,14 @@
mAccessibilityInteractionConnectionManager, mHandler);
mAccessibilityManager.addHighTextContrastStateChangeListener(
mHighContrastTextManager, mHandler);
- mDisplayManager.registerDisplayListener(mDisplayListener, mHandler);
+ DisplayManagerGlobal
+ .getInstance()
+ .registerDisplayListener(
+ mDisplayListener,
+ mHandler,
+ DisplayManager.EVENT_FLAG_DISPLAY_ADDED
+ | DisplayManager.EVENT_FLAG_DISPLAY_CHANGED
+ | DisplayManager.EVENT_FLAG_DISPLAY_REMOVED);
}
/**
@@ -1499,7 +1509,9 @@
mAccessibilityInteractionConnectionManager);
mAccessibilityManager.removeHighTextContrastStateChangeListener(
mHighContrastTextManager);
- mDisplayManager.unregisterDisplayListener(mDisplayListener);
+ DisplayManagerGlobal
+ .getInstance()
+ .unregisterDisplayListener(mDisplayListener);
}
private void setTag() {
@@ -5382,7 +5394,9 @@
Log.e(mTag, "No input channel to request Pointer Capture.");
return;
}
- mInputManager.requestPointerCapture(inputToken, enabled);
+ InputManagerGlobal
+ .getInstance()
+ .requestPointerCapture(inputToken, enabled);
}
private void handlePointerCaptureChanged(boolean hasCapture) {
@@ -6947,7 +6961,7 @@
}
final boolean needsStylusPointerIcon = event.isStylusPointer()
&& event.isHoverEvent()
- && mInputManager.isStylusPointerIconEnabled();
+ && mIsStylusPointerIconEnabled;
if (needsStylusPointerIcon || event.isFromSource(InputDevice.SOURCE_MOUSE)) {
if (event.getActionMasked() == MotionEvent.ACTION_HOVER_ENTER
|| event.getActionMasked() == MotionEvent.ACTION_HOVER_EXIT) {
@@ -7018,8 +7032,7 @@
}
PointerIcon pointerIcon = null;
-
- if (event.isStylusPointer() && mInputManager.isStylusPointerIconEnabled()) {
+ if (event.isStylusPointer() && mIsStylusPointerIconEnabled) {
pointerIcon = mHandwritingInitiator.onResolvePointerIcon(mContext, event);
}
@@ -7034,14 +7047,18 @@
mPointerIconType = pointerType;
mCustomPointerIcon = null;
if (mPointerIconType != PointerIcon.TYPE_CUSTOM) {
- mInputManager.setPointerIconType(pointerType);
+ InputManagerGlobal
+ .getInstance()
+ .setPointerIconType(pointerType);
return true;
}
}
if (mPointerIconType == PointerIcon.TYPE_CUSTOM &&
!pointerIcon.equals(mCustomPointerIcon)) {
mCustomPointerIcon = pointerIcon;
- mInputManager.setCustomPointerIcon(mCustomPointerIcon);
+ InputManagerGlobal
+ .getInstance()
+ .setCustomPointerIcon(mCustomPointerIcon);
}
return true;
}
diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java
index fd55d8d..4acaea8 100644
--- a/core/java/android/view/WindowInsets.java
+++ b/core/java/android/view/WindowInsets.java
@@ -91,6 +91,7 @@
*/
private final boolean mAlwaysConsumeSystemBars;
+ private final @InsetsType int mSuppressScrimTypes;
private final boolean mSystemWindowInsetsConsumed;
private final boolean mStableInsetsConsumed;
private final boolean mDisplayCutoutConsumed;
@@ -116,8 +117,8 @@
static {
CONSUMED = new WindowInsets(createCompatTypeMap(null), createCompatTypeMap(null),
- createCompatVisibilityMap(createCompatTypeMap(null)), false, false, null, null,
- null, null, systemBars(), false);
+ createCompatVisibilityMap(createCompatTypeMap(null)), false, false, 0, null,
+ null, null, null, systemBars(), false);
}
/**
@@ -136,7 +137,8 @@
@Nullable Insets[] typeMaxInsetsMap,
boolean[] typeVisibilityMap,
boolean isRound,
- boolean alwaysConsumeSystemBars, DisplayCutout displayCutout,
+ boolean alwaysConsumeSystemBars, @InsetsType int suppressScrimTypes,
+ DisplayCutout displayCutout,
RoundedCorners roundedCorners,
PrivacyIndicatorBounds privacyIndicatorBounds,
DisplayShape displayShape,
@@ -154,6 +156,7 @@
mTypeVisibilityMap = typeVisibilityMap;
mIsRound = isRound;
mAlwaysConsumeSystemBars = alwaysConsumeSystemBars;
+ mSuppressScrimTypes = suppressScrimTypes;
mCompatInsetsTypes = compatInsetsTypes;
mCompatIgnoreVisibility = compatIgnoreVisibility;
@@ -175,7 +178,8 @@
this(src.mSystemWindowInsetsConsumed ? null : src.mTypeInsetsMap,
src.mStableInsetsConsumed ? null : src.mTypeMaxInsetsMap,
src.mTypeVisibilityMap, src.mIsRound,
- src.mAlwaysConsumeSystemBars, displayCutoutCopyConstructorArgument(src),
+ src.mAlwaysConsumeSystemBars, src.mSuppressScrimTypes,
+ displayCutoutCopyConstructorArgument(src),
src.mRoundedCorners,
src.mPrivacyIndicatorBounds,
src.mDisplayShape,
@@ -231,8 +235,8 @@
/** @hide */
@UnsupportedAppUsage
public WindowInsets(Rect systemWindowInsets) {
- this(createCompatTypeMap(systemWindowInsets), null, new boolean[SIZE], false, false, null,
- null, null, null, systemBars(), false /* compatIgnoreVisibility */);
+ this(createCompatTypeMap(systemWindowInsets), null, new boolean[SIZE], false, false, 0,
+ null, null, null, null, systemBars(), false /* compatIgnoreVisibility */);
}
/**
@@ -552,7 +556,7 @@
return new WindowInsets(mSystemWindowInsetsConsumed ? null : mTypeInsetsMap,
mStableInsetsConsumed ? null : mTypeMaxInsetsMap,
mTypeVisibilityMap,
- mIsRound, mAlwaysConsumeSystemBars,
+ mIsRound, mAlwaysConsumeSystemBars, mSuppressScrimTypes,
null /* displayCutout */, mRoundedCorners, mPrivacyIndicatorBounds, mDisplayShape,
mCompatInsetsTypes, mCompatIgnoreVisibility);
}
@@ -603,7 +607,7 @@
public WindowInsets consumeSystemWindowInsets() {
return new WindowInsets(null, null,
mTypeVisibilityMap,
- mIsRound, mAlwaysConsumeSystemBars,
+ mIsRound, mAlwaysConsumeSystemBars, mSuppressScrimTypes,
// If the system window insets types contain displayCutout, we should also consume
// it.
(mCompatInsetsTypes & displayCutout()) != 0
@@ -895,6 +899,13 @@
return mAlwaysConsumeSystemBars;
}
+ /**
+ * @hide
+ */
+ public @InsetsType int getSuppressScrimTypes() {
+ return mSuppressScrimTypes;
+ }
+
@Override
public String toString() {
StringBuilder result = new StringBuilder("WindowInsets{\n ");
@@ -919,7 +930,9 @@
result.append("\n ");
result.append(mDisplayShape != null ? "displayShape=" + mDisplayShape : "");
result.append("\n ");
- result.append("compatInsetsTypes=" + mCompatInsetsTypes);
+ result.append("suppressScrimTypes=" + Type.toString(mSuppressScrimTypes));
+ result.append("\n ");
+ result.append("compatInsetsTypes=" + Type.toString(mCompatInsetsTypes));
result.append("\n ");
result.append("compatIgnoreVisibility=" + mCompatIgnoreVisibility);
result.append("\n ");
@@ -1014,7 +1027,7 @@
? null
: insetInsets(mTypeMaxInsetsMap, left, top, right, bottom),
mTypeVisibilityMap,
- mIsRound, mAlwaysConsumeSystemBars,
+ mIsRound, mAlwaysConsumeSystemBars, mSuppressScrimTypes,
mDisplayCutoutConsumed
? null
: mDisplayCutout == null
@@ -1038,6 +1051,7 @@
return mIsRound == that.mIsRound
&& mAlwaysConsumeSystemBars == that.mAlwaysConsumeSystemBars
+ && mSuppressScrimTypes == that.mSuppressScrimTypes
&& mSystemWindowInsetsConsumed == that.mSystemWindowInsetsConsumed
&& mStableInsetsConsumed == that.mStableInsetsConsumed
&& mDisplayCutoutConsumed == that.mDisplayCutoutConsumed
@@ -1054,8 +1068,9 @@
public int hashCode() {
return Objects.hash(Arrays.hashCode(mTypeInsetsMap), Arrays.hashCode(mTypeMaxInsetsMap),
Arrays.hashCode(mTypeVisibilityMap), mIsRound, mDisplayCutout, mRoundedCorners,
- mAlwaysConsumeSystemBars, mSystemWindowInsetsConsumed, mStableInsetsConsumed,
- mDisplayCutoutConsumed, mPrivacyIndicatorBounds, mDisplayShape);
+ mAlwaysConsumeSystemBars, mSuppressScrimTypes, mSystemWindowInsetsConsumed,
+ mStableInsetsConsumed, mDisplayCutoutConsumed, mPrivacyIndicatorBounds,
+ mDisplayShape);
}
@@ -1120,6 +1135,7 @@
private boolean mIsRound;
private boolean mAlwaysConsumeSystemBars;
+ private @InsetsType int mSuppressScrimTypes;
private PrivacyIndicatorBounds mPrivacyIndicatorBounds = new PrivacyIndicatorBounds();
@@ -1147,6 +1163,7 @@
mRoundedCorners = insets.mRoundedCorners;
mIsRound = insets.mIsRound;
mAlwaysConsumeSystemBars = insets.mAlwaysConsumeSystemBars;
+ mSuppressScrimTypes = insets.mSuppressScrimTypes;
mPrivacyIndicatorBounds = insets.mPrivacyIndicatorBounds;
mDisplayShape = insets.mDisplayShape;
}
@@ -1420,6 +1437,13 @@
return this;
}
+ /** @hide */
+ @NonNull
+ public Builder setSuppressScrimTypes(@InsetsType int suppressScrimTypes) {
+ mSuppressScrimTypes = suppressScrimTypes;
+ return this;
+ }
+
/**
* Builds a {@link WindowInsets} instance.
*
@@ -1429,8 +1453,8 @@
public WindowInsets build() {
return new WindowInsets(mSystemInsetsConsumed ? null : mTypeInsetsMap,
mStableInsetsConsumed ? null : mTypeMaxInsetsMap, mTypeVisibilityMap,
- mIsRound, mAlwaysConsumeSystemBars, mDisplayCutout, mRoundedCorners,
- mPrivacyIndicatorBounds, mDisplayShape, systemBars(),
+ mIsRound, mAlwaysConsumeSystemBars, mSuppressScrimTypes, mDisplayCutout,
+ mRoundedCorners, mPrivacyIndicatorBounds, mDisplayShape, systemBars(),
false /* compatIgnoreVisibility */);
}
}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 02b3478..ddcb431 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -893,7 +893,7 @@
* <application>
* <property
* android:name=
- * "android.window.PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
+ * "android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
* android:value="false"/>
* </application>
* </pre>
@@ -901,8 +901,8 @@
* @hide
*/
// TODO(b/274924641): Make this public API.
- String PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED =
- "android.window.PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED";
+ String PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED =
+ "android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED";
/**
* Application level {@link android.content.pm.PackageManager.Property PackageManager
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index a5e7086..b65c1a1 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -845,11 +845,7 @@
// Calling overScrollBy will call onOverScrolled, which
// calls onScrollChanged if applicable.
- if (overScrollBy(0, deltaY, 0, mScrollY, 0, range, 0, mOverscrollDistance, true)
- && !hasNestedScrollingParent()) {
- // Break our velocity if we hit a scroll barrier.
- mVelocityTracker.clear();
- }
+ overScrollBy(0, deltaY, 0, mScrollY, 0, range, 0, mOverscrollDistance, true);
final int scrolledDeltaY = mScrollY - oldY;
final int unconsumedY = deltaY - scrolledDeltaY;
@@ -894,6 +890,7 @@
mActivePointerId = INVALID_POINTER;
endDrag();
+ velocityTracker.clear();
}
break;
case MotionEvent.ACTION_CANCEL:
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 67c9f8c..3fbb505 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -62,6 +62,7 @@
import android.content.res.ColorStateList;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
+import android.content.res.FontScaleConverterFactory;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
@@ -867,6 +868,14 @@
@UnsupportedAppUsage
private float mSpacingAdd = 0.0f;
+ /**
+ * Remembers what line height was set to originally, before we broke it down into raw pixels.
+ *
+ * <p>This is stored as a complex dimension with both value and unit packed into one field!
+ * {@see TypedValue}
+ */
+ private int mLineHeightComplexDimen;
+
private int mBreakStrategy;
private int mHyphenationFrequency;
private int mJustificationMode;
@@ -1233,7 +1242,8 @@
defStyleAttr, defStyleRes);
int firstBaselineToTopHeight = -1;
int lastBaselineToBottomHeight = -1;
- int lineHeight = -1;
+ float lineHeight = -1f;
+ int lineHeightUnit = -1;
readTextAppearance(context, a, attributes, true /* styleArray */);
@@ -1583,7 +1593,13 @@
break;
case com.android.internal.R.styleable.TextView_lineHeight:
- lineHeight = a.getDimensionPixelSize(attr, -1);
+ TypedValue peekValue = a.peekValue(attr);
+ if (peekValue != null && peekValue.type == TypedValue.TYPE_DIMENSION) {
+ lineHeightUnit = peekValue.getComplexUnit();
+ lineHeight = TypedValue.complexToFloat(peekValue.data);
+ } else {
+ lineHeight = a.getDimensionPixelSize(attr, -1);
+ }
break;
}
}
@@ -1936,7 +1952,11 @@
setLastBaselineToBottomHeight(lastBaselineToBottomHeight);
}
if (lineHeight >= 0) {
- setLineHeight(lineHeight);
+ if (lineHeightUnit == -1) {
+ setLineHeightPx(lineHeight);
+ } else {
+ setLineHeight(lineHeightUnit, lineHeight);
+ }
}
}
@@ -4629,6 +4649,7 @@
if (size != mTextPaint.getTextSize()) {
mTextPaint.setTextSize(size);
+ maybeRecalculateLineHeight();
if (shouldRequestLayout && mLayout != null) {
// Do not auto-size right after setting the text size.
mNeedsAutoSizeText = false;
@@ -6214,6 +6235,9 @@
if (lineHeight != fontHeight) {
// Set lineSpacingExtra by the difference of lineSpacing with lineHeight
setLineSpacing(lineHeight - fontHeight, 1f);
+
+ mLineHeightComplexDimen =
+ TypedValue.createComplexDimension(lineHeight, TypedValue.COMPLEX_UNIT_PX);
}
}
@@ -6236,8 +6260,54 @@
@TypedValue.ComplexDimensionUnit int unit,
@FloatRange(from = 0) float lineHeight
) {
- setLineHeightPx(
- TypedValue.applyDimension(unit, lineHeight, getDisplayMetricsOrSystem()));
+ var metrics = getDisplayMetricsOrSystem();
+ // We can avoid the recalculation if we know non-linear font scaling isn't being used
+ // (an optimization for the majority case).
+ // We also don't try to do the recalculation unless both textSize and lineHeight are in SP.
+ if (!FontScaleConverterFactory.isNonLinearFontScalingActive(
+ getResources().getConfiguration().fontScale)
+ || unit != TypedValue.COMPLEX_UNIT_SP
+ || mTextSizeUnit != TypedValue.COMPLEX_UNIT_SP
+ ) {
+ setLineHeightPx(TypedValue.applyDimension(unit, lineHeight, metrics));
+
+ // Do this last so it overwrites what setLineHeightPx() sets it to.
+ mLineHeightComplexDimen = TypedValue.createComplexDimension(lineHeight, unit);
+ return;
+ }
+
+ // Recalculate a proportional line height when non-linear font scaling is in effect.
+ // Otherwise, a desired 2x line height at font scale 1.0 will not be 2x at font scale 2.0,
+ // due to non-linear font scaling compressing higher SP sizes. See b/273326061 for details.
+ // We know they are using SP units for both the text size and the line height
+ // at this point, so determine the ratio between them. This is the *intended* line spacing
+ // multiplier if font scale == 1.0. We can then determine what the pixel value for the line
+ // height would be if we preserved proportions.
+ var textSizePx = getTextSize();
+ var textSizeSp = TypedValue.convertPixelsToDimension(
+ TypedValue.COMPLEX_UNIT_SP,
+ textSizePx,
+ metrics
+ );
+ var ratio = lineHeight / textSizeSp;
+ setLineHeightPx(textSizePx * ratio);
+
+ // Do this last so it overwrites what setLineHeightPx() sets it to.
+ mLineHeightComplexDimen = TypedValue.createComplexDimension(lineHeight, unit);
+ }
+
+ private void maybeRecalculateLineHeight() {
+ if (mLineHeightComplexDimen == 0) {
+ return;
+ }
+ int unit = TypedValue.getUnitFromComplexDimension(mLineHeightComplexDimen);
+ if (unit != TypedValue.COMPLEX_UNIT_SP) {
+ // The lineHeight was never supplied in SP, so we didn't do any fancy recalculations
+ // in setLineHeight(). We don't need to recalculate.
+ return;
+ }
+
+ setLineHeight(unit, TypedValue.complexToFloat(mLineHeightComplexDimen));
}
/**
diff --git a/core/java/android/window/BackNavigationInfo.java b/core/java/android/window/BackNavigationInfo.java
index e0ee683..e44f436 100644
--- a/core/java/android/window/BackNavigationInfo.java
+++ b/core/java/android/window/BackNavigationInfo.java
@@ -94,26 +94,29 @@
@Nullable
private final IOnBackInvokedCallback mOnBackInvokedCallback;
private final boolean mPrepareRemoteAnimation;
+ private final boolean mAnimationCallback;
@Nullable
private final CustomAnimationInfo mCustomAnimationInfo;
/**
* Create a new {@link BackNavigationInfo} instance.
*
- * @param type The {@link BackTargetType} of the destination (what will be
- * @param onBackNavigationDone The callback to be called once the client is done with the
- * back preview.
- * @param onBackInvokedCallback The back callback registered by the current top level window.
+ * @param type The {@link BackTargetType} of the destination (what will be
+ * @param onBackNavigationDone The callback to be called once the client is done with the
+ * back preview.
+ * @param onBackInvokedCallback The back callback registered by the current top level window.
*/
private BackNavigationInfo(@BackTargetType int type,
@Nullable RemoteCallback onBackNavigationDone,
@Nullable IOnBackInvokedCallback onBackInvokedCallback,
boolean isPrepareRemoteAnimation,
+ boolean isAnimationCallback,
@Nullable CustomAnimationInfo customAnimationInfo) {
mType = type;
mOnBackNavigationDone = onBackNavigationDone;
mOnBackInvokedCallback = onBackInvokedCallback;
mPrepareRemoteAnimation = isPrepareRemoteAnimation;
+ mAnimationCallback = isAnimationCallback;
mCustomAnimationInfo = customAnimationInfo;
}
@@ -122,6 +125,7 @@
mOnBackNavigationDone = in.readTypedObject(RemoteCallback.CREATOR);
mOnBackInvokedCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder());
mPrepareRemoteAnimation = in.readBoolean();
+ mAnimationCallback = in.readBoolean();
mCustomAnimationInfo = in.readTypedObject(CustomAnimationInfo.CREATOR);
}
@@ -132,6 +136,7 @@
dest.writeTypedObject(mOnBackNavigationDone, flags);
dest.writeStrongInterface(mOnBackInvokedCallback);
dest.writeBoolean(mPrepareRemoteAnimation);
+ dest.writeBoolean(mAnimationCallback);
dest.writeTypedObject(mCustomAnimationInfo, flags);
}
@@ -159,7 +164,7 @@
}
/**
- * Return true if the core is preparing a back gesture nimation.
+ * Return true if the core is preparing a back gesture animation.
* @hide
*/
public boolean isPrepareRemoteAnimation() {
@@ -167,6 +172,14 @@
}
/**
+ * Return true if the callback is {@link OnBackAnimationCallback}.
+ * @hide
+ */
+ public boolean isAnimationCallback() {
+ return mAnimationCallback;
+ }
+
+ /**
* Callback to be called when the back preview is finished in order to notify the server that
* it can clean up the resources created for the animation.
* @hide
@@ -214,6 +227,8 @@
+ "mType=" + typeToString(mType) + " (" + mType + ")"
+ ", mOnBackNavigationDone=" + mOnBackNavigationDone
+ ", mOnBackInvokedCallback=" + mOnBackInvokedCallback
+ + ", mPrepareRemoteAnimation=" + mPrepareRemoteAnimation
+ + ", mAnimationCallback=" + mAnimationCallback
+ ", mCustomizeAnimationInfo=" + mCustomAnimationInfo
+ '}';
}
@@ -343,6 +358,7 @@
private IOnBackInvokedCallback mOnBackInvokedCallback = null;
private boolean mPrepareRemoteAnimation;
private CustomAnimationInfo mCustomAnimationInfo;
+ private boolean mAnimationCallback = false;
/**
* @see BackNavigationInfo#getType()
@@ -387,6 +403,7 @@
mCustomAnimationInfo.mWindowAnimations = windowAnimations;
return this;
}
+
/**
* Set resources ids for customize activity animation.
*/
@@ -402,12 +419,21 @@
}
/**
+ * @param isAnimationCallback whether the callback is {@link OnBackAnimationCallback}
+ */
+ public Builder setAnimationCallback(boolean isAnimationCallback) {
+ mAnimationCallback = isAnimationCallback;
+ return this;
+ }
+
+ /**
* Builds and returns an instance of {@link BackNavigationInfo}
*/
public BackNavigationInfo build() {
return new BackNavigationInfo(mType, mOnBackNavigationDone,
mOnBackInvokedCallback,
mPrepareRemoteAnimation,
+ mAnimationCallback,
mCustomAnimationInfo);
}
}
diff --git a/core/java/android/window/OnBackInvokedCallbackInfo.java b/core/java/android/window/OnBackInvokedCallbackInfo.java
index 6480da3..bb5fe96 100644
--- a/core/java/android/window/OnBackInvokedCallbackInfo.java
+++ b/core/java/android/window/OnBackInvokedCallbackInfo.java
@@ -28,15 +28,20 @@
@NonNull
private final IOnBackInvokedCallback mCallback;
private @OnBackInvokedDispatcher.Priority int mPriority;
+ private final boolean mIsAnimationCallback;
- public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback, int priority) {
+ public OnBackInvokedCallbackInfo(@NonNull IOnBackInvokedCallback callback,
+ int priority,
+ boolean isAnimationCallback) {
mCallback = callback;
mPriority = priority;
+ mIsAnimationCallback = isAnimationCallback;
}
private OnBackInvokedCallbackInfo(@NonNull Parcel in) {
mCallback = IOnBackInvokedCallback.Stub.asInterface(in.readStrongBinder());
mPriority = in.readInt();
+ mIsAnimationCallback = in.readBoolean();
}
@Override
@@ -48,6 +53,7 @@
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeStrongInterface(mCallback);
dest.writeInt(mPriority);
+ dest.writeBoolean(mIsAnimationCallback);
}
public static final Creator<OnBackInvokedCallbackInfo> CREATOR =
@@ -77,9 +83,16 @@
return mPriority;
}
+ public boolean isAnimationCallback() {
+ return mIsAnimationCallback;
+ }
+
@Override
public String toString() {
return "OnBackInvokedCallbackInfo{"
- + "mCallback=" + mCallback + ", mPriority=" + mPriority + '}';
+ + "mCallback=" + mCallback
+ + ", mPriority=" + mPriority
+ + ", mIsAnimationCallback=" + mIsAnimationCallback
+ + '}';
}
}
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 0f3eef7..628fc31 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -152,8 +152,14 @@
/** The task became the top-most task even if it didn't change visibility. */
public static final int FLAG_MOVED_TO_TOP = 1 << 20;
+ /**
+ * This transition must be the only transition when it starts (ie. it must wait for all other
+ * transition animations to finish).
+ */
+ public static final int FLAG_SYNC = 1 << 21;
+
/** The first unused bit. This can be used by remotes to attach custom flags to this change. */
- public static final int FLAG_FIRST_CUSTOM = 1 << 21;
+ public static final int FLAG_FIRST_CUSTOM = 1 << 22;
/** The change belongs to a window that won't contain activities. */
public static final int FLAGS_IS_NON_APP_WINDOW =
@@ -183,12 +189,14 @@
FLAG_NO_ANIMATION,
FLAG_TASK_LAUNCHING_BEHIND,
FLAG_MOVED_TO_TOP,
+ FLAG_SYNC,
FLAG_FIRST_CUSTOM
})
public @interface ChangeFlags {}
private final @TransitionType int mType;
- private final @TransitionFlags int mFlags;
+ private @TransitionFlags int mFlags;
+ private int mTrack = 0;
private final ArrayList<Change> mChanges = new ArrayList<>();
private final ArrayList<Root> mRoots = new ArrayList<>();
@@ -210,6 +218,7 @@
in.readTypedList(mRoots, Root.CREATOR);
mOptions = in.readTypedObject(AnimationOptions.CREATOR);
mDebugId = in.readInt();
+ mTrack = in.readInt();
}
@Override
@@ -221,6 +230,7 @@
dest.writeTypedList(mRoots, flags);
dest.writeTypedObject(mOptions, flags);
dest.writeInt(mDebugId);
+ dest.writeInt(mTrack);
}
@NonNull
@@ -262,6 +272,10 @@
return mType;
}
+ public void setFlags(int flags) {
+ mFlags = flags;
+ }
+
public int getFlags() {
return mFlags;
}
@@ -356,6 +370,16 @@
return (mFlags & TRANSIT_FLAG_KEYGUARD_GOING_AWAY) != 0;
}
+ /** Gets which animation track this transition should run on. */
+ public int getTrack() {
+ return mTrack;
+ }
+
+ /** Sets which animation track this transition should run on. */
+ public void setTrack(int track) {
+ mTrack = track;
+ }
+
/**
* Set an arbitrary "debug" id for this info. This id will not be used for any "real work",
* it is just for debugging and logging.
@@ -373,7 +397,8 @@
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{id=").append(mDebugId).append(" t=").append(transitTypeToString(mType))
- .append(" f=0x").append(Integer.toHexString(mFlags)).append(" r=[");
+ .append(" f=0x").append(Integer.toHexString(mFlags)).append(" trk=").append(mTrack)
+ .append(" r=[");
for (int i = 0; i < mRoots.size(); ++i) {
if (i > 0) {
sb.append(',');
@@ -461,6 +486,9 @@
if ((flags & FLAG_TASK_LAUNCHING_BEHIND) != 0) {
sb.append((sb.length() == 0 ? "" : "|") + "TASK_LAUNCHING_BEHIND");
}
+ if ((flags & FLAG_SYNC) != 0) {
+ sb.append((sb.length() == 0 ? "" : "|") + "SYNC");
+ }
if ((flags & FLAG_FIRST_CUSTOM) != 0) {
sb.append(sb.length() == 0 ? "" : "|").append("FIRST_CUSTOM");
}
@@ -532,6 +560,7 @@
*/
public TransitionInfo localRemoteCopy() {
final TransitionInfo out = new TransitionInfo(mType, mFlags);
+ out.mTrack = mTrack;
out.mDebugId = mDebugId;
for (int i = 0; i < mChanges.size(); ++i) {
out.mChanges.add(mChanges.get(i).localRemoteCopy());
diff --git a/core/java/android/window/WindowOnBackInvokedDispatcher.java b/core/java/android/window/WindowOnBackInvokedDispatcher.java
index 8066f50..51382a4 100644
--- a/core/java/android/window/WindowOnBackInvokedDispatcher.java
+++ b/core/java/android/window/WindowOnBackInvokedDispatcher.java
@@ -193,7 +193,10 @@
? ((ImeOnBackInvokedDispatcher.ImeOnBackInvokedCallback)
callback).getIOnBackInvokedCallback()
: new OnBackInvokedCallbackWrapper(callback);
- callbackInfo = new OnBackInvokedCallbackInfo(iCallback, priority);
+ callbackInfo = new OnBackInvokedCallbackInfo(
+ iCallback,
+ priority,
+ callback instanceof OnBackAnimationCallback);
}
mWindowSession.setOnBackInvokedCallbackInfo(mWindow, callbackInfo);
} catch (RemoteException e) {
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 787b594..65394bd 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -63,6 +63,7 @@
void noteResetCamera();
@EnforcePermission("UPDATE_DEVICE_STATS")
void noteResetFlashlight();
+ void noteWakeupSensorEvent(long elapsedNanos, int uid, int handle);
// Remaining methods are only used in Java.
@EnforcePermission("BATTERY_STATS")
diff --git a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
index 2b08a55..853fe2f 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
@@ -77,6 +77,10 @@
/** Gating the removal of sorting-notifications-by-interruptiveness. */
public static final Flag NO_SORT_BY_INTERRUPTIVENESS =
devFlag("persist.sysui.notification.no_sort_by_interruptiveness");
+
+ /** Gating the logging of DND state change events. */
+ public static final Flag LOG_DND_STATE_EVENTS =
+ devFlag("persist.sysui.notification.log_dnd_state_events");
}
//// == End of flags. Everything below this line is the implementation. == ////
diff --git a/core/java/com/android/internal/inputmethod/InputMethodDebug.java b/core/java/com/android/internal/inputmethod/InputMethodDebug.java
index 1b4afd6..bb8bdf5 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodDebug.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodDebug.java
@@ -255,6 +255,12 @@
return "HIDE_SOFT_INPUT_IMM_DEPRECATION";
case SoftInputShowHideReason.HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR:
return "HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR";
+ case SoftInputShowHideReason.SHOW_IME_SCREENSHOT_FROM_IMMS:
+ return "SHOW_IME_SCREENSHOT_FROM_IMMS";
+ case SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS:
+ return "REMOVE_IME_SCREENSHOT_FROM_IMMS";
+ case SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE:
+ return "HIDE_WHEN_INPUT_TARGET_INVISIBLE";
default:
return "Unknown=" + reason;
}
diff --git a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
index ec9184b..6e9cd44 100644
--- a/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
+++ b/core/java/com/android/internal/inputmethod/SoftInputShowHideReason.java
@@ -65,7 +65,10 @@
SoftInputShowHideReason.HIDE_SOFT_INPUT_IME_TOGGLE_SOFT_INPUT,
SoftInputShowHideReason.HIDE_SOFT_INPUT_EXTRACT_INPUT_CHANGED,
SoftInputShowHideReason.HIDE_SOFT_INPUT_IMM_DEPRECATION,
- SoftInputShowHideReason.HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR
+ SoftInputShowHideReason.HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR,
+ SoftInputShowHideReason.SHOW_IME_SCREENSHOT_FROM_IMMS,
+ SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS,
+ SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE,
})
public @interface SoftInputShowHideReason {
/** Show soft input by {@link android.view.inputmethod.InputMethodManager#showSoftInput}. */
@@ -259,4 +262,20 @@
*/
int HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR =
ImeProtoEnums.REASON_HIDE_WINDOW_GAINED_FOCUS_WITHOUT_EDITOR;
+
+ /**
+ * Shows ime screenshot by {@link com.android.server.inputmethod.InputMethodManagerService}.
+ */
+ int SHOW_IME_SCREENSHOT_FROM_IMMS = ImeProtoEnums.REASON_SHOW_IME_SCREENSHOT_FROM_IMMS;
+
+ /**
+ * Removes ime screenshot by {@link com.android.server.inputmethod.InputMethodManagerService}.
+ */
+ int REMOVE_IME_SCREENSHOT_FROM_IMMS = ImeProtoEnums.REASON_REMOVE_IME_SCREENSHOT_FROM_IMMS;
+
+ /**
+ * Hide soft input when the input target being removed or being obscured by an non-IME
+ * focusable overlay window.
+ */
+ int HIDE_WHEN_INPUT_TARGET_INVISIBLE = ImeProtoEnums.REASON_HIDE_WHEN_INPUT_TARGET_INVISIBLE;
}
diff --git a/core/java/com/android/internal/jank/FrameTracker.java b/core/java/com/android/internal/jank/FrameTracker.java
index 1c0da18..0a0785e 100644
--- a/core/java/com/android/internal/jank/FrameTracker.java
+++ b/core/java/com/android/internal/jank/FrameTracker.java
@@ -66,7 +66,7 @@
private static final long INVALID_ID = -1;
public static final int NANOS_IN_MILLISECOND = 1_000_000;
- private static final int MAX_LENGTH_EVENT_DESC = 20;
+ private static final int MAX_LENGTH_EVENT_DESC = 127;
private static final int MAX_FLUSH_ATTEMPTS = 3;
private static final int FLUSH_DELAY_MILLISECOND = 60;
@@ -295,7 +295,7 @@
+ ", defer=" + mDeferMonitoring + ", current=" + currentVsync);
}
if (mDeferMonitoring && currentVsync < mBeginVsyncId) {
- markEvent("FT#deferMonitoring");
+ markEvent("FT#deferMonitoring", 0);
// Normal case, we begin the instrument from the very beginning,
// will exclude the first frame.
postTraceStartMarker(this::beginInternal);
@@ -326,9 +326,10 @@
return;
}
mTracingStarted = true;
- markEvent("FT#begin");
- Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId);
- markEvent("FT#layerId#" + mSurfaceControl.getLayerId());
+ Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, mSession.getName(), mSession.getName(),
+ (int) mBeginVsyncId);
+ markEvent("FT#beginVsync", mBeginVsyncId);
+ markEvent("FT#layerId", mSurfaceControl.getLayerId());
mSurfaceControlWrapper.addJankStatsListener(this, mSurfaceControl);
if (!mSurfaceOnly) {
mRendererWrapper.addObserver(mObserver);
@@ -354,8 +355,10 @@
Log.d(TAG, "end: " + mSession.getName()
+ ", end=" + mEndVsyncId + ", reason=" + reason);
}
- markEvent("FT#end#" + reason);
- Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId);
+ markEvent("FT#end", reason);
+ markEvent("FT#endVsync", mEndVsyncId);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, mSession.getName(),
+ (int) mBeginVsyncId);
mSession.setReason(reason);
// We don't remove observer here,
@@ -405,10 +408,11 @@
reason == REASON_CANCEL_NOT_BEGUN || reason == REASON_CANCEL_SAME_VSYNC;
if (mCancelled || (mEndVsyncId != INVALID_ID && !cancelFromEnd)) return false;
mCancelled = true;
- markEvent("FT#cancel#" + reason);
+ markEvent("FT#cancel", reason);
// We don't need to end the trace section if it has never begun.
if (mTracingStarted) {
- Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId);
+ Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, mSession.getName(),
+ (int) mBeginVsyncId);
}
// Always remove the observers in cancel call to avoid leakage.
@@ -429,18 +433,19 @@
/**
* Mark the FrameTracker events in the trace.
*
- * @param desc The description of the trace event,
- * shouldn't exceed {@link #MAX_LENGTH_EVENT_DESC}.
+ * @param eventName The description of the trace event,
+ * @param eventValue The value of the related trace event
+ * Both shouldn't exceed {@link #MAX_LENGTH_EVENT_DESC}.
*/
- private void markEvent(@NonNull String desc) {
- if (desc.length() > MAX_LENGTH_EVENT_DESC) {
- throw new IllegalArgumentException(TextUtils.formatSimple(
- "The length of the trace event description <%s> exceeds %d",
- desc, MAX_LENGTH_EVENT_DESC));
- }
+ private void markEvent(@NonNull String eventName, long eventValue) {
if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {
- Trace.instant(Trace.TRACE_TAG_APP,
- TextUtils.formatSimple("%s#%s", mSession.getName(), desc));
+ String event = TextUtils.formatSimple("%s#%s", eventName, eventValue);
+ if (event.length() > MAX_LENGTH_EVENT_DESC) {
+ throw new IllegalArgumentException(TextUtils.formatSimple(
+ "The length of the trace event description <%s> exceeds %d",
+ event, MAX_LENGTH_EVENT_DESC));
+ }
+ Trace.instantForTrack(Trace.TRACE_TAG_APP, mSession.getName(), event);
}
}
@@ -572,7 +577,7 @@
getHandler().removeCallbacks(mWaitForFinishTimedOut);
mWaitForFinishTimedOut = null;
- markEvent("FT#finish#" + mJankInfos.size());
+ markEvent("FT#finish", mJankInfos.size());
// The tracing has been ended, remove the observer, see if need to trigger perfetto.
removeObservers();
@@ -622,6 +627,7 @@
// TODO (b/174755489): Early latch currently gets fired way too often, so we have
// to ignore it for now.
if (!mSurfaceOnly && !info.hwuiCallbackFired) {
+ markEvent("FT#MissedHWUICallback", info.frameVsyncId);
Log.w(TAG, "Missing HWUI jank callback for vsyncId: " + info.frameVsyncId
+ ", CUJ=" + mSession.getName());
}
@@ -629,6 +635,7 @@
if (!mSurfaceOnly && info.hwuiCallbackFired) {
maxFrameTimeNanos = Math.max(info.totalDurationNanos, maxFrameTimeNanos);
if (!info.surfaceControlCallbackFired) {
+ markEvent("FT#MissedSFCallback", info.frameVsyncId);
Log.w(TAG, "Missing SF jank callback for vsyncId: " + info.frameVsyncId
+ ", CUJ=" + mSession.getName());
}
diff --git a/core/java/com/android/internal/os/anr/AnrLatencyTracker.java b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
index 096d1cd..6fa6fa5 100644
--- a/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
+++ b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
@@ -28,12 +28,15 @@
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.annotation.IntDef;
import android.os.SystemClock;
import android.os.Trace;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -44,6 +47,22 @@
*/
public class AnrLatencyTracker implements AutoCloseable {
+ /** Status of the early dumped pid. */
+ @IntDef(value = {
+ EarlyDumpStatus.UNKNOWN,
+ EarlyDumpStatus.SUCCEEDED,
+ EarlyDumpStatus.FAILED_TO_CREATE_FILE,
+ EarlyDumpStatus.TIMED_OUT
+ })
+
+ @Retention(RetentionPolicy.SOURCE)
+ private @interface EarlyDumpStatus {
+ int UNKNOWN = 1;
+ int SUCCEEDED = 2;
+ int FAILED_TO_CREATE_FILE = 3;
+ int TIMED_OUT = 4;
+ }
+
private static final AtomicInteger sNextAnrRecordPlacedOnQueueCookieGenerator =
new AtomicInteger();
@@ -77,7 +96,16 @@
private int mAnrQueueSize;
private int mAnrType;
- private int mDumpedProcessesCount = 0;
+ private final AtomicInteger mDumpedProcessesCount = new AtomicInteger(0);
+
+ private volatile @EarlyDumpStatus int mEarlyDumpStatus =
+ EarlyDumpStatus.UNKNOWN;
+ private volatile long mTempFileDumpingStartUptime;
+ private volatile long mTempFileDumpingDuration = 0;
+ private long mCopyingFirstPidStartUptime;
+ private long mCopyingFirstPidDuration = 0;
+ private long mEarlyDumpRequestSubmissionUptime = 0;
+ private long mEarlyDumpExecutorPidCount = 0;
private long mFirstPidsDumpingStartUptime;
private long mFirstPidsDumpingDuration = 0;
@@ -88,7 +116,7 @@
private boolean mIsPushed = false;
private boolean mIsSkipped = false;
-
+ private boolean mCopyingFirstPidSucceeded = false;
private final int mAnrRecordPlacedOnQueueCookie =
sNextAnrRecordPlacedOnQueueCookieGenerator.incrementAndGet();
@@ -111,6 +139,15 @@
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
+ /**
+ * Records the number of processes we are currently early-dumping, this number includes the
+ * current ANR's main process.
+ */
+ public void earlyDumpRequestSubmittedWithSize(int currentProcessedPidCount) {
+ mEarlyDumpRequestSubmissionUptime = getUptimeMillis();
+ mEarlyDumpExecutorPidCount = currentProcessedPidCount;
+ }
+
/** Records the placing of the AnrHelper.AnrRecord instance on the processing queue. */
public void anrRecordPlacingOnQueueWithSize(int queueSize) {
mAnrRecordPlacedOnQueueUptime = getUptimeMillis();
@@ -210,48 +247,89 @@
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
- /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ /** Records the start of pid dumping to file. */
public void dumpingPidStarted(int pid) {
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingPid#" + pid);
}
- /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ /** Records the end of pid dumping to file. */
public void dumpingPidEnded() {
- mDumpedProcessesCount++;
+ mDumpedProcessesCount.incrementAndGet();
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
- /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ /** Records the start of first pids dumping to file. */
public void dumpingFirstPidsStarted() {
mFirstPidsDumpingStartUptime = getUptimeMillis();
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingFirstPids");
}
- /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ /** Records the end of first pids dumping to file. */
public void dumpingFirstPidsEnded() {
mFirstPidsDumpingDuration = getUptimeMillis() - mFirstPidsDumpingStartUptime;
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
- /** Records the start of pid dumping to file (subject and criticalEventSection). */
+
+ /** Records the start of the copying of the pre-dumped first pid. */
+ public void copyingFirstPidStarted() {
+ mCopyingFirstPidStartUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "copyingFirstPid");
+ }
+
+ /** Records the end of the copying of the pre-dumped first pid. */
+ public void copyingFirstPidEnded(boolean copySucceeded) {
+ mCopyingFirstPidDuration = getUptimeMillis() - mCopyingFirstPidStartUptime;
+ mCopyingFirstPidSucceeded = copySucceeded;
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records the start of pre-dumping. */
+ public void dumpStackTracesTempFileStarted() {
+ mTempFileDumpingStartUptime = getUptimeMillis();
+ Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpStackTracesTempFile");
+ }
+
+ /** Records the end of pre-dumping. */
+ public void dumpStackTracesTempFileEnded() {
+ mTempFileDumpingDuration = getUptimeMillis() - mTempFileDumpingStartUptime;
+ if (mEarlyDumpStatus == EarlyDumpStatus.UNKNOWN) {
+ mEarlyDumpStatus = EarlyDumpStatus.SUCCEEDED;
+ }
+ Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
+ }
+
+ /** Records file creation failure events in dumpStackTracesTempFile. */
+ public void dumpStackTracesTempFileCreationFailed() {
+ mEarlyDumpStatus = EarlyDumpStatus.FAILED_TO_CREATE_FILE;
+ Trace.instant(TRACE_TAG_ACTIVITY_MANAGER, "dumpStackTracesTempFileCreationFailed");
+ }
+
+ /** Records timeout events in dumpStackTracesTempFile. */
+ public void dumpStackTracesTempFileTimedOut() {
+ mEarlyDumpStatus = EarlyDumpStatus.TIMED_OUT;
+ Trace.instant(TRACE_TAG_ACTIVITY_MANAGER, "dumpStackTracesTempFileTimedOut");
+ }
+
+ /** Records the start of native pids dumping to file. */
public void dumpingNativePidsStarted() {
mNativePidsDumpingStartUptime = getUptimeMillis();
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingNativePids");
}
- /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ /** Records the end of native pids dumping to file . */
public void dumpingNativePidsEnded() {
mNativePidsDumpingDuration = getUptimeMillis() - mNativePidsDumpingStartUptime;
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
}
- /** Records the start of pid dumping to file (subject and criticalEventSection). */
+ /** Records the start of extra pids dumping to file. */
public void dumpingExtraPidsStarted() {
mExtraPidsDumpingStartUptime = getUptimeMillis();
Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "dumpingExtraPids");
}
- /** Records the end of pid dumping to file (subject and criticalEventSection). */
+ /** Records the end of extra pids dumping to file. */
public void dumpingExtraPidsEnded() {
mExtraPidsDumpingDuration = getUptimeMillis() - mExtraPidsDumpingStartUptime;
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
@@ -337,7 +415,7 @@
* Returns latency data as a comma separated value string for inclusion in ANR report.
*/
public String dumpAsCommaSeparatedArrayWithHeader() {
- return "DurationsV2: " + mAnrTriggerUptime
+ return "DurationsV3: " + mAnrTriggerUptime
/* triggering_to_app_not_responding_duration = */
+ "," + (mAppNotRespondingStartUptime - mAnrTriggerUptime)
/* app_not_responding_duration = */
@@ -370,7 +448,22 @@
/* anr_queue_size_when_pushed = */
+ "," + mAnrQueueSize
/* dump_stack_traces_io_time = */
- + "," + (mFirstPidsDumpingStartUptime - mDumpStackTracesStartUptime)
+ // We use copyingFirstPidUptime if we're dumping the durations list before the
+ // first pids ie after copying the early dump stacks.
+ + "," + ((mFirstPidsDumpingStartUptime > 0 ? mFirstPidsDumpingStartUptime
+ : mCopyingFirstPidStartUptime) - mDumpStackTracesStartUptime)
+ /* temp_file_dump_duration = */
+ + "," + mTempFileDumpingDuration
+ /* temp_dump_request_on_queue_duration = */
+ + "," + (mTempFileDumpingStartUptime - mEarlyDumpRequestSubmissionUptime)
+ /* temp_dump_pid_count_when_pushed = */
+ + "," + mEarlyDumpExecutorPidCount
+ /* first_pid_copying_time = */
+ + "," + mCopyingFirstPidDuration
+ /* early_dump_status = */
+ + "," + mEarlyDumpStatus
+ /* copying_first_pid_succeeded = */
+ + "," + (mCopyingFirstPidSucceeded ? 1 : 0)
+ "\n\n";
}
@@ -449,7 +542,7 @@
/* anr_queue_size_when_pushed = */ mAnrQueueSize,
/* anr_type = */ mAnrType,
- /* dumped_processes_count = */ mDumpedProcessesCount);
+ /* dumped_processes_count = */ mDumpedProcessesCount.get());
}
private void anrSkipped(String method) {
diff --git a/core/java/com/android/internal/policy/DecorContext.java b/core/java/com/android/internal/policy/DecorContext.java
index 134a917..efaedd1 100644
--- a/core/java/com/android/internal/policy/DecorContext.java
+++ b/core/java/com/android/internal/policy/DecorContext.java
@@ -82,13 +82,6 @@
}
return mContentCaptureManager;
}
- // TODO(b/154191411): Try to revisit this issue in S.
- // We use application to get DisplayManager here because ViewRootImpl holds reference of
- // DisplayManager and implicitly holds reference of mContext, which makes activity cannot
- // be GC'd even after destroyed if mContext is an activity object.
- if (Context.DISPLAY_SERVICE.equals(name)) {
- return super.getSystemService(name);
- }
// LayoutInflater and WallpaperManagerService should also be obtained from visual context
// instead of base context.
return (context != null) ? context.getSystemService(name) : super.getSystemService(name);
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index 47e6b6e..15f70f3 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -233,6 +233,7 @@
private boolean mLastHasLeftStableInset = false;
private int mLastWindowFlags = 0;
private boolean mLastShouldAlwaysConsumeSystemBars = false;
+ private @InsetsType int mLastSuppressScrimTypes = 0;
private int mRootScrollY = 0;
@@ -1143,6 +1144,7 @@
mLastHasLeftStableInset = hasLeftStableInset;
mLastShouldAlwaysConsumeSystemBars = insets.shouldAlwaysConsumeSystemBars();
+ mLastSuppressScrimTypes = insets.getSuppressScrimTypes();
}
boolean navBarToRightEdge = isNavBarToRightEdge(mLastBottomInset, mLastRightInset);
@@ -1378,7 +1380,8 @@
return calculateBarColor(mWindow.getAttributes().flags, FLAG_TRANSLUCENT_STATUS,
mSemiTransparentBarColor, mWindow.mStatusBarColor,
appearance, APPEARANCE_LIGHT_STATUS_BARS,
- mWindow.mEnsureStatusBarContrastWhenTransparent);
+ mWindow.mEnsureStatusBarContrastWhenTransparent
+ && (mLastSuppressScrimTypes & WindowInsets.Type.statusBars()) == 0);
}
private int calculateNavigationBarColor(@Appearance int appearance) {
@@ -1386,7 +1389,7 @@
mSemiTransparentBarColor, mWindow.mNavigationBarColor,
appearance, APPEARANCE_LIGHT_NAVIGATION_BARS,
mWindow.mEnsureNavigationBarContrastWhenTransparent
- && getContext().getResources().getBoolean(R.bool.config_navBarNeedsScrim));
+ && (mLastSuppressScrimTypes & WindowInsets.Type.navigationBars()) == 0);
}
public static int calculateBarColor(int flags, int translucentFlag, int semiTransparentBarColor,
diff --git a/core/java/com/android/internal/util/QuickSelect.java b/core/java/com/android/internal/util/QuickSelect.java
new file mode 100644
index 0000000..17739c9
--- /dev/null
+++ b/core/java/com/android/internal/util/QuickSelect.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * An implementation of the quick selection algorithm as described in
+ * http://en.wikipedia.org/wiki/Quickselect.
+ *
+ * @hide
+ */
+public final class QuickSelect {
+ private static <T> int selectImpl(@NonNull List<T> list, int left, int right, int k,
+ @NonNull Comparator<? super T> comparator) {
+ while (true) {
+ if (left == right) {
+ return left;
+ }
+ final int pivotIndex = partition(list, left, right, (left + right) >> 1, comparator);
+ if (k == pivotIndex) {
+ return k;
+ } else if (k < pivotIndex) {
+ right = pivotIndex - 1;
+ } else {
+ left = pivotIndex + 1;
+ }
+ }
+ }
+
+ private static int selectImpl(@NonNull int[] array, int left, int right, int k) {
+ while (true) {
+ if (left == right) {
+ return left;
+ }
+ final int pivotIndex = partition(array, left, right, (left + right) >> 1);
+ if (k == pivotIndex) {
+ return k;
+ } else if (k < pivotIndex) {
+ right = pivotIndex - 1;
+ } else {
+ left = pivotIndex + 1;
+ }
+ }
+ }
+
+ private static int selectImpl(@NonNull long[] array, int left, int right, int k) {
+ while (true) {
+ if (left == right) {
+ return left;
+ }
+ final int pivotIndex = partition(array, left, right, (left + right) >> 1);
+ if (k == pivotIndex) {
+ return k;
+ } else if (k < pivotIndex) {
+ right = pivotIndex - 1;
+ } else {
+ left = pivotIndex + 1;
+ }
+ }
+ }
+
+ private static <T> int selectImpl(@NonNull T[] array, int left, int right, int k,
+ @NonNull Comparator<? super T> comparator) {
+ while (true) {
+ if (left == right) {
+ return left;
+ }
+ final int pivotIndex = partition(array, left, right, (left + right) >> 1, comparator);
+ if (k == pivotIndex) {
+ return k;
+ } else if (k < pivotIndex) {
+ right = pivotIndex - 1;
+ } else {
+ left = pivotIndex + 1;
+ }
+ }
+ }
+
+ private static <T> int partition(@NonNull List<T> list, int left, int right, int pivotIndex,
+ @NonNull Comparator<? super T> comparator) {
+ final T pivotValue = list.get(pivotIndex);
+ swap(list, right, pivotIndex);
+ int storeIndex = left;
+ for (int i = left; i < right; i++) {
+ if (comparator.compare(list.get(i), pivotValue) < 0) {
+ swap(list, storeIndex, i);
+ storeIndex++;
+ }
+ }
+ swap(list, right, storeIndex);
+ return storeIndex;
+ }
+
+ private static int partition(@NonNull int[] array, int left, int right, int pivotIndex) {
+ final int pivotValue = array[pivotIndex];
+ swap(array, right, pivotIndex);
+ int storeIndex = left;
+ for (int i = left; i < right; i++) {
+ if (array[i] < pivotValue) {
+ swap(array, storeIndex, i);
+ storeIndex++;
+ }
+ }
+ swap(array, right, storeIndex);
+ return storeIndex;
+ }
+
+ private static int partition(@NonNull long[] array, int left, int right, int pivotIndex) {
+ final long pivotValue = array[pivotIndex];
+ swap(array, right, pivotIndex);
+ int storeIndex = left;
+ for (int i = left; i < right; i++) {
+ if (array[i] < pivotValue) {
+ swap(array, storeIndex, i);
+ storeIndex++;
+ }
+ }
+ swap(array, right, storeIndex);
+ return storeIndex;
+ }
+
+ private static <T> int partition(@NonNull T[] array, int left, int right, int pivotIndex,
+ @NonNull Comparator<? super T> comparator) {
+ final T pivotValue = array[pivotIndex];
+ swap(array, right, pivotIndex);
+ int storeIndex = left;
+ for (int i = left; i < right; i++) {
+ if (comparator.compare(array[i], pivotValue) < 0) {
+ swap(array, storeIndex, i);
+ storeIndex++;
+ }
+ }
+ swap(array, right, storeIndex);
+ return storeIndex;
+ }
+
+ private static <T> void swap(@NonNull List<T> list, int left, int right) {
+ final T tmp = list.get(left);
+ list.set(left, list.get(right));
+ list.set(right, tmp);
+ }
+
+ private static void swap(@NonNull int[] array, int left, int right) {
+ final int tmp = array[left];
+ array[left] = array[right];
+ array[right] = tmp;
+ }
+
+ private static void swap(@NonNull long[] array, int left, int right) {
+ final long tmp = array[left];
+ array[left] = array[right];
+ array[right] = tmp;
+ }
+
+ private static <T> void swap(@NonNull T[] array, int left, int right) {
+ final T tmp = array[left];
+ array[left] = array[right];
+ array[right] = tmp;
+ }
+
+ /**
+ * Return the kth(0-based) smallest element from the given unsorted list.
+ *
+ * @param list The input list, it <b>will</b> be modified by the algorithm here.
+ * @param start The start offset of the list, inclusive.
+ * @param length The length of the sub list to be searched in.
+ * @param k The 0-based index.
+ * @param comparator The comparator which knows how to compare the elements in the list.
+ * @return The kth smallest element from the given list,
+ * or IllegalArgumentException will be thrown if not found.
+ */
+ @Nullable
+ public static <T> T select(@NonNull List<T> list, int start, int length, int k,
+ @NonNull Comparator<? super T> comparator) {
+ if (list == null || start < 0 || length <= 0 || list.size() < start + length
+ || k < 0 || length <= k) {
+ throw new IllegalArgumentException();
+ }
+ return list.get(selectImpl(list, start, start + length - 1, k + start, comparator));
+ }
+
+ /**
+ * Return the kth(0-based) smallest element from the given unsorted array.
+ *
+ * @param array The input array, it <b>will</b> be modified by the algorithm here.
+ * @param start The start offset of the array, inclusive.
+ * @param length The length of the sub array to be searched in.
+ * @param k The 0-based index to search for.
+ * @return The kth smallest element from the given array,
+ * or IllegalArgumentException will be thrown if not found.
+ */
+ public static int select(@NonNull int[] array, int start, int length, int k) {
+ if (array == null || start < 0 || length <= 0 || array.length < start + length
+ || k < 0 || length <= k) {
+ throw new IllegalArgumentException();
+ }
+ return array[selectImpl(array, start, start + length - 1, k + start)];
+ }
+
+ /**
+ * Return the kth(0-based) smallest element from the given unsorted array.
+ *
+ * @param array The input array, it <b>will</b> be modified by the algorithm here.
+ * @param start The start offset of the array, inclusive.
+ * @param length The length of the sub array to be searched in.
+ * @param k The 0-based index to search for.
+ * @return The kth smallest element from the given array,
+ * or IllegalArgumentException will be thrown if not found.
+ */
+ public static long select(@NonNull long[] array, int start, int length, int k) {
+ if (array == null || start < 0 || length <= 0 || array.length < start + length
+ || k < 0 || length <= k) {
+ throw new IllegalArgumentException();
+ }
+ return array[selectImpl(array, start, start + length - 1, k + start)];
+ }
+
+ /**
+ * Return the kth(0-based) smallest element from the given unsorted array.
+ *
+ * @param array The input array, it <b>will</b> be modified by the algorithm here.
+ * @param start The start offset of the array, inclusive.
+ * @param length The length of the sub array to be searched in.
+ * @param k The 0-based index to search for.
+ * @param comparator The comparator which knows how to compare the elements in the list.
+ * @return The kth smallest element from the given array,
+ * or IllegalArgumentException will be thrown if not found.
+ */
+ public static <T> T select(@NonNull T[] array, int start, int length, int k,
+ @NonNull Comparator<? super T> comparator) {
+ if (array == null || start < 0 || length <= 0 || array.length < start + length
+ || k < 0 || length <= k) {
+ throw new IllegalArgumentException();
+ }
+ return array[selectImpl(array, start, start + length - 1, k + start, comparator)];
+ }
+}
diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl
index dfcde3d..4065055 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -57,6 +57,7 @@
void removeGatekeeperPasswordHandle(long gatekeeperPasswordHandle);
int getCredentialType(int userId);
int getPinLength(int userId);
+ boolean refreshStoredPinLength(int userId);
byte[] getHashFactor(in LockscreenCredential currentCredential, int userId);
void setSeparateProfileChallengeEnabled(int userId, boolean enabled, in LockscreenCredential managedUserPassword);
boolean getSeparateProfileChallengeEnabled(int userId);
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 38632d1..fbad4b9 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -622,6 +622,24 @@
return PIN_LENGTH_UNAVAILABLE;
}
}
+
+ /**
+ * This method saves the pin length value to disk based on the user's auto pin
+ * confirmation flag setting. If the auto pin confirmation flag is disabled, or if the
+ * user does not have a PIN setup, or if length of PIN is less than minimum storable PIN length
+ * value, the pin length value is set to PIN_LENGTH_UNAVAILABLE. Otherwise, if the
+ * flag is enabled, the pin length value is set to the actual length of the user's PIN.
+ * @param userId user id of the user whose pin length we want to save
+ * @return true/false depending on whether PIN length has been saved or not
+ */
+ public boolean refreshStoredPinLength(int userId) {
+ try {
+ return getLockSettings().refreshStoredPinLength(userId);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Could not store PIN length on disk " + e);
+ return false;
+ }
+ }
/**
* Records that the user has chosen a pattern at some time, even if the pattern is
* currently cleared.
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 6bec6bc..42d6896 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -334,7 +334,7 @@
"libtimeinstate",
"server_configurable_flags",
"libimage_io",
- "libjpegrecoverymap",
+ "libultrahdr",
],
export_shared_lib_headers: [
// our headers include libnativewindow's public headers
@@ -393,7 +393,7 @@
"libimage_io",
"libjpegdecoder",
"libjpegencoder",
- "libjpegrecoverymap",
+ "libultrahdr",
],
},
host_linux: {
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 9501c8d..4f2bf4a 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -1238,6 +1238,11 @@
return killProcessGroup(uid, pid, SIGKILL);
}
+jint android_os_Process_sendSignalToProcessGroup(JNIEnv* env, jobject clazz, jint uid, jint pid,
+ jint signal) {
+ return sendSignalToProcessGroup(uid, pid, signal);
+}
+
void android_os_Process_removeAllProcessGroups(JNIEnv* env, jobject clazz)
{
return removeAllProcessGroups();
@@ -1305,6 +1310,7 @@
//{"setApplicationObject", "(Landroid/os/IBinder;)V",
//(void*)android_os_Process_setApplicationObject},
{"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup},
+ {"sendSignalToProcessGroup", "(III)I", (void*)android_os_Process_sendSignalToProcessGroup},
{"removeAllProcessGroups", "()V", (void*)android_os_Process_removeAllProcessGroups},
{"nativePidFdOpen", "(II)I", (void*)android_os_Process_nativePidFdOpen},
{"freezeCgroupUid", "(IZ)V", (void*)android_os_Process_freezeCgroupUID},
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index 98814bf..6fcff99 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -368,73 +368,77 @@
jobject inputEventObj;
switch (inputEvent->getType()) {
- case AINPUT_EVENT_TYPE_KEY:
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received key event.", getInputChannelName().c_str());
- }
- inputEventObj = android_view_KeyEvent_fromNative(env,
- static_cast<KeyEvent*>(inputEvent));
- break;
+ case InputEventType::KEY:
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received key event.", getInputChannelName().c_str());
+ }
+ inputEventObj =
+ android_view_KeyEvent_fromNative(env,
+ static_cast<KeyEvent*>(inputEvent));
+ break;
- case AINPUT_EVENT_TYPE_MOTION: {
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received motion event.", getInputChannelName().c_str());
+ case InputEventType::MOTION: {
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received motion event.",
+ getInputChannelName().c_str());
+ }
+ const MotionEvent& motionEvent = static_cast<const MotionEvent&>(*inputEvent);
+ if ((motionEvent.getAction() & AMOTION_EVENT_ACTION_MOVE) && outConsumedBatch) {
+ *outConsumedBatch = true;
+ }
+ inputEventObj = android_view_MotionEvent_obtainAsCopy(env, motionEvent);
+ break;
}
- const MotionEvent& motionEvent = static_cast<const MotionEvent&>(*inputEvent);
- if ((motionEvent.getAction() & AMOTION_EVENT_ACTION_MOVE) && outConsumedBatch) {
- *outConsumedBatch = true;
+ case InputEventType::FOCUS: {
+ FocusEvent* focusEvent = static_cast<FocusEvent*>(inputEvent);
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received focus event: hasFocus=%s.",
+ getInputChannelName().c_str(), toString(focusEvent->getHasFocus()));
+ }
+ env->CallVoidMethod(receiverObj.get(),
+ gInputEventReceiverClassInfo.onFocusEvent,
+ jboolean(focusEvent->getHasFocus()));
+ finishInputEvent(seq, true /* handled */);
+ continue;
}
- inputEventObj = android_view_MotionEvent_obtainAsCopy(env, motionEvent);
- break;
- }
- case AINPUT_EVENT_TYPE_FOCUS: {
- FocusEvent* focusEvent = static_cast<FocusEvent*>(inputEvent);
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received focus event: hasFocus=%s.",
- getInputChannelName().c_str(), toString(focusEvent->getHasFocus()));
+ case InputEventType::CAPTURE: {
+ const CaptureEvent* captureEvent = static_cast<CaptureEvent*>(inputEvent);
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received capture event: pointerCaptureEnabled=%s",
+ getInputChannelName().c_str(),
+ toString(captureEvent->getPointerCaptureEnabled()));
+ }
+ env->CallVoidMethod(receiverObj.get(),
+ gInputEventReceiverClassInfo.onPointerCaptureEvent,
+ jboolean(captureEvent->getPointerCaptureEnabled()));
+ finishInputEvent(seq, true /* handled */);
+ continue;
}
- env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.onFocusEvent,
- jboolean(focusEvent->getHasFocus()));
- finishInputEvent(seq, true /* handled */);
- continue;
- }
- case AINPUT_EVENT_TYPE_CAPTURE: {
- const CaptureEvent* captureEvent = static_cast<CaptureEvent*>(inputEvent);
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received capture event: pointerCaptureEnabled=%s",
- getInputChannelName().c_str(),
- toString(captureEvent->getPointerCaptureEnabled()));
+ case InputEventType::DRAG: {
+ const DragEvent* dragEvent = static_cast<DragEvent*>(inputEvent);
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received drag event: isExiting=%s",
+ getInputChannelName().c_str(), toString(dragEvent->isExiting()));
+ }
+ env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.onDragEvent,
+ jboolean(dragEvent->isExiting()), dragEvent->getX(),
+ dragEvent->getY());
+ finishInputEvent(seq, true /* handled */);
+ continue;
}
- env->CallVoidMethod(receiverObj.get(),
- gInputEventReceiverClassInfo.onPointerCaptureEvent,
- jboolean(captureEvent->getPointerCaptureEnabled()));
- finishInputEvent(seq, true /* handled */);
- continue;
- }
- case AINPUT_EVENT_TYPE_DRAG: {
- const DragEvent* dragEvent = static_cast<DragEvent*>(inputEvent);
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received drag event: isExiting=%s",
- getInputChannelName().c_str(), toString(dragEvent->isExiting()));
+ case InputEventType::TOUCH_MODE: {
+ const TouchModeEvent* touchModeEvent = static_cast<TouchModeEvent*>(inputEvent);
+ if (kDebugDispatchCycle) {
+ ALOGD("channel '%s' ~ Received touch mode event: isInTouchMode=%s",
+ getInputChannelName().c_str(),
+ toString(touchModeEvent->isInTouchMode()));
+ }
+ env->CallVoidMethod(receiverObj.get(),
+ gInputEventReceiverClassInfo.onTouchModeChanged,
+ jboolean(touchModeEvent->isInTouchMode()));
+ finishInputEvent(seq, true /* handled */);
+ continue;
}
- env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.onDragEvent,
- jboolean(dragEvent->isExiting()), dragEvent->getX(),
- dragEvent->getY());
- finishInputEvent(seq, true /* handled */);
- continue;
- }
- case AINPUT_EVENT_TYPE_TOUCH_MODE: {
- const TouchModeEvent* touchModeEvent = static_cast<TouchModeEvent*>(inputEvent);
- if (kDebugDispatchCycle) {
- ALOGD("channel '%s' ~ Received touch mode event: isInTouchMode=%s",
- getInputChannelName().c_str(), toString(touchModeEvent->isInTouchMode()));
- }
- env->CallVoidMethod(receiverObj.get(),
- gInputEventReceiverClassInfo.onTouchModeChanged,
- jboolean(touchModeEvent->isInTouchMode()));
- finishInputEvent(seq, true /* handled */);
- continue;
- }
default:
assert(false); // InputConsumer should prevent this from ever happening
diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp
index 2f9df1f..2c4966e 100644
--- a/core/jni/android_view_InputQueue.cpp
+++ b/core/jni/android_view_InputQueue.cpp
@@ -114,7 +114,7 @@
}
bool InputQueue::preDispatchEvent(InputEvent* e) {
- if (e->getType() == AINPUT_EVENT_TYPE_KEY) {
+ if (e->getType() == InputEventType::KEY) {
KeyEvent* keyEvent = static_cast<KeyEvent*>(e);
if (keyEvent->getFlags() & AKEY_EVENT_FLAG_PREDISPATCH) {
finishEvent(e, false);
diff --git a/core/proto/android/companion/OWNERS b/core/proto/android/companion/OWNERS
new file mode 100644
index 0000000..edf9e56
--- /dev/null
+++ b/core/proto/android/companion/OWNERS
@@ -0,0 +1 @@
+include /core/java/android/companion/OWNERS
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index bb3089b..325ebbe 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -458,6 +458,7 @@
optional float global_scale = 44;
repeated .android.graphics.RectProto keep_clear_areas = 45;
repeated .android.graphics.RectProto unrestricted_keep_clear_areas = 46;
+ repeated .android.view.InsetsSourceProto mergedLocalInsetsSources = 47;
}
message IdentifierProto {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 05b38a5..e216f88 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1036,9 +1036,9 @@
android:protectionLevel="dangerous" />
<!-- @SystemApi @hide Allows an application to communicate over satellite.
- Only granted if the application is a system app. -->
+ Only granted if the application is a system app or privileged app. -->
<permission android:name="android.permission.SATELLITE_COMMUNICATION"
- android:protectionLevel="internal|role" />
+ android:protectionLevel="role|signature|privileged" />
<!-- ====================================================================== -->
<!-- Permissions for accessing external storage -->
@@ -1466,6 +1466,9 @@
<!-- Allows an application to initiate a phone call without going through
the Dialer user interface for the user to confirm the call.
+ <p>
+ <em>Note: An app holding this permission can also call carrier MMI codes to change settings
+ such as call forwarding or call waiting preferences.
<p>Protection level: dangerous
-->
<permission android:name="android.permission.CALL_PHONE"
@@ -2917,6 +2920,14 @@
<permission android:name="android.permission.BIND_SATELLITE_SERVICE"
android:protectionLevel="signature|privileged|vendorPrivileged" />
+ <!-- Must be required by a SatelliteGatewayService to ensure that only the
+ system can bind to it.
+ <p>Protection level: signature
+ @hide
+ -->
+ <permission android:name="android.permission.BIND_SATELLITE_GATEWAY_SERVICE"
+ android:protectionLevel="signature" />
+
<!-- Must be required by a telephony data service to ensure that only the
system can bind to it.
<p>Protection level: signature
@@ -8206,6 +8217,14 @@
</intent-filter>
</service>
+ <service android:name="com.android.server.companion.datatransfer.contextsync.CallMetadataSyncConnectionService"
+ android:permission="android.permission.BIND_CONNECTION_SERVICE"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.telecom.ConnectionService"/>
+ </intent-filter>
+ </service>
+
<provider
android:name="com.android.server.textclassifier.IconsContentProvider"
android:authorities="com.android.textclassifier.icons"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 9a065ab..a12b3ac 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Gee die program toegang tot liggaamsensordata, soos polsslag, temperatuur en bloedsuurstofpersentasie, terwyl die program gebruik word."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Kry toegang tot liggaamsensordata, soos polsslag, terwyl program op agtergrond is"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Gee die program toegang tot liggaamsensordata, soos polsslag, temperatuur en bloedsuurstofpersentasie, terwyl dit op die agtergrond is."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Het toegang tot liggaamsensordata oor polstermperatuur terwyl die app gebruik word."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Gee die app toegang tot liggaamsensordata oor polstermperatuur terwyl die app gebruik word."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Het toegang tot liggaamsensordata oor polstermperatuur terwyl die app op die agtergrond is."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Gee die app toegang tot liggaamsensordata oor polstermperatuur terwyl die app op die agtergrond is."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lees kalendergebeurtenisse en -besonderhede"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Hierdie program kan alle kalendergebeurtenisse lees wat op jou tablet geberg is of jou kalenderdata stoor."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Hierdie program kan alle kalendergeleenthede wat op jou Android TV-toestel geberg is, lees of jou kalenderdata stoor."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Gesighandeling is gekanselleer."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Gebruiker het Gesigslot gekanselleer"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Te veel pogings. Probeer later weer."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Te veel pogings. Gesigslot is gedeaktiveer."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Te veel pogings. Gebruik eerder skermslot."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan nie gesig verifieer nie. Probeer weer."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Jy het nie Gesigslot opgestel nie"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is nie nou onmiddellik beskikbaar nie. Dit word bestuur deur <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Kom meer te wete"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Hervat program"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Skakel werkprogramme aan?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Kry toegang tot jou werkprogramme en -kennisgewings"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Skakel aan"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Hervat werkapps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Hervat"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Noodgeval"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Kry toegang tot jou werkapps en -oproepe"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Program is nie beskikbaar nie"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is nie op die oomblik beskikbaar nie."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> is nie beskikbaar nie"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te skakel"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werkprogramme nie"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlike programme nie"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Maak <xliff:g id="APP">%s</xliff:g> in jou persoonlike profiel oop?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Maak <xliff:g id="APP">%s</xliff:g> in jou werkprofiel oop?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gebruik persoonlike blaaier"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gebruik werkblaaier"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM se netwerkontsluiting-PIN"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 6a32577..c923218 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"መተግበሪያው ስራ ላይ በሚውልበት ጊዜ እንደ የልብ ምት፣ የሙቀት መጠን እና የደም ኦክሲጅን መቶኛ ያለ የሰውነት ዳሳሽ ውሂብን እንዲደርስ ያስችለዋል።"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ከበስተጀርባ እያለ እንደ የልብ ምት ያለ የሰውነት ዳሳሽ ውሂብን መድረስ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"መተግበሪያው ከበስተጀርባ እያለ እንደ የልብ ምት፣ የሙቀት መጠን እና የደም ኦክሲጅን መቶኛ ያለ የሰውነት ዳሳሽ ውሂብን እንዲደርስ ያስችለዋል።"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"መተግበሪያው በጥቅም ላይ ሳለ የሰውነት ዳሳሽ የአንጓ የሙቀት መጠን ውሂብን ይድረስ።"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"መተግበሪያው በጥቅም ላይ ሳለ መተግበሪያው የሰውነት ዳሳሽ የአንጓ የሙቀት መጠን ውሂብን እንዲደርስ ይፈቅድለታል።"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"መተግበሪያው ዳራ ውስጥ ሳለ የሰውነት ዳሳሽ የአንጓ የሙቀት መጠን ውሂብን ይድረስ።"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"መተግበሪያው በዳራ ውስጥ ሳለ መተግበሪያው የሰውነት ዳሳሽ የአንጓ የሙቀት መጠን ውሂብን እንዲደርስ ይፈቅድለታል።"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"የቀን መቁጠሪያ ክስተቶችን እና ዝርዝሮችን አንብብ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ይህ መተግበሪያ ሁሉንም በእርስዎ ጡባዊ ላይ የተከማቹ የቀን መቁጠሪያ ክስተቶችን ማንበብ ወይም የእርስዎን የቀን መቁጠሪያ ውሂብ ማስቀመጥ ይችላል።"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ይህ መተግበሪያ ሁሉንም በእርስዎ Android TV መሣሪያ ላይ የተከማቹ የቀን መቁጠሪያ ክስተቶችን ማንበብ ወይም የእርስዎን የቀን መቁጠሪያ ውሂብ ማስቀመጥ ይችላል።"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"የፊት ሥርዓተ ክወና ተሰርዟል።"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"በመልክ መክፈት በተጠቃሚ ተሰርዟል"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ከልክ በላይ ብዙ ሙከራዎች። በኋላ ላይ እንደገና ይሞክሩ።"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"በጣም ብዙ ሙከራዎች። በመልክ መክፈት ተሰናክሏል።"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ያስገቡ።"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ፊትን ማረጋገጥ አይቻልም። እንደገና ይሞክሩ።"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"በመልክ መክፈትን አላዋቀሩም።"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ያዢው የአንድ መተግበሪያ የባህሪያት መረጃን ማየት እንዲጀምር ያስችለዋል።"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"የዳሳሽ ውሂቡን በከፍተኛ የናሙና ብዛት ላይ ይድረሱበት"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"መተግበሪያው የዳሳሽ ውሂቡን ከ200 ኸ በሚበልጥ ፍጥነት ናሙና እንዲያደርግ ይፈቅድለታል"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"መተግበሪያን ያለ ተጠቃሚ እርምጃ ያዘምኑ"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"ያዢው ያለ ተጠቃሚ እርምጃ ከዚህ በፊት የጫነውን መተግበሪያ እንዲያዘምነው ይፈቅዳል"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"የይለፍ ቃል ደንቦች አዘጋጅ"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"በማያ ገጽ መቆለፊያ የይለፍ ቃሎች እና ፒኖች ውስጥ የሚፈቀዱ ቁምፊዎችን እና ርዝመታቸውን ተቆጣጠር።"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"የማሳያ-ክፈት ሙከራዎችን ክትትል ያድርጉባቸው"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> አሁን ላይ አይገኝም። በ<xliff:g id="APP_NAME_1">%2$s</xliff:g> የሚተዳደር ነው።"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"የበለጠ ለመረዳት"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"መተግበሪያን ላፍታ እንዳይቆም አድርግ"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"የሥራ መተግበሪያዎች ይብሩ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"የእርስዎን የሥራ መተግበሪያዎች እና ማሳወቂያዎች መዳረሻ ያግኙ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"አብራ"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"የሥራ መተግበሪያዎች ከቆሙበት ይቀጥሉ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ከቆመበት ቀጥል"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ድንገተኛ አደጋ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"የእርስዎን የሥራ መተግበሪያዎች እና ጥሪዎች መዳረሻ ያግኙ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"መተግበሪያ አይገኝም"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> አሁን አይገኝም።"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> አይገኝም"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ለማብራት መታ ያድርጉ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ምንም የሥራ መተግበሪያዎች የሉም"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ምንም የግል መተግበሪያዎች የሉም"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> በግል መገለጫዎ ውስጥ ይከፈት?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> በስራ መገለጫዎ ውስጥ ይከፈት?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"የግል አሳሽ ተጠቀም"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"የስራ አሳሽ ተጠቀም"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"የሲም አውታረ መረብ መክፈቻ ፒን"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index b79dcf2..0d52cac 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -467,10 +467,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"يتيح هذا الإذن للتطبيق بالوصول إلى بيانات أجهزة استشعار الجسم، مثل معدّل نبضات القلب ودرجة الحرارة ونسبة الأكسجين في الدم، وذلك عندما يكون التطبيق قيد الاستخدام."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"الوصول في الخلفية إلى بيانات استشعار الجسم، مثل معدّل نبضات القلب"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"يتيح هذا الإذن للتطبيق الوصول إلى بيانات أجهزة استشعار الجسم، مثل معدّل نبضات القلب ودرجة الحرارة ونسبة الأكسجين في الدم، وذلك عند استخدام التطبيق في الخلفية."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"الوصول إلى بيانات درجة حرارة المعصم من خلال جهاز استشعار الجسم عندما يكون التطبيق قيد الاستخدام"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات درجة حرارة المعصم من خلال جهاز استشعار الجسم، وذلك عندما يكون التطبيق قيد الاستخدام."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"الوصول إلى بيانات درجة حرارة المعصم من خلال جهاز استشعار الجسم عندما يكون التطبيق مفعّلاً في الخلفية"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"يسمح هذا الإذن للتطبيق بالوصول إلى بيانات درجة حرارة المعصم من خلال جهاز استشعار الجسم، وذلك عندما يكون التطبيق مفعّلاً في الخلفية."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"قراءة أحداث التقويم والتفاصيل"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"يمكن لهذا التطبيق قراءة جميع أحداث التقويم المخزَّنة على الجهاز اللوحي ومشاركة بيانات التقويم أو حفظها."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"يمكن لهذا التطبيق قراءة جميع أحداث التقويم المخزَّنة على جهاز Android TV ومشاركة بيانات التقويم أو حفظها."</string>
@@ -717,7 +713,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"تمّ إلغاء عملية مصادقة الوجه."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ألغى المستخدم ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"تمّ إجراء محاولات كثيرة. أعِد المحاولة لاحقًا."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"تم إجراء عدد كبير جدًا من المحاولات، لذا تم إيقاف ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"تم إجراء عدد كبير جدًا من المحاولات. أدخِل قفل الشاشة بدلاً من ذلك."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"يتعذّر التحقق من الوجه. حاول مرة أخرى."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"لم يسبق لك إعداد ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
@@ -804,10 +801,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"للسماح للمالك ببدء عرض معلومات عن ميزات التطبيق."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"الوصول إلى بيانات جهاز الاستشعار بمعدّل مرتفع للبيانات في الملف الصوتي"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"يسمح هذا الأذن للتطبيق بزيادة بيانات جهاز الاستشعار بمعدّل بيانات في الملف الصوتي أكبر من 200 هرتز."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"تحديث التطبيق بدون تأكيد المستخدم"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"يسمح هذا الإذن للمالك بتحديث التطبيق المثبّت مسبقًا بدون تأكيد المستخدم."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"تعيين قواعد كلمة المرور"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"للتحكم في الطول والأحرف المسموح بها في كلمات المرور وأرقام التعريف الشخصي في قفل الشاشة."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"مراقبة محاولات فتح قفل الشاشة"</string>
@@ -1960,11 +1955,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"التطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> غير متاح الآن، وهو مُدار بواسطة <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"مزيد من المعلومات"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"استئناف تشغيل التطبيق"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"هل تريد تفعيل تطبيقات العمل؟"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"الوصول إلى تطبيقات العمل وإشعاراتها"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"تفعيل"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"أتريد إلغاء إيقاف تطبيقات العمل مؤقتًا؟"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"إلغاء الإيقاف المؤقت"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"الطوارئ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"الوصول إلى المكالمات وتطبيقات العمل"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"التطبيق غير متاح"</string>
<string name="app_blocked_message" msgid="542972921087873023">"تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> غير متاح الآن."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"تطبيق <xliff:g id="ACTIVITY">%1$s</xliff:g> غير متاح"</string>
@@ -2174,8 +2167,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"انقر لتفعيل الميزة"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ما مِن تطبيقات عمل."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ما مِن تطبيقات شخصية."</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"هل تريد فتح <xliff:g id="APP">%s</xliff:g> في ملفك الشخصي؟"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"هل تريد فتح <xliff:g id="APP">%s</xliff:g> في ملفك الشخصي للعمل؟"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استخدام المتصفّح الشخصي"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"استخدام متصفّح العمل"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"رقم التعريف الشخصي لإلغاء قفل شبكة شريحة SIM"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 055078a..a113934 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -379,7 +379,7 @@
<string name="permdesc_readSms" product="default" msgid="774753371111699782">"এই এপ্টোৱে আপোনাৰ ফ\'নত সংৰক্ষিত আটাইবোৰ এছএমএছ (পাঠ) বাৰ্তা পঢ়িব পাৰে।"</string>
<string name="permlab_receiveWapPush" msgid="4223747702856929056">"পাঠ বার্তা (WAP) বোৰ লাভ কৰক"</string>
<string name="permdesc_receiveWapPush" msgid="1638677888301778457">"এপ্টোক WAP বাৰ্তাবোৰ পাবলৈ আৰু প্ৰক্ৰিয়া সম্পন্ন কৰিবলৈ অনুমতি দিয়ে৷ এই অনুমতিত আপোনালৈ পঠিওৱা বাৰ্তাবোৰ আপোনাক নেদেখুৱাকৈয়ে নিৰীক্ষণ বা মচাৰ সক্ষমতা অন্তৰ্ভুক্ত থাকে৷"</string>
- <string name="permlab_getTasks" msgid="7460048811831750262">"চলি থকা এপসমূহ বিচাৰি উলিয়াওক"</string>
+ <string name="permlab_getTasks" msgid="7460048811831750262">"চলি থকা এপ্সমূহ বিচাৰি উলিয়াওক"</string>
<string name="permdesc_getTasks" msgid="7388138607018233726">"এপ্টোক বৰ্তমানে আৰু শেহতীয়াভাৱে চলি থকা কাৰ্যসমূহৰ বিষয়ে তথ্য পুনৰুদ্ধাৰ কৰিবলৈ অনুমতি দিয়ে৷ এইটোৱে এপ্টোক ডিভাইচটোত কোনবোৰ এপ্লিকেশ্বন ব্যৱহাৰ হৈ আছে তাৰ বিষয়ে তথ্য বিচাৰি উলিয়াবলৈ অনুমতি দিব পাৰে৷"</string>
<string name="permlab_manageProfileAndDeviceOwners" msgid="639849495253987493">"প্ৰ\'ফাইল আৰু ডিভাইচৰ গৰাকীসকলক পৰিচালনা কৰিব পাৰে"</string>
<string name="permdesc_manageProfileAndDeviceOwners" msgid="7304240671781989283">"প্ৰ\'ফাইলৰ গৰাকী আৰু ডিভাইচৰ গৰাকী ছেট কৰিবলৈ এপ্টোক অনুমতি দিয়ে।"</string>
@@ -387,8 +387,8 @@
<string name="permdesc_reorderTasks" msgid="8796089937352344183">"গতিবিধিক অগ্ৰভাগ আৰু নেপথ্যলৈ নিবলৈ এপক অনুমতি দিয়ে। এপে এই কার্য আপোনাৰ ইনপুট অবিহনেই কৰিব পাৰে।"</string>
<string name="permlab_enableCarMode" msgid="893019409519325311">"গাড়ীৰ ম\'ড সক্ষম কৰক"</string>
<string name="permdesc_enableCarMode" msgid="56419168820473508">"গাড়ী ম\'ড সক্ষম কৰিবলৈ এপ্টোক অনুমতি দিয়ে৷"</string>
- <string name="permlab_killBackgroundProcesses" msgid="6559320515561928348">"অন্য এপবোৰ বন্ধ কৰক"</string>
- <string name="permdesc_killBackgroundProcesses" msgid="2357013583055434685">"এপ্টোক অন্য এপসমূহৰ নেপথ্যৰ প্ৰক্ৰিয়াসমূহ শেষ কৰিবলৈ অনুমতি দিয়ে৷ এই কার্যৰ বাবে অন্য এপসমূহ চলাটো বন্ধ হ\'ব পাৰে৷"</string>
+ <string name="permlab_killBackgroundProcesses" msgid="6559320515561928348">"অন্য এপ্বোৰ বন্ধ কৰক"</string>
+ <string name="permdesc_killBackgroundProcesses" msgid="2357013583055434685">"এপ্টোক অন্য এপ্সমূহৰ নেপথ্যৰ প্ৰক্ৰিয়াসমূহ শেষ কৰিবলৈ অনুমতি দিয়ে৷ এই কার্যৰ বাবে অন্য এপ্সমূহ চলাটো বন্ধ হ\'ব পাৰে৷"</string>
<string name="permlab_systemAlertWindow" msgid="5757218350944719065">"এই এপ্টো অইন এপৰ ওপৰত প্ৰদৰ্শিত হ\'ব পাৰে"</string>
<string name="permdesc_systemAlertWindow" msgid="1145660714855738308">"এই এপ্টো অন্য এপৰ ওপৰত বা স্ক্ৰীনৰ অন্য অংশত প্ৰদৰ্শিত হ\'ব পাৰে। এই কাৰ্যই এপৰ স্বাভাৱিক ব্যৱহাৰত ব্যাঘাত জন্মাব পাৰে আৰু অন্য এপ্সমূহক স্ক্ৰীনত কেনেকৈ দেখা পোৱা যায় সেইটো সলনি কৰিব পাৰে।"</string>
<string name="permlab_hideOverlayWindows" msgid="6382697828482271802">"অন্য এপৰ অ’ভাৰলে’ লুকুৱাওক"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"এপ্টো ব্যৱহাৰ কৰি থকাৰ সময়ত এপ্টোক হৃদস্পন্দনৰ হাৰ, উষ্ণতা আৰু তেজত অক্সিজেনৰ শতকৰা হাৰৰ দৰে শৰীৰৰ ছেন্সৰৰ ডেটা এক্সেছ কৰিবলৈ অনুমতি দিয়ে।"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"নেপথ্যত থকাৰ সময়ত হৃদস্পন্দনৰ হাৰৰ দৰে শৰীৰৰ ছেন্সৰৰ ডেটা এক্সেছ কৰক"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"এপ্টো নেপথ্যত থকাৰ সময়ত এপ্টোক হৃদস্পন্দনৰ হাৰ, উষ্ণতা আৰু তেজত অক্সিজেনৰ শতকৰা হাৰৰ দৰে শৰীৰৰ ছেন্সৰৰ ডেটা এক্সেছ কৰিবলৈ অনুমতি দিয়ে।"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"এপ্টো ব্যৱহাৰ হৈ থকাৰ সময়ত শৰীৰৰ ছেন্সৰ জৰিয়তে মণিবন্ধৰ উষ্ণতাৰ ডেটা এক্সেছ কৰে।"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"এপ্টো ব্যৱহাৰ হৈ থকাৰ সময়ত এপ্টোক শৰীৰৰ ছেন্সৰ জৰিয়তে মণিবন্ধৰ উষ্ণতাৰ ডেটা এক্সেছ কৰাৰ অনুমতি দিয়ে।"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"এপ্টো নেপথ্যত থকাৰ সময়ত শৰীৰৰ ছেন্সৰ জৰিয়তে মণিবন্ধৰ উষ্ণতাৰ ডেটা এক্সেছ কৰে।"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"এপ্টো নেপথ্যত থকাৰ সময়ত এপ্টোক শৰীৰৰ ছেন্সৰ জৰিয়তে মণিবন্ধৰ উষ্ণতাৰ ডেটা এক্সেছ কৰাৰ অনুমতি দিয়ে।"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"কেলেণ্ডাৰৰ কাৰ্যক্ৰম আৰু সবিশেষ পঢ়িব পাৰে"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"এই এপ্টোৱে আপোনাৰ টেবলেটটোত সংৰক্ষিত আটাইবোৰ কেলেণ্ডাৰ কাৰ্যক্ৰম পঢ়িব পাৰে আৰু আপোনাৰ কেলেণ্ডাৰৰ ডেটা শ্বেয়াৰ বা ছেভ কৰিব পাৰে।"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"এই এপ্টোৱে আপোনাৰ Android TV ডিভাইচটোত ষ্ট’ৰ কৰি ৰখা আটাইবোৰ কেলেণ্ডাৰৰ অনুষ্ঠান পঢ়িব পাৰে আৰু আপোনাৰ কেলেণ্ডাৰৰ ডেটা শ্বেয়াৰ অথবা ছেভ কৰিব পাৰে।"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"মুখমণ্ডলৰ প্ৰক্ৰিয়া বাতিল কৰা হ’ল।"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ব্যৱহাৰকাৰীয়ে ফেচ আনলক বাতিল কৰিছে"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"অত্যধিক ভুল প্ৰয়াস। কিছুসময়ৰ পাছত আকৌ চেষ্টা কৰক।"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"অতি বেছিসংখ্যক প্ৰয়াস। ফেচ আনলক সুবিধাটো অক্ষম কৰা হৈছে।"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"অতি বেছিসংখ্যক প্ৰয়াস। ইয়াৰ সলনি স্ক্ৰীন লক দিয়ক।"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"মুখমণ্ডল সত্যাপন কৰিব পৰা নগ’ল। আকৌ চেষ্টা কৰক।"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ফেচ আনলক সুবিধাটো ছেট আপ কৰা নাই"</string>
@@ -1255,7 +1252,7 @@
<string name="android_upgrading_notification_title" product="default" msgid="3509927005342279257">"ছিষ্টেম আপডে’ট সম্পূৰ্ণ কৰা হৈছে…"</string>
<string name="app_upgrading_toast" msgid="1016267296049455585">"<xliff:g id="APPLICATION">%1$s</xliff:g>ক আপগ্ৰেড কৰি থকা হৈছে…"</string>
<string name="android_preparing_apk" msgid="589736917792300956">"<xliff:g id="APPNAME">%1$s</xliff:g>সাজু কৰি থকা হৈছে।"</string>
- <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"আৰম্ভ হৈ থকা এপসমূহ।"</string>
+ <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="6976841690455338563">"ছেটআপ সমাপ্ত কৰিবলৈ স্ক্ৰীন অফ কৰক"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"এই মুহূৰ্তত <xliff:g id="APP_NAME_0">%1$s</xliff:g> উপলব্ধ নহয়। ইয়াক <xliff:g id="APP_NAME_1">%2$s</xliff:g>এ পৰিচালনা কৰে।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"অধিক জানক"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"এপ্ আনপজ কৰক"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"কৰ্মস্থানৰ এপ্ অন কৰিবনে?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"আপোনাৰ কৰ্মস্থানৰ এপ্ আৰু জাননীৰ এক্সেছ পাওক"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"অন কৰক"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"কাম সম্পৰ্কীয় এপ্ আনপজ কৰিবনে?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"আনপজ কৰক"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"জৰুৰীকালীন"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"আপোনাৰ কৰ্মস্থানৰ এপ্ আৰু জাননীৰ এক্সেছ পাওক"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"এপ্টো উপলব্ধ নহয়"</string>
<string name="app_blocked_message" msgid="542972921087873023">"এই মুহূৰ্তত <xliff:g id="APP_NAME">%1$s</xliff:g> উপলব্ধ নহয়।"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> উপলব্ধ নহয়"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"অন কৰিবলৈ টিপক"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"কোনো কৰ্মস্থানৰ এপ্ নাই"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"কোনো ব্যক্তিগত এপ্ নাই"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"আপোনাৰ ব্যক্তিগত প্ৰ’ফাইলত <xliff:g id="APP">%s</xliff:g> খুলিবনে?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"আপোনাৰ কর্মস্থানৰ প্ৰ\'ফাইলত <xliff:g id="APP">%s</xliff:g> খুলিবনে?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ব্যক্তিগত ব্ৰাউজাৰ ব্যৱহাৰ কৰক"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"কৰ্মস্থানৰ ব্ৰাউজাৰ ব্যৱহাৰ কৰক"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ছিম নেটৱৰ্ক আনলক কৰা পিন"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index a26fe9c..c9876b0 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Tətbiqə istifadə zamanı ürək döyüntüsü, temperatur və qanda oksigen faizi kimi bədən sensoru datasına giriş icazəsi verir."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Arxa fonda olarkən ürək döyüntüsü kimi bədən sensoru datasına giriş"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Tətbiqə arxa fonda olarkən ürək döyüntüsü, temperatur və qanda oksigen faizi kimi bədən sensoru datasına giriş icazəsi verir."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Tətbiq istifadə edilərkən bədən sensoru bilək temperaturu datasına giriş."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Tətbiq istifadə edilərkən tətbiqin bədən sensoru bilək temperaturu datasına girişinə imkan verir."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Tətbiq arxa fonda olarkən bədən sensoru bilək temperaturu datasına giriş."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Tətbiq arxa fonda olarkən tətbiqin bədən sensoru bilək temperaturu datasına girişinə imkan verir."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Təqvim təqdirləri və detallarını oxuyun"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Bu tətbiq planşetdə yerləşdirilmiş və təqvim datasında yadda saxlanmış bütün təqvim tədbirlərini oxuya bilər."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Bu tətbiq Android TV cihazında saxlanılan bütün təqvim tədbirlərini oxuya, həmçinin təqvim datasını paylaşa və ya yadda saxlaya bilər."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Üz əməliyyatı ləğv edildi."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"İstifadəçi üz ilə kiliddən çıxarmanı ləğv edib"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Həddindən çox cəhd. Sonraya saxlayın."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Həddindən çox cəhd. Üz ilə kiliddən çıxarma deaktiv edildi."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Həddindən çox cəhd. Əvəzində ekran kilidi daxil edin."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Üz doğrulanmadı. Yenidən cəhd edin."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Üz ilə kiliddən çıxarma ayarlamamısınız"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"İstifadəçinin tətbiqin funksiyaları barədə məlumatları görməyə başlamasına icazə verir."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"sensor datasına yüksək ölçmə sürəti ilə giriş etmək"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Tətbiqə sensor datasını 200 Hz-dən yüksək sürətlə ölçməyə imkan verir"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"istifadəçi əməliyyatı olmadan tətbiqin güncəllənməsi"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"İcazə sahibinə istifadəçi əməliyyatı olmadan qabaqcadan quraşdırılan tətbiqi güncəlləmək imkanı verir"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Parol qaydalarını təyin edin"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Ekran kilidinin parolu və PINlərində icazə verilən uzunluq və simvollara nəzarət edin."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Ekranı kiliddən çıxarmaq üçün edilən cəhdlərə nəzarət edin"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> hazırda əlçatan deyil. Bunu <xliff:g id="APP_NAME_1">%2$s</xliff:g> idarə edir."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Ətraflı məlumat"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Tətbiqi davam etdirin"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"İş tətbiqləri aktiv edilsin?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"İş tətbiqlərinizə və bildirişlərinizə giriş əldə edin"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivləşdirin"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"İş tətbiqi üzrə pauza bitsin?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Pauzanı bitirin"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Fövqəladə hal"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"İş tətbiqlərinizə və zənglərinizə giriş əldə edin"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Tətbiq əlçatan deyil"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hazırda əlçatan deyil."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> əlçatan deyil"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Aktiv etmək üçün toxunun"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş tətbiqi yoxdur"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Şəxsi tətbiq yoxdur"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Şəxsi profilinizdə <xliff:g id="APP">%s</xliff:g> tətbiqi açılsın?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"İş profilinizdə <xliff:g id="APP">%s</xliff:g> tətbiqi açılsın?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Şəxsi brauzerdən istifadə edin"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"İş brauzerindən istifadə edin"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM şəbəkəsi kilidaçma PİN\'i"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 54f9e06..4d8bc70 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Dozvoljava aplikaciji da pristupa podacima senzora za telo, kao što su puls, temperatura i procenat kiseonika u krvi dok se aplikacija koristi."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Pristup podacima senzora za telo, kao što je puls, u pozadini"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Dozvoljava aplikaciji da pristupa podacima senzora za telo, kao što su puls, temperatura i procenat kiseonika u krvi dok je aplikacija u pozadini."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Pristupajte podacima o temperaturi sa senzora za telo na ručnom zglobu dok se aplikacija koristi."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Dozvoljava aplikaciji da pristupa podacima o temperaturi sa senzora za telo na ručnom zglobu dok se aplikacija koristi."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Pristupajte podacima o temperaturi sa senzora za telo na ručnom zglobu dok je aplikacija u pozadini."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Dozvoljava aplikaciji da pristupa podacima o temperaturi sa senzora za telo na ručnom zglobu dok je aplikacija u pozadini."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Čitanje događaja i podataka iz kalendara"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ova aplikacija može da čita sve događaje iz kalendara koje čuvate na tabletu, kao i da deli ili čuva podatke iz kalendara."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ova aplikacija može da čita sve događaje iz kalendara koje čuvate na Android TV uređaju, kao i da deli ili čuva podatke iz kalendara."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Obrada lica je otkazana."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Probajte ponovo kasnije."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Previše pokušaja. Otključavanje licem je onemogućeno."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Koristite zaključavanje ekrana za to."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Provera lica nije uspela. Probajte ponovo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste podesili otključavanje licem"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutno nije dostupna. <xliff:g id="APP_NAME_1">%2$s</xliff:g> upravlja dostupnošću."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saznajte više"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Opozovi pauziranje aplikacije"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Uključujete poslovne aplikacije?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pristupajte poslovnim aplikacijama i obaveštenjima"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Uključiti poslovne aplikacije?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Opozovi pauzu"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hitan slučaj"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Pristupajte poslovnim aplikacijama i pozivima"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno nije dostupna."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – nije dostupno"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Želite da na ličnom profilu otvorite: <xliff:g id="APP">%s</xliff:g>?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Želite da na poslovnom profilu otvorite: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični pregledač"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni pregledač"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 8938da7..2925fe6 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Праграма ў час яе выкарыстання будзе мець доступ да даных датчыкаў цела, такіх як пульс, тэмпература і працэнт утрымання ў крыві кіслароду."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Доступ да даных датчыкаў цела, такіх як пульс, у фонавым рэжыме"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Праграма ў час яе працы ў фонавым рэжыме будзе мець доступ да даных датчыкаў цела, такіх як пульс, тэмпература і працэнт утрымання ў крыві кіслароду."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Доступ праграмы ў час яе выкарыстання да даных пра тэмпературу з датчыка цела, які знаходзіцца на запясці."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Праграма ў час яе выкарыстання будзе мець доступ да даных пра тэмпературу з датчыка цела, які знаходзіцца на запясці."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Доступ праграмы ў фонавым рэжыме да даных пра тэмпературу з датчыка цела, які знаходзіцца на запясці."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Праграма ў час яе працы ў фонавым рэжыме будзе мець доступ да даных пра тэмпературу з датчыка цела, які знаходзіцца на запясці."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Чытаць падзеі календара і падрабязныя звесткі"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Гэта праграма можа чытаць усе падзеі календара, захаваныя на вашым планшэце, і абагульваць ці захоўваць даныя календара."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Гэта праграма можа счытваць усе падзеі календара, захаваныя на прыладзе Android TV, і абагульваць ці захоўваць яго даныя."</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Распазнаванне твару скасавана."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Распазнаванне твару скасавана карыстальнікам"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Занадта шмат спроб. Паўтарыце спробу пазней."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Занадта шмат спроб. Распазнаванне твару выключана."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Занадта шмат спроб. Разблакіруйце экран іншым спосабам."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Не ўдалося спраўдзіць твар. Паўтарыце спробу."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Вы не наладзілі распазнаванне твару"</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Дазваляе трымальніку запусціць прагляд інфармацыі пра функцыі для праграмы."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"атрымліваць даныя датчыка з высокай частатой дыскрэтызацыі"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Праграма зможа распазнаваць даныя датчыка з частатой звыш 200 Гц"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"абнаўленне праграмы без удзелу карыстальніка"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Раней усталяваная праграма будзе абнаўляцца без удзелу карыстальніка"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Устанавіць правілы паролю"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Кіраваць даўжынёй і сімваламі, дазволенымі пры ўводзе пароляў і PIN-кодаў блакіроўкі экрана."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Сачыць за спробамі разблакіроўкі экрана"</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Праграма \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" цяпер недаступная. Яна кіруецца праграмай \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\"."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Даведацца больш"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Скасаваць прыпыненне для праграмы"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Уключыць працоўныя праграмы?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Атрымаць доступ да працоўных праграм і апавяшчэнняў"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Уключыць"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Уключыць працоўныя праграмы?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Уключыць"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Экстранны выпадак"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Запытайце доступ да працоўных праграм і выклікаў"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Праграма недаступная"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" цяпер недаступная."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недаступна: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Націсніце, каб уключыць"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма працоўных праграм"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма асабістых праграм"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Адкрыць праграму \"<xliff:g id="APP">%s</xliff:g>\" з выкарыстаннем асабістага профілю?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Адкрыць праграму \"<xliff:g id="APP">%s</xliff:g>\" з выкарыстаннем працоўнага профілю?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Скарыстаць асабісты браўзер"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Скарыстаць працоўны браўзер"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код разблакіроўкі сеткі для SIM-карты"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index f2fddee..35efb0a 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -210,7 +210,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Включване"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Обажданията и съобщенията са изключени"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Служебните приложения са поставени на пауза. Няма да получавате телефонни обаждания и текстови съобщения."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Вкл. на служ. прил."</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Отмяна на паузата"</string>
<string name="me" msgid="6207584824693813140">"Аз"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Опции за таблета"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Опции за Android TV"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Разрешава на приложението да осъществява достъп до данните от сензорите за тяло, като например тези за сърдечен ритъм, температура и процент на кислорода в кръвта, докато то се използва."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Достъп до данните от сензорите за тяло (напр. за сърдечен ритъм) на заден план"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Разрешава на приложението да осъществява достъп до данните от сензорите за тяло, като например тези за сърдечен ритъм, температура и процент на кислорода в кръвта, докато то се изпълнява на заден план."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Достъп до данните за температурата, измерена на китката от сензорите за тяло, докато приложението се използва."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Дава на приложението достъп до данните за температурата, измерена на китката от сензорите за тяло. Разрешението е в сила, докато приложението се използва."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Достъп до данните за температурата, измерена на китката от сензорите за тяло, докато приложението работи на заден план."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Дава на приложението достъп до данните за температурата, измерена на китката от сензорите за тяло. Разрешението е в сила, докато приложението работи на заден план."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Четене на събития и подробности от календара"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Това приложение може да чете всички съхранявани на таблета ви събития в календара и да споделя или запазва данни в календара ви."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Това приложение може да чете всички съхранявани на устройството ви с Android TV събития в календара и да споделя или запазва данни в календара ви."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Операцията с лице е анулирана."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Отключването с лице е анулирано от потребителя"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Твърде много опити. Опитайте отново по-късно."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Твърде много опити. Отключването с лице е деактивирано."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Твърде много опити. Използвайте опцията за заключване на екрана."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Лицето не може да се потвърди. Опитайте отново."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Не сте настроили отключването с лице"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Разрешава на притежателя да стартира прегледа на информацията за функциите на дадено приложение."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"осъществяване на достъп до данните от сензорите при висока скорост на семплиране"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Разрешава на приложението да семплира данните от сензорите със скорост, по-висока от 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"актуализиране на приложението без действие от страна на потребителя"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Разрешава на собственика да актуализира приложението, което е инсталирал по-рано, без действие от страна на потребителя"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Задаване на правила за паролата"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Контролира дължината и разрешените знаци за паролите и ПИН кодовете за заключване на екрана."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Наблюдаване на опитите за отключване на екрана"</string>
@@ -1720,7 +1715,7 @@
<string name="color_inversion_feature_name" msgid="2672824491933264951">"Инвертиране на цветовете"</string>
<string name="color_correction_feature_name" msgid="7975133554160979214">"Корекция на цветове"</string>
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Работа с една ръка"</string>
- <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Доп. затъмн."</string>
+ <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Допълнително затъмняване"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слухови апарати"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Задържахте бутоните за силата на звука. Услугата <xliff:g id="SERVICE_NAME">%1$s</xliff:g> е включена."</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Задържахте бутоните за силата на звука. Услугата <xliff:g id="SERVICE_NAME">%1$s</xliff:g> е изключена."</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"В момента няма достъп до <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Това се управлява от <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Научете повече"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Отмяна на паузата за приложението"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Включване на служ. приложения?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Получете достъп до служебните си приложения и известия"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Включване"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Отмяна на паузата за служ. прил.?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Отмяна на паузата"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Спешен случай"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Получете достъп до служебните си приложения и обаждания"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Приложението не е достъпно"</string>
<string name="app_blocked_message" msgid="542972921087873023">"В момента няма достъп до <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> не е налице"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Докоснете за включване"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма подходящи служебни приложения"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма подходящи лични приложения"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Искате ли да отворите <xliff:g id="APP">%s</xliff:g> в личния си потребителски профил?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Искате ли да отворите <xliff:g id="APP">%s</xliff:g> в служебния си потребителски профил?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Използване на личния браузър"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Използване на служебния браузър"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ПИН за отключване на мрежата за SIM"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 78f7945..05d40bf 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"এই অ্যাপ ব্যবহার করার সময় বডি সেন্সর ডেটা অ্যাক্সেস করার অনুমতি দেওয়া হয়। এর মধ্যে হার্ট রেট, তাপমাত্রা এবং রক্তে অক্সিজেনের পরিমাণের শতাংশ সম্পর্কিত তথ্যও আছে।"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"অ্যাপ ব্যাকগ্রাউন্ডে চলার সময়, হার্ট রেটের মতো বডি সেন্সর ডেটার অ্যাক্সেস দিন"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"এই অ্যাপ ব্যাকগ্রাউন্ডে চলার সময় বডি সেন্সর ডেটা অ্যাক্সেস করার অনুমতি দেওয়া হয়। এর মধ্যে হার্ট রেট, তাপমাত্রা এবং রক্তে অক্সিজেনের পরিমাণের শতাংশ সম্পর্কিত তথ্যও আছে।"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"অ্যাপ ব্যবহার করার সময়, দেহের তাপমাত্রা সংক্রান্ত বডি সেন্সর ডেটা অ্যাক্সেস করা।"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"অ্যাপ ব্যবহার করার সময়, দেহের তাপমাত্রা সংক্রান্ত বডি সেন্সর ডেটা অ্যাক্সেস করার ক্ষেত্রে অ্যাপকে অনুমতি দেয়।"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"অ্যাপ ব্যাকগ্রাউন্ডে চলার সময়, দেহের তাপমাত্রা সংক্রান্ত বডি সেন্সর ডেটা অ্যাক্সেস করা।"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"অ্যাপ ব্যাকগ্রাউন্ডে চলার সময়, দেহের তাপমাত্রা সংক্রান্ত বডি সেন্সর ডেটা অ্যাক্সেস করার ক্ষেত্রে অ্যাপকে অনুমতি দেয়।"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"ক্যালেন্ডারের ইভেন্ট এবং বিশদ বিবরণ পড়ুন"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"এই অ্যাপটি আপনার ট্যাবলেটে সংরক্ষিত সমস্ত ক্যালেন্ডার ইভেন্ট পড়তে এবং আপনার ক্যালেন্ডারের ডেটা শেয়ার বা সংরক্ষণ করতে পারে৷"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"এই অ্যাপ আপনার Android TV ডিভাইসে সেভ করা সব ক্যালেন্ডার ইভেন্ট পড়তে পারে এবং আপনার ক্যালেন্ডারের ডেটা শেয়ার বা সেভ করতে পারে।"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ফেস অপারেশন বাতিল করা হয়েছে৷"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ব্যবহারকারী \'ফেস আনলক\' বাতিল করে দিয়েছেন"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"অনেকবার চেষ্টা করা হয়েছে। পরে আবার চেষ্টা করুন।"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"অনেকবার চেষ্টা করেছেন। \'ফেস আনলক\' বন্ধ করা হয়েছে।"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"অনেকবার চেষ্টা করেছেন। এর পরিবর্তে স্ক্রিন লক ব্যবহার করুন।"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"আপনার মুখ যাচাই করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"এখনও \'ফেস আনলক\' সেট আপ করেননি"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"কোনও অ্যাপের ফিচার সম্পর্কিত তথ্য দেখা শুরু করতে অনুমতি দেয়।"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"হাই স্যাম্পলিং রেটে সেন্সর ডেটা অ্যাক্সেস করুন"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"200 Hz-এর বেশি রেটে অ্যাপকে স্যাম্পল সেন্সর ডেটার জন্য অনুমতি দিন"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ব্যবহারকারীর অ্যাকশন ছাড়াই অ্যাপ আপডেট করুন"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"হোল্ডারকে ব্যবহারকারীর অ্যাকশন ছাড়াই আগের ইনস্টল করা অ্যাপ আপডেট করার অনুমতি দেয়"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"পাসওয়ার্ড নিয়মগুলি সেট করে"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"স্ক্রিন লক করার পাসওয়ার্ডগুলিতে অনুমতিপ্রাপ্ত অক্ষর এবং দৈর্ঘ্য নিয়ন্ত্রণ করে৷"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"স্ক্রিন আনলক করার প্রচেষ্টাগুলির উপরে নজর রাখুন"</string>
@@ -1720,7 +1715,7 @@
<string name="color_inversion_feature_name" msgid="2672824491933264951">"কালার ইনভার্সন"</string>
<string name="color_correction_feature_name" msgid="7975133554160979214">"রঙ সংশোধন করা"</string>
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"এক হাতে ব্যবহার করার মোড"</string>
- <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিরিক্ত কম আলো"</string>
+ <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিরিক্ত কম ব্রাইটনেস"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"হিয়ারিং ডিভাইস"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"ভলিউম কী ধরে ছিলেন। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> চালু করা হয়েছে।"</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"ভলিউম কী ধরে ছিলেন। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> বন্ধ করা হয়েছে।"</string>
@@ -1914,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS অনুরোধ USSD অনুরোধে পরিবর্তন করা হয়েছে"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"নতুন SS অনুরোধে পরিবর্তন করা হয়েছে"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"ফিশিংয়ের সতর্কতা"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"কর্মস্থলের প্রোফাইল"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"অফিস প্রোফাইল"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"সতর্ক করা হয়েছে"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"যাচাই করা হয়েছে"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"বড় করুন"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> এখন উপলভ্য নয়। এই অ্যাপটিকে <xliff:g id="APP_NAME_1">%2$s</xliff:g> অ্যাপ ম্যানেজ করে।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"আরও জানুন"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"অ্যাপ আবার চালু করুন"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"অফিস অ্যাপ চালু করবেন?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"আপনার অফিস অ্যাপ এবং বিজ্ঞপ্তিতে অ্যাক্সেস পান"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"চালু করুন"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"অফিসের অ্যাপ আনপজ করতে চান?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"আনপজ করুন"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"জরুরি"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"আপনার অফিসের অ্যাপ এবং কলে অ্যাক্সেস পান"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"অ্যাপ পাওয়া যাচ্ছে না"</string>
<string name="app_blocked_message" msgid="542972921087873023">"এই মুহূর্তে <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপ পাওয়া যাচ্ছে না।"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> উপলভ্য নেই"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"চালু করতে ট্যাপ করুন"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"এর জন্য কোনও অফিস অ্যাপ নেই"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ব্যক্তিগত অ্যাপে দেখা যাবে না"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"আপনার ব্যক্তিগত প্রোফাইল থেকে <xliff:g id="APP">%s</xliff:g> খুলবেন?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"আপনার অফিস প্রোফাইল থেকে <xliff:g id="APP">%s</xliff:g> খুলবেন?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ব্যক্তিগত ব্রাউজার ব্যবহার করুন"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"অফিস ব্রাউজার ব্যবহার করুন"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"সিম নেটওয়ার্ক আনলক পিন"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 2787e03..6688938 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Dozvoljava aplikaciji dok se koristi da pristupa podacima tjelesnih senzora kao što su puls, temperatura i postotak kisika u krvi."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Pristup podacima tjelesnih senzora, kao što je puls, dok je u pozadini"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Dozvoljava aplikaciji dok je u pozadini da pristupa podacima tjelesnih senzora kao što su puls, temperatura i postotak kisika u krvi."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Pristup podacima tjelesnog senzora o temperaturi zgloba šake dok se aplikacija koristi."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Dozvoljava aplikaciji dok se koristi da pristupa podacima tjelesnog senzora o temperaturi zgloba šake."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Pristup podacima tjelesnog senzora o temperaturi zgloba šake dok je aplikacija u pozadini."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Dozvoljava aplikaciji dok je u pozadini da pristupa podacima tjelesnog senzora o temperaturi zgloba šake."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Čitanje događaja kalendara i detalja"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ova aplikacija može čitati sve događaje u kalendaru pohranjene na vašem tabletu i sačuvati podatke kalendara."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ova aplikacija može čitati sve događaje u kalendaru na vašem Android TV uređaju i dijeliti ili sačuvati podatke kalendara."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Prepoznavanje lica je otkazano."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Previše pokušaja. Otključavanje licem je onemogućeno."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Umjesto toga unesite zaključavanje ekrana."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nije moguće potvrditi lice. Pokušajte ponovo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste postavili otključavanje licem"</string>
@@ -801,8 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Dozvoljava vlasniku da pokrene pregled informacija o funkcijama za aplikaciju."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"pristup podacima senzora velikom brzinom uzorkovanja"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Dozvoljava aplikaciji da uzorkuje podatke senzora brzinom većom od 200 Hz"</string>
- <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ažuriranje aplikacije bez radnje korisnika"</string>
- <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Nositelju omogućuje ažuriranje aplikacije koju je prethodno instalirao bez radnje korisnika"</string>
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ažuriranje aplikacije bez korisničke radnje"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Dozvoljava vlasniku da ažurira aplikaciju koju je prethodno instalirao bez korisničke radnje"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Postavljanje pravila za lozinke"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolira dužinu i znakove koji su dozvoljeni u lozinkama za zaključavanje ekrana i PIN-ovima."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Prati pokušaje otključavanja ekrana"</string>
@@ -1287,13 +1284,13 @@
<string name="volume_call" msgid="7625321655265747433">"Jačina zvuka poziva"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"Jačina zvuka poziva putem Bluetootha"</string>
<string name="volume_alarm" msgid="4486241060751798448">"Jačina zvuka alarma"</string>
- <string name="volume_notification" msgid="6864412249031660057">"Jačina zvuka za obavještenja"</string>
+ <string name="volume_notification" msgid="6864412249031660057">"Jačina zvuka obavještenja"</string>
<string name="volume_unknown" msgid="4041914008166576293">"Jačina zvuka"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Jačina zvuka za Bluetooth vezu"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"Jačina zvuka melodije"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"Jačina zvuka poziva"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"Jačina zvuka medija"</string>
- <string name="volume_icon_description_notification" msgid="579091344110747279">"Jačina zvuka za obavještenja"</string>
+ <string name="volume_icon_description_notification" msgid="579091344110747279">"Jačina zvuka obavještenja"</string>
<string name="ringtone_default" msgid="9118299121288174597">"Zadana melodija zvona"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"Zadano (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="397111123930141876">"Bez zvuka"</string>
@@ -1608,8 +1605,8 @@
<string name="expires_on" msgid="1623640879705103121">"Ističe:"</string>
<string name="serial_number" msgid="3479576915806623429">"Serijski broj:"</string>
<string name="fingerprints" msgid="148690767172613723">"Otisci prstiju:"</string>
- <string name="sha256_fingerprint" msgid="7103976380961964600">"SHA-256 otisak prsta:"</string>
- <string name="sha1_fingerprint" msgid="2339915142825390774">"SHA-1 otisak prsta:"</string>
+ <string name="sha256_fingerprint" msgid="7103976380961964600">"Digitalni otisak SHA-256:"</string>
+ <string name="sha1_fingerprint" msgid="2339915142825390774">"Digitalni otisak SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="3917045206812726099">"Prikaži sve"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"Odaberite aktivnost"</string>
<string name="share_action_provider_share_with" msgid="1904096863622941880">"Podijeliti sa"</string>
@@ -1877,7 +1874,7 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"Uredu"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Ušteda baterije uključuje tamnu temu i ograničava ili isključuje aktivnost u pozadini, određene vizuelne efekte i funkcije te neke mrežne veze."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"Ušteda baterije uključuje tamnu temu i ograničava ili isključuje aktivnost u pozadini, određene vizuelne efekte i funkcije te neke mrežne veze."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"Radi smanjenja prijenosa podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali će to činiti rjeđe. Naprimjer, to može značiti da se slike ne prikazuju dok ih ne dodirnete."</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"Radi smanjenja prijenosa podataka, Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupati podacima, ali će to činiti rjeđe. Naprimjer, to može značiti da se slike ne prikazuju dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti Uštedu podataka?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{Traje jednu minutu (do {formattedTime})}one{Traje # min (do {formattedTime})}few{Traje # min (do {formattedTime})}other{Traje # min (do {formattedTime})}}"</string>
@@ -1913,7 +1910,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS zahtjev je promijenjen u USSD zahtjev"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"Promijenjeno u novi SS zahtjev"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"Upozorenje o krađi identiteta"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Profil za posao"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Radni profil"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"Upozoreni"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"Potvrđeno"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"Proširi"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutno nije dostupna. Ovim upravlja aplikacija <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saznajte više"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Ponovo aktiviraj aplikaciju"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Uključiti poslovne aplikacije?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pristupite poslovnim aplikacijama i obavještenjima"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Pokrenuti poslovne aplikacije?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Prekini pauzu"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hitan slučaj"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Ostvarite pristup poslovnim aplikacijama i pozivima"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno nije dostupna."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Nedostupno: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da uključite"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> na ličnom profilu?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> na radnom profilu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični preglednik"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje mreže na SIM-u"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index fe85c5c..11e052a 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -211,7 +211,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activa"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Trucades i missatges desactivats"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Has posat en pausa les aplicacions de treball. No rebràs trucades ni missatges de text."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Reac. apps treball"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Reactiva apps treball"</string>
<string name="me" msgid="6207584824693813140">"Mi"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opcions de la tauleta"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Opcions d\'Android TV"</string>
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permet que l\'aplicació accedeixi a les dades del sensor corporal, com ara la freqüència cardíaca, la temperatura i el percentatge d\'oxigen a la sang, mentre s\'utilitza."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Accedir a dades del sensor corporal, com la freqüència cardíaca, en segon pla"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permet que l\'aplicació accedeixi a les dades del sensor corporal, com ara la freqüència cardíaca, la temperatura i el percentatge d\'oxigen a la sang, mentre es troba en segon pla."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accedir a les dades de la temperatura del canell del sensor corporal mentre s\'utilitza l\'aplicació."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permet que l\'aplicació accedeixi a les dades de la temperatura del canell del sensor corporal mentre s\'utilitza l\'aplicació."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accedir a les dades de la temperatura del canell del sensor corporal mentre l\'aplicació es troba en segon pla."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permet que l\'aplicació accedeixi a les dades de la temperatura del canell del sensor corporal mentre l\'aplicació es troba en segon pla."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Aquesta aplicació pot llegir els esdeveniments i la informació del calendari"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Aquesta aplicació pot llegir tots els esdeveniments del calendari emmagatzemats a la tauleta i compartir o desar les dades del teu calendari."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Aquesta aplicació pot llegir tots els esdeveniments del calendari emmagatzemats al dispositiu Android TV i compartir o desar les dades del calendari."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"S\'ha cancel·lat el reconeixement facial."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"L\'usuari ha cancel·lat Desbloqueig facial"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Massa intents. Torna-ho a provar més tard."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Massa intents. Desbloqueig facial s\'ha desactivat."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Massa intents. Introdueix el bloqueig de pantalla."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"No es pot verificar la cara. Torna-ho a provar."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"No has configurat Desbloqueig facial"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permet que el propietari vegi la informació de les funcions d\'una aplicació."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"accedir a les dades del sensor a una freqüència de mostratge alta"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Permet que l\'aplicació dugui a terme un mostratge de les dades del sensor a una freqüència superior a 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"actualitzar l\'aplicació sense que l\'usuari faci cap acció"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permetre al titular actualitzar l\'aplicació prèviament instal·lada sense que l\'usuari faci cap acció"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Definir les normes de contrasenya"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Permet controlar la longitud i el nombre de caràcters permesos a les contrasenyes i als PIN del bloqueig de pantalla."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Supervisar els intents de desbloqueig de la pantalla"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> no està disponible en aquests moments. Aquesta opció es gestiona a <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Més informació"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Reactiva l\'aplicació"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Activar aplicacions de treball?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Accedeix a les teves aplicacions i notificacions de treball"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activa"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Reactivar les apps de treball?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reactiva"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergència"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Obtén accés a les teves trucades i aplicacions de treball"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"L\'aplicació no està disponible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Ara mateix, <xliff:g id="APP_NAME">%1$s</xliff:g> no està disponible."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no està disponible"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Toca per activar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Cap aplicació de treball"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Cap aplicació personal"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vols obrir <xliff:g id="APP">%s</xliff:g> al teu perfil personal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vols obrir <xliff:g id="APP">%s</xliff:g> al teu perfil de treball?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilitza el navegador personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilitza el navegador de treball"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueig de la xarxa SIM"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index a3ea1bb..d93efa2 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Poskytuje aplikaci přístup k datům z tělesných senzorů, jako je tepová frekvence, teplota a procento nasycení krve kyslíkem, během používání aplikace."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Přístup k datům z tělesných senzorů, jako je tepová frekvence, při běhu na pozadí"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Poskytuje aplikaci přístup k datům z tělesných senzorů, jako je tepová frekvence, teplota a procento nasycení krve kyslíkem, při běhu na pozadí."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Má přístup k údajům o teplotě zápěstí z tělesného senzoru během používání aplikace."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Poskytuje aplikaci přístup k údajům o teplotě zápěstí z tělesného senzoru během používání aplikace."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Má přístup k údajům o teplotě zápěstí z tělesného senzoru při běhu na pozadí."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Poskytuje aplikaci přístup k údajům o teplotě zápěstí z tělesného senzoru při běhu na pozadí."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Čtení událostí v kalendáři včetně podrobností"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Tato aplikace může číst všechny události v kalendáři uložené v tabletu a sdílet či ukládat data kalendáře."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Tato aplikace může číst všechny události v kalendáři uložené v zařízení Android TV a sdílet či ukládat data kalendáře."</string>
@@ -690,7 +686,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Umístěte telefon víc doleva"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Umístěte telefon víc doprava"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Dívejte se přímo na zařízení."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obličej není vidět. Držte telefon na úrovni očí."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obličej není vidět. Držte telefon v úrovni očí."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Příliš mnoho pohybu. Držte telefon nehybně."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Zaznamenejte obličej znovu."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Obličej se nepodařilo rozpoznat. Zkuste to znovu."</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operace snímání obličeje byla zrušena."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Odemknutí obličejem zrušeno uživatelem"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Příliš mnoho pokusů. Zkuste to později."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Příliš mnoho pokusů. Odemknutí obličejem bylo deaktivováno."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Příliš mnoho pokusů. Zadejte zámek obrazovky."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Obličej se nepodařilo ověřit. Zkuste to znovu."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Odemknutí obličejem nemáte nastavené."</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Umožňuje držiteli zobrazit informace o funkcích aplikace."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"přístup k datům ze senzorů s vyšší vzorkovací frekvencí"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Umožňuje aplikaci vzorkovat data ze senzorů s frekvencí vyšší než 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"aktualizovat aplikaci bez zásahu uživatele"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Umožňuje držiteli aktualizovat aplikaci, kterou dříve nainstaloval, bez zásahu uživatele"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Nastavit pravidla pro heslo"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Ovládání délky a znaků povolených v heslech a kódech PIN zámku obrazovky."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Sledovat pokusy o odemknutí obrazovky"</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikace <xliff:g id="APP_NAME_0">%1$s</xliff:g> momentálně není dostupná. Tato předvolba se spravuje v aplikaci <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Další informace"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Zrušit pozastavení aplikace"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Zapnout pracovní aplikace?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Získejte přístup ke svým pracovním aplikacím a oznámením"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Zapnout"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušit pozast. prac. aplikací?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Zrušit pozastavení"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Stav nouze"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Získejte přístup ke svým pracovním aplikacím a hovorům"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikace není k dispozici"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> v tuto chvíli není k dispozici."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> není k dispozici"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Klepnutím ho zapnete"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žádné pracovní aplikace"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žádné osobní aplikace"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Otevřít aplikaci <xliff:g id="APP">%s</xliff:g> v osobním profilu?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Otevřít aplikaci <xliff:g id="APP">%s</xliff:g> v pracovním profilu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použít osobní prohlížeč"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použít pracovní prohlížeč"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kód PIN odblokování sítě pro SIM kartu"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 1cf8097..36c6ddc 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Personlige apps bliver blokeret <xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME">%2$s</xliff:g>. Din it-administrator tillader ikke, at din arbejdsprofil deaktiveres i mere end <xliff:g id="NUMBER">%3$d</xliff:g> dage."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aktivér"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Opkald og beskeder er slået fra"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Du har sat arbejdsapps på pause. Du kan ikke modtage telefonopkald eller sms-beskeder."</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Du har sat arbejdsapps på pause. Du kan ikke modtage telefonopkald eller beskeder."</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Genaktiver arbejdsapps"</string>
<string name="me" msgid="6207584824693813140">"Mig"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Valgmuligheder for tabletcomputeren"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Tillader, at appen kan få adgang til kropssensordata, f.eks. pulsen, temperaturen og iltmætningen af blodet, mens appen er i brug."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Få adgang til kropssensordata, f.eks. pulsen, mens appen er i baggrunden"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Tillader, at appen kan få adgang til kropssensordata, f.eks. pulsen, temperaturen og iltmætningen af blodet, mens appen er i baggrunden."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Få adgang til temperaturdata for kropssensoren på håndleddet, mens appen er i brug."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Tillader, at appen kan få adgang til temperaturdata for kropssensoren på håndleddet, mens appen er i brug."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Få adgang til temperaturdata for kropssensoren på håndleddet, mens appen er i baggrunden."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Tillader, at appen kan få adgang til temperaturdata for kropssensoren på håndleddet, mens appen er i baggrunden."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Læs kalenderbegivenheder og -info"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Denne app kan læse alle kalenderbegivenheder, der er gemt på din tablet, og dele eller gemme dine kalenderdata."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Denne app kan læse alle kalenderbegivenheder, der er gemt på din Android TV-enhed, og dele eller gemme dine kalenderdata."</string>
@@ -616,7 +612,7 @@
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Tillader, at appen kan læse lokationer fra din mediesamling."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Brug biometri"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Brug biometri eller skærmlås"</string>
- <string name="biometric_dialog_default_title" msgid="55026799173208210">"Bekræft, at det er dig"</string>
+ <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verificer, at det er dig"</string>
<string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Brug dine biometriske data for at fortsætte"</string>
<string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Brug dine biometriske data eller din skærmlås for at fortsætte"</string>
<string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrisk hardware er ikke tilgængelig"</string>
@@ -707,13 +703,14 @@
<string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansigtsdækning er registreret. Dit ansigt skal være helt synligt."</string>
<string-array name="face_acquired_vendor">
</string-array>
- <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ansigt ikke bekræftet. Hardware ikke tilgængelig."</string>
+ <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ansigt ikke verificeret. Hardware ikke tilgængelig."</string>
<string name="face_error_timeout" msgid="2598544068593889762">"Prøv ansigtslås igen"</string>
<string name="face_error_no_space" msgid="5649264057026021723">"Der kan ikke gemmes nye ansigtsdata. Slet et gammelt først."</string>
<string name="face_error_canceled" msgid="2164434737103802131">"Ansigtshandlingen blev annulleret."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Ansigtslås blev annulleret af brugeren"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Du har prøvet for mange gange. Prøv igen senere."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Du har brugt for mange forsøg. Ansigtslås er deaktiveret."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Du har brugt for mange forsøg. Angiv skærmlåsen i stedet."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Ansigtet kan ikke genkendes. Prøv igen."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har ikke konfigureret ansigtslås."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Giver den app, som har tilladelsen, mulighed for at se oplysninger om en apps funktioner."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"få adgang til sensordata ved høj samplingfrekvens"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Tillader, at appen kan sample sensordata ved en højere frekvens end 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"opdater app, uden at brugeren foretager sig noget"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Tillader, at den app, der har tilladelsen, kan opdatere den app, den tidligere har installeret, uden at brugeren foretager sig noget"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Angiv regler for adgangskoder"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Tjek længden samt tilladte tegn i adgangskoder og pinkoder til skærmlåsen."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Overvåg forsøg på oplåsning af skærm"</string>
@@ -1263,7 +1258,7 @@
<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 verificere 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_message" msgid="2983163038168903393">"Du har trykket på afbryderknappen, hvilket som regel slukker skærmen.\n\nPrøv at trykke let på knappen for at verificere dit fingeraftryk."</string>
<string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Sluk skærm"</string>
<string name="fp_power_button_bp_negative_button" msgid="3971364246496775178">"Fortsæt"</string>
<string name="heavy_weight_notification" msgid="8382784283600329576">"<xliff:g id="APP">%1$s</xliff:g> er i gang"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> er ikke tilgængelig lige nu. Dette administreres af <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Få flere oplysninger"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Afslut pause for app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vil du aktivere arbejdsapps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Få adgang til dine arbejdsapps og notifikationer"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Slå til"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Vil du genoptage arbejdsapps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Genoptag"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Nødopkald"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Få adgang til dine arbejdsapps og opkald"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgængelig"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgængelig lige nu."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> er ikke understøttet"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tryk for at aktivere"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Der er ingen arbejdsapps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Der er ingen personlige apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vil du åbne <xliff:g id="APP">%s</xliff:g> på din personlige profil?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vil du åbne <xliff:g id="APP">%s</xliff:g> på din arbejdsprofil?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Brug personlig browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Brug arbejdsbrowser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkode til oplåsning af SIM-netværket"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 629fc2a..db97bc1 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -210,7 +210,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aktivieren"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Anrufe und Nachrichten sind deaktiviert"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Du hast geschäftliche Apps pausiert. Deshalb kannst du keine Anrufe oder Nachrichten empfangen."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Geschäftl. Apps nicht pausieren"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Pausierung aufheben"</string>
<string name="me" msgid="6207584824693813140">"Eigene"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tablet-Optionen"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Android TV-Optionen"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Ermöglicht der App den Zugriff auf Daten des Körpersensors, etwa solche zur Herzfrequenz, zur Temperatur und zum Blutsauerstoffanteil, während die App in Benutzung ist."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Zugriff auf Daten des Körpersensors, etwa Herzfrequenz, wenn im Hintergrund"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Ermöglicht der App den Zugriff auf Daten des Körpersensors, etwa solche zur Herzfrequenz, zur Temperatur und zum Blutsauerstoffanteil, während die App im Hintergrund ist."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Auf Daten des Körpersensors zur Hauttemperatur am Handgelenk zugreifen, während die App verwendet wird."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Ermöglicht der App, auf Daten des Körpersensors zur Hauttemperatur am Handgelenk zuzugreifen, während die App verwendet wird."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Auf Daten des Körpersensors zur Hauttemperatur am Handgelenk zugreifen, während die App im Hintergrund ausgeführt wird."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Ermöglicht der App, auf Daten des Körpersensors zur Hauttemperatur am Handgelenk zuzugreifen, während die App im Hintergrund ausgeführt wird."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Kalendertermine und Details lesen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Diese App kann alle auf deinem Tablet gespeicherten Kalendertermine lesen und deine Kalenderdaten teilen oder speichern."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Diese App kann alle auf deinem Android TV-Gerät gespeicherten Kalendertermine lesen und die Kalenderdaten teilen oder speichern."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Gesichtserkennung abgebrochen."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Entsperrung per Gesichtserkennung vom Nutzer abgebrochen"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Zu viele Versuche, bitte später noch einmal versuchen"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Zu viele Versuche. Die Entsperrung per Gesichtserkennung wurde deaktiviert."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Zu viele Versuche. Verwende stattdessen die Displaysperre."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Gesichtsprüfung nicht möglich. Noch mal versuchen."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Entsperrung per Gesichtserkennung ist nicht eingerichtet"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Ermöglicht der App, die Informationen über die Funktionen einer anderen App anzusehen."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"Sensordaten mit hoher Frequenz auslesen"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Erlaubt der App, Sensordaten mit einer Frequenz von mehr als 200 Hz auszulesen"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"App ohne Nutzeraktion aktualisieren"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Ermöglicht dem Inhaber, die App, die er zuvor installiert hat, ohne Nutzeraktion zu aktualisieren"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Passwortregeln festlegen"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Zulässige Länge und Zeichen für Passwörter für die Displaysperre festlegen"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Versuche zum Entsperren des Displays überwachen"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ist momentan nicht verfügbar. Dies wird über die App \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\" verwaltet."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Weitere Informationen"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"App-Pausierung aufheben"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Geschäftliche Apps aktivieren?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Du erhältst Zugriff auf deine geschäftlichen Apps und Benachrichtigungen"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivieren"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Geschäftl. Apps nicht mehr pausieren?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Nicht mehr pausieren"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Notruf"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Zugriff auf deine geschäftlichen Apps und Anrufe anfordern"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App ist nicht verfügbar"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ist derzeit nicht verfügbar."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nicht verfügbar"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Zum Aktivieren tippen"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Keine geschäftlichen Apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Keine privaten Apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> in deinem privaten Profil öffnen?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> in deinem Arbeitsprofil öffnen?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Privaten Browser verwenden"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Arbeitsbrowser verwenden"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Entsperr-PIN für netzgebundenes Gerät"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 1e4629b..96eacaa 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Επιτρέπει στην εφαρμογή να αποκτά πρόσβαση σε δεδομένα αισθητήρων σώματος, όπως καρδιακό ρυθμό, θερμοκρασία και ποσοστό οξυγόνου στο αίμα, ενώ η εφαρμογή χρησιμοποιείται."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Πρόσβαση σε δεδομένα αισθητήρων σώματος, όπως καρδιακό ρυθμό, στο παρασκήνιο"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Επιτρέπει στην εφαρμογή να αποκτά πρόσβαση σε δεδομένα αισθητήρων σώματος, όπως καρδιακό ρυθμό, θερμοκρασία και ποσοστό οξυγόνου στο αίμα, ενώ η εφαρμογή βρίσκεται στο παρασκήνιο."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Πρόσβαση στα δεδομένα θερμοκρασίας καρπού του αισθητήρα σώματος όταν η εφαρμογή είναι σε χρήση."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Επιτρέπει στην εφαρμογή να αποκτήσει πρόσβαση στα δεδομένα θερμοκρασίας καρπού του αισθητήρα σώματος όταν η εφαρμογή είναι σε χρήση."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Πρόσβαση στα δεδομένα θερμοκρασίας καρπού του αισθητήρα σώματος όταν η εφαρμογή βρίσκεται στο παρασκήνιο."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Επιτρέπει στην εφαρμογή να αποκτήσει πρόσβαση στα δεδομένα θερμοκρασίας καρπού του αισθητήρα σώματος όταν η εφαρμογή βρίσκεται στο παρασκήνιο."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Ανάγνωση συμβάντων ημερολογίου και λεπτομερειών"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Αυτή η εφαρμογή μπορεί να διαβάσει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στο tablet που χρησιμοποιείτε και να μοιραστεί ή να αποθηκεύσει τα δεδομένα ημερολογίου σας."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Αυτή η εφαρμογή μπορεί να διαβάσει όλα τα συμβάντα ημερολογίου που είναι αποθηκευμένα στη συσκευή Android TV και να μοιραστεί ή να αποθηκεύσει τα δεδομένα ημερολογίου σας."</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Μετακινήστε το τηλέφωνο προς τα αριστερά"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Μετακινήστε το τηλέφωνο προς τα δεξιά"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Κοιτάξτε απευθείας τη συσκευή σας."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Δεν εντοπίστηκε το πρόσωπό σας. Κρατήστε το τηλέφωνο στο ύψος των ματιών."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Κρατήστε το τηλέφωνο στο ύψος των ματιών σας."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Πάρα πολλή κίνηση. Κρατήστε σταθερό το τηλέφωνο."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Καταχωρίστε ξανά το πρόσωπό σας."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Το πρόσωπο δεν αναγνωρίζεται. Δοκιμάστε ξανά."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Η ενέργεια προσώπου ακυρώθηκε."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Το Ξεκλείδωμα με το πρόσωπο ακυρώθηκε από τον χρήστη"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Πάρα πολλές προσπάθειες. Δοκιμάστε ξανά αργότερα."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Πάρα πολλές προσπάθειες. Το Ξεκλείδωμα με το πρόσωπο απενεργοποιήθηκε."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Πάρα πολλές προσπάθειες. Χρησιμοποιήστε εναλλακτικά το κλείδωμα οθόνης."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Αδύνατη επαλήθευση του προσώπου. Επανάληψη."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Δεν έχετε ρυθμίσει το Ξεκλείδωμα με το πρόσωπο"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Επιτρέπει στον κάτοχο να ξεκινήσει την προβολή των πληροφοριών για τις λειτουργίες μιας εφαρμογής."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"πρόσβαση σε δεδομένα αισθητήρα με υψηλό ρυθμό δειγματοληψίας"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Επιτρέπει στην εφαρμογή τη δειγματοληψία των δεδομένων αισθητήρα με ρυθμό μεγαλύτερο από 200 Hz."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ενημέρωση εφαρμογής χωρίς ενέργεια από τον χρήστη"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Επιτρέπει στον κάτοχο να ενημερώσει την εφαρμογή που εγκατέστησε προηγουμένως χωρίς κάποια ενέργεια από τον χρήστη"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Ορισμός κανόνων κωδικού πρόσβασης"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Ελέγξτε την έκταση και τους επιτρεπόμενους χαρακτήρες σε κωδικούς πρόσβασης κλειδώματος οθόνης και PIN."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Παρακολούθηση προσπαθειών ξεκλειδώματος οθόνης"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Η εφαρμογή <xliff:g id="APP_NAME_0">%1$s</xliff:g> δεν είναι διαθέσιμη αυτήν τη στιγμή. Η διαχείριση πραγματοποιείται από την εφαρμογή <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Μάθετε περισσότερα"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Κατάργηση παύσης εφαρμογής"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ενεργοπ. εφαρμογών εργασιών;"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Αποκτήστε πρόσβαση στις εφαρμογές εργασιών και τις ειδοποιήσεις"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ενεργοποίηση"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Αναίρ. παύσης εφαρμ. εργασιών;"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Αναίρεση παύσης"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Έκτακτη ανάγκη"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Αποκτήστε πρόσβαση στις εφαρμογές εργασιών και τις κλήσεις"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Η εφαρμογή δεν είναι διαθέσιμη"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν είναι διαθέσιμη αυτήν τη στιγμή."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> δεν διατίθεται"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Πατήστε για ενεργοποίηση"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Δεν υπάρχουν εφαρμογές εργασιών"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Δεν υπάρχουν προσωπικές εφαρμογές"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Θέλετε να ανοίξετε την εφαρμογή <xliff:g id="APP">%s</xliff:g> στο προσωπικό σας προφίλ;"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Θέλετε να ανοίξετε την εφαρμογή <xliff:g id="APP">%s</xliff:g> στο προφίλ σας εργασίας;"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Χρήση προσωπικού προγράμματος περιήγησης"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Χρήση προγράμματος περιήγησης εργασίας"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ξεκλειδώματος δικτύου κάρτας SIM"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 2d5f15a..623460b 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in use."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Access body sensor data, like heart rate, while in the background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in the background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Access body sensor wrist temperature data while the app is in use."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Allows the app to access body sensor wrist temperature data, while the app is in use."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Access body sensor wrist temperature data while the app is in the background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Allows the app to access body sensor wrist temperature data, while the app is in the background."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"This app can read all calendar events stored on your Android TV device and share or save your calendar data."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Too many attempts. Face Unlock disabled."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Allows the holder to start viewing the features info for an app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"access sensor data at a high sampling rate"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Allows the app to sample sensor data at a rate greater than 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"update app without user action"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Allows the holder to update the app that it previously installed without user action"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Set password rules"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Control the length and the characters allowed in screen lock passwords and PINs."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Monitor screen unlock attempts"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Learn more"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Unpause app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Turn on work apps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Get access to your work apps and notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Unpause work apps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Get access to your work apps and calls"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Open <xliff:g id="APP">%s</xliff:g> in your personal profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Open <xliff:g id="APP">%s</xliff:g> in your work profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 7d416c6..efe2c52 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Access body sensor data, like heart rate, while in the background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Access body sensor wrist temperature data while the app is in use."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Allows the app to access body sensor wrist temperature data, while the app is in use."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Access body sensor wrist temperature data while the app is in the background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Allows the app to access body sensor wrist temperature data, while the app is in the background."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"This app can read all calendar events stored on your Android TV device and share or save your calendar data."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Face operation canceled."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock canceled by user"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Too many attempts. Face Unlock disabled."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available right now. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Learn more"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Unpause app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Turn on work apps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Get access to your work apps and notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Unpause work apps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Get access to your work apps and calls"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Open <xliff:g id="APP">%s</xliff:g> in your personal profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Open <xliff:g id="APP">%s</xliff:g> in your work profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 3730bd2..ca28756 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in use."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Access body sensor data, like heart rate, while in the background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in the background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Access body sensor wrist temperature data while the app is in use."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Allows the app to access body sensor wrist temperature data, while the app is in use."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Access body sensor wrist temperature data while the app is in the background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Allows the app to access body sensor wrist temperature data, while the app is in the background."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"This app can read all calendar events stored on your Android TV device and share or save your calendar data."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Too many attempts. Face Unlock disabled."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Allows the holder to start viewing the features info for an app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"access sensor data at a high sampling rate"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Allows the app to sample sensor data at a rate greater than 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"update app without user action"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Allows the holder to update the app that it previously installed without user action"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Set password rules"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Control the length and the characters allowed in screen lock passwords and PINs."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Monitor screen unlock attempts"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Learn more"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Unpause app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Turn on work apps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Get access to your work apps and notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Unpause work apps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Get access to your work apps and calls"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Open <xliff:g id="APP">%s</xliff:g> in your personal profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Open <xliff:g id="APP">%s</xliff:g> in your work profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 67d124a..b20520f 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in use."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Access body sensor data, like heart rate, while in the background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Allows the app to access body sensor data, such as heart rate, temperature and blood oxygen percentage, while the app is in the background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Access body sensor wrist temperature data while the app is in use."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Allows the app to access body sensor wrist temperature data, while the app is in use."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Access body sensor wrist temperature data while the app is in the background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Allows the app to access body sensor wrist temperature data, while the app is in the background."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"This app can read all calendar events stored on your Android TV device and share or save your calendar data."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Too many attempts. Face Unlock disabled."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Allows the holder to start viewing the features info for an app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"access sensor data at a high sampling rate"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Allows the app to sample sensor data at a rate greater than 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"update app without user action"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Allows the holder to update the app that it previously installed without user action"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Set password rules"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Control the length and the characters allowed in screen lock passwords and PINs."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Monitor screen unlock attempts"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available at the moment. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Learn more"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Unpause app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Turn on work apps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Get access to your work apps and notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Unpause work apps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Get access to your work apps and calls"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Open <xliff:g id="APP">%s</xliff:g> in your personal profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Open <xliff:g id="APP">%s</xliff:g> in your work profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 310f821..30ed170 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in use."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Access body sensor data, like heart rate, while in the background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Access body sensor wrist temperature data while the app is in use."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Allows the app to access body sensor wrist temperature data, while the app is in use."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Access body sensor wrist temperature data while the app is in the background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Allows the app to access body sensor wrist temperature data, while the app is in the background."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"This app can read all calendar events stored on your Android TV device and share or save your calendar data."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Face operation canceled."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock canceled by user"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Too many attempts. Face Unlock disabled."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> isn’t available right now. This is managed by <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Learn more"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Unpause app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Turn on work apps?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Get access to your work apps and notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Turn on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Unpause work apps?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Get access to your work apps and calls"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Open <xliff:g id="APP">%s</xliff:g> in your personal profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Open <xliff:g id="APP">%s</xliff:g> in your work profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 9f6fa74..55da602 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite que la app acceda a datos del sensor corporal, como el ritmo cardíaco, la temperatura y el porcentaje de oxígeno en sangre, mientras la app está en uso."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Accede a datos del sensor corporal, como el ritmo cardíaco, en segundo plano"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite que la app acceda a datos del sensor corporal, como el ritmo cardíaco, la temperatura y el porcentaje de oxígeno en sangre, mientras la app está en segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accede a los datos de temperatura de la muñeca del sensor corporal mientras la app está en uso."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite que, mientras esté en uso, la app acceda a los datos de temperatura de la muñeca del sensor corporal."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accede a los datos de temperatura de la muñeca del sensor corporal mientras la app está en segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite que, mientras esté en segundo plano, la app acceda a los datos de temperatura de la muñeca del sensor corporal."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Leer eventos y detalles del calendario"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Esta app puede leer todos los eventos del calendario de tu tablet y compartir o guardar los datos correspondientes."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Esta app puede leer todos los eventos del calendario guardados en el dispositivo Android TV, así como compartir o almacenar los datos correspondientes."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Se canceló el reconocimiento facial."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"El usuario canceló Desbloqueo facial"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Inténtalo de nuevo más tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Demasiados intentos. Se inhabilitó Desbloqueo facial."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiados intentos. En su lugar, utiliza el bloqueo de pantalla."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"No se pudo verificar el rostro. Vuelve a intentarlo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"No configuraste Desbloqueo facial"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permite que el propietario vea la información de las funciones de una app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"Acceder a los datos de sensores a una tasa de muestreo alta"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Permite que la app tome una muestra de los datos de sensores a una tasa superior a 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"actualizar la app sin acción del usuario"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permite al titular actualizar la app que instaló previamente sin acción del usuario"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Establecer reglas de contraseña"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Controlar la longitud y los caracteres permitidos en las contraseñas y los PIN para el bloqueo de pantalla."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Supervisa los intentos para desbloquear la pantalla"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> no está disponible en este momento. Esta opción se administra en <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Más información"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Reanudar app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"¿Activar apps de trabajo?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Obtén acceso a tus apps de trabajo y notificaciones"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"¿Reanudar apps de trabajo?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reanudar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergencia"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Obtén acceso a tus llamadas y apps de trabajo"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"La app no está disponible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible en este momento."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no disponible"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Presionar para activar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"El contenido no es compatible con apps de trabajo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"El contenido no es compatible con apps personales"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"¿Quieres abrir <xliff:g id="APP">%s</xliff:g> en tu perfil personal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"¿Quieres abrir <xliff:g id="APP">%s</xliff:g> en tu perfil de trabajo?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar un navegador personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar un navegador de trabajo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo del dispositivo para la red de tarjeta SIM"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 3d16439..4b4b481 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -211,7 +211,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activar"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Llamadas y mensajes desactivados"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Has pausado las aplicaciones de trabajo. No recibirás llamadas ni mensajes de texto."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Reactivar apps de trabajo"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Reanudar aplicaciones de trabajo"</string>
<string name="me" msgid="6207584824693813140">"Yo"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opciones del tablet"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Opciones de Android TV"</string>
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite que la aplicación acceda a datos del sensor corporal, como la frecuencia cardiaca, la temperatura y el porcentaje de oxígeno en sangre, mientras se usa."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Acceso en segundo plano a datos del sensor corporal, como la frecuencia cardiaca"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite que la aplicación acceda a datos del sensor corporal, como la frecuencia cardiaca, la temperatura y el porcentaje de oxígeno en sangre, mientras está en segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Acceder a los datos de temperatura de la muñeca del sensor corporal mientras la aplicación está en uso."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite que la aplicación acceda a los datos de temperatura de la muñeca del sensor corporal mientras está en uso."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Acceder a los datos de temperatura de la muñeca del sensor corporal mientras la aplicación está en segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite que la aplicación acceda a los datos de temperatura de la muñeca del sensor corporal mientras está en segundo plano."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Leer eventos y detalles del calendario"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Esta aplicación puede leer los eventos de calendario almacenados en tu tablet y compartir o guardar los datos de tu calendario."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Esta aplicación puede ver los eventos de calendario almacenados en tu dispositivo Android TV y compartir o guardar los datos de tu calendario."</string>
@@ -576,7 +572,7 @@
<string name="permdesc_changeWimaxState" product="tv" msgid="5373274458799425276">"Permite que la aplicación active y desactive la conexión entre tu dispositivo Android TV y las redes WiMAX."</string>
<string name="permdesc_changeWimaxState" product="default" msgid="1551666203780202101">"Permite que la aplicación conecte el teléfono a redes WiMAX y lo desconecte de ellas."</string>
<string name="permlab_bluetooth" msgid="586333280736937209">"emparejar con dispositivos Bluetooth"</string>
- <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que la aplicación acceda a la configuración de Bluetooth del tablet y que establezca y acepte conexiones con los dispositivos sincronizados."</string>
+ <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que la aplicación acceda a la configuración de Bluetooth de la tablet y que establezca y acepte conexiones con los dispositivos sincronizados."</string>
<string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que la aplicación vea la configuración de Bluetooth de tu dispositivo Android TV y que cree y acepte conexiones con los dispositivos vinculados."</string>
<string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite que la aplicación acceda a la configuración de Bluetooth del teléfono y que establezca y acepte conexiones con los dispositivos sincronizados."</string>
<string name="permlab_bluetooth_scan" msgid="5402587142833124594">"detectar y emparejar dispositivos Bluetooth cercanos"</string>
@@ -628,11 +624,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"No se ha podido autenticar"</string>
<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_partial" msgid="4323789264604479684">"Pulsa firmemente el sensor"</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_fast" msgid="1628459767349116104">"Pulsa 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>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Se ha cancelado el reconocimiento facial."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"El usuario ha cancelado Desbloqueo facial"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Inténtalo de nuevo más tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Demasiados intentos. Desbloqueo facial inhabilitado."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiados intentos. Usa el bloqueo de pantalla."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"No se ha verificado tu cara. Vuelve a intentarlo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"No has configurado Desbloqueo facial"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permite que el titular vea la información de las funciones de una aplicación."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"acceder a datos de sensores a una frecuencia de muestreo alta"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Permite que la aplicación consulte datos de sensores a una frecuencia superior a 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"actualizar la aplicación sin la acción del usuario"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permite que una aplicación instalada previamente se actualice sin la acción del usuario"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Establecimiento de reglas de contraseña"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Controla la longitud y los caracteres permitidos en los PIN y en las contraseñas de bloqueo de pantalla."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Supervisar los intentos de desbloqueo de pantalla"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> no está disponible en este momento. Esta opción se administra en <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Más información"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Anular pausa de aplicación"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"¿Activar aplicaciones de trabajo?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Accede a tus aplicaciones y notificaciones de trabajo"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"¿Reactivar apps de trabajo?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reactivar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergencia"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Solicita acceso a tus aplicaciones y llamadas de trabajo"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"La aplicación no está disponible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"En estos momentos, <xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no disponible"</string>
@@ -2100,7 +2093,7 @@
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"Aceptar"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Desactivar"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Más información"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Las notificaciones mejoradas sustituyeron las notificaciones adaptativas en Android 12. Esta función te muestra acciones y respuestas sugeridas, y organiza tus notificaciones.\n\nLas notificaciones mejoradas pueden acceder al contenido de tus notificaciones, incluida información personal, como nombres de contactos y mensajes. También permiten descartar o responder a notificaciones; por ejemplo, es posible contestar llamadas telefónicas y controlar el modo No molestar."</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Las notificaciones mejoradas sustituyeron las notificaciones adaptativas en Android 12. Esta función te muestra acciones y respuestas sugeridas, y organiza tus notificaciones.\n\nLas notificaciones mejoradas pueden acceder al contenido de tus notificaciones, incluida información personal, como nombres de contactos y mensajes. También permiten descartar o responder a notificaciones (por ejemplo, puedes contestar llamadas telefónicas) y controlar el modo No molestar."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificación sobre el modo rutina"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Ahorro de batería activado"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Reduciendo el uso de batería para prolongar su duración"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Toca para activar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ninguna aplicación de trabajo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ninguna aplicación personal"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"¿Abrir <xliff:g id="APP">%s</xliff:g> en tu perfil personal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"¿Abrir <xliff:g id="APP">%s</xliff:g> en tu perfil de trabajo?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar navegador personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar navegador de trabajo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo de red de tarjeta SIM"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 1dc96c3..528d42f4 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Lubab rakendusel pääseda juurde kehaanduri andmetele, nagu pulss, temperatuur ja vere hapnikusisaldus, kui rakendust kasutatakse."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Juurdepääs kehaanduri andmetele, nagu pulss, kui rakendus töötab taustal"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Lubab rakendusel pääseda juurde kehaanduri andmetele, nagu pulss, temperatuur ja vere hapnikusisaldus, kui rakendus töötab taustal."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Juurdepääs kehaanduri randmetemperatuuri andmetele, kui rakendust kasutatakse."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Lubab rakendusel pääseda juurde kehaanduri randmetemperatuuri andmetele, kui rakendust kasutatakse."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Juurdepääs kehaanduri randmetemperatuuri andmetele, kui rakendus töötab taustal."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Lubab rakendusel pääseda juurde kehaanduri randmetemperatuuri andmetele, kui rakendus töötab taustal."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Kalendrisündmuste ja üksikasjade lugemine"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"See rakendus saab kõiki teie tahvelarvutisse salvestatud kalendrisündmusi lugeda ja teie kalendriandmeid jagada või salvestada."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"See rakendus saab kõiki teie Android TV seadmesse salvestatud kalendrisündmusi lugeda ja teie kalendriandmeid jagada või salvestada."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Näotuvastuse toiming tühistati."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Kasutaja tühistas näoga avamise"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Liiga palju katseid. Proovige hiljem uuesti."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Liiga palju katseid. Näoga avamine on keelatud."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Liiga palju katseid. Kasutage selle asemel ekraanilukku."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nägu ei saa kinnitada. Proovige uuesti."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Näoga avamine ei ole seadistatud"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pole praegu saadaval. Seda haldab rakendus <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Lisateave"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Jätka rakendust"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Lülitada töörakendused sisse?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Hankige juurdepääs oma töörakendustele ja märguannetele"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Lülita sisse"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Kas jätkata töörakendusi?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Jätka"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hädaolukord"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Hankige juurdepääs oma töörakendustele ja kõnedele"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Rakendus ei ole saadaval"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei ole praegu saadaval."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ei ole saadaval"</string>
@@ -2114,7 +2109,7 @@
<string name="mime_type_audio_ext" msgid="2615491023840514797">"<xliff:g id="EXTENSION">%1$s</xliff:g>-helifail"</string>
<string name="mime_type_video" msgid="7071965726609428150">"Video"</string>
<string name="mime_type_video_ext" msgid="185438149044230136">"<xliff:g id="EXTENSION">%1$s</xliff:g>-videofail"</string>
- <string name="mime_type_image" msgid="2134307276151645257">"Kujutis"</string>
+ <string name="mime_type_image" msgid="2134307276151645257">"Pilt"</string>
<string name="mime_type_image_ext" msgid="5743552697560999471">"<xliff:g id="EXTENSION">%1$s</xliff:g>-kujutisefail"</string>
<string name="mime_type_compressed" msgid="8737300936080662063">"Arhiiv"</string>
<string name="mime_type_compressed_ext" msgid="4775627287994475737">"<xliff:g id="EXTENSION">%1$s</xliff:g>-arhiivifail"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Puudutage sisselülitamiseks"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Töörakendusi pole"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Isiklikke rakendusi pole"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Kas avada <xliff:g id="APP">%s</xliff:g> teie isiklikul profiilil?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Kas avada <xliff:g id="APP">%s</xliff:g> teie tööprofiilil?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kasuta isiklikku brauserit"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Kasuta tööbrauserit"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM-kaardi võrgu avamise PIN-kood"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 2331536..20caa3c 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Aplikazioak erabiltzen diren bitartean, gorputz-sentsoreen datuak (besteak beste, bihotz-maiztasuna, tenperatura eta odolean dagoen oxigenoaren ehunekoa) erabiltzeko baimena ematen die aplikazio horiei."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Atzitu gorputz-sentsoreen datuak (adib., bihotz-maiztasunarenak) atzeko planoan"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Aplikazioak atzeko planoan egon bitartean, gorputz-sentsoreen datuak (besteak beste, bihotz-maiztasuna, tenperatura eta odolean dagoen oxigenoaren ehunekoa) erabiltzeko baimena ematen die aplikazio horiei."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Atzitu gorputz-sentsoreek eskumuturrean neurtutako tenperaturaren datuak aplikazioak erabili bitartean."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Aplikazioak erabili bitartean, gorputz-sentsoreek eskumuturrean neurtutako tenperaturaren datuak erabiltzeko baimena ematen die aplikazioei."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Atzitu gorputz-sentsoreek eskumuturrean neurtutako tenperaturaren datuak aplikazioak atzeko planoan exekutatu bitartean."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Aplikazioak atzeko planoan exekutatu bitartean, gorputz-sentsoreek eskumuturrean neurtutako tenperaturaren datuak erabiltzeko baimena ematen die aplikazioei."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"irakurri egutegiko gertaerak eta xehetasunak"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Aplikazioak tabletan gordetako egutegiko gertaerak irakur ditzake eta egutegiko datuak parteka eta gorde ditzake."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Aplikazioak Android TV gailuan gordeta dituzun egutegiko gertaerak irakur ditzake, baita egutegiko datuak partekatu eta gorde ere."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Utzi da aurpegiaren bidezko eragiketa."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Erabiltzaileak aurpegi bidez desblokeatzeko aukera utzi du"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Saiakera gehiegi egin dituzu. Saiatu berriro geroago."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Saiakera gehiegi egin dira. Desgaitu egin da aurpegi bidez desblokeatzeko eginbidea."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Saiakera gehiegi egin dira. Horren ordez, erabili pantailaren blokeoa."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Ezin da egiaztatu aurpegia. Saiatu berriro."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Ez duzu konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Aplikazio baten eginbideei buruzko informazioa ikusten hasteko baimena ematen die titularrei."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"atzitu sentsoreen datuen laginak abiadura handian"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Aplikazioak 200 Hz-tik gorako abiaduran hartu ahal izango ditu sentsoreen datuen laginak"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"eguneratu aplikazioa erabiltzaileak ezer egin gabe"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Lehendik instalatu duen aplikazioa erabiltzaileak ezer egin gabe eguneratzeko baimena ematen dio titularrari"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Ezarri pasahitzen arauak"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolatu pantaila blokeoaren pasahitzen eta PINen luzera eta onartutako karaktereak."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Gainbegiratu pantaila desblokeatzeko saiakerak"</string>
@@ -1914,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS eskaera USSD eskaerara aldatu da"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"SS eskaera berrira aldatu da"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"Phishing-alerta"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Work profila"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Laneko profila"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"Egin du soinua"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"Egiaztatuta"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"Zabaldu"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ez dago erabilgarri une honetan. Haren erabilgarritasuna <xliff:g id="APP_NAME_1">%2$s</xliff:g> aplikazioak kudeatzen du."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Lortu informazio gehiago"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Kendu pausaldia"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Laneko aplikazioak aktibatu nahi dituzu?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Atzitu laneko aplikazioak eta jakinarazpenak"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktibatu"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Laneko aplikazioak berraktibatu?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Berraktibatu"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Larrialdia"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Atzitu laneko aplikazioak eta deiak"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikazioa ez dago erabilgarri"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ez dago erabilgarri une honetan."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ez dago erabilgarri"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Sakatu aktibatzeko"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ez dago laneko aplikaziorik"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ez dago aplikazio pertsonalik"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Profil pertsonalean ireki nahi duzu <xliff:g id="APP">%s</xliff:g>?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Laneko profilean ireki nahi duzu <xliff:g id="APP">%s</xliff:g>?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Erabili arakatzaile pertsonala"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Erabili laneko arakatzailea"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIMaren sarearen bidez desblokeatzeko PINa"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 5348e84..519f89f 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"برنامههای شخصی در تاریخ <xliff:g id="DATE">%1$s</xliff:g> ساعت <xliff:g id="TIME">%2$s</xliff:g> مسدود خواهند شد. سرپرست فناوری اطلاعات اجازه نمیدهد نمایه کاری شما بیشتر از <xliff:g id="NUMBER">%3$d</xliff:g> روز خاموش بماند."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"روشن کردن"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"تماسها و پیامها خاموش هستند"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"برنامههای کاری را موقتاً متوقف کردهاید. تماسها یا پیامکها را دریافت نخواهید کرد."</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"برنامههای کاری را موقتاً متوقف کردهاید. تماس یا پیامکی دریافت نخواهید کرد."</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ازسرگیری برنامههای کاری"</string>
<string name="me" msgid="6207584824693813140">"من"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"گزینههای رایانهٔ لوحی"</string>
@@ -235,8 +235,8 @@
<string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"ساعت شما خاموش میشود."</string>
<string name="shutdown_confirm" product="default" msgid="136816458966692315">"گوشی شما خاموش میشود."</string>
<string name="shutdown_confirm_question" msgid="796151167261608447">"آیا میخواهید تلفن خاموش شود؟"</string>
- <string name="reboot_safemode_title" msgid="5853949122655346734">"راهاندازی مجدد در حالت امن"</string>
- <string name="reboot_safemode_confirm" msgid="1658357874737219624">"آیا میخواهید با حالت امن راهاندازی مجدد کنید؟ با این کار همهٔ برنامههای شخص ثالثی که نصب کردهاید غیرفعال میشوند. با راهاندازی دوباره سیستم این برنامهها دوباره بازیابی میشوند."</string>
+ <string name="reboot_safemode_title" msgid="5853949122655346734">"بازراهاندازی به حالت امن"</string>
+ <string name="reboot_safemode_confirm" msgid="1658357874737219624">"آیا میخواهید به حالت امن بازراهاندازی شود؟ با این کار همهٔ برنامههای شخص ثالثی که نصب کردهاید غیرفعال میشوند. با بازراهاندازی سیستم، این برنامهها دوباره بازیابی میشوند."</string>
<string name="recent_tasks_title" msgid="8183172372995396653">"اخیر"</string>
<string name="no_recent_tasks" msgid="9063946524312275906">"برنامههای جدید موجود نیست."</string>
<string name="global_actions" product="tablet" msgid="4412132498517933867">"گزینههای رایانهٔ لوحی"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"به برنامه اجازه میدهد تا زمانی که درحال استفاده است، به دادههای حسگر بدن، مثل ضربان قلب، دما، و درصد اکسیژن خون دسترسی داشته باشد."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"دسترسی به دادههای حسگر بدن، مثل ضربان قلب، درحین اجرا در پسزمینه"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"به برنامه اجازه میدهد تا زمانی که در پسزمینه درحال اجرا است، به دادههای حسگر بدن، مثل ضربان قلب، دما، و درصد اکسیژن خون دسترسی داشته باشد."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"دسترسی به دادههای دمای مچ دست حسگر بدن درحین استفاده از برنامه."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"به برنامه اجازه میدهد تا زمانی که درحال استفاده است، به دادههای دمای مچ دست حسگر بدن دسترسی داشته باشد."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"دسترسی به دادههای دمای مچ دست حسگر بدن وقتی برنامه در پسزمینه است."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"به برنامه اجازه میدهد تا زمانی که در پسزمینه است، به دادههای دمای مچ دست حسگر بدن دسترسی داشته باشد."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"خواندن رویدادها و جزئیات تقویم"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"این برنامه میتواند همه رویدادهای تقویم ذخیرهشده در رایانه لوحی شما را بخواند و دادههای تقویم شما را به اشتراک بگذارد یا ذخیره کند."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"این برنامه میتواند همه رویدادهای تقویم را که در Android TV شما ذخیرهشده بخواند، و دادههای تقویم شما را همرسانی یا ذخیره کند."</string>
@@ -608,7 +604,7 @@
<string name="permdesc_useFingerprint" msgid="412463055059323742">"به برنامه امکان میدهد از سختافزار اثر انگشت برای اصالتسنجی استفاده کند"</string>
<string name="permlab_audioWrite" msgid="8501705294265669405">"تغییر مجموعه موسیقی شما"</string>
<string name="permdesc_audioWrite" msgid="8057399517013412431">"به برنامه اجازه میدهد مجموعه موسیقیتان را تغییر دهد."</string>
- <string name="permlab_videoWrite" msgid="5940738769586451318">"تغییر مجموعه ویدیوی شما"</string>
+ <string name="permlab_videoWrite" msgid="5940738769586451318">"تغییر مجموعه ویدیو شما"</string>
<string name="permdesc_videoWrite" msgid="6124731210613317051">"به برنامه اجازه میدهد مجموعه ویدیویتان را تغییر دهد."</string>
<string name="permlab_imagesWrite" msgid="1774555086984985578">"تغییر مجموعه عکس شما"</string>
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"به برنامه اجازه میدهد مجموعه عکستان را تغییر دهد."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"عملیات شناسایی چهره لغو شد."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"کاربر «قفلگشایی با چهره» را لغو کرد"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"تعداد زیادی تلاش ناموفق. بعداً دوباره امتحان کنید."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"تلاشها بیش از حدمجاز شده است. «قفلگشایی با چهره» غیرفعال است."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"تلاشها بیش از حدمجاز شده است. درعوض قفل صفحه را وارد کنید."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"چهره تأیید نشد. دوباره امتحان کنید."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"«قفلگشایی با چهره» را راهاندازی نکردهاید"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"به دارنده اجازه میدهد اطلاعات مربوط به ویژگیهای برنامه را مشاهده کند."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"دسترسی به دادههای حسگر با نرخ نمونهبرداری بالا"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"به برنامه اجازه میدهد دادههای حسگر را با نرخ بیشاز ۲۰۰ هرتز نمونهبرداری کند"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"بهروزرسانی برنامه بدون اقدام کاربر"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"به دارنده اجازه میدهد برنامهای را که قبلاً نصب کرده است بدون اقدام کاربر بهروزرسانی کند"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"تنظیم قوانین گذرواژه"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"کنترل طول و نوع نویسههایی که در گذرواژه و پین قفل صفحه مجاز است."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"پایش تلاشهای باز کردن قفل صفحه"</string>
@@ -1062,7 +1057,7 @@
<string name="factorytest_failed" msgid="3190979160945298006">"تست کارخانه انجام نشد"</string>
<string name="factorytest_not_system" msgid="5658160199925519869">"عملکرد FACTORY_TEST تنها برای بستههای نصب شده در /system/app پشتیبانی میشود."</string>
<string name="factorytest_no_action" msgid="339252838115675515">"بستهای یافت نشد که عملکرد FACTORY_TEST را ارائه کند."</string>
- <string name="factorytest_reboot" msgid="2050147445567257365">"راهاندازی مجدد"</string>
+ <string name="factorytest_reboot" msgid="2050147445567257365">"بازراهاندازی"</string>
<string name="js_dialog_title" msgid="7464775045615023241">"صفحه در \"<xliff:g id="TITLE">%s</xliff:g>\" میگوید:"</string>
<string name="js_dialog_title_default" msgid="3769524569903332476">"جاوا اسکریپت"</string>
<string name="js_dialog_before_unload_title" msgid="7012587995876771246">"تأیید پیمایش"</string>
@@ -1384,7 +1379,7 @@
<string name="console_running_notification_title" msgid="6087888939261635904">"کنسول سریال فعال است"</string>
<string name="console_running_notification_message" msgid="7892751888125174039">"عملکرد تحتتأثیر قرار گرفته است. برای غیرفعال کردن، bootloader را بررسی کنید."</string>
<string name="mte_override_notification_title" msgid="4731115381962792944">"MTE آزمایشی فعال شد"</string>
- <string name="mte_override_notification_message" msgid="2441170442725738942">"شاید عملکرد و پایداری تحت تأثیر قرار بگیرند. برای غیرفعال کردن، راهاندازی مجدد کنید. اگر بااستفاده ازarm64.memtag.bootctl فعال شده است، پیشاز راهاندازی مقدار آن را روی هیچکدام تنظیم کنید."</string>
+ <string name="mte_override_notification_message" msgid="2441170442725738942">"شاید عملکرد و پایداری تحت تأثیر قرار بگیرند. برای غیرفعال کردن، بازراهاندازی کنید. اگر بااستفاده از arm64.memtag.bootctl فعال شده است، پیشاز بازراهاندازی مقدار آن را روی هیچکدام تنظیم کنید."</string>
<string name="usb_contaminant_detected_title" msgid="4359048603069159678">"مایعات یا خاکروبه در درگاه USB"</string>
<string name="usb_contaminant_detected_message" msgid="7346100585390795743">"درگاه USB بهطور خودکار غیرفعال شده است. برای اطلاعات بیشتر، ضربه بزنید."</string>
<string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"میتوان از درگاه USB استفاده کرد"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> درحالحاضر در دسترس نیست. <xliff:g id="APP_NAME_1">%2$s</xliff:g> آن را مدیریت میکند."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"بیشتر بدانید"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"لغو توقف موقت برنامه"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"برنامههای کاری روشن شود؟"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"دسترسی به اعلانها و برنامههای کاری"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"روشن کردن"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"برنامههای کاری ازسر گرفته شود؟"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ازسرگیری"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"اضطراری"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"دسترسی به تماسها و برنامههای کاری"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"برنامه در دسترس نیست"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> درحالحاضر در دسترس نیست."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> دردسترس نیست"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"برای روشن کردن، ضربه بزنید"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"برنامه کاریای وجود ندارد"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"برنامه شخصیای وجود ندارد"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> در نمایه شخصی باز شود؟"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> در نمایه کاری باز شود؟"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استفاده از مرورگر شخصی"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"استفاده از مرورگر کاری"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"پین باز کردن قفل شبکه سیمکارت"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 2bc040e..e4227ce 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Myöntää sovellukselle pääsyn kehoanturidataan, esim. sykkeeseen, lämpötilaan ja veren happipitoisuuteen, kun sovellusta käytetään."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Pääsy kehoanturidataan, esim. sykkeeseen, kun käynnissä taustalla"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Myöntää sovellukselle pääsyn kehoanturidataan, esim. sykkeeseen, lämpötilaan ja veren happipitoisuuteen, kun sovellus on käynnissä taustalla."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Pääsy kehoanturin ranteen lämpötiladataan, kun sovellusta käytetään."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Myöntää sovellukselle pääsyn kehoanturin ranteen lämpötiladataan, kun sovellusta käytetään."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Pääsy kehoanturin ranteen lämpötiladataan, kun sovellus on käynnissä taustalla."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Myöntää sovellukselle pääsyn kehoanturin ranteen lämpötiladataan, kun sovellus on käynnissä taustalla."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lue kalenterin tapahtumia ja tietoja"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Tämä sovellus voi lukea kaikkia tabletille tallennettuja kalenteritapahtumia sekä jakaa tai tallentaa kalenteritietoja."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Tämä sovellus voi lukea kaikkia Android TV ‑laitteeseen tallennettuja kalenteritapahtumia sekä jakaa tai tallentaa kalenteritietoja."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Kasvotoiminto peruutettu"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Käyttäjä perui kasvojentunnistusavauksen"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Liian monta yritystä. Yritä myöhemmin uudelleen."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Liian monta yritystä. Kasvojentunnistusavaus poistettu käytöstä."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Liian monta yritystä. Lisää sen sijaan näytön lukitus."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Kasvoja ei voi vahvistaa. Yritä uudelleen."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Et ole ottanut käyttöön kasvojentunnistusavausta"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Antaa luvanhaltijan aloittaa sovelluksen ominaisuustietojen katselun."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"saada pääsyn anturidataan suuremmalla näytteenottotaajuudella"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Sallii sovelluksen ottaa anturidatasta näytteitä yli 200 Hz:n taajuudella"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"päivittää sovelluksen ilman käyttäjän toimintaa"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Sallii luvan saaneen sovelluksen päivittää aiemmin asentamansa sovelluksen ilman käyttäjän toimintaa"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Asentaa salasanasäännöt"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Hallinnoida ruudun lukituksen salasanoissa ja PIN-koodeissa sallittuja merkkejä ja niiden pituutta."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Tarkkailla näytön avaamisyrityksiä"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ei ole juuri nyt saatavilla. Tästä vastaa <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Lue lisää"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Peru keskeytys"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Käytetäänkö työsovelluksia?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Palauta työsovellukset ja ilmoitukset käyttöön"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ota käyttöön"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Laita työsovellukset päälle?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Laita päälle"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hätätilanne"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Palauta työsovellukset ja puhelut käyttöön"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Sovellus ei ole käytettävissä"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei ole nyt käytettävissä."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ei käytettävissä"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Laita päälle napauttamalla"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ei työsovelluksia"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ei henkilökohtaisia sovelluksia"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Avataanko <xliff:g id="APP">%s</xliff:g> henkilökohtaisessa profiilissa?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Avataanko <xliff:g id="APP">%s</xliff:g> työprofiilissa?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Käytä henkilökohtaista selainta"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Käytä työselainta"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM-kortin verkkoversion lukituksen avaamisen PIN-koodi"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index f65d3e5..af769ab 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permet à l\'application d\'accéder aux données des capteurs corporels telles que la fréquence cardiaque, la température et le pourcentage d\'oxygène dans le sang pendant l\'utilisation de l\'application."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Accéder aux données des capteurs corporels (comme la fréq. card.) en arrière-plan"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permet à l\'application d\'accéder aux données des capteurs corporels telles que la fréquence cardiaque, la température et le pourcentage d\'oxygène dans le sang pendant que l\'application s\'exécute en arrière-plan."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accéder aux données relatives à la température au poignet des capteurs corporels pendant l\'utilisation de l\'application."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permet à l\'application d\'accéder aux données relatives à la température au poignet des capteurs corporels pendant l\'utilisation de l\'application."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accéder aux données relatives à la température au poignet des capteurs corporels pendant que l\'application s\'exécute en arrière-plan."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permet à l\'application d\'accéder aux données relatives à la température au poignet des capteurs corporels pendant que l\'application s\'exécute en arrière-plan."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lire les événements d\'agenda et leurs détails"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Cette application peut lire tous les événements d\'agenda stockés sur votre tablette et partager ou enregistrer les données de votre agenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Cette application peut lire tous les événements d\'agenda stockés sur votre appareil Android TV et partager ou enregistrer les données de votre agenda."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Opération de reconnaissance du visage annulée."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Le déverrouillage par reconnaissance faciale a été annulé"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Trop de tentatives. Veuillez réessayer plus tard."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Trop de tentatives. Le déverrouillage par reconnaissance faciale est désactivé."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Trop de tentatives. Entrez plutôt le verrouillage de l\'écran."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de vérifier le visage. Réessayez."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Déverrouillage par reconnaissance faciale non configuré"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"L\'application <xliff:g id="APP_NAME_0">%1$s</xliff:g> n\'est pas accessible pour le moment. Ceci est géré par <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"En savoir plus"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Réactiver l\'application"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Activer applis professionnelles?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Accédez à vos applications professionnelles et à vos notifications"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activer"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Réactiver les applis prof.?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Réactiver"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgence"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Demandez l\'accès à vos applications professionnelles et à vos appels"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"L\'application n\'est pas accessible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas accessible pour le moment."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non accessible"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Touchez pour activer"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune application professionnelle"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune application personnelle"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans votre profil personnel?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans votre profil professionnel?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur du profil personnel"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur du profil professionnel"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"NIP de déverrouillage du réseau associé au module SIM"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 6092ded..b2cef66 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -211,7 +211,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activer"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Les appels et messages sont désactivés"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Vous avez suspendu les applis professionnelles. Vous ne recevrez pas d\'appels ni de messages."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Activer apps pro"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Réactiver les applis professionnelles"</string>
<string name="me" msgid="6207584824693813140">"Moi"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Options Android TV"</string>
@@ -317,7 +317,7 @@
<string name="permgroupdesc_microphone" msgid="1047786732792487722">"enregistrer des fichiers audio"</string>
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Activité physique"</string>
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"accéder aux données d\'activité physique"</string>
- <string name="permgrouplab_camera" msgid="9090413408963547706">"Appareil photo"</string>
+ <string name="permgrouplab_camera" msgid="9090413408963547706">"Caméra"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"prendre des photos et enregistrer des vidéos"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Appareils à proximité"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"détecter des appareils à proximité et s\'y connecter"</string>
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permet à l\'appli d\'accéder aux données des capteurs corporels (fréquence cardiaque, température, taux d\'oxygène dans le sang, etc.) quand l\'appli est en cours d\'utilisation."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Accéder aux données de capteurs corporels (comme le pouls) en arrière-plan"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permet à l\'appli d\'accéder aux données des capteurs corporels (fréquence cardiaque, température, taux d\'oxygène dans le sang, etc.) quand l\'appli est en arrière-plan."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accédez aux données des capteurs corporels relatives à la température du poignet quand l\'appli est en cours d\'utilisation."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permet à l\'appli d\'accéder aux données des capteurs corporels relatives à la température du poignet quand l\'appli est en cours d\'utilisation."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accédez aux données des capteurs corporels relatives à la température du poignet quand l\'appli est en arrière-plan."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permet à l\'appli d\'accéder aux données des capteurs corporels relatives à la température du poignet quand l\'appli est en arrière-plan."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lire les événements d\'agenda et les détails associés"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Cette application peut lire tous les événements d\'agenda enregistrés sur votre tablette et partager ou enregistrer vos données d\'agenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Cette application peut lire tous les événements de l\'agenda enregistrés sur votre appareil Android TV, et partager ou enregistrer les données de votre agenda."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Opération de reconnaissance faciale annulée."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Déverrouillage par reconnaissance faciale annulé par l\'utilisateur"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Trop de tentatives. Réessayez plus tard."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Tentatives trop nombreuses. Déverrouillage par reconnaissance faciale désactivé."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Tentatives trop nombreuses. Utilisez le verrouillage de l\'écran."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de valider votre visage. Réessayez."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Déverrouillage par reconnaissance faciale non configuré"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permet à l\'appli autorisée de commencer à voir les infos sur les fonctionnalités d\'une appli."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"accéder aux données des capteurs à un taux d\'échantillonnage élevé"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Autorise l\'appli à échantillonner les données des capteurs à un taux supérieur à 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"mettre à jour l\'appli sans action de l\'utilisateur"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Autorise l\'appli précédemment installée à se mettre à jour sans action de l\'utilisateur"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Définir les règles du mot de passe"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Gérer le nombre et le type de caractères autorisés dans les mots de passe et les codes d\'accès de verrouillage de l\'écran"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Gérer les tentatives de déverrouillage de l\'écran"</string>
@@ -1362,7 +1357,7 @@
<string name="no_permissions" msgid="5729199278862516390">"Aucune autorisation requise"</string>
<string name="perm_costs_money" msgid="749054595022779685">"Cela peut engendrer des frais"</string>
<string name="dlg_ok" msgid="5103447663504839312">"OK"</string>
- <string name="usb_charging_notification_title" msgid="1674124518282666955">"Appareil en charge via USB"</string>
+ <string name="usb_charging_notification_title" msgid="1674124518282666955">"Recharge de cet appareil via USB"</string>
<string name="usb_supplying_notification_title" msgid="5378546632408101811">"Recharge via USB de l\'appareil connecté"</string>
<string name="usb_mtp_notification_title" msgid="1065989144124499810">"Transfert de fichiers via USB activé"</string>
<string name="usb_ptp_notification_title" msgid="5043437571863443281">"PTP via USB activé"</string>
@@ -1877,7 +1872,7 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"Mis à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
- <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"L\'économiseur de batterie active le thème sombre et limite ou désactive les activités en arrière-plan ainsi que certains effets visuels, fonctionnalités et connexions réseau."</string>
+ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"L\'économiseur de batterie active le thème sombre et limite ou désactive l\'activité en arrière-plan ainsi que certains effets visuels, fonctionnalités et connexions réseau."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"L\'économiseur de batterie active le thème sombre et limite ou désactive les activités en arrière-plan ainsi que certains effets visuels, fonctionnalités et connexions réseau."</string>
<string name="data_saver_description" msgid="4995164271550590517">"Pour réduire la consommation des données, l\'Économiseur de données empêche certaines applis d\'envoyer ou de recevoir des données en arrière-plan. Les applis que vous utiliserez pourront toujours accéder aux données, mais le feront moins fréquemment. Par exemple, les images pourront ne pas s\'afficher tant que vous n\'aurez pas appuyé dessus."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Activer l\'Économiseur de données ?"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"L\'application <xliff:g id="APP_NAME_0">%1$s</xliff:g> n\'est pas disponible pour le moment. Cette suspension est gérée par l\'application <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"En savoir plus"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Débloquer l\'application"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Activer les applis pro ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Accéder à vos applis et notifications professionnelles"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activer"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Réactiver les applis pro ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Réactiver"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgence"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Demandez l\'accès à vos applications professionnelles et à vos appels"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Application non disponible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas disponible pour le moment."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponible"</string>
@@ -2100,7 +2093,7 @@
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"OK"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Désactiver"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"En savoir plus"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Les notifications améliorées remplacent les notifications intelligentes dans Android 12. Cette fonctionnalité affiche les suggestions d\'actions et de réponses, et organise vos notifications.\n\nElle a accès au contenu des notifications, y compris aux informations personnelles tels que les noms des contacts et les messages. Elle peut aussi fermer les notifications ou effectuer des actions comme répondre à un appel téléphonique et contrôler le mode Ne pas déranger."</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Les notifications améliorées ont remplacé les notifications intelligentes dans Android 12. Cette fonctionnalité affiche des suggestions d\'actions et de réponses, et organise vos notifications.\n\nElle a accès au contenu des notifications, y compris à des infos personnelles tels que les noms et les messages des contacts. Elle peut aussi fermer les notifications, ou y répondre (répondre aux appels téléphoniques, par exemple), et contrôler Ne pas déranger."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notification d\'information du mode Routine"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Économiseur de batterie activé"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Réduction de l\'utilisation de la batterie pour prolonger son autonomie"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Appuyez pour l\'activer"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune appli professionnelle"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune appli personnelle"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans votre profil personnel ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans votre profil professionnel ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur personnel"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur professionnel"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Code PIN de déblocage du réseau SIM"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 405829d..8bd6b9e 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite que a aplicación acceda aos datos dos sensores corporais (por exemplo, a frecuencia cardíaca, a temperatura ou a porcentaxe de osíxeno en sangue) mentres se estea utilizando."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Acceso en segundo plano aos datos dos sensores corporais, como a frecuencia cardíaca"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite que a aplicación acceda aos datos dos sensores corporais (por exemplo, a frecuencia cardíaca, a temperatura ou a porcentaxe de osíxeno en sangue) mentres se estea executando en segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Acceder aos datos de temperatura do sensor corporal do pulso mentres se está utilizando a aplicación."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite que a aplicación acceda aos datos de temperatura do sensor corporal do pulso mentres se está utilizando a aplicación."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Acceder aos datos de temperatura do sensor corporal do pulso mentres a aplicación está en segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite que a aplicación acceda aos datos de temperatura do sensor corporal do pulso mentres a aplicación está en segundo plano."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Ler os detalles e os eventos do calendario"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Esta aplicación pode ler todos os eventos do calendario almacenados na túa tableta e compartir ou gardar os datos do calendario."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Esta aplicación pode ler todos os eventos do calendario almacenados no dispositivo Android TV e compartir ou gardar os datos do calendario."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Cancelouse a operación relacionada coa cara"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"O usuario cancelou o desbloqueo facial"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Téntao de novo máis tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Realizaches demasiados intentos. Desactivouse o desbloqueo facial."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Realizaches demasiados intentos. Mellor usa o bloqueo de pantalla."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Non se puido verificar a cara. Téntao de novo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Non configuraches o desbloqueo facial"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permite que o propietario comece a ver a información das funcións dunha aplicación."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"acceder aos datos dos sensores usando unha taxa de mostraxe alta"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Permite que a aplicación recompile mostras dos datos dos sensores cunha taxa superior a 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"actualizar a aplicación sen que o usuario teña que realizar ningunha acción"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permite que o titular actualice a aplicación que instalase anteriormente sen que o usuario teña que realizar ningunha acción"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Establecer as normas de contrasinal"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Controla a lonxitude e os caracteres permitidos nos contrasinais e nos PIN de bloqueo da pantalla."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Controlar os intentos de desbloqueo da pantalla"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"A aplicación <xliff:g id="APP_NAME_0">%1$s</xliff:g> non está dispoñible neste momento. A dispoñibilidade está xestionada por <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Máis información"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Volver activar aplicación"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Activar as apps do traballo?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Obtén acceso ás túas aplicacións e notificacións do traballo"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Reactivar apps do traballo?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reactivar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emerxencia"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Obtén acceso ás túas chamadas e aplicacións do traballo"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"A aplicación non está dispoñible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> non está dispoñible neste momento."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non está dispoñible"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para activar o perfil"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Non hai ningunha aplicación do traballo compatible"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Non hai ningunha aplicación persoal compatible"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Queres abrir <xliff:g id="APP">%s</xliff:g> no teu perfil persoal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Queres abrir <xliff:g id="APP">%s</xliff:g> no teu perfil de traballo?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilizar navegador persoal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilizar navegador de traballo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo da rede SIM"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index ff19bb4..a96de9c 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -300,7 +300,7 @@
<string name="managed_profile_label" msgid="7316778766973512382">"કાર્યાલયની પ્રોફાઇલ પર સ્વિચ કરો"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"સંપર્કો"</string>
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"તમારા સંપર્કોને ઍક્સેસ કરવાની"</string>
- <string name="permgrouplab_location" msgid="1858277002233964394">"સ્થાન"</string>
+ <string name="permgrouplab_location" msgid="1858277002233964394">"લોકેશન"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"આ ઉપકરણના સ્થાનને ઍક્સેસ કરવાની"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"કૅલેન્ડર"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"તમારા કેલેન્ડરને ઍક્સેસ કરવાની"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ઍપ ઉપયોગમાં હોય, ત્યારે ઍપને હૃદયના ધબકારા, તાપમાન અને લોહીમાં ઑક્સિજનની ટકાવારી જેવા બૉડી સેન્સર ડેટાનો ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ઍપ બૅકગ્રાઉન્ડમાં હોય, ત્યારે હૃદયના ધબકારા જેવા બૉડી સેન્સર ડેટાનો ઍક્સેસ કરો"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ઍપ બૅકગ્રાઉન્ડમાં હોય, ત્યારે ઍપને હૃદયના ધબકારા, તાપમાન અને લોહીમાં ઑક્સિજનની ટકાવારી જેવા બૉડી સેન્સર ડેટાનો ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ઍપનો ઉપયોગ થઈ રહ્યો હોય ત્યારે કાંડા મારફતે મપાયેલા શરીરના તાપમાન સંબંધિત બૉડી સેન્સરનો ડેટા ઍક્સેસ કરો."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ઍપનો ઉપયોગ થઈ રહ્યો હોય ત્યારે કાંડા મારફતે મપાયેલા શરીરના તાપમાન સંબંધિત બૉડી સેન્સરનો ડેટા ઍક્સેસ કરવાની ઍપને મંજૂરી આપે છે."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"બૅકગ્રાઉન્ડમાં ઍપ ચાલી રહી હોય ત્યારે કાંડા મારફતે મપાયેલા શરીરના તાપમાન સંબંધિત બૉડી સેન્સરનો ડેટા ઍક્સેસ કરો."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"બૅકગ્રાઉન્ડમાં ઍપ ચાલી રહી હોય ત્યારે કાંડા મારફતે મપાયેલા શરીરના તાપમાન સંબંધિત બૉડી સેન્સરનો ડેટા ઍક્સેસ કરવાની ઍપને મંજૂરી આપે છે."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"કૅલેન્ડર ઇવેન્ટ્સ અને વિગતો વાંચો"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"આ ઍપ્લિકેશન, તમારા ટેબ્લેટ પર સંગ્રહિત તમામ કૅલેન્ડર ઇવેન્ટ્સને વાંચી શકે છે અને તમારા કૅલેન્ડર ડેટાને શેર કરી અથવા સાચવી શકે છે."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"આ ઍપ, તમારા Android TV ડિવાઇસ પર સંગ્રહિત બધા કૅલેન્ડર ઇવેન્ટને વાંચી શકે છે અને તમારા કૅલેન્ડર ડેટાને શેર કરી અથવા સાચવી શકે છે."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ચહેરા સંબંધિત કાર્યવાહી રદ કરવામાં આવી છે."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"વપરાશકર્તાએ ફેસ અનલૉક કાર્ય રદ કર્યું"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ઘણા બધા પ્રયત્નો. થોડા સમય પછી ફરી પ્રયાસ કરો."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ઘણા બધા પ્રયાસો. ફેસ અનલૉક સુવિધા બંધ કરેલી છે."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ઘણા બધા પ્રયાસો. તેને બદલે સ્ક્રીન લૉકનો ઉપયોગ કરો."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ચહેરો ચકાસી શકાતો નથી. ફરી પ્રયાસ કરો."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"તમે ફેસ અનલૉક સુવિધાનું સેટઅપ કર્યું નથી"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> હમણાં ઉપલબ્ધ નથી. આને <xliff:g id="APP_NAME_1">%2$s</xliff:g> દ્વારા મેનેજ કરવામાં આવે છે."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"વધુ જાણો"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ઍપ ફરી શરૂ કરો"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"શું ઑફિસ માટેની ઍપ ચાલુ કરીએ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"તમારી ઑફિસ માટેની ઍપ અને નોટિફિકેશનનો ઍક્સેસ મેળવો"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ચાલુ કરો"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ઑફિસની થોભાવેલી ઍપ ચાલુ કરીએ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ફરી ચાલુ કરો"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ઇમર્જન્સી"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"તમારી ઑફિસ માટેની ઍપ અને કૉલનો ઍક્સેસ મેળવો"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ઍપ ઉપલબ્ધ નથી"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> હાલમાં ઉપલબ્ધ નથી."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ઉપલબ્ધ નથી"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ચાલુ કરવા માટે ટૅપ કરો"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"કોઈ ઑફિસ માટેની ઍપ સપોર્ટ કરતી નથી"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"કોઈ વ્યક્તિગત ઍપ સપોર્ટ કરતી નથી"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"તમારી વ્યક્તિગત પ્રોફાઇલમાં <xliff:g id="APP">%s</xliff:g> ખોલીએ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"તમારી ઑફિસની પ્રોફાઇલમાં <xliff:g id="APP">%s</xliff:g> ખોલીએ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"વ્યક્તિગત બ્રાઉઝરનો ઉપયોગ કરો"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ઑફિસના બ્રાઉઝરના ઉપયોગ કરો"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"સિમ નેટવર્કને અનલૉક કરવાનો પિન"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 2134598..84634d4 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"इससे ऐप्लिकेशन को इस्तेमाल करने के दौरान, उसे बॉडी सेंसर के डेटा को ऐक्सेस करने की अनुमति मिलती है. इसमें धड़कन की दर, शरीर का तापमान, और खून में ऑक्सीजन का प्रतिशत जैसी जानकारी शामिल होती है."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"बैकग्राउंड में चलने के दौरान, धड़कन की दर जैसे बॉडी सेंसर डेटा का ऐक्सेस दें"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"इससे ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान, उसे बॉडी सेंसर के डेटा को ऐक्सेस करने की अनुमति मिलती है. इसमें धड़कन की दर, शरीर का तापमान, और खून में ऑक्सीजन का प्रतिशत जैसी जानकारी शामिल होती है."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ऐप्लिकेशन को यह अनुमति दें कि जब उसे इस्तेमाल किया जा रहा हो, तब वह आपके शरीर के उस तापमान का डेटा ऐक्सेस कर पाए जो बॉडी सेंसर ने सोते समय रिकॉर्ड किया है."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"इससे ऐप्लिकेशन, आपके शरीर के उस तापमान का डेटा ऐक्सेस कर पाएगा जो बॉडी सेंसर ने सोते समय रिकॉर्ड किया है. इस डेटा का ऐक्सेस उस समय मिलेगा जब ऐप्लिकेशन का इस्तेमाल किया जा रहा हो."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ऐप्लिकेशन को यह अनुमति दें कि बैकग्राउंड में चलते समय, वह आपके शरीर के उस तापमान का डेटा ऐक्सेस कर पाए जो बॉडी सेंसर ने सोते समय रिकॉर्ड किया है."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"इससे ऐप्लिकेशन, आपके शरीर के उस तापमान का डेटा ऐक्सेस कर पाएगा जो बॉडी सेंसर ने सोते समय रिकॉर्ड किया है. इस डेटा का ऐक्सेस उस समय मिलेगा जब ऐप्लिकेशन बैकग्राउंड में चल रहा होगा."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"कैलेंडर इवेंट और विवरण पढ़ें"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"यह ऐप्लिकेशन आपके टैबलेट पर संग्रहित सभी कैलेंडर इवेंट पढ़ सकता है और आपका कैलेंडर डेटा शेयर कर सकता है या सहेज सकता है."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"यह ऐप्लिकेशन आपके टीवी पर सेव किए गए सभी कैलेंडर इवेंट को पढ़ सकता है. इसके अलावा यह आपके कैलेंडर का डेटा शेयर कर सकता है या सेव कर सकता है."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"चेहरा पहचानने की कार्रवाई रद्द की गई."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"उपयोगकर्ता ने फ़ेस अनलॉक को रद्द किया"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"कई बार कोशिश की गई. बाद में कोशिश करें."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"कई बार कोशिश की जा चुकी है. फ़ेस अनलॉक को बंद कर दिया गया है."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"कई बार कोशिश की जा चुकी है. इसके बजाय, स्क्रीन लॉक का इस्तेमाल करें."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा नहीं पहचान पा रहे. फिर से कोशिश करें."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"आपने फ़ेस अनलॉक सेट अप नहीं किया है"</string>
@@ -1371,8 +1368,8 @@
<string name="usb_power_notification_message" msgid="7284765627437897702">"जोड़ा गया डिवाइस चार्ज हो रहा है. ज़्यादा विकल्पों के लिए टैप करें."</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"एनालॉग ऑडियो एक्सेसरी का पता चला"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"अटैच किया गया डिवाइस इस फ़ोन से संगत नहीं है. ज़्यादा जानने के लिए टैप करें."</string>
- <string name="adb_active_notification_title" msgid="408390247354560331">"यूएसबी डीबग करने के लिए एडीबी कनेक्ट किया गया"</string>
- <string name="adb_active_notification_message" msgid="5617264033476778211">"यूएसबी को डीबग करने की सुविधा बंद करने के लिए टैप करें"</string>
+ <string name="adb_active_notification_title" msgid="408390247354560331">"यूएसबी डीबग करने के लिए adb कनेक्ट किया गया"</string>
+ <string name="adb_active_notification_message" msgid="5617264033476778211">"यूएसबी डीबग करने की सुविधा बंद करने के लिए टैप करें"</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB डीबग करना अक्षम करने के लिए चुनें."</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"वॉयरलेस डीबगिंग कनेक्ट है"</string>
<string name="adbwifi_active_notification_message" msgid="930987922852867972">"वॉयरलेस डीबगिंग की सुविधा बंद करने के लिए टैप करें"</string>
@@ -1876,8 +1873,8 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"ठीक है"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"बैटरी सेवर, गहरे रंग वाली थीम को चालू करता है. साथ ही, इस मोड में बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और कुछ खास सुविधाएं कम या बंद हो जाती हैं. कुछ इंटरनेट कनेक्शन भी पूरी तरह काम नहीं करते."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"बैटरी सेवर, गहरे रंग वाली थीम को चालू करता है. साथ ही, इस मोड में बैकग्राउंड की गतिविधि, कुछ विज़ुअल इफ़ेक्ट, और कुछ सुविधाएं सीमित या बंद हो जाती हैं. कुछ इंटरनेट कनेक्शन भी पूरी तरह काम नहीं करते."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"डेटा खर्च को कम करने के लिए, डेटा बचाने की सेटिंग कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकती है. फ़िलहाल, जिस ऐप्लिकेशन का इस्तेमाल किया जा रहा है वह डेटा ऐक्सेस कर सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक दिखाई नहीं देंगी, जब तक उन पर टैप नहीं किया जाएगा."</string>
- <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा बचाने की सेटिंग चालू करें?"</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"डेटा खर्च को कम करने के लिए, डेटा बचाने की सेटिंग कुछ ऐप्लिकेशन को बैकग्राउंड में डेटा भेजने या डेटा पाने से रोकती है. फ़िलहाल, जिस ऐप्लिकेशन का इस्तेमाल किया जा रहा है वह डेटा ऐक्सेस कर सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इमेज तब तक नहीं दिखेंगी, जब तक उन पर टैप नहीं किया जाएगा."</string>
+ <string name="data_saver_enable_title" msgid="7080620065745260137">"डेटा बचाने की सेटिंग चालू करनी है?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"चालू करें"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{एक मिनट के लिए ({formattedTime} तक)}one{# मिनट के लिए ({formattedTime} तक)}other{# मिनट के लिए ({formattedTime} तक)}}"</string>
<string name="zen_mode_duration_minutes_summary_short" msgid="1187553788355486950">"{count,plural, =1{1 मिनट के लिए ({formattedTime} तक)}one{# मिनट के लिए ({formattedTime} तक)}other{# मिनट के लिए ({formattedTime} तक)}}"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"फ़िलहाल <xliff:g id="APP_NAME_0">%1$s</xliff:g> उपलब्ध नहीं है. इसे <xliff:g id="APP_NAME_1">%2$s</xliff:g> के ज़रिए प्रबंधित किया जाता है."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ज़्यादा जानें"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ऐप्लिकेशन पर लगी रोक हटाएं"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन चालू करने हैं?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"अपने ऑफ़िस के काम से जुड़े ऐप्लिकेशन और सूचनाओं का ऐक्सेस पाएं"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"चालू करें"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"वर्क ऐप्लिकेशन चालू करने हैं?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"चालू करें"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"आपातकालीन कॉल"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"अपने वर्क ऐप्लिकेशन और कॉल का ऐक्सेस पाएं"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ऐप्लिकेशन उपलब्ध नहीं है"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> इस समय उपलब्ध नहीं है."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध नहीं है"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"वर्क प्रोफ़ाइल चालू करने के लिए टैप करें"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"यह कॉन्टेंट, ऑफ़िस के काम से जुड़े आपके किसी भी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"यह कॉन्टेंट आपके किसी भी निजी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"क्या <xliff:g id="APP">%s</xliff:g> को निजी प्रोफ़ाइल में खोलना है?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"क्या <xliff:g id="APP">%s</xliff:g> को वर्क प्रोफ़ाइल में खोलना है?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"निजी ब्राउज़र का इस्तेमाल करें"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ऑफ़िस के काम से जुड़े ब्राउज़र का इस्तेमाल करें"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"सिम नेटवर्क को अनलॉक करने का पिन"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 5959388..1246649 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Omogućuje aplikaciji pristup podacima s biometrijskih senzora, kao što su puls, temperatura i postotak kisika u krvi, dok se aplikacija upotrebljava."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Pristup podacima s biometrijskih senzora, kao što je puls, dok je u pozadini"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Omogućuje aplikaciji pristup podacima s biometrijskih senzora, kao što su puls, temperatura i postotak kisika u krvi, dok je aplikacija u pozadini."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Pristupite podacima o temperaturi na zapešću s biometrijskog senzora dok se aplikacija koristi."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Omogućuje aplikaciji da pristupi podacima o temperaturi na zapešću s biometrijskog senzora dok se aplikacija koristi."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Pristupite podacima o temperaturi na zapešću s biometrijskog senzora dok je aplikacija u pozadini."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Omogućuje aplikaciji da pristupi podacima o temperaturi na zapešću s biometrijskog senzora dok je aplikacija u pozadini."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Čitanje događaja i pojedinosti kalendara"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Aplikacija može čitati sve kalendarske događaje pohranjene na tabletu i dijeliti ili spremati podatke iz vašeg kalendara."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Aplikacija može čitati sve kalendarske događaje pohranjene na Android TV uređaju i dijeliti ili spremati podatke iz vašeg kalendara."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Otkazana je radnja s licem."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Previše pokušaja. Otključavanje licem onemogućeno."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Umjesto toga prijeđite na zaključavanje zaslona."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Lice nije potvrđeno. Pokušajte ponovo."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste postavili otključavanje licem"</string>
@@ -1877,7 +1874,7 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"U redu"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Štednja baterije uključuje tamnu temu i ograničava ili isključuje aktivnosti u pozadini, neke vizualne efekte, određene značajke i neke mrežne veze."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"Štednja baterije uključuje tamnu temu i ograničava ili isključuje aktivnosti u pozadini, neke vizualne efekte, određene značajke i neke mrežne veze."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjio podatkovni promet, značajka Štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupiti podacima, no možda će to činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjila potrošnja podatkovnog prometa, štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupati podacima, no to će možda činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti štednju podatkovnog prometa?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{1 min (do {formattedTime})}one{# min (do {formattedTime})}few{# min (do {formattedTime})}other{# min (do {formattedTime})}}"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutačno nije dostupna. Ovime upravlja aplikacija <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saznajte više"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Prekini pauzu aplikacije"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Uključiti poslovne aplikacije?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pristupite svojim poslovnim aplikacijama i obavijestima"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Uključi"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Pokrenuti poslovne aplikacije?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Ponovno pokreni"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hitni slučaj"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Pristupite svojim poslovnim aplikacijama i pozivima"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutačno nije dostupna."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – nije dostupno"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Poslovne aplikacije nisu dostupne"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Osobne aplikacije nisu dostupne"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Želite li otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> na osobnom profilu?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Želite li otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> na poslovnom profilu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi osobni preglednik"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 757598e..27e4ab7 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Lehetővé teszi, hogy az alkalmazás hozzáférjen a testérzékelők adataihoz (pl. pulzusszám, testhőmérséklet és véroxigénszint), miközben az alkalmazás használatban van."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Hozzáférés a testérzékelők adataihoz (pl. pulzusszám) a háttérben"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Lehetővé teszi, hogy az alkalmazás hozzáférjen a testérzékelők adataihoz (pl. pulzusszám, testhőmérséklet és véroxigénszint), miközben az alkalmazás a háttérben van."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Hozzáférés a testérzékelő által a csuklón mért hőmérsékletadatokhoz, miközben az alkalmazás használatban van."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Lehetővé teszi, hogy az alkalmazás hozzáférjen a testérzékelő által a csuklón mért hőmérsékletadatokhoz, miközben az alkalmazás használatban van."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Hozzáférés a testérzékelő által a csuklón mért hőmérsékletadatokhoz, miközben az alkalmazás a háttérben van."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Lehetővé teszi, hogy az alkalmazás hozzáférjen a testérzékelő által a csuklón mért hőmérsékletadatokhoz, miközben az alkalmazás a háttérben van."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Naptáresemények és a naptári adatok olvasása"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Az alkalmazás olvashatja a táblagépen tárolt összes naptáreseményt, és megoszthatja vagy mentheti a naptáradatokat."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Az alkalmazás olvashatja az Android TV eszközön tárolt összes naptáreseményt, és megoszthatja vagy mentheti a naptáradatokat."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Az arccal kapcsolatos művelet törölve."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Az Arcalapú feloldást megszakította a felhasználó"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Túl sok próbálkozás. Próbálja újra később."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Túl sok próbálkozás. Az Arcalapú feloldás letiltva."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Túl sok próbálkozás. Használja inkább a képernyőzárat."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nem sikerült ellenőrizni az arcát. Próbálja újra."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Nem állította be az Arcalapú feloldást"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Engedélyezi az alkalmazás számára, hogy megkezdje az alkalmazások funkcióira vonatkozó adatok megtekintését."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"hozzáférés a szenzoradatokhoz nagy mintavételezési gyakorisággal"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Lehetővé teszi az alkalmazás számára, hogy 200 Hz-nél magasabb gyakorisággal vegyen mintát a szenzoradatokból"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"alkalmazás frissítése felhasználói művelet nélkül"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Lehetővé teszi az engedély tulajdonosa számára, hogy felhasználói művelet nélkül frissítse a korábban általa telepített alkalmazást"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Jelszavakkal kapcsolatos szabályok beállítása"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"A képernyőzár jelszavaiban és PIN kódjaiban engedélyezett karakterek és hosszúság vezérlése."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Képernyőzár-feloldási kísérletek figyelése"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"A(z) <xliff:g id="APP_NAME_0">%1$s</xliff:g> alkalmazás jelenleg nem áll rendelkezésre. Ezt a(z) <xliff:g id="APP_NAME_1">%2$s</xliff:g> kezeli."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"További információ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Alkalmazás szüneteltetésének feloldása"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Bekapcsolja a munkaappokat?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Hozzáférést kaphat munkahelyi alkalmazásaihoz és értesítéseihez"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Bekapcsolás"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Feloldja a munkahelyi appokat?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Szüneteltetés feloldása"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Vészhelyzet"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Hozzáférést kaphat munkahelyi alkalmazásaihoz és hívásaihoz"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Az alkalmazás nem hozzáférhető"</string>
<string name="app_blocked_message" msgid="542972921087873023">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> jelenleg nem hozzáférhető."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"A(z) <xliff:g id="ACTIVITY">%1$s</xliff:g> nem áll rendelkezése"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Koppintson a bekapcsoláshoz"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nincs munkahelyi alkalmazás"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nincs személyes alkalmazás"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Megnyitja a(z) <xliff:g id="APP">%s</xliff:g> alkalmazást a személyes profil használatával?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Megnyitja a(z) <xliff:g id="APP">%s</xliff:g> alkalmazást a munkaprofil használatával?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Személyes böngésző használata"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Munkahelyi böngésző használata"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Hálózati SIM feloldó PIN-kódja"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index ae2134e..56281fe 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Հավելվածին հասանելի է դարձնում մարմնի սենսորների տվյալները (օրինակ՝ սրտի զարկերի հաճախականությունը, ջերմաստիճանը, արյան մեջ թթվածնի տոկոսային պարունակության ցուցանիշները) հավելվածի օգտագործման ժամանակ։"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Մարմնի սենսորների տվյալների հասանելիություն ֆոնային ռեժիմում"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Հավելվածին հասանելի է դարձնում մարմնի սենսորների տվյալները (օրինակ՝ սրտի զարկերի հաճախականությունը, ջերմաստիճանը, արյան մեջ թթվածնի տոկոսային պարունակության ցուցանիշները), երբ հավելվածն աշխատում է ֆոնային ռեժիմում։"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Մարմնի սենսորների՝ դաստակի ջերմաստիճանի մասին տվյալների հասանելիություն հավելվածի օգտագործման ընթացքում։"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Գործարկված հավելվածին հասանելի է դարձնում մարմնի սենսորների՝ դաստակի ջերմաստիճանի մասին տվյալները։"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Մարմնի սենսորների՝ դաստակի ջերմաստիճանի մասին տվյալների հասանելիություն ֆոնային ռեժիմում։"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Ֆոնային ռեժիմում գործարկված հավելվածին հասանելի է դարձնում մարմնի սենսորների՝ դաստակի ջերմաստիճանի մասին տվյալները։"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Կարդալ օրացույցի միջոցառումները և տվյալները"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Այս հավելվածը կարող է կարդալ օրացույցի՝ ձեր պլանշետում պահված բոլոր միջոցառումները, ինչպես նաև հրապարակել կամ պահել ձեր օրացույցի տվյալները:"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Այս հավելվածը կարող է կարդալ օրացույցի՝ ձեր Android TV սարքում պահված բոլոր միջոցառումները, ինչպես նաև հրապարակել կամ պահել ձեր օրացույցի տվյալները:"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Դեմքի ճանաչումը չեղարկվել է։"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Դեմքով ապակողմումը չեղարկվել է օգտատիրոջ կողմից"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Չափից շատ փորձեր եք կատարել: Փորձեք ավելի ուշ:"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Չափազանց շատ փորձեր են արվել։ Դեմքով ապակողպումն անջատված է։"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Չափազանց շատ փորձեր են արվել։ Օգտագործեք էկրանի կողպումը։"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Չհաջողվեց հաստատել դեմքը։ Նորից փորձեք։"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Դուք չեք կարգավորել դեմքով ապակողպումը։"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Թույլ է տալիս դիտել հավելվածի գործառույթների մասին տեղեկությունները։"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"օգտագործել սենսորների տվյալները բարձր հաճախականության վրա"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Թույլ է տալիս հավելվածին փորձել սենսորների տվյալները 200 Հց-ից բարձր հաճախականության վրա"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"թարմացնել հավելվածն առանց օգտատիրոջ գործողության"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Թույլ է տալիս թարմացնել նախկինում տեղադրված հավելվածները՝ առանց օգտատիրոջ գործողության"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Սահմանել գաղտնաբառի կանոնները"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Կառավարել էկրանի ապակողպման գաղտնաբառերի և PIN կոդերի թույլատրելի երկարությունն ու գրանշանները:"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Վերահսկել էկրանի ապակողպման փորձերը"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> հավելվածը հասանելի չէ։ Դրա աշխատանքը սահմանափակում է <xliff:g id="APP_NAME_1">%2$s</xliff:g> հավելվածը։"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Մանրամասն"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Չեղարկել դադարեցումը"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Միացնե՞լ հավելվածները"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Ձեզ հասանելի կդառնան ձեր աշխատանքային հավելվածներն ու ծանուցումները"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Միացնել"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Վերսկսե՞լ աշխ. հավելվածները"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Վերսկսել"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Արտակարգ իրավիճակ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Ստացեք ձեր աշխատանքային հավելվածների և զանգերի հասանելիություն"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Հավելվածը հասանելի չէ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն այս պահին հասանելի չէ։"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>՝ անհասանելի է"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Հպեք միացնելու համար"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Աշխատանքային հավելվածներ չկան"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Անձնական հավելվածներ չկան"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Բացե՞լ <xliff:g id="APP">%s</xliff:g> հավելվածը ձեր անձնական պրոֆիլում"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Բացե՞լ <xliff:g id="APP">%s</xliff:g> հավելվածը ձեր աշխատանքային պրոֆիլում"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Օգտագործել անձնական դիտարկիչը"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Օգտագործել աշխատանքային դիտարկիչը"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM Network քարտի ապակողպման PIN"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 8f9199f..cd7f613 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -210,7 +210,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aktifkan"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Panggilan dan pesan dinonaktifkan"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Anda menjeda aplikasi kerja. Anda tidak akan menerima panggilan telepon atau pesan teks."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Lanjutkan aplikasi kerja"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Aktifkan lagi"</string>
<string name="me" msgid="6207584824693813140">"Saya"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opsi tablet"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Opsi Android TV"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Mengizinkan aplikasi mengakses data sensor tubuh, seperti detak jantung, suhu, dan persentase oksigen dalam darah, saat aplikasi sedang digunakan."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Mengakses data sensor tubuh, seperti detak jantung, saat ada di latar belakang"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Mengizinkan aplikasi mengakses data sensor tubuh, seperti detak jantung, suhu, dan persentase oksigen dalam darah, saat aplikasi berada di latar belakang."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Mengakses data suhu pergelangan tangan sensor tubuh saat aplikasi sedang digunakan."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Mengizinkan aplikasi mengakses data suhu pergelangan tangan sensor tubuh, saat aplikasi sedang digunakan."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Mengakses data suhu pergelangan tangan sensor tubuh saat aplikasi sedang berada di latar belakang."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Mengizinkan aplikasi mengakses data suhu pergelangan tangan sensor tubuh, saat aplikasi sedang berada di latar belakang."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Baca acara kalender dan detailnya"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Aplikasi ini dapat membaca semua acara kalender yang tersimpan di tablet dan membagikan atau menyimpan data kalender."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Aplikasi ini dapat membaca semua acara kalender yang tersimpan di perangkat Android TV dan membagikan atau menyimpan data kalender."</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan ponsel ke kiri Anda"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan ponsel ke kanan Anda"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lihat langsung ke perangkat."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Tidak dapat melihat wajah Anda. Pegang ponsel sejajar dengan mata."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Wajah tidak terlihat. Pegang ponsel sejajar mata."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu banyak gerakan. Stabilkan ponsel."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Daftarkan ulang wajah Anda."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Tidak dapat mengenali wajah. Coba lagi."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Pemrosesan wajah dibatalkan."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Buka dengan Wajah dibatalkan oleh pengguna"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Terlalu banyak percobaan. Coba lagi nanti."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Terlalu banyak upaya gagal. Buka dengan Wajah dinonaktifkan."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Terlalu banyak upaya gagal. Masukkan kunci layar."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat memverifikasi wajah. Coba lagi."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Anda belum menyiapkan Buka dengan Wajah"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Memungkinkan pemegang mulai melihat info fitur untuk aplikasi."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"mengakses data sensor pada frekuensi sampling yang tinggi"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Mengizinkan aplikasi mengambil sampel data sensor pada frekuensi yang lebih besar dari 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"mengupdate aplikasi tanpa tindakan pengguna"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Mengizinkan pemegang mengupdate aplikasi yang sebelumnya diinstal tanpa tindakan pengguna"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Setel aturan sandi"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Mengontrol panjang dan karakter yang diizinkan dalam sandi dan PIN kunci layar."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Pantau upaya pembukaan kunci layar"</string>
@@ -1878,7 +1873,7 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"Oke"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Penghemat Baterai akan mengaktifkan Tema gelap dan membatasi atau menonaktifkan aktivitas latar belakang, beberapa efek visual, fitur tertentu, dan beberapa koneksi jaringan."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"Penghemat Baterai akan mengaktifkan Tema gelap dan membatasi atau menonaktifkan aktivitas latar belakang, beberapa efek visual, fitur tertentu, dan beberapa koneksi jaringan."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangi penggunaan data, Penghemat Data mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya saja, gambar hanya akan ditampilkan setelah diketuk."</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"Untuk membantu mengurangi penggunaan data, Penghemat Data mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya, gambar hanya akan ditampilkan setelah diketuk."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Aktifkan Penghemat Data?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aktifkan"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{Selama 1 menit (hingga {formattedTime})}other{Selama # menit (hingga {formattedTime})}}"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> saat ini tidak tersedia. Aplikasi ini dikelola oleh <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Pelajari lebih lanjut"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Batalkan jeda aplikasi"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Aktifkan aplikasi kerja?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Dapatkan akses ke aplikasi kerja dan notifikasi"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktifkan"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Batalkan jeda aplikasi kerja?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Batalkan jeda"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Darurat"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Dapatkan akses ke aplikasi kerja dan panggilan"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikasi tidak tersedia"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia saat ini."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> tidak tersedia"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Ketuk untuk mengaktifkan"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tidak ada aplikasi kerja"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tidak ada aplikasi pribadi"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Buka <xliff:g id="APP">%s</xliff:g> di profil pribadi?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Buka <xliff:g id="APP">%s</xliff:g> di profil kerja?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan browser pribadi"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan browser kerja"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN pembuka kunci SIM network"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 330c0d9..2558dae 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Veitir forritinu aðgang að gögnum frá líkamsskynjurum, svo sem um hjartslátt, hitastig og súrefnismettun í blóði á meðan forritið er í notkun."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Aðgangur að gögnum líkamsskynjara, t.d. um hjartslátt, meðan það er í bakgrunni"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Veitir forritinu aðgang að gögnum frá líkamsskynjurum, svo sem um hjartslátt, hitastig og súrefnismettun í blóði á meðan forritið keyrir í bakgrunni."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Aðgangur að gögnum um úlnliðshita frá líkamsskynjurum á meðan forritið er í notkun."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Veitir forritinu aðgang að gögnum um úlnliðshita frá líkamsskynjurum á meðan forritið er í notkun."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Aðgangur að gögnum um úlnliðshita frá líkamsskynjurum á meðan forritið er í bakgrunni."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Veitir forritinu aðgang að gögnum um úlnliðshita frá líkamsskynjurum á meðan forritið er í bakgrunni."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lesa dagatalsviðburði og upplýsingar"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Þetta forrit getur lesið alla dagatalsviðburði sem eru vistaðir í spjaldtölvunni og deilt eða vistað dagatalsgögnin þín."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Þetta forrit getur lesið alla dagatalsviðburði sem eru vistaðir í Android TV og deilt eða vistað dagatalsgögnin þín."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Hætt við andlitsgreiningu."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Notandi hætti við andlitskenni."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Of margar tilraunir. Reyndu aftur síðar."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Of margar tilraunir. Slökkt á andlitskenni."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Of margar tilraunir. Sláðu inn skjálásinn í staðinn."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Ekki tókst að staðfesta andlit. Reyndu aftur."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Þú hefur ekki sett upp andlitskenni."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Leyfir handhafa að skoða upplýsingar um eiginleika tiltekins forrits."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"aðgangur að skynjaragögnum með hárri upptökutíðni"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Leyfir forritinu að nota upptökutíðni yfir 200 Hz fyrir skynjaragögn"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"uppfæra forrit án aðgerðar notanda"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Gerir eiganda kleift að uppfæra forritið sem hann setti upp áður án aðgerðar notanda"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Setja reglur um aðgangsorð"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Stjórna lengd og fjölda stafa í aðgangsorðum og PIN-númerum skjáláss."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Fylgjast með tilraunum til að taka skjáinn úr lás"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> er ekki í boði eins og er. Þessu er stjórnað með <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Nánari upplýsingar"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Halda áfram að nota"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Kveikja á vinnuforritum?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Fá aðgang að vinnuforritum og tilkynningum"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Kveikja"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Ljúka hléi vinnuforrita?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Ljúka hléi"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Neyðartilvik"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Fá aðgang að vinnuforritum og símtölum"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Forrit er ekki tiltækt"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ekki tiltækt núna."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ekki í boði"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Ýttu til að kveikja"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Engin vinnuforrit"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Engin forrit til einkanota"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Opna <xliff:g id="APP">%s</xliff:g> í þínu eigin sniði?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Opna <xliff:g id="APP">%s</xliff:g> í vinnusniðinu þínu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Nota einkavafra"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Nota vinnuvafra"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-númer fyrir opnun á SIM-korti netkerfis"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index e2bd8db..0bfa643 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -211,7 +211,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Attiva"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Chiamate e messaggi sono disattivati"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Hai messo in pausa le app di lavoro. Non riceverai telefonate o messaggi."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"App lavoro on"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Riattiva app lavoro"</string>
<string name="me" msgid="6207584824693813140">"Io"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Opzioni tablet"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Opzioni Android TV"</string>
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Autorizza l\'app ad accedere ai dati dei sensori del corpo, ad esempio battito cardiaco, temperatura e percentuale di ossigeno nel sangue, mentre l\'app è in uso."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Accesso ai dati dei sensori del corpo, come il battito cardiaco, in background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Autorizza l\'app ad accedere ai dati dei sensori del corpo, ad esempio battito cardiaco, temperatura e percentuale di ossigeno nel sangue, mentre l\'app è in background."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accesso ai dati della temperatura del polso misurata dal sensore del corpo mentre l\'app è in uso."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Consente all\'app, mentre è in uso, di accedere ai dati della temperatura del polso misurata dal sensore del corpo."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accesso ai dati della temperatura del polso misurata dal sensore del corpo mentre l\'app è in background."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Consente all\'app, mentre è in background, di accedere ai dati della temperatura del polso misurata dal sensore del corpo."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"lettura di eventi di calendario e dettagli"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Questa app può leggere tutti gli eventi di calendario memorizzati sul tablet e condividere o salvare i dati di calendario."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Questa app può leggere tutti gli eventi di calendario memorizzati sul dispositivo Android TV e condividere o salvare i dati di calendario."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operazione associata al volto annullata."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Sblocco con il volto annullato dall\'utente"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Troppi tentativi. Riprova più tardi."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Troppi tentativi. Sblocco con il volto disattivato."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Troppi tentativi. Inserisci il blocco schermo."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossibile verificare il volto. Riprova."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Non hai configurato lo sblocco con il volto"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> non è al momento disponibile. Viene gestita tramite <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Scopri di più"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Riattiva app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Attivare le app di lavoro?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Attiva l\'accesso alle app di lavoro e alle notifiche"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Attiva"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Riattivare app di lavoro?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Riattiva"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergenza"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Richiedi l\'accesso alle app di lavoro e alle chiamate"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"L\'app non è disponibile"</string>
<string name="app_blocked_message" msgid="542972921087873023">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> non è al momento disponibile."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non disponibile"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tocca per attivare"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nessuna app di lavoro"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nessuna app personale"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Aprire <xliff:g id="APP">%s</xliff:g> nel tuo profilo personale?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Aprire <xliff:g id="APP">%s</xliff:g> nel tuo profilo di lavoro?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usa il browser personale"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usa il browser di lavoro"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN di sblocco rete SIM"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index bdc4821..40dead0 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ההרשאה מאפשרת לאפליקציה לגשת לנתונים של חיישני גוף, כמו דופק, חום גוף ושיעור החמצן בדם, כשנעשה שימוש באפליקציה."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"גישה לנתונים של חיישני גוף, כמו דופק, כשהאפליקציה פועלת ברקע"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ההרשאה מאפשרת לאפליקציה לגשת לנתונים של חיישני גוף, כמו דופק, חום גוף ושיעור החמצן בדם, כשהאפליקציה פועלת ברקע."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"הרשאת גישה לנתונים של החיישן הלביש, כמו טמפרטורת פרק כף היד, כשנעשה שימוש באפליקציה."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ההרשאה מאפשרת לאפליקציה לגשת לנתונים של החיישן הלביש, כמו טמפרטורת פרק כף היד, כשנעשה שימוש באפליקציה."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"הרשאת גישה לנתונים של החיישן הלביש, כמו טמפרטורת פרק כף היד, כשהאפליקציה פועלת ברקע."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ההרשאה מאפשרת לאפליקציה לגשת לנתונים של החיישן הלביש, כמו טמפרטורת פרק כף היד, כשהאפליקציה פועלת ברקע."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"קריאה של אירועי יומן והפרטים שלהם"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"האפליקציה הזו יכולה לקרוא את כל אירועי היומן המאוחסנים בטאבלט, ולשתף או לשמור את נתוני היומן."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"האפליקציה הזו יכולה לקרוא את כל אירועי היומן המאוחסנים במכשיר ה-Android TV, ולשתף או לשמור את נתוני היומן."</string>
@@ -689,7 +685,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"צריך להזיז את הטלפון שמאלה"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"צריך להזיז את הטלפון ימינה"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"יש להביט ישירות אל המכשיר."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"אי אפשר לראות את הפנים שלך. צריך להחזיק את הטלפון בגובה העיניים."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"אי אפשר לראות את הפנים שלך. יש להחזיק את הטלפון בגובה העיניים."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"יותר מדי תנועה. יש להחזיק את הטלפון בצורה יציבה."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"יש לסרוק שוב את הפנים."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"לא ניתן לזהות את הפנים. יש לנסות שוב."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"הפעולה לאימות הפנים בוטלה."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"הפתיחה ע\"י זיהוי הפנים בוטלה על ידי המשתמש"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"יותר מדי ניסיונות. יש לנסות שוב מאוחר יותר."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"בוצעו יותר מדי ניסיונות. הושבתה הפתיחה ע\"י זיהוי הפנים."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"בוצעו יותר מדי ניסיונות. יש להשתמש בנעילת המסך במקום."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"לא ניתן לאמת את הפנים. יש לנסות שוב."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"לא הגדרת פתיחה ע\"י זיהוי הפנים"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"בעלי ההרשאה יוכלו להתחיל לצפות בפרטי התכונות של אפליקציות."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"גישה לנתוני חיישנים בתדירות דגימה גבוהה"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"האפליקציה תוכל לדגום נתוני חיישנים בתדירות של מעל 200 הרץ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"עדכון אפליקציה ללא פעולה מצד המשתמש"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"בעלי ההרשאה הזו יוכלו לעדכן אפליקציה שכבר הותקנה ללא פעולה מצד המשתמש"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"הגדרת כללי סיסמה"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"קביעת האורך הנדרש והתווים המותרים בסיסמאות ובקודי האימות של מסך הנעילה."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"מעקב אחר ניסיונות לביטול של נעילת המסך"</string>
@@ -1184,7 +1179,7 @@
<string name="not_selected" msgid="410652016565864475">"לא נבחר"</string>
<string name="rating_label" msgid="1837085249662154601">"{rating,plural, =1{כוכב אחד מתוך {max}}one{# כוכבים מתוך {max}}two{# כוכבים מתוך {max}}other{# כוכבים מתוך {max}}}"</string>
<string name="in_progress" msgid="2149208189184319441">"בתהליך"</string>
- <string name="whichApplication" msgid="5432266899591255759">"השלמת הפעולה באמצעות"</string>
+ <string name="whichApplication" msgid="5432266899591255759">"השלמת הפעולה עם"</string>
<string name="whichApplicationNamed" msgid="6969946041713975681">"השלמת הפעולה באמצעות %1$s"</string>
<string name="whichApplicationLabel" msgid="7852182961472531728">"להשלמת הפעולה"</string>
<string name="whichViewApplication" msgid="5733194231473132945">"פתיחה באמצעות"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"האפליקציה <xliff:g id="APP_NAME_0">%1$s</xliff:g> לא זמינה כרגע. אפשר לנהל זאת באפליקציה <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"מידע נוסף"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ביטול ההשהיה של האפליקציה"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"להפעיל את האפליקציות לעבודה?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"קבלת גישה להתראות ולאפליקציות בפרופיל העבודה"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"הפעלה"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"להפעיל את האפליקציות לעבודה?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"הפעלה"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"שיחת חירום"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"קבלת גישה לשיחות ולאפליקציות בפרופיל העבודה"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"האפליקציה לא זמינה"</string>
<string name="app_blocked_message" msgid="542972921087873023">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> לא זמינה בשלב זה."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> לא זמינה"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"יש להקיש כדי להפעיל את פרופיל העבודה"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"אין אפליקציות לעבודה"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"אין אפליקציות לשימוש אישי"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"לפתוח את <xliff:g id="APP">%s</xliff:g> בפרופיל האישי?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"לפתוח את <xliff:g id="APP">%s</xliff:g> בפרופיל העבודה?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"בדפדפן האישי"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"בדפדפן של העבודה"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"קוד אימות לביטול הנעילה של רשת SIM"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 93ef258..6b3bc87 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"個人用アプリは、<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> にブロックされます。仕事用プロファイルを <xliff:g id="NUMBER">%3$d</xliff:g> 日を超えて OFF にすることは、IT 管理者から許可されていません。"</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ON にする"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"通話とメッセージ: OFF"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"仕事用アプリを一時停止しました。電話やテキスト メッセージを受信できなくなります。"</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"仕事用アプリを一時停止しました。電話やテキスト メッセージを受信しなくなります。"</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"仕事用アプリを停止解除"</string>
<string name="me" msgid="6207584824693813140">"自分"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"タブレットオプション"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"アプリの使用時に、心拍数、体温、血中酸素濃度など、ボディセンサー データにアクセスすることをアプリに許可します。"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"バックグラウンド動作時の、心拍数などのボディセンサー データへのアクセス"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"バックグラウンドでのアプリの動作時に、心拍数、体温、血中酸素濃度など、ボディセンサー データにアクセスすることをアプリに許可します。"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"アプリの使用中にボディセンサーの手首の体温データにアクセスします。"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"アプリの使用中に、ボディセンサーの手首の体温データへのアクセスをアプリに許可します。"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"アプリのバックグラウンド実行中に、ボディセンサーの手首の体温データにアクセスします。"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"アプリのバックグラウンド実行中に、ボディセンサーの手首の体温データへのアクセスをアプリに許可します。"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"カレンダーの予定と詳細を読み取り"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"このアプリは、お使いのタブレットに保存されたカレンダーの予定をすべて読み取り、カレンダーのデータを共有したり、保存したりできます。"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"このアプリは、Android TV デバイスに保存されているカレンダーの予定をすべて読み取り、カレンダーのデータを共有したり、保存したりできます。"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"顔の操作をキャンセルしました。"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"顔認証はユーザーによりキャンセルされました"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"試行回数の上限です。後でもう一度お試しください。"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"試行回数が上限を超えました。顔認証が無効になりました。"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"試行回数が上限を超えました。代わりに画面ロック解除を入力してください。"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"顔を確認できません。もう一度お試しください。"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"顔認証を設定していません"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"現在、<xliff:g id="APP_NAME_0">%1$s</xliff:g> は使用できません。このアプリの使用は [<xliff:g id="APP_NAME_1">%2$s</xliff:g>] で管理されています。"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"詳細"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"アプリの一時停止を解除"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"仕事用アプリを ON にしますか?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"仕事用のアプリを利用し、通知を受け取れるようになります"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ON にする"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"仕事用アプリの停止解除"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"停止解除"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"緊急通報"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"仕事用アプリを利用し、通話を行えるようになります"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"アプリの利用不可"</string>
<string name="app_blocked_message" msgid="542972921087873023">"現在 <xliff:g id="APP_NAME">%1$s</xliff:g> はご利用になれません。"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>は利用できません"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"タップして ON にする"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"仕事用アプリはありません"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"個人用アプリはありません"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"個人用プロファイルで <xliff:g id="APP">%s</xliff:g> を開きますか?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"仕事用プロファイルで <xliff:g id="APP">%s</xliff:g> を開きますか?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"個人用ブラウザを使用"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"仕事用ブラウザを使用"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM のネットワーク ロック解除 PIN"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 85050b8..2c05e82 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"საშუალებას აძლევს აპს, მისი გამოყენებისას, წვდომა ჰქონდეს სხეულის სენსორების მონაცემებზე, როგორიცაა გულისცემა, ტემპერატურა და სისხლში ჟანგბადის პროცენტული შემცველობა."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"აპის ფონურ რეჟიმში მუშაობისას, სხეულის სენსორების მონაცემებზე წვდომა, როგორიცაა გულისცემა"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"საშუალებას აძლევს აპს, ფონურ რეჟიმში მუშაობისას, წვდომა ჰქონდეს სხეულის სენსორების მონაცემებზე, როგორიცაა გულისცემა, ტემპერატურა და სისხლში ჟანგბადის პროცენტული შემცველობა."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"სხეულის სენსორის მაჯის ტემპერატურის მონაცემებზე წვდომა აპის მუშაობისას."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"საშუალებას აძლევს აპს, მუშაობისას წვდომა ჰქონდეს სხეულის სენსორის მაჯის ტემპერატურის მონაცემებზე."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"სხეულის სენსორის მაჯის ტემპერატურის მონაცემებზე წვდომა აპის ფონურ რეჟმში მუშაობისას."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"საშუალებას აძლევს აპს, ფონურ რეჟიმში მუშაობისას წვდომა ჰქონდეს სხეულის სენსორის მაჯის ტე,პერატურის მონაცემებზე."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"კალენდრის მოვლენებისა და დეტალების წაკითხვა"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ამ აპს შეუძლია თქვენს ტაბლეტში შენახული კალენდრის ყველა მოვლენის წაკითხვა და თქვენი კალენდრის მონაცემების გაზიარება ან შენახვა."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ამ აპს შეუძლია თქვენს Android TV მოწყობილობაზე შენახული კალენდრის ყველა მოვლენის წაკითხვა და თქვენი კალენდრის მონაცემების გაზიარება ან შენახვა."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"სახის ამოცნობა გაუქმდა."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"სახით განბლოკვა გაუქმდა მომხმარებლის მიერ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"დაფიქსირდა ბევრი მცდელობა. ცადეთ მოგვიანებით."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"მეტისმეტად ბევრი მცდელობა იყო. სახით განბლოკვა გათიშულია."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"მეტისმეტად ბევრი მცდელობა იყო. შეიყვანეთ ეკრანის დაბლოკვის პარამეტრები."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"სახის დადასტურება ვერ ხერხდება. ცადეთ ხელახლა."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"თქვენ არ დაგიყენებიათ სახით განბლოკვა."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"მფლობელს საშუალებას აძლევს, დაიწყოს აპის ფუნქციების ინფორმაციის ნახვა."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"სენსორის მონაცემებზე წვდომა სემპლინგის მაღალი სიხშირით"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"საშუალებას აძლევს აპს, მიიღოს სენსორის მონაცემების ნიმუშები 200 ჰც-ზე მეტი სიხშირით"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"აპის განახლება მომხმარებლის ქმედების გარეშე"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"საშუალებას აძლევს მომხმარებელს, დამოუკიდებლად განაახლოს მანამდე დაინსტალირებული აპი"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"პაროლის წესების დაყენება"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"აკონტროლეთ ეკრანის ბლოკირების პაროლებისა და PIN-ების სიმბოლოების სიგრძე."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"ეკრანის განბლოკვის მცდელობების მონიტორინგი"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ამჟამად მიუწვდომელია. ის იმართება <xliff:g id="APP_NAME_1">%2$s</xliff:g>-ის მიერ."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"შეიტყვეთ მეტი"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"აპის დაპაუზების გაუქმება"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"გსურთ სამსახურის აპების ჩართვა?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"თქვენი სამსახურის აპებსა და შეტყობინებებზე წვდომის მოპოვება"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ჩართვა"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"გაუქმდეს სამსახურის აპების დაპაუზება?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"პაუზის გაუქმება"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"საგანგებო სიტუაცია"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"მოიპოვეთ წვდომა თქვენი სამსახურის აპებსა და ზარებზე"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"აპი მიუწვდომელია"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ამჟამად მიუწვდომელია."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> მიუწვდომელია"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"შეეხეთ ჩასართავად"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"სამსახურის აპები არ არის"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"პირადი აპები არ არის"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"გსურთ <xliff:g id="APP">%s</xliff:g>-ის გახსნა თქვენს პირად პროფილში?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"გსურთ <xliff:g id="APP">%s</xliff:g>-ის გახსნა თქვენს სამსახურის პროფილში?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"პირადი ბრაუზერის გამოყენება"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"სამსახურის ბრაუზერის გამოყენება"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ქსელის განბლოკვის PIN-კოდი"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index f2b9318..543aaa5 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Жеке қолданбалардың бөгелетін уақыты: <xliff:g id="DATE">%1$s</xliff:g>, сағат <xliff:g id="TIME">%2$s</xliff:g>. Әкімші жұмыс профилін <xliff:g id="NUMBER">%3$d</xliff:g> күннен аса мерзімге өшіруге рұқсат бермейді."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Қосу"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Қоңыраулар мен хабарлар өшірулі"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Жұмыс қолданбаларының жұмысын тоқтатып қойдыңыз. Телефон қоңырауларын қабылдай не мәтіндік хабарлар ала алмайсыз."</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Жұмыс қолданбаларын кідіртіп қойдыңыз. Телефон қоңыраулары мен мәтіндік хабарлар келмейді."</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Жұмыс қолданбаларының жұмысын қайта жалғастыру"</string>
<string name="me" msgid="6207584824693813140">"Мен"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Планшет опциялары"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Жұмыс кезінде қолданбаға дене датчигінен алынған жүрек қағысы, температура, қандағы оттегі пайызы сияқты деректі пайдалануға рұқсат береді."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Фондық режимде дене датчигінен алынған жүрек қағысы сияқты деректі пайдалану"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Фондық режимде қолданбаға дене датчигінен алынған жүрек қағысы, температура, қандағы оттегі пайызы сияқты деректі пайдалануға рұқсат береді."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Қолданба пайдаланылып жатқанда оған қолдағы дене датчигінен алынған деректі пайдалануға рұқсат беру."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Қолданба пайдаланылып жатқанда оған қолдағы дене датчигінен алынған деректі пайдалануға рұқсат береді."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Фондық режимдегі қолданбаға қолдағы дене датчигінен алынған деректі пайдалануға рұқсат беру."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Фондық режимдегі қолданбаға қолдағы дене датчигінен алынған деректі пайдалануға рұқсат береді."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Күнтізбе оқиғалары мен мәліметтерін оқу"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Бұл қолданба планшетте сақталған барлық күнтізбе оқиғаларын оқи алады және күнтізбе деректерін бөлісе не сақтай алады."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Бұл қолданба Android TV құрылғыңызда сақталған барлық күнтізбе оқиғаларын оқи алады және күнтізбе деректерін бөлісе не сақтай алады."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Бетті танудан бас тартылды."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Пайдаланушы бет тану функциясынан бас тартты."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Тым көп әрекет жасалды. Кейінірек қайталаңыз."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Тым көп әрекет жасалды. Бет тану функциясы өшірілді."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Тым көп әрекет жасалды. Оның орнына экран құлпын енгізіңіз."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Бетті тану мүмкін емес. Әрекетті қайталаңыз."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Бет тану функциясы реттелмеген."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Қолданбаға функциялар туралы ақпаратты көре бастауды кідіртуге мүмкіндік береді."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"жоғары дискретизация жиілігіндегі датчик деректерін пайдалану"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Қолданбаға жиілігі 200 Гц-тен жоғары датчик деректерінің үлгісін таңдауға рұқсат береді."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"қолданбаны автоматты түрде жаңарту"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Бұған дейін орнатылған қолданбаның автоматты түрде жаңартылуына мүмкіндік береді."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Құпия сөз ережелерін тағайындау"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Экран бекітпесінің құпия сөздерінің және PIN кодтарының ұзындығын және оларда рұқсат етілген таңбаларды басқару."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Экран құлпын ашу әркеттерін бақылау"</string>
@@ -1365,7 +1360,7 @@
<string name="usb_supplying_notification_title" msgid="5378546632408101811">"Жалғанған құрылғы USB арқылы зарядталуда"</string>
<string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB арқылы файл жіберу мүмкіндігі қосылды"</string>
<string name="usb_ptp_notification_title" msgid="5043437571863443281">"PTP режимі USB арқылы қосылды"</string>
- <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB тетеринг режимі қосылды"</string>
+ <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB-тетеринг режимі қосылды"</string>
<string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI режимі USB арқылы қосылды"</string>
<string name="usb_uvc_notification_title" msgid="2030032862673400008">"Құрылғы веб-камера ретінде жалғанды"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB жабдығы жалғанған"</string>
@@ -1633,7 +1628,7 @@
<string name="media_route_button_content_description" msgid="2299223698196869956">"Трансляциялау"</string>
<string name="media_route_chooser_title" msgid="6646594924991269208">"Құрылғыға жалғау"</string>
<string name="media_route_chooser_title_for_remote_display" msgid="3105906508794326446">"Экран трансляциясы"</string>
- <string name="media_route_chooser_searching" msgid="6119673534251329535">"Құрылғылар ізделуде…"</string>
+ <string name="media_route_chooser_searching" msgid="6119673534251329535">"Құрылғылар ізделіп жатыр…"</string>
<string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"Параметрлер"</string>
<string name="media_route_controller_disconnect" msgid="7362617572732576959">"Ажырату"</string>
<string name="media_route_status_scanning" msgid="8045156315309594482">"Тексеруде..."</string>
@@ -1878,7 +1873,7 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"Жарайды"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Батареяны үнемдеу режимі қараңғы режимді іске қосады және фондық әрекеттерге, кейбір визуалдық әсерлерге, белгілі бір функциялар мен кейбір желі байланыстарына шектеу қояды немесе оларды өшіреді."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"Батареяны үнемдеу режимі қараңғы режимді іске қосады және фондық әрекеттерге, кейбір визуалдық әсерлерге, белгілі бір функциялар мен кейбір желі байланыстарына шектеу қояды немесе оларды өшіреді."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"Дерек шығынын азайту үшін Трафикті үнемдеу режимінде кейбір қолданбаларға деректі фондық режимде жіберуге және алуға тыйым салынады. Ашық тұрған қолданба деректі шектеулі шамада пайдаланады (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)."</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"Дерек шығынын азайту үшін трафикті үнемдеу режимінде кейбір қолданбаларға деректі фондық режимде жіберуге және алуға тыйым салынады. Ашық тұрған қолданба деректі шектеулі шамада пайдаланады (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Трафикті үнемдеу режимі қосылсын ба?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Қосу"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{Бір минут ({formattedTime} дейін)}other{# минут ({formattedTime} дейін)}}"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> дәл қазір қолжетімді емес. Ол <xliff:g id="APP_NAME_1">%2$s</xliff:g> арқылы басқарылады."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Толығырақ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Қолданбаны қайта қосу"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Жұмыс қолданбаларын қосасыз ба?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Жұмыс қолданбалары мен хабарландыруларына қол жеткізесіз."</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Қосу"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Жұмыс қолданбаларын қайта қосасыз ба?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Қайта қосу"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Құтқару қызметіне қоңырау шалу"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Жұмыс қолданбаларын пайдаланып, қоңырауларды қабылдаңыз."</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Қолданба қолжетімді емес"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> қазір қолжетімді емес."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> қолжетімсіз"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Қосу үшін түртіңіз"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жұмыс қолданбалары жоқ."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке қолданбалар жоқ."</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> қолданбасын жеке профиліңізде ашу керек пе?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> қолданбасын жұмыс профиліңізде ашу керек пе?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Жеке браузерді пайдалану"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Жұмыс браузерін пайдалану"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM желісінің құлпын ашатын PIN коды"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 313df92..aef2196 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យឧបករណ៍ចាប់សញ្ញារាងកាយ ដូចជាចង្វាក់បេះដូង សីតុណ្ហភាព និងភាគរយនៃអុកស៊ីសែនក្នុងឈាមជាដើម ខណៈពេលកំពុងប្រើកម្មវិធី។"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ចូលប្រើទិន្នន័យឧបករណ៍ចាប់សញ្ញារាងកាយ ដូចជាចង្វាក់បេះដូងជាដើម ខណៈពេលស្ថិតនៅផ្ទៃខាងក្រោយ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យឧបករណ៍ចាប់សញ្ញារាងកាយ ដូចជាចង្វាក់បេះដូង សីតុណ្ហភាព និងភាគរយនៃអុកស៊ីសែនក្នុងឈាមជាដើម ខណៈពេលដែលកម្មវិធីស្ថិតនៅផ្ទៃខាងក្រោយ។"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ចូលប្រើទិន្នន័យសីតុណ្ហភាពកដៃពីសេនស័ររាងកាយ នៅពេលកំពុងប្រើកម្មវិធី។"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យសីតុណ្ហភាពកដៃពីសេនស័ររាងកាយ នៅពេលកំពុងប្រើកម្មវិធី។"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ចូលប្រើទិន្នន័យសីតុណ្ហភាពកដៃពីសេនស័ររាងកាយ នៅពេលកម្មវិធីស្ថិតនៅផ្ទៃខាងក្រោយ។"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យសីតុណ្ហភាពកដៃពីសេនស័ររាងកាយ នៅពេលកម្មវិធីស្ថិតនៅផ្ទៃខាងក្រោយ។"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"អានព្រឹត្តិការណ៍ប្រតិទិន និងព័ត៌មានលម្អិត"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"កម្មវិធីនេះអាចធ្វើការអានព្រឹត្តិការណ៍ប្រតិទិនទាំងអស់ ដែលផ្ទុកនៅលើថេប្លេតរបស់អ្នក និងចែករំលែក ឬរក្សាទុកទិន្នន័យប្រតិទិនរបស់អ្នក។"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"កម្មវិធីនេះអាចអានព្រឹត្តិការណ៍ក្នុងប្រតិទិនទាំងអស់ដែលបានរក្សាទុកនៅក្នុងឧបករណ៍ Android TV របស់អ្នក និងចែករំលែក ឬរក្សាទុកទិន្នន័យប្រតិទិនរបស់អ្នក។"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"បានបោះបង់ប្រតិបត្តិការចាប់ផ្ទៃមុខ។"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"អ្នកប្រើប្រាស់បានបោះបង់ការដោះសោតាមទម្រង់មុខ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ព្យាយាមចូលច្រើនពេកហើយ។ សូមព្យាយាមម្តងទៀតពេលក្រោយ។"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ព្យាយាមដោះសោច្រើនដងពេក។ ការដោះសោតាមទម្រង់មុខត្រូវបានបិទ។"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ព្យាយាមដោះសោច្រើនដងពេក។ សូមបញ្ចូលការចាក់សោអេក្រង់ជំនួសវិញ។"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"មិនអាចផ្ទៀងផ្ទាត់មុខបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"អ្នកមិនបានរៀបចំការដោះសោតាមទម្រង់មុខទេ"</string>
@@ -1912,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"សំណើ SS ត្រូវបានប្ដូរទៅសំណើ USSD"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"បានប្ដូរទៅសំណើ SS ថ្មី"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"ការជូនដំណឹងអំពីការដាក់នុយ"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"ប្រវត្តិរូបការងារ"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"កម្រងព័ត៌មានការងារ"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"បានជូនដំណឹង"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"បានផ្ទៀងផ្ទាត់"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"ពង្រីក"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> មិនអាចប្រើបានទេនៅពេលនេះ។ វាស្ថិតក្រោមការគ្រប់គ្រងរបស់ <xliff:g id="APP_NAME_1">%2$s</xliff:g> ។"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ស្វែងយល់បន្ថែម"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ឈប់ផ្អាកកម្មវិធី"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"បើកកម្មវិធីការងារឬ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ទទួលបានសិទ្ធិចូលប្រើការជូនដំណឹង និងកម្មវិធីការងាររបស់អ្នក"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"បើក"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ឈប់ផ្អាកកម្មវិធីការងារឬ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ឈប់ផ្អាក"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ពេលមានអាសន្ន"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"សុំសិទ្ធិចូលប្រើប្រាស់កម្មវិធីការងារ និងការហៅរបស់អ្នក"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"មិនអាចប្រើកម្មវិធីនេះបានទេ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"មិនអាចប្រើ <xliff:g id="APP_NAME">%1$s</xliff:g> នៅពេលនេះបានទេ។"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"មិនអាចប្រើ <xliff:g id="ACTIVITY">%1$s</xliff:g> បានទេ"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ចុចដើម្បីបើក"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"គ្មានកម្មវិធីការងារទេ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"គ្មានកម្មវិធីផ្ទាល់ខ្លួនទេ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"បើក <xliff:g id="APP">%s</xliff:g> នៅក្នុងកម្រងព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នកឬ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"បើក <xliff:g id="APP">%s</xliff:g> នៅក្នុងកម្រងព័ត៌មានការងាររបស់អ្នកឬ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ប្រើកម្មវិធីរុករកតាមអ៊ីនធឺណិតផ្ទាល់ខ្លួន"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ប្រើកម្មវិធីរុករកតាមអ៊ីនធឺណិតសម្រាប់ការងារ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"កូដ PIN ដោះសោបណ្ដាញស៊ីម"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 9800ae1..2faf699 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -65,7 +65,7 @@
<string name="CnirMmi" msgid="885292039284503036">"ಕರೆ ಮಾಡುವ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="ThreeWCMmi" msgid="2436550866139999411">"ಮೂರು ಮಾರ್ಗದಲ್ಲಿ ಕರೆ ಮಾಡುವಿಕೆ"</string>
<string name="RuacMmi" msgid="1876047385848991110">"ಅನಪೇಕ್ಷಿತ ಕಿರಿಕಿರಿ ಮಾಡುವ ಕರೆಗಳ ತಿರಸ್ಕಾರ"</string>
- <string name="CndMmi" msgid="185136449405618437">"ಕರೆ ಮಾಡುವ ಸಂಖ್ಯೆಯ ವಿತರಣೆ"</string>
+ <string name="CndMmi" msgid="185136449405618437">"ಕರೆ ಮಾಡುವ ಸಂಖ್ಯೆಯ ಡೆಲಿವರಿ"</string>
<string name="DndMmi" msgid="8797375819689129800">"ಅಡಚಣೆ ಮಾಡಬೇಡ"</string>
<string name="CLIRDefaultOnNextCallOn" msgid="4511621022859867988">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="CLIRDefaultOnNextCallOff" msgid="5036749051007098105">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಿಲ್ಲ"</string>
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳನ್ನು <xliff:g id="DATE">%1$s</xliff:g> ರಂದು <xliff:g id="TIME">%2$s</xliff:g> ಸಮಯಕ್ಕೆ ನಿರ್ಬಂಧಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಐಟಿ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು <xliff:g id="NUMBER">%3$d</xliff:g> ದಿನಗಳಿಗಿಂತ ಹೆಚ್ಚು ಕಾಲ ಉಳಿಯಲು ಅನುಮತಿಸುವುದಿಲ್ಲ."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ಆನ್"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"ಕರೆಗಳು ಮತ್ತು ಸಂದೇಶಗಳು ಆಫ್ ಆಗಿವೆ"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳನ್ನು ನೀವು ವಿರಾಮಗೊಳಿಸಿದ್ದೀರಿ ನೀವು ಫೋನ್ ಕರೆಗಳು ಅಥವಾ ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ."</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳನ್ನು ನೀವು ವಿರಾಮಗೊಳಿಸಿದ್ದೀರಿ. ನೀವು ಫೋನ್ ಕರೆಗಳು ಅಥವಾ ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ."</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ ವಿರಾಮ ರದ್ದುಮಾಡಿ"</string>
<string name="me" msgid="6207584824693813140">"ನಾನು"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"ಟ್ಯಾಬ್ಲೆಟ್ ಆಯ್ಕೆಗಳು"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ಆ್ಯಪ್ ಬಳಕೆಯಲ್ಲಿರುವಾಗ ಹೃದಯ ಬಡಿತ, ತಾಪಮಾನ ಮತ್ತು ರಕ್ತದ ಆಮ್ಲಜನಕದ ಶೇಕಡಾವಾರು ಎಂಬಂತಹ ದೇಹದ ಸೆನ್ಸರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ಹಿನ್ನಲೆಯಲ್ಲಿರುವಾಗ ಹೃದಯ ಬಡಿತದಂತಹ ದೇಹದ ಸೆನ್ಸರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ಆ್ಯಪ್ ಹಿನ್ನಲೆಯಲ್ಲಿರುವಾಗ ಹೃದಯ ಬಡಿತ, ತಾಪಮಾನ ಮತ್ತು ರಕ್ತದ ಆಮ್ಲಜನಕದ ಶೇಕಡಾವಾರು ಎಂಬಂತಹ ದೇಹದ ಸೆನ್ಸರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ಆ್ಯಪ್ ಬಳಕೆಯಲ್ಲಿರುವಾಗ ದೇಹದ ಸೆನ್ಸರ್ನಿಂದ ಮಣಿಕಟ್ಟಿನ ತಾಪಮಾನದ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ಆ್ಯಪ್ ಬಳಕೆಯಲ್ಲಿರುವಾಗ ದೇಹದ ಸೆನ್ಸರ್ನಿಂದ ಮಣಿಕಟ್ಟಿನ ತಾಪಮಾನದ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ಆ್ಯಪ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿರುವಾಗ ದೇಹದ ಸೆನ್ಸರ್ನಿಂದ ಮಣಿಕಟ್ಟಿನ ತಾಪಮಾನದ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ಆ್ಯಪ್ ಹಿನ್ನೆಲೆಯಲ್ಲಿರುವಾಗ ದೇಹದ ಸೆನ್ಸರ್ನಿಂದ ಮಣಿಕಟ್ಟಿನ ತಾಪಮಾನದ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್ಗಳು ಮತ್ತು ವಿವರಗಳನ್ನು ಓದಿ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಎಲ್ಲಾ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್ಗಳನ್ನು ಓದಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಅಥವಾ ಉಳಿಸಬಹುದು."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಎಲ್ಲಾ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್ಗಳನ್ನು ಓದಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಅಥವಾ ಉಳಿಸಬಹುದು."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ಮುಖದ ಕಾರ್ಯಚರಣೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ಫೇಸ್ ಅನ್ಲಾಕ್ ಅನ್ನು ಬಳಕೆದಾರರು ರದ್ದುಗೊಳಿಸಿದ್ದಾರೆ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಫೇಸ್ ಅನ್ಲಾಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಬದಲಾಗಿ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ನಮೂದಿಸಿ."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ನೀವು ಫೇಸ್ ಅನ್ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿಲ್ಲ"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ಆ್ಯಪ್ನ ವೈಶಿಷ್ಟ್ಯಗಳ ಮಾಹಿತಿಯನ್ನು ವೀಕ್ಷಿಸಲು ಬಳಕೆದಾರರನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"ಹೆಚ್ಚಿನ ನಮೂನೆ ದರದಲ್ಲಿ ಸೆನ್ಸಾರ್ ಡೇಟಾ ಪ್ರವೇಶಿಸಿ"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"200 Hz ಗಿಂತಲೂ ಹೆಚ್ಚಿನ ವೇಗದಲ್ಲಿ ಸೆನ್ಸಾರ್ ಡೇಟಾದ ಮಾದರಿ ಪರೀಕ್ಷಿಸಲು ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸಿ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ಬಳಕೆದಾರರ ಕ್ರಿಯೆಯಿಲ್ಲದೆ ಆ್ಯಪ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"ಬಳಕೆದಾರರ ಕ್ರಿಯೆಯಿಲ್ಲದೆ ಈ ಹಿಂದೆ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಹೋಲ್ಡರ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"ಪಾಸ್ವರ್ಡ್ ನಿಮಯಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"ಪರದೆ ಲಾಕ್ನಲ್ಲಿನ ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಪಿನ್ಗಳ ಅನುಮತಿಸಲಾದ ಅಕ್ಷರಗಳ ಪ್ರಮಾಣವನ್ನು ನಿಯಂತ್ರಿಸಿ."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"ಪರದೆಯ ಅನ್ಲಾಕ್ ಪ್ರಯತ್ನಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ"</string>
@@ -1406,7 +1401,7 @@
<string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"ಇತರ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಪ್ರದರ್ಶಿಸುವಿಕೆ"</string>
<string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"<xliff:g id="NAME">%s</xliff:g> ಇತರೆ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ ಆಗುತ್ತದೆ"</string>
<string name="alert_windows_notification_title" msgid="6331662751095228536">"<xliff:g id="NAME">%s</xliff:g> ಇತರೆ ಆ್ಯಪ್ಗಳ ಮೇಲೆ ಡಿಸ್ಪ್ಲೇ ಆಗುತ್ತದೆ"</string>
- <string name="alert_windows_notification_message" msgid="6538171456970725333">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="alert_windows_notification_message" msgid="6538171456970725333">"<xliff:g id="NAME">%s</xliff:g> ಈ ಫೀಚರ್ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="alert_windows_notification_turn_off_action" msgid="7805857234839123780">"ಆಫ್ ಮಾಡಿ"</string>
<string name="ext_media_checking_notification_title" msgid="8299199995416510094">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…"</string>
<string name="ext_media_checking_notification_message" msgid="2231566971425375542">"ಪ್ರಸ್ತುತ ವಿಷಯವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ ಸದ್ಯಕ್ಕೆ ಲಭ್ಯವಿಲ್ಲ. ಇದನ್ನು <xliff:g id="APP_NAME_1">%2$s</xliff:g> ನಲ್ಲಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ಆ್ಯಪ್ ವಿರಾಮ ನಿಲ್ಲಿಸಿ"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ಕೆಲಸ ಆ್ಯಪ್ಗಳನ್ನು ಆನ್ ಮಾಡಬೇಕೆ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ನಿಮ್ಮ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಪಡೆಯಿರಿ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ಆನ್ ಮಾಡಿ"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ಕೆಲಸದ ಆ್ಯಪ್ ವಿರಾಮ ರದ್ದುಮಾಡಬೇಕೇ"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ವಿರಾಮವನ್ನು ರದ್ದುಗೊಳಿಸಿ"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ತುರ್ತು"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"ನಿಮ್ಮ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಕರೆಗಳಿಗೆ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಪಡೆಯಿರಿ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ಆ್ಯಪ್ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಇದೀಗ ಲಭ್ಯವಿಲ್ಲ."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ಲಭ್ಯವಿಲ್ಲ"</string>
@@ -2124,8 +2117,8 @@
<string name="mime_type_document_ext" msgid="2398002765046677311">"<xliff:g id="EXTENSION">%1$s</xliff:g> ಡಾಕ್ಯುಮೆಂಟ್"</string>
<string name="mime_type_spreadsheet" msgid="8188407519131275838">"ಸ್ಪ್ರೆಡ್ಶೀಟ್"</string>
<string name="mime_type_spreadsheet_ext" msgid="8720173181137254414">"<xliff:g id="EXTENSION">%1$s</xliff:g> ಸ್ಪ್ರೆಡ್ಶೀಟ್"</string>
- <string name="mime_type_presentation" msgid="1145384236788242075">"ಪ್ರಸ್ತುತಿ"</string>
- <string name="mime_type_presentation_ext" msgid="8761049335564371468">"<xliff:g id="EXTENSION">%1$s</xliff:g> ಪ್ರಸ್ತುತಿ"</string>
+ <string name="mime_type_presentation" msgid="1145384236788242075">"ಪ್ರೆಸೆಂಟೇಷನ್"</string>
+ <string name="mime_type_presentation_ext" msgid="8761049335564371468">"<xliff:g id="EXTENSION">%1$s</xliff:g> ಪ್ರೆಸೆಂಟೇಷನ್"</string>
<string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ನಲ್ಲಿರುವಾಗಲೂ ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿರುತ್ತದೆ"</string>
<string name="car_loading_profile" msgid="8219978381196748070">"ಲೋಡ್ ಆಗುತ್ತಿದೆ"</string>
<string name="file_count" msgid="3220018595056126969">"{count,plural, =1{{file_name} + # ಫೈಲ್}one{{file_name} + # ಫೈಲ್ಗಳು}other{{file_name} + # ಫೈಲ್ಗಳು}}"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ಆನ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ಯಾವುದೇ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳಿಲ್ಲ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್ಗಳಿಲ್ಲ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ನಲ್ಲಿ <xliff:g id="APP">%s</xliff:g> ಅನ್ನು ತೆರೆಯಬೇಕೆ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ನಲ್ಲಿ <xliff:g id="APP">%s</xliff:g> ಅನ್ನು ತೆರೆಯಬೇಕೆ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ವೈಯಕ್ತಿಕ ಬ್ರೌಸರ್ ಬಳಸಿ"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ಉದ್ಯೋಗ ಬ್ರೌಸರ್ ಬಳಸಿ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ನೆಟ್ವರ್ಕ್ ಅನ್ಲಾಕ್ ಮಾಡುವ ಪಿನ್"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 37c8bc7..b4c0599 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"앱이 사용 중에 심박수, 체온, 혈중 산소 농도와 같은 생체 신호 센서 데이터에 액세스하도록 허용합니다."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"백그라운드에서 심박수와 같은 생체 신호 센서 데이터에 액세스"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"앱이 백그라운드에서 심박수, 체온, 혈중 산소 농도와 같은 생체 신호 센서 데이터에 액세스하도록 허용합니다."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"앱 사용 중에 생체 신호 센서 손목 온도 데이터에 액세스합니다"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"앱이 사용 중에 생체 신호 센서 손목 온도 데이터에 액세스하도록 허용합니다."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"앱이 백그라운드에 있을 때 생체 신호 센서 손목 온도 데이터에 액세스합니다"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"앱이 백그라운드에서 생체 신호 센서 손목 온도 데이터에 액세스하도록 허용합니다."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"캘린더 일정 및 세부정보 읽기"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"이 앱은 태블릿에 저장된 모든 캘린더 일정을 읽고 캘린더 데이터를 공유하거나 저장할 수 있습니다."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"앱이 Android TV 기기에 저장된 모든 캘린더 일정을 읽고 캘린더 데이터를 공유하거나 저장할 수 있습니다."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"얼굴 인식 작업이 취소되었습니다."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"사용자가 얼굴 인식 잠금 해제를 취소했습니다."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"시도 횟수가 너무 많습니다. 나중에 다시 시도하세요."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"시도 횟수가 너무 많습니다. 얼굴 인식 잠금 해제가 사용 중지되었습니다."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"시도 횟수가 너무 많습니다. 화면 잠금을 대신 사용하세요."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"얼굴을 확인할 수 없습니다. 다시 시도하세요."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"얼굴 인식 잠금 해제를 설정하지 않았습니다."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"권한을 보유한 앱에서 앱의 기능 정보를 보도록 허용합니다."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"더 높은 샘플링 레이트로 센서 데이터 액세스"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"앱에서 200Hz보다 빠른 속도로 센서 데이터를 샘플링하도록 허용합니다."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"사용자 작업 없이 앱 업데이트"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"홀더가 사용자 작업 없이 이전에 설치된 앱을 업데이트하도록 허용합니다."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"비밀번호 규칙 설정"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"화면 잠금 비밀번호와 PIN에 허용되는 길이와 문자 수를 제어합니다."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"화면 잠금 해제 시도 모니터링"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>은(는) 현재 사용할 수 없습니다. <xliff:g id="APP_NAME_1">%2$s</xliff:g>에서 관리하는 앱입니다."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"자세히 알아보기"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"앱 일시중지 해제"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"직장 앱을 사용 설정하시겠습니까?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"직장 앱 및 알림에 액세스하세요."</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"사용 설정"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"직장 앱 일시중지를 해제하시겠습니까?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"일시중지 해제"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"긴급 전화"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"직장 앱 및 전화 통화에 대한 액세스를 요청하세요."</string>
<string name="app_blocked_title" msgid="7353262160455028160">"앱을 사용할 수 없습니다"</string>
<string name="app_blocked_message" msgid="542972921087873023">"현재 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱을 사용할 수 없습니다."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> 사용할 수 없음"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"탭하여 사용 설정"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"직장 앱 없음"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"개인 앱 없음"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"개인 프로필에서 <xliff:g id="APP">%s</xliff:g> 앱을 여시겠습니까?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"직장 프로필에서 <xliff:g id="APP">%s</xliff:g> 앱을 여시겠습니까?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"개인 브라우저 사용"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"직장 브라우저 사용"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 네트워크 잠금 해제 PIN"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 8d5bbe4..7b87b83 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Иштеп жатканда колдонмо дене сенсорлорунун көрсөткүчтөрүн, мисалы, жүрөктүн согушу, температура жана кандагы кычкылтектин пайызын көрө алат."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Фондо дене сенсорлорунун көрсөткүчтөрүн, мисалы, жүрөктүн согушун көрүү"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Колдонмо фондо дене сенсорлорунун көрсөткүчтөрүн, мисалы, жүрөктүн согушу, температура жана кандагы кычкылтектин пайызын көрө алат."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Колдонмо иштеп жатканда, дене сенсорлорунун температура тууралуу маалыматын көрүү."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Колдонмо иштеп жатканда, дене сенсорлорунун температура тууралуу маалыматын көрө алат."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Колдонмо фондо иштеп жатканда, дене сенсорлорунун температура тууралуу маалыматын көрүү."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Колдонмо фондо дене сенсорлорунун температура тууралуу маалыматын көрө алат."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Жылнаамадагы иш-чараларды жана алардын чоо-жайын окуу"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Бул колдонмо планшетиңизде сакталган жылнаамадагы иш-чаралардын баарын окуп жана андагы маалыматтарды бөлүшүп же сактай алат."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Бул колдонмо Android TV түзмөгүңүздө сакталган жылнаама иш-чараларынын баарын окуп, ошондой эле жылнаама дайындарын бөлүшүп же сактай алат."</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонду солго жылдырыңыз"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонду оңго жылдырыңыз"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Түзмөгүңүзгө түз караңыз."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Жүзүңүз көрүнбөй жатат. Телефонду көздөрүңүздүн деңгээлинде кармаңыз."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Жүзүңүз көрүнбөй жатат. Телефонду маңдайыңызга кармаңыз."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Кыймылдап жибердиңиз. Телефонду түз кармаңыз."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Жүзүңүздү кайра таанытыңыз."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Жүз таанылбай жатат. Кайталаңыз."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Жүздүн аныктыгын текшерүү жокко чыгарылды."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Жүзүнөн таанып ачуу функциясын колдонуучу өчүрүп салды"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Өтө көп жолу аракет жасадыңыз. Бир аздан кийин кайталап көрүңүз."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Өтө көп жолу аракет кылдыңыз. Жүзүнөн таанып ачуу функциясы өчүрүлдү."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Өтө көп жолу аракет кылдыңыз. Эрканды кулпулоо функциясын колдонуңуз."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Жүз ырасталбай жатат. Кайталап көрүңүз."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Жүзүнөн таанып ачуу функциясын жөндөй элексиз"</string>
@@ -1083,7 +1080,7 @@
<string name="menu_function_shortcut_label" msgid="2367112760987662566">"Function+"</string>
<string name="menu_space_shortcut_label" msgid="5949311515646872071">"боштук"</string>
<string name="menu_enter_shortcut_label" msgid="6709499510082897320">"enter"</string>
- <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"жок кылуу"</string>
+ <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"өчүрүү"</string>
<string name="search_go" msgid="2141477624421347086">"Издөө"</string>
<string name="search_hint" msgid="455364685740251925">"Издөө…"</string>
<string name="searchview_description_search" msgid="1045552007537359343">"Издөө"</string>
@@ -1149,7 +1146,7 @@
<string name="paste" msgid="461843306215520225">"Чаптоо"</string>
<string name="paste_as_plain_text" msgid="7664800665823182587">"Жөнөкөй текст катары чаптоо"</string>
<string name="replace" msgid="7842675434546657444">"Алмаштыруу…"</string>
- <string name="delete" msgid="1514113991712129054">"Жок кылуу"</string>
+ <string name="delete" msgid="1514113991712129054">"Өчүрүү"</string>
<string name="copyUrl" msgid="6229645005987260230">"URL көчүрмөлөө"</string>
<string name="selectTextMode" msgid="3225108910999318778">"Текст тандоо"</string>
<string name="undo" msgid="3175318090002654673">"Артка кайтаруу"</string>
@@ -1157,7 +1154,7 @@
<string name="autofill" msgid="511224882647795296">"Автотолтуруу"</string>
<string name="textSelectionCABTitle" msgid="5151441579532476940">"Текст тандоо"</string>
<string name="addToDictionary" msgid="8041821113480950096">"Сөздүккө кошуу"</string>
- <string name="deleteText" msgid="4200807474529938112">"Жок кылуу"</string>
+ <string name="deleteText" msgid="4200807474529938112">"Өчүрүү"</string>
<string name="inputMethod" msgid="1784759500516314751">"Киргизүү ыкмасы"</string>
<string name="editTextMenuTitle" msgid="857666911134482176">"Текст боюнча иштер"</string>
<string name="input_method_nav_back_button_desc" msgid="3655838793765691787">"Артка"</string>
@@ -1292,7 +1289,7 @@
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"Коңгуроо үнүнүн деңгээли"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"Чалуунун үн деңгээли"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"Мультимедианын катуулугу"</string>
- <string name="volume_icon_description_notification" msgid="579091344110747279">"Эскертме үнүнүн деңгээли"</string>
+ <string name="volume_icon_description_notification" msgid="579091344110747279">"Билдирменин үнүнүн катуулугу"</string>
<string name="ringtone_default" msgid="9118299121288174597">"Демейки шыңгыр"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"Демейки шыңгыр (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="397111123930141876">"Эч бир"</string>
@@ -1559,7 +1556,7 @@
<string name="date_picker_next_month_button" msgid="4858207337779144840">"Кийинки ай"</string>
<string name="keyboardview_keycode_alt" msgid="8997420058584292385">"Alt"</string>
<string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Айнуу"</string>
- <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Жок кылуу"</string>
+ <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Өчүрүү"</string>
<string name="keyboardview_keycode_done" msgid="2524518019001653851">"Даяр"</string>
<string name="keyboardview_keycode_mode_change" msgid="2743735349997999020">"Режимди өзгөртүү"</string>
<string name="keyboardview_keycode_shift" msgid="3026509237043975573">"Shift"</string>
@@ -1716,9 +1713,9 @@
<string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Кыска жолду өчүрүү"</string>
<string name="leave_accessibility_shortcut_on" msgid="6543362062336990814">"Кыска жолду колдонуу"</string>
<string name="color_inversion_feature_name" msgid="2672824491933264951">"Түстөрдү инверсиялоо"</string>
- <string name="color_correction_feature_name" msgid="7975133554160979214">"Түстөрдү тууралоо"</string>
+ <string name="color_correction_feature_name" msgid="7975133554160979214">"Түсүн тууралоо"</string>
<string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Бир кол режими"</string>
- <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Кошумча караңгылатуу"</string>
+ <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Дагы караңгы"</string>
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"Угуу түзмөктөрү"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Үндү катуулатуу/акырындатуу баскычтары басылып, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> күйгүзүлдү."</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Үндү катуулатуу/акырындатуу баскычтары басылып, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> өчүрүлдү."</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> колдонмосу учурда жеткиликсиз. Анын жеткиликтүүлүгү <xliff:g id="APP_NAME_1">%2$s</xliff:g> тарабынан башкарылат."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Кеңири маалымат"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Колдонмону иштетүү"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Жумуш колдонмолору күйгүзүлсүнбү?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Жумуш колдонмолоруңузга жана билдирмелериңизге мүмкүнчүлүк алыңыз"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Күйгүзүү"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Жумуш колдонмолорун иштетесизби?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Иштетүү"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Шашылыш чалуу"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Жумуш колдонмолоруңузга жана чалууларыңызга мүмкүнчүлүк алыңыз"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Колдонмо учурда жеткиликсиз"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> учурда жеткиликсиз"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> жеткиликсиз"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Күйгүзүү үчүн таптап коюңуз"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жумуш колдонмолору жок"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке колдонмолор жок"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> колдонмосу жеке профилде ачылсынбы?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> колдонмосу жумуш профилинде ачылсынбы?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Жеке серепчини колдонуу"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Жумуш серепчисин колдонуу"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM карта тармагынын кулпусун ачуучу PIN код"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index ca879a3..49b7732 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -208,9 +208,9 @@
<string name="personal_apps_suspension_text" msgid="6115455688932935597">"ແອັບສ່ວນຕົວຂອງທ່ານຈະຖືກບລັອກໄວ້ຈົນກວ່າທ່ານຈະເປີດໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ"</string>
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"ແອັບສ່ວນຕົວຈະຖືກບລັອກໃນວັນທີ <xliff:g id="DATE">%1$s</xliff:g> ເວລາ <xliff:g id="TIME">%2$s</xliff:g>. ຜູ້ເບິ່ງແຍງລະບົບໄອທີຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ປິດໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານເກີນ <xliff:g id="NUMBER">%3$d</xliff:g> ມື້."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ເປີດໃຊ້"</string>
- <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"ໂທ ແລະ ຂໍ້ຄວາມປິດຢູ່"</string>
+ <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"ປິດການໂທ ແລະ ຂໍ້ຄວາມໄວ້ແລ້ວ"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"ທ່ານໄດ້ຢຸດແອັບບ່ອນເຮັດວຽກໄວ້ຊົ່ວຄາວແລ້ວ. ທ່ານຈະບໍ່ໄດ້ຮັບການໂທທາງໂທລະສັບ ຫຼື ຂໍ້ຄວາມ."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ແອັບບ່ອນເຮັດວຽກເຊົາຢຸດໄວ້ຊົ່ວຄາວ"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ຍົກເລີກການຢຸດແອັບເຮັດວຽກຊົ່ວຄາວ"</string>
<string name="me" msgid="6207584824693813140">"ຂ້າພະເຈົ້າ"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"ໂຕເລືອກແທັບເລັດ"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"ຕົວເລືອກ Android TV"</string>
@@ -262,7 +262,7 @@
<string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"ໂໝດປິດສຽງ"</string>
<string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"ປິດສຽງແລ້ວ"</string>
<string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"ເປິດສຽງແລ້ວ"</string>
- <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"ໂໝດໃນຍົນ"</string>
+ <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"ໂໝດຢູ່ໃນຍົນ"</string>
<string name="global_actions_airplane_mode_on_status" msgid="5508025516695361936">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ"</string>
<string name="global_actions_airplane_mode_off_status" msgid="8522219771500505475">"ປິດໂໝດໃນຍົນແລ້ວ"</string>
<string name="global_action_settings" msgid="4671878836947494217">"ການຕັ້ງຄ່າ"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນເຊັນເຊີຮ່າງກາຍ, ເຊັ່ນ: ອັດຕາການເຕັ້ນຫົວໃຈ, ອຸນຫະພູມ ແລະ ເປີເຊັນອອກຊິເຈນໃນເລືອດ, ໃນຂະນະທີ່ໃຊ້ແອັບຢູ່."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ເຂົ້າເຖິງຂໍ້ມູນເຊັນເຊີຮ່າງກາຍ, ເຊັ່ນ: ອັດຕາການເຕັ້ນຫົວໃຈ, ໃນຂະນະທີ່ແອັບຢູ່ໃນພື້ນຫຼັງ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນເຊັນເຊີຮ່າງກາຍ, ເຊັ່ນ: ອັດຕາການເຕັ້ນຫົວໃຈ, ອຸນຫະພູມ ແລະ ເປີເຊັນອອກຊິເຈນໃນເລືອດ, ໃນຂະນະທີ່ແອັບຢູ່ໃນພື້ນຫຼັງ."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ເຂົ້າເຖິງຂໍ້ມູນອຸນຫະພູມຢູ່ຂໍ້ມືຈາກເຊັນເຊີຮ່າງກາຍໃນຂະນະທີ່ນຳໃຊ້ແອັບ."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນອຸນຫະພູມຢູ່ຂໍ້ມືຈາກເຊັນເຊີຮ່າງກາຍໃນຂະນະທີ່ນຳໃຊ້ແອັບ."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ເຂົ້າເຖິງຂໍ້ມູນອຸນຫະພູມຢູ່ຂໍ້ມືຈາກເຊັນເຊີຮ່າງກາຍໃນຂະນະທີ່ແອັບເຮັດວຽກໃນພື້ນຫຼັງ."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນອຸນຫະພູມຢູ່ຂໍ້ມືຈາກເຊັນເຊີຮ່າງກາຍໃນຂະນະທີ່ແອັບເຮັດວຽກໃນພື້ນຫຼັງ."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Read calendar events and details"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"This app can read all calendar events stored on your tablet and share or save your calendar data."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ແອັບນີ້ສາມາດອ່ານນັດໝາຍປະຕິທິນທັງໝົດທີ່ບັນທຶກໄວ້ຢູ່ອຸປະກອນ Android TV ຂອງທ່ານ ແລະ ແບ່ງປັນ ຫຼື ບັນທຶກຂໍ້ມູນປະຕິທິນຂອງທ່ານ."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ຍົກເລີກການດຳເນີນການກັບໃບໜ້າແລ້ວ."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ຜູ້ໃຊ້ຍົກເລີກການປົດລັອກດ້ວຍໜ້າແລ້ວ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ມີຄວາມພະຍາຍາມຫຼາຍຄັ້ງເກີນໄປ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ປິດການນຳໃຊ້ການປົດລັອກດ້ວຍໜ້າແລ້ວ."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ກະລຸນາເຂົ້າການລັອກໜ້າຈໍແທນ."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ບໍ່ສາມາດຢັ້ງຢືນໃບໜ້າໄດ້. ກະລຸນາລອງໃໝ່."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ທ່ານຍັງບໍ່ໄດ້ຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າເທື່ອ"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ບໍ່ສາມາດໃຊ້ໄດ້ໃນຕອນນີ້. ມັນຖືກຈັດການໂດຍ <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ສຶກສາເພີ່ມເຕີມ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ຍົກເລີກການຢຸດແອັບຊົ່ວຄາວ"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ເປີດໃຊ້ແອັບບ່ອນເຮັດວຽກບໍ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ຮັບສິດເຂົ້າເຖິງແອັບບ່ອນເຮັດວຽກ ແລະ ການແຈ້ງເຕືອນຂອງທ່ານ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ເປີດ"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ຍົກເລີກການຢຸດຊົ່ວຄາວແອັບບ່ອນເຮັດວຽກບໍ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ຍົກເລີກການຢຸດຊົ່ວຄາວ"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ສຸກເສີນ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"ຮັບສິດເຂົ້າເຖິງແອັບບ່ອນເຮັດວຽກ ແລະ ການໂທຂອງທ່ານ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ແອັບບໍ່ສາມາດໃຊ້ໄດ້"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ສາມາດໃຊ້ໄດ້ໃນຕອນນີ້."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"ບໍ່ສາມາດໃຊ້ <xliff:g id="ACTIVITY">%1$s</xliff:g> ໄດ້"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ແຕະເພື່ອເປີດໃຊ້"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ບໍ່ມີແອັບບ່ອນເຮັດວຽກ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ບໍ່ມີແອັບສ່ວນຕົວ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"ເປີດ <xliff:g id="APP">%s</xliff:g> ໃນໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານບໍ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"ເປີດ <xliff:g id="APP">%s</xliff:g> ໃນໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານບໍ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ໃຊ້ໂປຣແກຣມທ່ອງເວັບສ່ວນຕົວ"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ໃຊ້ໂປຣແກຣມທ່ອງເວັບບ່ອນເຮັດວຽກ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ປົດລັອກເຄືອຂ່າຍຊິມ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 20e1f87..11cd09d 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Leidžiama programai pasiekti kūno jutiklių duomenis, pvz., pulso dažnį, temperatūrą ir deguonies procentinę dalį kraujyje, kai programa naudojama."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Prieiga prie kūno jutiklių duomenų, pvz., pulso dažnio, kai veikia fone"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Leidžiama programai pasiekti kūno jutiklių duomenis, pvz., pulso dažnį, temperatūrą ir deguonies procentinę dalį kraujyje, kai programa veikia fone."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Pasiekti kūno jutiklio riešo temperatūros duomenis, kol programa naudojama."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Leidžiama programai pasiekti kūno jutiklio riešo temperatūros duomenis, kol programa naudojama."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Pasiekti kūno jutiklio riešo temperatūros duomenis, kol programa veikia fone."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Leidžiama programai pasiekti kūno jutiklio riešo temperatūros duomenis, kol programa veikia fone."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Skaityti kalendoriaus įvykius arba išsamią informaciją"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ši programa gali nuskaityti visus planšetiniame kompiuteryje saugomus kalendoriaus įvykius ir bendrinti arba išsaugoti kalendoriaus duomenis."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ši programa gali nuskaityti visus „Android TV“ įrenginyje saugomus kalendoriaus įvykius ir bendrinti arba išsaugoti kalendoriaus duomenis."</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Veido atpažinimo operacija atšaukta."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Atrakinimą pagal veidą atšaukė naudotojas"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Per daug bandymų. Vėliau bandykite dar kartą."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Per daug bandymų. Atrakinimas pagal veidą išjungtas."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Per daug bandymų. Geriau naudokite ekrano užraktą."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nepavyko patvirtinti veido. Bandykite dar kartą."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Nenustatėte atrakinimo pagal veidą"</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Savininkui leidžiama pradėti programos funkcijų informacijos peržiūrą."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"pasiekti jutiklių duomenis dideliu skaitmeninimo dažniu"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Programai leidžiama skaitmeninti jutiklių duomenis didesniu nei 200 Hz dažniu"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"atnaujinti programą be naudotojo veiksmo"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Leidžiama kūrėjui atnaujinti programą, jei prieš tai ji buvo įdiegta be naudotojo veiksmo"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Nustatyti slaptažodžio taisykles"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Valdykite, kokio ilgio ekrano užrakto slaptažodžius ir PIN kodus galima naudoti."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Stebėti bandymus atrakinti ekraną"</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Programa „<xliff:g id="APP_NAME_0">%1$s</xliff:g>“ šiuo metu nepasiekiama. Tai tvarkoma naudojant programą „<xliff:g id="APP_NAME_1">%2$s</xliff:g>“."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Sužinoti daugiau"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Atšaukti programos pristabdymą"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Įjungti darbo programas?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pasiekite darbo programas ir pranešimus"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Įjungti"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Atš. darbo progr. pristabd.?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Atšaukti pristabdymą"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Pagalbos tarnyba"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Pasiekite darbo programas ir skambučius"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Programa nepasiekiama."</string>
<string name="app_blocked_message" msgid="542972921087873023">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ šiuo metu nepasiekiama."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"„<xliff:g id="ACTIVITY">%1$s</xliff:g>“ nepasiekiama"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Paliesti, norint įjungti"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nėra darbo programų"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nėra asmeninių programų"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Atidaryti „<xliff:g id="APP">%s</xliff:g>“ asmeniniame profilyje?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Atidaryti „<xliff:g id="APP">%s</xliff:g>“ darbo profilyje?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Naudoti asmeninę naršyklę"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Naudoti darbo naršyklę"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tinklo operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 14df78f..b72502e 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Ļauj lietotnei piekļūt ķermeņa sensoru datiem, piemēram, sirdsdarbības ātrumam, temperatūrai un procentuālajam skābekļa daudzumam asinīs, kamēr lietotne tiek izmantota."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Piekļuve ķermeņa sensoru datiem, piemēram, sirdsdarbības ātrumam, fonā"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Ļauj lietotnei piekļūt ķermeņa sensoru datiem, piemēram, sirdsdarbības ātrumam, temperatūrai un procentuālajam skābekļa daudzumam asinīs, kamēr lietotne darbojas fonā."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Piekļuve ķermeņa sensora noteiktajiem plaukstas locītavas temperatūras datiem, kamēr lietotne tiek izmantota."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Ļauj lietotnei piekļūt ķermeņa sensora noteiktajiem plaukstas locītavas temperatūras datiem, kamēr lietotne tiek izmantota."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Piekļuve ķermeņa sensora noteiktajiem plaukstas locītavas temperatūras datiem, kamēr lietotne darbojas fonā."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Ļauj lietotnei piekļūt ķermeņa sensora noteiktajiem plaukstas locītavas temperatūras datiem, kamēr lietotne darbojas fonā."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lasīt kalendāra pasākumus un informāciju"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Šī lietotne var lasīt visus kalendāra pasākumus, kas saglabāti planšetdatorā, un kopīgot vai saglabāt jūsu kalendāra datus."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Šī lietotne var lasīt visus kalendāra pasākumus, kas saglabāti Android TV ierīcē, un kopīgot vai saglabāt jūsu kalendāra datus."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Darbība ar sejas datiem atcelta."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Lietotājs atcēla autorizāciju pēc sejas."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Pārāk daudz mēģinājumu. Vēlāk mēģiniet vēlreiz."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Pārāk daudz mēģinājumu. Autorizācija pēc sejas ir atspējota."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Pārāk daudz mēģinājumu. Tā vietā ievadiet ekrāna bloķēšanas akreditācijas datus."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nevar verificēt seju. Mēģiniet vēlreiz."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Autorizācija pēc sejas nav iestatīta."</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Lietotne ar šo atļauju var skatīt informāciju par citas lietotnes funkcijām."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"piekļuve sensoru datiem, izmantojot augstu iztveršanas frekvenci"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Ļauj lietotnei iztvert sensoru datus, izmantojot frekvenci, kas ir augstāka par 200 Hz."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"atjaunināt lietotni bez lietotāja darbības"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Atļauj īpašniekam atjaunināt iepriekš instalēto lietotni bez lietotāja darbības"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Paroles kārtulu iestatīšana"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolēt ekrāna bloķēšanas paroļu un PIN garumu un tajos atļautās rakstzīmes."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Ekrāna atbloķēšanas mēģinājumu pārraudzīšana"</string>
@@ -1957,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pašlaik nav pieejama. Šo darbību pārvalda <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Uzzināt vairāk"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Atsākt lietotnes darbību"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vai ieslēgt darba lietotnes?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Iegūstiet piekļuvi darba lietotnēm un paziņojumiem"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ieslēgt"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Vai aktivizēt darba lietotnes?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Aktivizēt"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Ārkārtas zvans"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Iegūstiet piekļuvi darba lietotnēm un zvaniem"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Lietotne nav pieejama"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pašlaik nav pieejama."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nav pieejams"</string>
@@ -2171,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Lai ieslēgtu, pieskarieties"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nav darba lietotņu"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nav personīgu lietotņu"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vai atvērt lietotni <xliff:g id="APP">%s</xliff:g> jūsu personīgajā profilā?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vai atvērt lietotni <xliff:g id="APP">%s</xliff:g> jūsu darba profilā?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Izmantot personīgo pārlūku"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Izmantot darba pārlūku"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tīkla atbloķēšanas PIN"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index b13ce62..8c0cf6d 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Дозволува апликацијата да пристапува до податоци од телесните сензори, како што се пулс, температура и процент на кислород во телото, додека се користи апликацијата."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Пристап до податоци од телесните сензори, како пулсот, додека работи во заднина"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Дозволува апликацијата да пристапува до податоци од телесните сензори, како што се пулс, температура и процент на кислород во телото, додека апликацијата работи во заднина."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Пристап до податоците за температура на зглобот од телесниот сензор додека се користи апликацијата."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Дозволува апликацијата да пристапува до податоците за температура на зглобот од телесниот сензор додека се користи апликацијата."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Пристап до податоците за температура на зглобот од телесниот сензор додека апликацијата работи во заднина."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Дозволува апликацијата да пристапува до податоците за температура на зглобот од телесниот сензор додека апликацијата работи во заднина."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Чита настани и детали од календарот"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Апликацијава може да ги чита сите настани во календарот складирани во вашиот таблет и да ги споделува или зачувува податоците од календарот."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Апликацијава може да ги чита сите настани во календарот складирани во вашиот уред Android TV и да ги споделува или зачувува податоците од календарот."</string>
@@ -675,7 +671,7 @@
<string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"За да користите „Отклучување со лик“, вклучете "<b>"Пристап до камерата"</b>" во „Поставки > Приватност“"</string>
<string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Поставете уште начини за отклучување"</string>
<string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Допрете за да додадете отпечаток"</string>
- <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Отклучување со отпечаток на прст"</string>
+ <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Отклучување со отпечаток"</string>
<string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не може да се користи сензорот за отпечатоци"</string>
<string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Однесете го на поправка."</string>
<string name="face_acquired_insufficient" msgid="6889245852748492218">"Не може да создаде модел на лик. Обидете се пак."</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Поместете го телефонот налево"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Поместете го телефонот надесно"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Погледнете подиректно во уредот."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не ви се гледа лицето. Држете го телефонот во висина на очите."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не ви се гледа ликот. Држете го телефонот во висина на очите."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Премногу движење. Држете го телефонот стабилно."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Повторно регистрирајте го лицето."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Не се препознава ликот. Обидете се пак."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Операцијата со лице се откажа."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Корисникот го откажа „Отклучувањето со лик“"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Премногу обиди. Обидете се повторно подоцна."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Премногу обиди. „Отклучувањето со лик“ е оневозможено."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Премногу обиди. Наместо тоа, користете го заклучувањето на екранот."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Ликот не може да се потврди. Обидете се повторно."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Не сте поставиле „Отклучување со лик“"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"му дозволува на сопственикот да почне со прегледување на податоците за функциите за некоја апликација"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"пристапува до податоците со висока фреквенција на семпл"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Дозволува апликацијата да пристапува до податоците од сензорите со фреквенција на семпл поголема од 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ажурирај ја апликацијата без дејство од корисникот"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Дозволува сопственикот да ја ажурира апликацијата што претходно ја инсталирал без дејство од корисникот"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Постави правила за лозинката"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Контролирај ги должината и знаците што се дозволени за лозинки и PIN-броеви за отклучување екран."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Следи ги обидите за отклучување на екранот"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Апликацијата <xliff:g id="APP_NAME_0">%1$s</xliff:g> не е достапна во моментов. Со ова управува <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Дознај повеќе"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Прекини ја паузата"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Да се вклучат работни апликации?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Добијте пристап до вашите работни апликации и известувања"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Вклучи"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Да се актив. работните аплик.?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Прекини ја паузата"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Итен случај"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Добијте пристап до вашите работни апликации и повици"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Апликацијата не е достапна"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> не е достапна во моментов."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> е недостапна"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Допрете за да вклучите"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема работни апликации"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема лични апликации"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Да се отвори <xliff:g id="APP">%s</xliff:g> во личниот профил?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Да се отвори <xliff:g id="APP">%s</xliff:g> во работниот профил?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи личен прелистувач"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи работен прелистувач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за отклучување на мрежата на SIM-картичката"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index e8f0b52..7ba5181 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -209,8 +209,8 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"വ്യക്തിപര ആപ്പുകൾ <xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>-ന് ബ്ലോക്ക് ചെയ്യപ്പെടും. നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ <xliff:g id="NUMBER">%3$d</xliff:g> ദിവസത്തിൽ കൂടുതൽ ഓഫായ നിലയിൽ തുടരാൻ നിങ്ങളുടെ ഐടി അഡ്മിൻ അനുവദിക്കുന്നില്ല."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ഓണാക്കുക"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"കോളുകളും സന്ദേശങ്ങളും ഓഫാണ്"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"നിങ്ങൾ ഔദ്യോഗിക ആപ്പുകൾ താൽകാലികമായി നിർത്തി. നിങ്ങൾക്ക് ഫോൺ കോളുകളോ ടെക്സ്റ്റ് സന്ദേശങ്ങളോ ലഭിക്കില്ല."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"വർക്ക് ആപ്പ് ഓണാക്കൂ"</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"നിങ്ങൾ Work ആപ്പുകൾ താൽകാലികമായി നിർത്തി. നിങ്ങൾക്ക് ഫോൺ കോളുകളോ ടെക്സ്റ്റ് സന്ദേശങ്ങളോ ലഭിക്കില്ല."</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Work ആപ്പ് ഓണാക്കൂ"</string>
<string name="me" msgid="6207584824693813140">"ഞാന്"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"ടാബ്ലെറ്റ് ഓപ്ഷനുകൾ"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Android TV ഓപ്ഷനുകൾ"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ആപ്പ് ഉപയോഗത്തിലുള്ളപ്പോൾ അതിനെ ഹൃദയമിടിപ്പ്, ശരീരോഷ്മാവ്, രക്തത്തിലെ ഓക്സിജൻ ശതമാനം എന്നിവ പോലുള്ള ബോഡി സെൻസർ ഡാറ്റ ആക്സസ് ചെയ്യാൻ അനുവദിക്കുന്നു."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"പശ്ചാത്തലത്തിലുള്ളപ്പോൾ ഹൃദയമിടിപ്പ് പോലുള്ള ബോഡി സെൻസർ ഡാറ്റ ആക്സസ് ചെയ്യുക"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ആപ്പ് പശ്ചാത്തലത്തിലുള്ളപ്പോൾ അതിനെ ഹൃദയമിടിപ്പ്, ശരീരോഷ്മാവ്, രക്തത്തിലെ ഓക്സിജൻ ശതമാനം എന്നിവ പോലുള്ള ബോഡി സെൻസർ ഡാറ്റ ആക്സസ് ചെയ്യാൻ അനുവദിക്കുന്നു."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"കണങ്കയ്യിലൂടെ അറിയാനാകുന്ന ശരീരോഷ്മാവ് സംബന്ധിച്ച ബോഡി സെൻസർ ഡാറ്റ, ആപ്പ് പ്രവർത്തിച്ചുകൊണ്ടിരിക്കുമ്പോൾ ആക്സസ് ചെയ്യുക."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"കണങ്കയ്യിലൂടെ അറിയാനാകുന്ന ശരീരോഷ്മാവ് സംബന്ധിച്ച ബോഡി സെൻസർ ഡാറ്റ, ആപ്പ് പ്രവർത്തിച്ചുകൊണ്ടിരിക്കുമ്പോൾ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"കണങ്കയ്യിലൂടെ അറിയാനാകുന്ന ശരീരോഷ്മാവ് സംബന്ധിച്ച ബോഡി സെൻസർ ഡാറ്റ, ആപ്പ് പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുമ്പോൾ ആക്സസ് ചെയ്യുക."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"കണങ്കയ്യിലൂടെ അറിയാനാകുന്ന ശരീരോഷ്മാവ് സംബന്ധിച്ച ബോഡി സെൻസർ ഡാറ്റ, ആപ്പ് പശ്ചാത്തലത്തിൽ പ്രവർത്തിക്കുമ്പോൾ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"കലണ്ടർ ഇവന്റുകളും വിശദാംശങ്ങളും വായിക്കുക"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ഈ ആപ്പിന് നിങ്ങളുടെ ടാബ്ലെറ്റിൽ സംഭരിച്ചിരിക്കുന്ന എല്ലാ കലണ്ടർ ഇവന്റുകളും വായിക്കാനും നിങ്ങളുടെ കലണ്ടർ വിവരങ്ങൾ പങ്കിടാനും അല്ലെങ്കിൽ സംരക്ഷിക്കാനും കഴിയും."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ഈ ആപ്പിന് നിങ്ങളുടെ Android TV-യിൽ സംഭരിച്ചിരിക്കുന്ന എല്ലാ കലണ്ടർ ഇവന്റുകളും വായിക്കാനും നിങ്ങളുടെ കലണ്ടർ ഡാറ്റ പങ്കിടാനോ സംരക്ഷിക്കാനോ സാധിക്കുകയും ചെയ്യും."</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"ഫോൺ നിങ്ങളുടെ ഇടതുവശത്തേക്ക് നീക്കുക"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"ഫോൺ നിങ്ങളുടെ വലതുവശത്തേക്ക് നീക്കുക"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"നിങ്ങളുടെ ഉപകരണത്തിന് നേരെ കൂടുതൽ നന്നായി നോക്കുക."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"നിങ്ങളുടെ മുഖം കാണാനാകുന്നില്ല. നിങ്ങളുടെ ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"മുഖം കാണാനാകുന്നില്ല. ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"മുഖം തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"മുഖത്തിന്റെ പ്രവർത്തനം റദ്ദാക്കി."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ഉപയോക്താവ് ഫെയ്സ് അൺലോക്ക് റദ്ദാക്കി"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"നിരവധി തവണ ശ്രമിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"നിരവധി ശ്രമങ്ങൾ. ഫെയ്സ് അൺലോക്ക് പ്രവർത്തനരഹിതമാക്കി."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"നിരവധി ശ്രമങ്ങൾ. പകരം സ്ക്രീൻ ലോക്ക് നൽകുക."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"നിങ്ങൾ ഫെയ്സ് അൺലോക്ക് സജ്ജീകരിച്ചിട്ടില്ല"</string>
@@ -1912,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS അഭ്യർത്ഥന, USSD അഭ്യർത്ഥനയിലേക്ക് മാറ്റി"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"പുതിയ SS അഭ്യർത്ഥനയിലേക്ക് മാറ്റി"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"ഫിഷിംഗ് മുന്നറിയിപ്പ്"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"ഔദ്യോഗിക പ്രൊഫൈൽ"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"Work പ്രൊഫൈൽ"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"മുന്നറിയിപ്പ് നൽകി"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"പരിശോധിച്ചുറപ്പിച്ചത്"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"വികസിപ്പിക്കുക"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ഇപ്പോൾ ലഭ്യമല്ല. <xliff:g id="APP_NAME_1">%2$s</xliff:g> ആണ് ഇത് മാനേജ് ചെയ്യുന്നത്."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"കൂടുതലറിയുക"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ആപ്പ് പുനഃരാംഭിക്കുക"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ഔദ്യോഗിക ആപ്പുകൾ ഓണാക്കണോ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"നിങ്ങളുടെ ഔദ്യോഗിക ആപ്പുകളിലേക്കും അറിയിപ്പുകളിലേക്കും ആക്സസ് നേടുക"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ഓണാക്കുക"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"വർക്ക് ആപ്പുകൾ പുനരാരംഭിക്കണോ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"പുനരാരംഭിക്കുക"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"അടിയന്തരം"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"നിങ്ങളുടെ ഔദ്യോഗിക ആപ്പുകളിലേക്കും കോളുകളിലേക്കും ആക്സസ് നേടുക"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ആപ്പ് ലഭ്യമല്ല"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ഇപ്പോൾ ലഭ്യമല്ല."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ലഭ്യമല്ല"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ഔദ്യോഗിക ആപ്പുകൾ ഇല്ല"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"വ്യക്തിപര ആപ്പുകൾ ഇല്ല"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g>, നിങ്ങളുടെ വ്യക്തിപരമായ പ്രൊഫൈലിൽ തുറക്കണോ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g>, നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിൽ തുറക്കണോ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"വ്യക്തിപരമായ ബ്രൗസർ ഉപയോഗിക്കുക"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ഔദ്യോഗിക ബ്രൗസർ ഉപയോഗിക്കുക"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"സിം നെറ്റ്വർക്ക് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 6621f94..f5f7851 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Аппыг ашиглаж байх үедээ зүрхний хэм, температур болон цусны хүчилтөрөгчийн хувь зэрэг биеийн мэдрэгчийн өгөгдөлд хандах боломжтой."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Ард нь байх үед зүрхний хэм зэрэг биеийн мэдрэгчийн өгөгдөлд хандаарай"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Апп ард нь байх үед зүрхний хэм, температур, цусны хүчилтөрөгчийн хувь зэрэг биеийн мэдрэгчийн өгөгдөлд хандах боломжтой."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Аппыг ашиглаж байх үед биеийн мэдрэгчийн бугуйн температурын өгөгдөлд хандана."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Аппыг ашиглаж байх үед биеийн мэдрэгчийн бугуйн температурын өгөгдөлд хандахыг аппад зөвшөөрнө."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Аппыг ард байх үед биеийн мэдрэгчийн бугуйн температурын өгөгдөлд хандана."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Аппыг ард байх үед биеийн мэдрэгчийн бугуйн температурын өгөгдөлд хандахыг аппад зөвшөөрнө."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Календарийн арга хэмжээ, дэлгэрэнгүйг унших"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Энэ апп таны таблетад хадгалсан календарийн бүх арга хэмжээг унших, календарийн өгөгдлийг хуваалцах, хадгалах боломжтой."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Энэ апп таны Android TV төхөөрөмжид хадгалсан календарийн бүх арга хэмжээг унших болон таны календарийн өгөгдлийг хуваалцах эсвэл хадгалах боломжтой."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Царайны үйл ажиллагааг цуцаллаа."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Хэрэглэгч Царайгаар түгжээ тайлахыг цуцалсан"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Хэт олон удаа оролдлоо. Дараа дахин оролдоно уу."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Хэт олон удаа оролдлоо. Царайгаар түгжээ тайлахыг идэвхгүй болгосон."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Хэт олон удаа оролдлоо. Оронд нь дэлгэцийн түгжээ оруулна уу."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Царайг бататгаж чадсангүй. Дахин оролдоно уу."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Та Царайгаар түгжээ тайлахыг тохируулаагүй байна"</string>
@@ -1509,7 +1506,7 @@
<string name="vpn_lockdown_config" msgid="8331697329868252169">"Сүлжээ эсвэл VPN тохиргоог өөрчлөх"</string>
<string name="upload_file" msgid="8651942222301634271">"Файл сонгох"</string>
<string name="no_file_chosen" msgid="4146295695162318057">"Сонгосон файл байхгүй"</string>
- <string name="reset" msgid="3865826612628171429">"Бүгдийг цэвэрлэх"</string>
+ <string name="reset" msgid="3865826612628171429">"Шинэчлэх"</string>
<string name="submit" msgid="862795280643405865">"Илгээх"</string>
<string name="car_mode_disable_notification_title" msgid="8450693275833142896">"Жолоо барих апп ажиллаж байна"</string>
<string name="car_mode_disable_notification_message" msgid="8954550232288567515">"Жолооны аппаас гарахын тулд товшино уу."</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> одоогоор боломжгүй байна. Үүнийг <xliff:g id="APP_NAME_1">%2$s</xliff:g>-р удирддаг."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Дэлгэрэнгүй үзэх"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Аппыг түр зогсоохоо болих"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ажлын аппуудыг асаах уу?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Ажлын аппууд болон мэдэгдлүүддээ хандах эрх аваарай"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Асаах"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Ажлын аппыг үргэлжлүүлэх үү?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Үргэлжлүүлэх"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Яаралтай тусламж"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Ажлын аппууд болон дуудлагууддаа хандах эрх аваарай"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Апп боломжгүй байна"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> яг одоо боломжгүй байна."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> боломжгүй байна"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Асаахын тулд товших"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ямар ч ажлын апп байхгүй байна"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ямар ч хувийн апп байхгүй байна"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Хувийн профайл дээрээ <xliff:g id="APP">%s</xliff:g>-г нээх үү?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Ажлын профайл дээрээ <xliff:g id="APP">%s</xliff:g>-г нээх үү?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Хувийн хөтөч ашиглах"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ажлын хөтөч ашиглах"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Сүлжээний SIM-н түгжээг тайлах ПИН"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 83e33c5..eeba652 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ॲप वापरात असताना हार्ट रेट, तापमान आणि रक्तातील ऑक्सिजनची टक्केवारी यांसारखा शरीर सेन्सर डेटा अॅक्सेस करण्याची अनुमती ॲपला देते."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"बॅकग्राउंडमध्ये असताना, हार्ट रेट यासारखा शरीर सेन्सर डेटा अॅक्सेस करा"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ॲप हे बॅकग्राउंडमध्ये असताना हार्ट रेट, तापमान आणि रक्तातील ऑक्सिजनची टक्केवारी यांसारखा शरीर सेन्सर डेटा अॅक्सेस करण्याची अनुमती ॲपला द्या."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ॲप वापरात असताना, शरीर सेन्सर मनगट तापमान डेटा अॅक्सेस करा."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ॲप वापरात असताना, शरीर सेन्सर मनगट तापमान डेटा अॅक्सेस करण्याची ॲपला अनुमती देते."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ॲप बॅकग्राउंडमध्ये असताना, शरीर सेन्सर मनगट तापमान डेटा अॅक्सेस करा."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ॲप बॅकग्राउंडमध्ये असताना, शरीर सेन्सर मनगट तापमान डेटा अॅक्सेस करण्याची ॲपला अनुमती देते."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"कॅलेंडर इव्हेंट आणि तपशील वाचा"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"हा अॅप आपल्या टॅब्लेटवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि शेअर करू शकतो किंवा तुमचा कॅलेंडर डेटा सेव्ह करू शकतो."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"हे अॅप तुमच्या Android TV डिव्हाइसवर स्टोअर केलेले सर्व कॅलेंडर इव्हेंट वाचू आणि शेअर करू शकतो किंवा तुमचा कॅलेंडर डेटा सेव्ह करू शकतो."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"चेहरा ऑपरेशन रद्द केले गेले."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"वापरकर्त्याने फेस अनलॉक रद्द केले आहे"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"खूप जास्त प्रयत्न केले. नंतर पुन्हा प्रयत्न करा."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"बरेच प्रयत्न. फेस अनलॉक बंद केले आहे."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"बरेच प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा पडताळणी करू शकत नाही. पुन्हा प्रयत्न करा."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"तुम्ही फेस अनलॉक सेट केले नाही"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> आत्ता उपलब्ध नाही. हे <xliff:g id="APP_NAME_1">%2$s</xliff:g> कडून व्यवस्थापित केले जाते."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"अधिक जाणून घ्या"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"अॅप उघडा"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"कार्य अॅप्स सुरू करायची का?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"तुमची कार्य ॲप्स आणि सूचना यांचा अॅक्सेस मिळवा"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"सुरू करा"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"वर्क ॲप्स पुन्हा सुरू करायची?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"पुन्हा सुरू करा"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"आणीबाणी"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"तुमची कार्य ॲप्स आणि कॉल यांचा अॅक्सेस मिळवा"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ॲप उपलब्ध नाही"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> आता उपलब्ध नाही."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध नाही"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"सुरू करण्यासाठी टॅप करा"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"कोणतीही कार्य ॲप्स सपोर्ट करत नाहीत"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"कोणतीही वैयक्तिक ॲप्स सपोर्ट करत नाहीत"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"तुमच्या वैयक्तिक प्रोफाइलमध्ये <xliff:g id="APP">%s</xliff:g> उघडायचे आहे का?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"तुमच्या कार्य प्रोफाइलमध्ये <xliff:g id="APP">%s</xliff:g> उघडायचे आहे का?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"वैयक्तिक ब्राउझर वापरा"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"कार्य ब्राउझर वापरा"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"सिम नेटवर्क अनलॉक पिन"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 28a8c26..9ec0483 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Membenarkan apl mengakses data penderia tubuh, seperti kadar denyut jantung, suhu dan peratusan oksigen darah, semasa apl digunakan."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Akses data penderia tubuh, seperti kadar denyut jantung, semasa di latar"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Membenarkan apl mengakses data penderia tubuh, seperti kadar denyut jantung, suhu dan peratusan oksigen darah, semasa apl berjalan di latar belakang."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Akses data suhu pergelangan tangan penderia tubuh semasa apl digunakan."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Membenarkan apl mengakses data suhu pergelangan tangan penderia tubuh semasa apl digunakan."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Akses data suhu pergelangan tangan penderia tubuh semasa apl berjalan di latar belakang."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Membenarkan apl mengakses data suhu pergelangan tangan penderia tubuh semasa apl berjalan di latar belakang."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Baca acara dan butiran kalendar"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Apl ini boleh membaca semua acara kalendar yang disimpan pada tablet anda dan berkongsi atau menyimpan data kalendar anda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Apl ini boleh membaca semua acara kalendar yang disimpan pada peranti Android TV anda dan berkongsi atau menyimpan data kalendar anda."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Pengendalian wajah dibatalkan."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Buka Kunci Wajah dibatalkan oleh pengguna"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Terlalu banyak percubaan. Cuba sebentar lagi."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Terlalu banyak percubaan. Buka Kunci Wajah dilumpuhkan."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Terlalu banyak percubaan. Sebaliknya, masukkan kunci skrin."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat mengesahkan wajah. Cuba lagi."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Anda belum menyediakan Buka Kunci Wajah"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> tidak tersedia sekarang. Ini diurus oleh <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Ketahui lebih lanjut"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Nyahjeda apl"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Hidupkan apl kerja?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Dapatkan akses kepada apl kerja dan pemberitahuan anda"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Hidupkan"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Nyahjeda apl kerja?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Nyahjeda"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Kecemasan"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Dapatkan akses kepada apl kerja dan panggilan anda"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Apl tidak tersedia"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia sekarang."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> tidak tersedia"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Ketik untuk menghidupkan profil"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tiada apl kerja"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tiada apl peribadi"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Buka <xliff:g id="APP">%s</xliff:g> dalam profil peribadi anda?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Buka <xliff:g id="APP">%s</xliff:g> dalam profil kerja anda?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan penyemak imbas peribadi"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan penyemak imbas kerja"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN buka kunci rangkaian SIM"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 70cb8c1..a94bc70 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"ကိုယ်ပိုင်အက်ပ်များကို <xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> တွင် ပိတ်ပါမည်။ သင့်အလုပ်ပရိုဖိုင် <xliff:g id="NUMBER">%3$d</xliff:g> ရက်ထက်ပိုပြီး ပိတ်ထားခြင်းကို သင်၏ IT စီမံခန့်ခွဲသူက ခွင့်မပြုပါ။"</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ဖွင့်ရန်"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"ခေါ်ဆိုမှုနှင့် မက်ဆေ့ဂျ်များ ပိတ်ထားသည်"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"အလုပ်သုံးအက်ပ်များကို သင်ခဏရပ်လိုက်ပါပြီ။ ဖုန်းခေါ်ဆိုမှု (သို့) မိုဘိုင်းမက်ဆေ့ဂျ်များ ရရှိမည်မဟုတ်ပါ။"</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"အလုပ်သုံးအက်ပ်များကို သင်ခဏရပ်လိုက်သည်။ ဖုန်းခေါ်ဆိုမှု (သို့) မိုဘိုင်းမက်ဆေ့ဂျ်များ ရရှိမည်မဟုတ်ပါ။"</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"အလုပ်သုံးအက်ပ် ဆက်သုံးရန်"</string>
<string name="me" msgid="6207584824693813140">"ကျွန်ုပ်"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tabletဆိုင်ရာရွေးချယ်မှုများ"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"အက်ပ်သုံးစဉ် နှလုံးခုန်နှုန်း၊ အပူချိန်၊ သွေးတွင်း အောက်ဆီဂျင်ရာခိုင်နှုန်းကဲ့သို့ ခန္ဓာကိုယ်အာရုံခံစနစ် ဒေတာများသုံးရန် အက်ပ်ကိုခွင့်ပြုသည်။"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"နောက်ခံတွင်ဖွင့်စဉ် နှလုံးခုန်နှုန်းကဲ့သို့ ခန္ဓာကိုယ်အာရုံခံစနစ် ဒေတာ သုံးခြင်း"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"နောက်ခံတွင်အက်ပ်ဖွင့်စဉ် နှလုံးခုန်နှုန်း၊ အပူချိန်၊ သွေးတွင်း အောက်ဆီဂျင်ရာခိုင်နှုန်းကဲ့သို့ ခန္ဓာကိုယ်အာရုံခံစနစ် ဒေတာများသုံးရန် အက်ပ်ကိုခွင့်ပြုသည်။"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"အက်ပ်သုံးနေစဉ် ခန္ဓာကိုယ် အာရုံခံကိရိယာမှ လက်ကောက်ဝတ်အပူချိန်ဒေတာကို သုံးပါ။"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"အက်ပ်သုံးနေစဉ် ခန္ဓာကိုယ် အာရုံခံကိရိယာမှ လက်ကောက်ဝတ်အပူချိန်ဒေတာသုံးရန် အက်ပ်ကို ခွင့်ပြုသည်။"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"နောက်ခံတွင် အက်ပ်ဖွင့်ထားစဉ် ခန္ဓာကိုယ် အာရုံခံကိရိယာမှ လက်ကောက်ဝတ်အပူချိန်ဒေတာကို သုံးပါ။"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"နောက်ခံတွင် အက်ပ်ဖွင့်ထားစဉ် ခန္ဓာကိုယ် အာရုံခံကိရိယာမှ လက်ကောက်ဝတ်အပူချိန်ဒေတာသုံးရန် အက်ပ်ကို ခွင့်ပြုသည်။"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"ပြက္ခဒိန်ဖြစ်ရပ်များနှင့် အသေးစိတ်အချက်အလက်များကို ဖတ်ခြင်း"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ဤအက်ပ်သည် သင့်တက်ဘလက်တွင် သိမ်းဆည်းထားသည့် ပြက္ခဒိန်ဖြစ်ရပ်များကို ကြည့်ရှုနိုင်ပြီး သင့်ပြက္ခဒိန်ဒေတာများကို မျှဝေခြင်းနှင့် သိမ်းဆည်းခြင်းတို့ ပြုလုပ်နိုင်ပါသည်။"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ဤအက်ပ်သည် သင့် Android TV စက်ပစ္စည်းတွင် သိမ်းဆည်းထားသည့် ပြက္ခဒိန်ဖြစ်ရပ်များအားလုံးကို ဖတ်နိုင်ပြီး သင်၏ ပြက္ခဒိန်ဒေတာများကို မျှဝေခြင်း သို့မဟုတ် သိမ်းဆည်းခြင်းတို့ ပြုလုပ်နိုင်သည်။"</string>
@@ -584,8 +580,8 @@
<string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"တွဲချိတ်ထားသော ဘလူးတုသ်သုံးစက်များနှင့် ချိတ်ဆက်ရန် အက်ပ်ကိုခွင့်ပြုမည်"</string>
<string name="permlab_bluetooth_advertise" msgid="2781147747928853177">"အနီးတစ်ဝိုက်ရှိ ဘလူးတုသ်သုံးစက်များတွင် ကြော်ငြာခြင်း"</string>
<string name="permdesc_bluetooth_advertise" product="default" msgid="6085174451034210183">"အနီးတစ်ဝိုက်ရှိ ဘလူးတုသ်သုံးစက်များတွင် ကြော်ငြာရန် အက်ပ်အား ခွင့်ပြုမည်"</string>
- <string name="permlab_uwb_ranging" msgid="8141915781475770665">"အနီးတစ်ဝိုက်ရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား ဆက်စပ်နေရာကို သတ်မှတ်ခြင်း"</string>
- <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"အနီးတစ်ဝိုက်ရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား ဆက်စပ်နေရာကို သတ်မှတ်ရန် အက်ပ်ကို ခွင့်ပြုမည်"</string>
+ <string name="permlab_uwb_ranging" msgid="8141915781475770665">"အနီးရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား မှန်းခြေနေရာကို သတ်မှတ်ခြင်း"</string>
+ <string name="permdesc_uwb_ranging" msgid="2519723069604307055">"အနီးရှိ ‘အလွန်ကျယ်ပြန့်သော လှိုင်းအလျားသုံးစက်များ’ ကြား မှန်းခြေနေရာကို သတ်မှတ်ရန် အက်ပ်ကို ခွင့်ပြုမည်"</string>
<string name="permlab_nearby_wifi_devices" msgid="392774237063608500">"အနီးရှိ Wi-Fi စက်များနှင့် ပြန်လှန်တုံ့ပြန်ခြင်း"</string>
<string name="permdesc_nearby_wifi_devices" msgid="3054307728646332906">"ကြော်ငြာရန်၊ ချိတ်ဆက်ရန်နှင့် အနီးတစ်ဝိုက်ရှိ Wi-Fi စက်များ၏ နေရာကို သတ်မှတ်ရန် အက်ပ်ကို ခွင့်ပြုသည်"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"ဦးစားပေး NFC ငွေပေးချေမှုဆိုင်ရာ ဝန်ဆောင်မှု အချက်အလက်များ"</string>
@@ -688,7 +684,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"ဖုန်းကို သင့်ဘယ်ဘက်သို့ ရွှေ့ပါ"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"ဖုန်းကို သင့်ညာဘက်သို့ ရွှေ့ပါ"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"သင့်စက်ပစ္စည်းကို တည့်တည့်ကြည့်ပါ။"</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"သင့်မျက်နှာကို မမြင်ရပါ။ ဖုန်းကို မျက်လုံးနှင့် တစ်တန်းတည်းထား၍ ကိုင်ပါ။"</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"သင့်မျက်နှာ မမြင်ရပါ။ ဖုန်းနှင့် မျက်စိ တစ်တန်းတည်းထားပါ။"</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"လှုပ်လွန်းသည်။ ဖုန်းကို ငြိမ်ငြိမ်ကိုင်ပါ။"</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"သင့်မျက်နှာကို ပြန်စာရင်းသွင်းပါ။"</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"မျက်နှာကို မသိပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"မျက်နှာ ဆောင်ရွက်ခြင်းကို ပယ်ဖျက်လိုက်ပါပြီ။"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"အသုံးပြုသူက မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို ပယ်ဖျက်ထားသည်"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"အကြိမ်များစွာ စမ်းပြီးပါပြီ။ နောက်မှထပ်စမ်းပါ။"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို ပိတ်လိုက်သည်။"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ ဖန်သားပြင် လော့ခ်ကို အစားထိုးထည့်သွင်းပါ။"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို ထည့်သွင်းမထားပါ"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ဝန်ဆောင်မှုအချက်အလက်ကိုများကို ခွင့်ပြုချက်ရထားသည့် အက်ပ်အား စတင်ကြည့်နိုင်ရန် ခွင့်ပြုသည်။"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"နမူနာနှုန်းမြင့်သော အာရုံခံစနစ်ဒေတာကို သုံးပါ"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"၂၀၀ Hz နှုန်းထက်ပိုများသော အာရုံခံစနစ်ဒေတာကို နမူနာယူရန် အက်ပ်အား ခွင့်ပြုပါ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"အသုံးပြုသူလုပ်ဆောင်ချက်မပါဘဲ အက်ပ်ကို အပ်ဒိတ်လုပ်ခြင်း"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"အသုံးပြုသူလုပ်ဆောင်ချက်မပါဘဲ ယခင်က ထည့်သွင်းထားသော အက်ပ်ကို စနစ်အား အပ်ဒိတ်လုပ်ခွင့်ပြုသည်"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"စကားဝှက်စည်းမျဥ်းကိုသတ်မှတ်ရန်"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"မျက်နှာပြင်သော့ခတ်သည့် စကားဝှက်များနှင့် PINများရှိ ခွင့်ပြုထားသည့် စာလုံးအရေအတွက်နှင့် အက္ခရာများအား ထိန်းချုပ်ရန်။"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"မျက်နှာပြင်လော့ခ်ဖွင့်ရန် ကြိုးပမ်းမှုများကို စောင့်ကြည့်ပါ"</string>
@@ -1365,7 +1360,7 @@
<string name="usb_supplying_notification_title" msgid="5378546632408101811">"USB မှတစ်ဆင့် ချိတ်ဆက်ထားသည့် စက်ပစ္စည်းကို အားသွင်းနေသည်"</string>
<string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB ဖြင့် ဖိုင်လွှဲပြောင်းခြင်းကို ဖွင့်ထားသည်"</string>
<string name="usb_ptp_notification_title" msgid="5043437571863443281">"USB မှတစ်ဆင့် PTP ကို အသုံးပြုရန် ဖွင့်ထားသည်"</string>
- <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB မှတစ်ဆင့် မိုဘိုင်းဖုန်းကို မိုဒမ်အဖြစ်သုံးရန် ဖွင့်ထားသည်"</string>
+ <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB သုံး၍ ချိတ်ဆက်ခြင်း ဖွင့်ထားသည်"</string>
<string name="usb_midi_notification_title" msgid="7404506788950595557">"USB မှတစ်ဆင့် MIDI ကို အသုံးပြုရန် ဖွင့်ထားသည်"</string>
<string name="usb_uvc_notification_title" msgid="2030032862673400008">"စက်ပစ္စည်းကို ‘ဝဘ်ကမ်’ အဖြစ် ချိတ်ဆက်လိုက်သည်"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB တွဲဖက်ပစ္စည်းကို ချိတ်ဆက်ထားသည်"</string>
@@ -1914,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS တောင်းဆိုမှုကို USSD တောင်းဆိုမှုအဖြစ် ပြောင်းထားသည်"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"SS တောင်းဆိုမှုအသစ်သို့ ပြောင်းထားသည်"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"အယောင်ဆောင်ဖြားယောင်းခြင်း သတိပေးချက်"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"အလုပ်ကိုယ်ရေးအချက်အလက်"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"အလုပ်ပရိုဖိုင်"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"သတိပေးထားသည်"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"စိစစ်ထားသည်"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"ချဲ့ရန်"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ကို လောလောဆယ် မရနိုင်ပါ။ ၎င်းကို <xliff:g id="APP_NAME_1">%2$s</xliff:g> က စီမံထားပါသည်။"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ပိုမိုလေ့လာရန်"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"အက်ပ်ကို ခဏမရပ်တော့ရန်"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"အလုပ်သုံးအက်ပ်များ ဖွင့်မလား။"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"သင့်အလုပ်သုံးအက်ပ်နှင့် အကြောင်းကြားချက်များသုံးခွင့် ရယူပါ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ဖွင့်ရန်"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"အလုပ်သုံးအက်ပ် ပြန်ဖွင့်မလား။"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ပြန်ဖွင့်ရန်"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"အရေးပေါ်"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"သင်၏ အလုပ်သုံးအက်ပ်နှင့် ခေါ်ဆိုမှုများကို ဝင်ခွင့်တောင်းဆိုပါ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"အက်ပ်ကို မရနိုင်ပါ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ယခု မရနိုင်ပါ။"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> မရနိုင်ပါ"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ဖွင့်ရန်တို့ပါ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"အလုပ်သုံးအက်ပ်များ မရှိပါ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ကိုယ်ပိုင်အက်ပ်များ မရှိပါ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> ကို သင့်ကိုယ်ပိုင်ပရိုဖိုင်တွင် ဖွင့်မလား။"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> ကို သင့်အလုပ်ပရိုဖိုင်တွင် ဖွင့်မလား။"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ကိုယ်ပိုင်ဘရောင်ဇာ သုံးရန်"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"အလုပ်သုံးဘရောင်ဇာ သုံးရန်"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ဆင်းမ်ကွန်ရက် လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 826c1c1..a52c9b8 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Gir appen tilgang til data fra kroppssensorer, for eksempel puls, temperatur og oksygenmetning i blodet, når den er i bruk."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Tilgang til data fra kroppssensorer, for eksempel puls, når den er i bakgrunnen"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Gir appen tilgang til data fra kroppssensorer, for eksempel puls, temperatur og oksygenmetning i blodet, når den er i bakgrunnen."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Tilgang til data fra kroppssensorer for håndleddstemperatur mens appen er i bruk."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Gir appen tilgang til data fra kroppssensorer for håndleddstemperatur mens appen er i bruk."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Tilgang til data fra kroppssensorer for håndleddstemperatur mens appen er i bakgrunnen."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Gir appen tilgang til data fra kroppssensorer for håndleddstemperatur mens appen er i bakgrunnen."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Les kalenderaktivitet og detaljer"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Denne appen kan lese all kalenderaktivitet som er lagret på nettbrettet ditt, og dele eller lagre kalenderdataene."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Denne appen kan lese all kalenderaktivitet som er lagret på Android TV-enheten din, og dele eller lagre kalenderdataene."</string>
@@ -561,9 +557,9 @@
<string name="permlab_changeWifiState" msgid="7947824109713181554">"koble til og fra wifi"</string>
<string name="permdesc_changeWifiState" msgid="7170350070554505384">"Lar appen koble til og fra wifi-tilgangspunkter, og å gjøre endringer i enhetens konfigurasjon for wifi-nettverk."</string>
<string name="permlab_changeWifiMulticastState" msgid="285626875870754696">"tillate multicast for trådløse nettverk"</string>
- <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="191079868596433554">"Lar appen motta pakker som sendes til alle enhetene på et Wifi-nettverk ved hjelp av multikastingsadresser, Dette bruker mer strøm enn modusen uten multikasting."</string>
- <string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"Lar appen motta pakker som sendes til alle enhetene på et Wifi-nettverk ved hjelp av multikastingsadresser, ikke bare Android TV-enheten din. Dette bruker mer strøm enn modus uten multikasting."</string>
- <string name="permdesc_changeWifiMulticastState" product="default" msgid="8296627590220222740">"Lar appen motta pakker som sendes til alle enhetene på et Wifi-nettverk ved hjelp av multikastingsadresser, Dette bruker mer strøm enn modusen uten multikasting."</string>
+ <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="191079868596433554">"Lar appen motta pakker som sendes til alle enhetene på et wifi-nettverk ved hjelp av multikastingsadresser, Dette bruker mer strøm enn modusen uten multikasting."</string>
+ <string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"Lar appen motta pakker som sendes til alle enhetene på et wifi-nettverk ved hjelp av multikastingsadresser, ikke bare Android TV-enheten din. Dette bruker mer strøm enn modus uten multikasting."</string>
+ <string name="permdesc_changeWifiMulticastState" product="default" msgid="8296627590220222740">"Lar appen motta pakker som sendes til alle enhetene på et wifi-nettverk ved hjelp av multikastingsadresser, Dette bruker mer strøm enn modusen uten multikasting."</string>
<string name="permlab_bluetoothAdmin" msgid="6490373569441946064">"endre Bluetooth-innstillinger"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="5370837055438574863">"Lar appen konfigurere det lokale Bluetooth-nettbrettet, samt oppdage og koble sammen med eksterne enheter."</string>
<string name="permdesc_bluetoothAdmin" product="tv" msgid="1623992984547014588">"Lar appen konfigurere Bluetooth på Android TV-enheten din samt oppdage og koble sammen med eksterne enheter."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Ansikt-operasjonen ble avbrutt."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Ansiktslås ble avbrutt av brukeren"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"For mange forsøk. Prøv på nytt senere."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"For mange forsøk. Ansiktslås er slått av."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"For mange forsøk. Skriv inn skjermlås i stedet."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan ikke bekrefte ansiktet. Prøv på nytt."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har ikke konfigurert ansiktslås"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Lar innehaveren se informasjon om funksjonene for en app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"tilgang til sensordata ved høy samplingfrekvens"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Lar appen samle inn sensordata ved en hastighet som er høyere enn 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"oppdatere appen uten brukerhandling"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Lar innehaveren oppdatere appen hen tidligere installerte, uten brukerhandling"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Angi passordregler"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrollerer tillatt lengde og tillatte tegn i passord og PIN-koder for opplåsing av skjermen."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Overvåk forsøk på å låse opp skjermen"</string>
@@ -1367,7 +1362,7 @@
<string name="usb_ptp_notification_title" msgid="5043437571863443281">"PTP via USB er slått på"</string>
<string name="usb_tether_notification_title" msgid="8828527870612663771">"USB-internettdeling er slått på"</string>
<string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB er slått på"</string>
- <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Enheten er koblet til som nettkamera"</string>
+ <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Enheten er koblet til som webkamera"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB-tilbehør er tilkoblet"</string>
<string name="usb_notification_message" msgid="4715163067192110676">"Trykk for å få flere alternativ."</string>
<string name="usb_power_notification_message" msgid="7284765627437897702">"Den tilkoblede enheten lades. Trykk for å se flere alternativer."</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> er ikke tilgjengelig akkurat nå. Dette administreres av <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Finn ut mer"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Opphev pause for appen"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vil du slå på jobbapper?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Få tilgang til jobbapper og -varsler"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Slå på"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Vil du slå på jobbapper igjen?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Slå på"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Nød"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Få tilgang til jobbapper og -samtaler"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgjengelig"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgjengelig for øyeblikket."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> er utilgjengelig"</string>
@@ -2099,7 +2092,7 @@
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"OK"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Slå av"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Finn ut mer"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Forbedrede varsler erstatter tilpassede Android-varsler i Android 12. Denne funksjonen viser foreslåtte handlinger og svar og organiserer varslene dine.\n\nForbedrede varsler har tilgang til varselinnhold, inkludert personopplysninger som kontaktnavn og meldinger. Funksjonen kan også avvise og svare på varsler, for eksempel svare på anrop og kontrollere «Ikke forstyrr»."</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Forbedrede varsler erstatter tilpassede Android-varsler i Android 12. Denne funksjonen viser foreslåtte handlinger og svar og organiserer varslene dine.\n\nForbedrede varsler har tilgang til varselinnhold, inkludert personopplysninger som kontaktnavn og meldinger. Funksjonen kan også lukke og svare på varsler, for eksempel svare på anrop og kontrollere «Ikke forstyrr»."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Varsel med informasjon om rutinemodus"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Batterisparing er slått på"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Reduserer batteribruken for å forlenge batterilevetiden"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Trykk for å slå på"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ingen jobbapper"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ingen personlige apper"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vil du åpne <xliff:g id="APP">%s</xliff:g> i den personlige profilen din?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vil du åpne <xliff:g id="APP">%s</xliff:g> i jobbprofilen din?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Bruk den personlige nettleseren"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Bruk jobbnettleseren"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-kode for å fjerne operatørlåser"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index f6de5f5..f94646e 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -446,9 +446,9 @@
<string name="permdesc_broadcastSticky" product="tv" msgid="2338185920171000650">"एपलाई प्रसारण समाप्त भइसकेपछि पनि रहिरहने स्टिकी प्रसारणहरू पठाउने अनुमति दिन्छ। यो सुविधाको अत्यधिक प्रयोगले धेरै मेमोरी प्रयोग हुने भएकाले तपाईंको Android टिभी यन्त्र सुस्त वा अस्थिर हुन सक्छ।"</string>
<string name="permdesc_broadcastSticky" product="default" msgid="134529339678913453">"औपचारिक प्रसारणलाई पठाउनको लागि एक एपलाई अनुमति दिन्छ, जुन प्रसारण समाप्त भएपछि बाँकी रहन्छ। अत्यधिक प्रयोगले धेरै मेमोरी प्रयोग गरेको कारणले फोनलाई ढिलो र अस्थिर बनाउन सक्छ।"</string>
<string name="permlab_readContacts" msgid="8776395111787429099">"तपाईँका सम्पर्कहरू पढ्नुहोस्"</string>
- <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"एपलाई तपाईंको ट्याब्लेटमा भण्डारण गरिएका सम्पर्क ठेगानाहरूसँग सम्बन्धित डेटा पढ्ने अनुमति दिन्छ। एपहरूले सम्पर्क ठेगानाहरू बनाउने तपाईंको ट्याब्लेटमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
- <string name="permdesc_readContacts" product="tv" msgid="8400138591135554789">"एपलाई तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका सम्पर्क ठेगानासम्बन्धी डेटा पढ्न अनुमति दिन्छ। एपहरूले सम्पर्क ठेगानाहरू बनाउने तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
- <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"एपलाई तपाईंको फोनमा भण्डारण गरिएका सम्पर्क ठेगानाहरूसँग सम्बन्धित डेटा पढ्ने अनुमति दिन्छ। एपहरूले सम्पर्क ठेगानाहरू बनाउने तपाईंको फोनमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"एपलाई तपाईंको ट्याब्लेटमा भण्डारण गरिएका कन्ट्याक्टहरूसँग सम्बन्धित डेटा पढ्ने अनुमति दिन्छ। एपहरूले कन्ट्याक्टहरू बनाउने तपाईंको ट्याब्लेटमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
+ <string name="permdesc_readContacts" product="tv" msgid="8400138591135554789">"एपलाई तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका सम्पर्क ठेगानासम्बन्धी डेटा पढ्न अनुमति दिन्छ। एपहरूले कन्ट्याक्टहरू बनाउने तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
+ <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"एपलाई तपाईंको फोनमा भण्डारण गरिएका कन्ट्याक्टहरूसँग सम्बन्धित डेटा पढ्ने अनुमति दिन्छ। एपहरूले कन्ट्याक्टहरू बनाउने तपाईंको फोनमा भण्डारण गरिएका खाताहरूमाथि पनि पहुँच प्राप्त गर्ने छन्। यसमा तपाईंले स्थापना गरेका एपहरूले बनाएका खाताहरू पर्न सक्छन्। यस अनुमतिले एपहरूलाई तपाईंको सम्पर्क ठेगानासम्बन्धी डेटा सेभ गर्न दिने भएकाले हानिकारक एपहरूले तपाईंलाई थाहै नदिइकन सम्पर्क ठेगानासम्बन्धी डेटा आदान प्रदान गर्न सक्छन्।"</string>
<string name="permlab_writeContacts" msgid="8919430536404830430">"तपाईँका सम्पर्कहरू परिवर्तन गर्नुहोस्"</string>
<string name="permdesc_writeContacts" product="tablet" msgid="6422419281427826181">"एपलाई तपाईंको ट्याब्लेटमा भण्डारण गरिएका सम्पर्क ठेगानासम्बन्धी डेटा परिमार्जन गर्न अनुमति दिन्छ। यो अनुमतिले एपलाई सम्पर्क ठेगानासम्बन्धी डेटा मेटाउन अनुमति दिन्छ।"</string>
<string name="permdesc_writeContacts" product="tv" msgid="6488872735379978935">"एपलाई तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका सम्पर्क ठेगानासम्बन्धी डेटा परिमार्जन गर्न अनुमति दिन्छ। यो अनुमतिले एपलाई सम्पर्क ठेगानासम्बन्धी डेटा मेटाउन अनुमति दिन्छ।"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"यसले यो एप प्रयोग गरिँदै गरेका बेला यसलाई हृदयको गति, शरीरको तापक्रम तथा रगतमा रहेको अक्सिजनको प्रतिशत जस्ता बडी सेन्सरसम्बन्धी डेटा हेर्ने तथा प्रयोग गर्ने अनुमति दिन्छ।"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ब्याकग्राउन्डमा चलेका बेला हृदयको गति जस्ता बडी सेन्सरसम्बन्धी डेटा हेरियोस् र प्रयोग गरियोस्"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"यसले यो एप ब्याकग्राउन्डमा चलेका बेला यसलाई हृदयको गति, शरीरको तापक्रम तथा रगतमा रहेको अक्सिजनको प्रतिशत जस्ता बडी सेन्सरसम्बन्धी डेटा हेर्ने तथा प्रयोग गर्ने अनुमति दिन्छ।"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"यो एप प्रयोग भइरहेका बेला बडी सेन्सरले रेकर्ड गरेको नाडीको तापक्रमसम्बन्धी डेटा प्रयोग गर्ने अनुमति।"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"यसले यो एप प्रयोग भइरहेका बेला यो एपलाई बडी सेन्सरले रेकर्ड गरेको नाडीको तापक्रमसम्बन्धी डेटा प्रयोग गर्ने अनुमति दिन्छ।"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"यो एप ब्याकग्राउन्डमा चलिरहेका बेला बडी सेन्सरले रेकर्ड गरेको नाडीको तापक्रमसम्बन्धी डेटा प्रयोग गर्ने अनुमति।"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"यसले यो एप ब्याकग्राउन्डमा चलिरहेका बेला यो एपलाई बडी सेन्सरले रेकर्ड गरेको नाडीको तापक्रमसम्बन्धी डेटा प्रयोग गर्ने अनुमति दिन्छ।"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"पात्रोका कार्यक्रम र विवरणहरू पढ्ने"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"यस एपले तपाईंको ट्याब्लेटमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"यस एपले तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका पात्रोसम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"अनुहार पहिचान रद्द गरियो।"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"प्रयोगकर्ताले फेस अनलक सेटअप गर्ने कार्य रद्द गर्नुभयो"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"धेरैपटक प्रयासहरू भए। पछि फेरि प्रयास गर्नुहोस्।"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"निकै धेरै प्रयासहरू भए। फेस अनलक अफ गरिएको छ।"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"निकै धेरै प्रयासहरू भए। यसको साटो स्क्रिन लक प्रयोग गर्नुहोस्।"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"अनुहार पुष्टि गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"तपाईंले फेस अनलक सेटअप गर्नुभएको छैन"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"होल्डरलाई एपका सुविधासम्बन्धी जानकारी हेर्न दिन्छ।"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"नमुना लिने उच्च दरमा सेन्सरसम्बन्धी डेटा प्रयोग गर्ने"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"यो अनुमति दिइएमा एपले २०० हर्जभन्दा बढी दरमा सेन्सरसम्बन्धी डेटाको नमुना लिन सक्छ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"एप स्वतः अपडेट गरियोस्"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"तपाईंले यो अनुमति दिनुभयो भने होल्डरले पहिले नै इन्स्टल गरेको एप स्वतः अपडेट गर्न पाउँछ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"पासवर्ड नियमहरू मिलाउनुहोस्"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"स्क्रिन लक पासवर्ड र PIN हरूमा अनुमति दिइएको लम्बाइ र वर्णहरूको नियन्त्रण गर्नुहोस्।"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"मनिटरको स्क्रिन अनलक गर्ने प्रयासहरू"</string>
@@ -1288,13 +1283,13 @@
<string name="volume_call" msgid="7625321655265747433">"इन-कल भोल्युम"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"ब्लुटुथ भित्री-कल मात्रा"</string>
<string name="volume_alarm" msgid="4486241060751798448">"आलर्मको भोल्युम"</string>
- <string name="volume_notification" msgid="6864412249031660057">"सूचना मात्रा"</string>
+ <string name="volume_notification" msgid="6864412249031660057">"सूचनाको भोल्युम"</string>
<string name="volume_unknown" msgid="4041914008166576293">"मात्रा"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"ब्लुटुथ भोल्युम"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"घन्टिको आवाज मात्रा"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"कला मात्रा"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"मिडियाको भोल्युम"</string>
- <string name="volume_icon_description_notification" msgid="579091344110747279">"सूचना भोल्युम"</string>
+ <string name="volume_icon_description_notification" msgid="579091344110747279">"सूचनाको भोल्युम"</string>
<string name="ringtone_default" msgid="9118299121288174597">"डिफल्ट रिङटोन"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"डिफल्ट (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="397111123930141876">"कुनै पनि होइन"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> अहिले उपलब्ध छैन। यो <xliff:g id="APP_NAME_1">%2$s</xliff:g> द्वारा व्यवस्थित छ।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"थप जान्नुहोस्"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"एपको पज हटाउनुहोस्"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"कामसम्बन्धी एपहरू अन गर्ने हो?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"कामसम्बन्धी एप चलाउने र सूचना प्राप्त गर्ने सुविधा अन गर्नुहोस्"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"अन गर्नुहोस्"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"कामसम्बन्धी एपहरू अनपज गर्ने हो?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"अनपज गर्नुहोस्"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"आपत्कालीन"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"कामसम्बन्धी एप चलाउने र कल प्राप्त गर्ने सुविधा अन गर्नुहोस्"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"एप उपलब्ध छैन"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> अहिले उपलब्ध छैन।"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध छैन"</string>
@@ -2095,11 +2088,11 @@
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"यस सूचनालाई धेरै महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"यस सूचनालाई कम महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="nas_upgrade_notification_title" msgid="8436359459300146555">"परिष्कृत सूचनाहरू"</string>
- <string name="nas_upgrade_notification_content" msgid="5157550369837103337">"अब परिष्कृत सूचनाहरू नामक सुविधाले कारबाही तथा जवाफहरूसम्बन्धी सुझाव देखाउँछ। Android को अनुकूल पार्न मिल्ने सूचनाहरू नामक सुविधाले अब उप्रान्त काम गर्दैन।"</string>
+ <string name="nas_upgrade_notification_content" msgid="5157550369837103337">"अब परिष्कृत सूचनाहरू नामक सुविधाले कारबाही तथा जवाफहरूसम्बन्धी सुझाव देखाउँछ। Android को एड्याप्टिभ सूचनाहरू नामक सुविधाले अब उप्रान्त काम गर्दैन।"</string>
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ठिक छ"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"अफ गर्नुहोस्"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"थप जान्नुहोस्"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android १२ मा Android को अनुकूल पार्न मिल्ने सूचनाहरू नामक सुविधालाई परिष्कृत सूचनाहरू नामक सुविधाले प्रतिस्थापन गरेको छ। यो सुविधाले कारबाही तथा जवाफसम्बन्धी सुझाव देखाउँछ र तपाईंका सूचनाहरू व्यवस्थित गर्छ।\n\nपरिष्कृत सूचनाहरू नामक सुविधाले सूचनामा उल्लिखित सम्पर्क व्यक्तिको नाम र म्यासेज जस्ता व्यक्तिगत जानकारीलगायतका सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यो सुविधाले फोन उठाउने तथा \'बाधा नपुऱ्याउनुहोस्\' मोड नियन्त्रण गर्ने कार्यसहित सूचनाहरू हटाउने वा सूचनाहरूको जवाफ दिने कार्य पनि गर्न सक्छ।"</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android १२ मा Android को एड्याप्टिभ सूचनाहरू नामक सुविधालाई परिष्कृत सूचनाहरू नामक सुविधाले प्रतिस्थापन गरेको छ। यो सुविधाले कारबाही तथा जवाफसम्बन्धी सुझाव देखाउँछ र तपाईंका सूचनाहरू व्यवस्थित गर्छ।\n\nपरिष्कृत सूचनाहरू नामक सुविधाले सूचनामा उल्लिखित सम्पर्क व्यक्तिको नाम र म्यासेज जस्ता व्यक्तिगत जानकारीलगायतका सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यो सुविधाले फोन उठाउने तथा \'बाधा नपुऱ्याउनुहोस्\' मोड नियन्त्रण गर्ने कार्यसहित सूचनाहरू हटाउने वा सूचनाहरूको जवाफ दिने कार्य पनि गर्न सक्छ।"</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"दिनचर्या मोडको जानकारीमूलक सूचना"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ब्याट्री सेभर अन गरिएको छ"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ब्याट्रीको आयु बढाउन ब्याट्रीको खपत कम गरिँदै छ"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"अन गर्न ट्याप गर्नुहोस्"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"यो सामग्री खोल्न मिल्ने कुनै पनि कामसम्बन्धी एप छैन"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"यो सामग्री खोल्न मिल्ने कुनै पनि व्यक्तिगत एप छैन"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> तपाईंको व्यक्तिगत प्रोफाइलमा खोल्ने हो?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> तपाईंको कार्य प्रोफाइलमा खोल्ने हो?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"व्यक्तिगत ब्राउजर प्रयोग गर्नुहोस्"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"कार्य ब्राउजर प्रयोग गर्नुहोस्"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM को नेटवर्क अनलक गर्ने PIN"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 041fde1..40ec59e 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -208,7 +208,7 @@
<string name="personal_apps_suspension_text" msgid="6115455688932935597">"Je persoonlijke apps zijn geblokkeerd totdat je je werkprofiel aanzet"</string>
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Apps die worden gebruikt voor persoonlijke doeleinden, worden geblokkeerd op <xliff:g id="DATE">%1$s</xliff:g> om <xliff:g id="TIME">%2$s</xliff:g>. Je IT-beheerder staat niet toe dat je werkprofiel langer dan <xliff:g id="NUMBER">%3$d</xliff:g> dagen uitstaat."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aanzetten"</string>
- <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Gesprekken en berichten zijn uitgezet"</string>
+ <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Gesprekken en berichten staan uit"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Je hebt werk-apps gepauzeerd. Je krijgt geen telefoongesprekken of tekstberichten."</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Werk-apps hervatten"</string>
<string name="me" msgid="6207584824693813140">"Ik"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"De app heeft toegang tot gegevens van lichaamssensoren, zoals hartslag, temperatuur en zuurstofpercentage in het bloed, terwijl de app wordt gebruikt."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Toegang tot gegevens van lichaamssensoren, zoals hartslag, op de achtergrond"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"De app heeft toegang tot gegevens van lichaamssensoren, zoals hartslag, temperatuur en zuurstofpercentage in het bloed, terwijl de app op de achtergrond wordt uitgevoerd."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Toegang tot gegevens van de lichaamssensor voor polstemperatuur terwijl de app in gebruik is."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Geeft de app toegang tot gegevens van de lichaamssensor voor polstemperatuur terwijl de app in gebruik is."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Toegang tot gegevens van de lichaamssensor voor polstemperatuur terwijl de app op de achtergrond wordt uitgevoerd."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Geeft de app toegang tot gegevens van de lichaamssensor voor polstemperatuur terwijl de app op de achtergrond wordt uitgevoerd."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Agenda-afspraken en -gegevens lezen"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Deze app kan alle agenda-afspraken lezen die zijn opgeslagen op je tablet en je agendagegevens delen of opslaan."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Deze app kan alle agenda-afspraken lezen die zijn opgeslagen op je Android TV-apparaat en je agendagegevens delen of opslaan."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Bewerking voor gezichtsherkenning geannuleerd."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Ontgrendelen via gezichtsherkenning geannuleerd door gebruiker"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Te veel pogingen. Probeer het later opnieuw."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Te veel pogingen. Ontgrendelen via gezichtsherkenning uitgezet."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Te veel pogingen. Gebruik schermvergrendeling."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan gezicht niet verifiëren. Probeer het nog eens."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Je hebt Ontgrendelen via gezichtsherkenning niet ingesteld."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Hiermee kan de houder informatie over functies bekijken voor een app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"toegang krijgen tot sensorgegevens met een hoge samplingsnelheid"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Hiermee kan de app sensorgegevens samplen met een snelheid die hoger is dan 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"app updaten zonder gebruikersactie"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Hiermee kan de houder de eerder geïnstalleerde app updaten zonder gebruikersactie"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Wachtwoordregels instellen"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"De lengte en het aantal tekens beheren die zijn toegestaan in wachtwoorden en pincodes voor schermvergrendeling."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Pogingen voor schermontgrendeling bijhouden"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> is nu niet beschikbaar. Dit wordt beheerd door <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Meer info"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"App niet meer onderbreken"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Werk-apps aanzetten?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Krijg toegang tot je werk-apps en meldingen"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aanzetten"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Werk-apps hervatten?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Hervatten"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Noodgeval"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Krijg toegang tot je werk-apps en gesprekken"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"App is niet beschikbaar"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is momenteel niet beschikbaar."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> niet beschikbaar"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te zetten"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werk-apps"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlijke apps"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> openen in je persoonlijke profiel?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> openen in je werkprofiel?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Persoonlijke browser gebruiken"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Werkbrowser gebruiken"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Ontgrendelingspincode voor SIM-netwerk"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index d6c0af0..f9842d7 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -155,7 +155,7 @@
<string name="cfTemplateRegisteredTime" msgid="5222794399642525045">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ଫର୍ୱର୍ଡ କରାଗଲା ନାହିଁ"</string>
<string name="fcComplete" msgid="1080909484660507044">"ଫିଚର୍ କୋଡ୍ ସମ୍ପୂର୍ଣ୍ଣ।"</string>
<string name="fcError" msgid="5325116502080221346">"ସଂଯୋଗରେ ସମସ୍ୟା କିମ୍ୱା ଅମାନ୍ୟ ଫିଚର୍ କୋଡ୍।"</string>
- <string name="httpErrorOk" msgid="6206751415788256357">"ଠିକ୍ ଅଛି"</string>
+ <string name="httpErrorOk" msgid="6206751415788256357">"ଠିକ ଅଛି"</string>
<string name="httpError" msgid="3406003584150566720">"ନେଟ୍ୱର୍କରେ ଏକ ତ୍ରୁଟି ଥିଲା।"</string>
<string name="httpErrorLookup" msgid="3099834738227549349">"URL ମିଳିଲା ନାହିଁ।"</string>
<string name="httpErrorUnsupportedAuthScheme" msgid="3976195595501606787">"ସାଇଟ୍ ପ୍ରମାଣୀକରଣ ସ୍କିମ୍ ସପୋର୍ଟ କରୁନାହିଁ।"</string>
@@ -210,7 +210,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"ଚାଲୁ କରନ୍ତୁ"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"କଲ ଏବଂ ମେସେଜଗୁଡ଼ିକ ବନ୍ଦ ଅଛି"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"ଆପଣ ୱାର୍କ ଆପ୍ସକୁ ବିରତ କରିଦେଇଛନ୍ତି। ଆପଣ ଫୋନ କଲ କିମ୍ବା ଟେକ୍ସଟ ମେସେଜ ପାଇବେ ନାହିଁ।"</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ୱାର୍କ ଆପ୍ସ ପୁଣି ଚାଲୁ କର"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ୱାର୍କ ଆପ ପୁଣି ଚାଲୁ କର"</string>
<string name="me" msgid="6207584824693813140">"ମୁଁ"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"ଟାବଲେଟ୍ର ବିକଳ୍ପ"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Android TVର ବିକଳ୍ପଗୁଡ଼ିକ"</string>
@@ -302,7 +302,7 @@
<string name="permgroupdesc_contacts" msgid="9163927941244182567">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"ଲୋକେସନ"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"ଏହି ଡିଭାଇସ୍ର ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରେ"</string>
- <string name="permgrouplab_calendar" msgid="6426860926123033230">"କ୍ୟାଲେଣ୍ଡର"</string>
+ <string name="permgrouplab_calendar" msgid="6426860926123033230">"କେଲେଣ୍ଡର"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍ ଆକ୍ସେସ୍ କରେ"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS ମେସେଜ୍ ପଠାନ୍ତୁ ଓ ଦେଖନ୍ତୁ"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ଏହି ଆପଟି ବ୍ୟବହାରରେ ଥିବା ସମୟରେ, ହାର୍ଟ ରେଟ ଏବଂ ତାପମାତ୍ରା, ରକ୍ତରେ ଅମ୍ଳଜାନ ଶତକଡ଼ା ପରି ବଡି ସେନ୍ସର ଡାଟାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ପୃଷ୍ଠପଟରେ ଥିବା ସମୟରେ, ହାର୍ଟ ରେଟ ପରି ବଡି ସେନ୍ସର ଡାଟାକୁ ଆକ୍ସେସ କରନ୍ତୁ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ଏହି ଆପଟି ପୃଷ୍ଠପଟରେ ଥିବା ସମୟରେ, ହାର୍ଟ ରେଟ, ତାପମାତ୍ରା ଏବଂ ରକ୍ତରେ ଅମ୍ଳଜାନ ଶତକଡ଼ା ପରି ବଡି ସେନ୍ସର ଡାଟାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ଆପଟି ବ୍ୟବହାରରେ ଥିବା ସମୟରେ ବଡି ସେନ୍ସର ରିଷ୍ଟ ତାପମାତ୍ରା ଡାଟାକୁ ଆକ୍ସେସ କରନ୍ତୁ।"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ଆପଟି ବ୍ୟବହାରରେ ଥିବା ସମୟରେ, ବଡି ସେନ୍ସର ରିଷ୍ଟ ତାପମାତ୍ରା ଡାଟାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ଆପଟି ପୃଷ୍ଠପଟରେ ଥିବା ସମୟରେ ବଡି ସେନ୍ସର ରିଷ୍ଟ ତାପମାତ୍ରା ଡାଟାକୁ ଆକ୍ସେସ କରନ୍ତୁ।"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ଆପଟି ପୃଷ୍ଠପଟରେ ଥିବା ସମୟରେ, ବଡି ସେନ୍ସର ରିଷ୍ଟ ତାପମାତ୍ରା ଡାଟାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"କ୍ୟାଲେଣ୍ଡର୍ ଇଭେଣ୍ଟ ଏବଂ ବିବରଣୀ ପଢ଼େ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ଆପଣଙ୍କ ଟାବଲେଟ୍ରେ ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଏହି ଆପ୍ ପଢ଼ିପାରେ ଏବଂ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର ଡାଟା ସେୟାର୍ କରିପାରେ କିମ୍ବା ସେଭ୍ କରିପାରେ।"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ଏହି ଆପ୍ ଆପଣଙ୍କ Android TV ଡିଭାଇସ୍ରେ ଷ୍ଟୋର୍ କରାଯାଇଥିବା ସମସ୍ତ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ପଢ଼ିପାରେ ଏବଂ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର ଡାଟା ସେୟାର୍ କରିପାରେ କିମ୍ବା ସେଭ୍ କରିପାରେ।"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ଫେସ୍ର ଅପରେଶନ୍ କ୍ୟାନ୍ସଲ୍ ହୋଇଗଲା"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ଦ୍ୱାରା ଫେସ୍ ଅନଲକ୍ ବାତିଲ୍ କରାଯାଇଛି"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ବାରମ୍ବାର ଚେଷ୍ଟା। ପରେ ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଫେସ୍ ଅନଲକ୍ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଏହା ପରିବର୍ତ୍ତେ ସ୍କ୍ରିନ୍ ଲକ୍ ଏଣ୍ଟର୍ କରନ୍ତୁ।"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ମୁହଁ ଚିହ୍ନଟ କରିପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ଆପଣ ଫେସ୍ ଅନଲକ୍ ସେଟ୍ ଅପ୍ କରିନାହାଁନ୍ତି"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"କୌଣସି ଆପ ପାଇଁ ଫିଚରଗୁଡ଼ିକ ବିଷୟରେ ସୂଚନା ଦେଖିବା ଆରମ୍ଭ କରିବାକୁ ହୋଲଡରଙ୍କୁ ଅନୁମତି ଦିଏ।"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"ଏକ ଉଚ୍ଚ ନମୁନାକରଣ ରେଟରେ ସେନ୍ସର୍ ଡାଟାକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"200 Hz ଠାରୁ ଅଧିକ ଏକ ରେଟରେ ସେନ୍ସର୍ ଡାଟାର ନମୁନା ନେବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ୟୁଜର ଆକ୍ସନ ବିନା ଆପକୁ ଅପଡେଟ କରନ୍ତୁ"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"ୟୁଜର ଆକ୍ସନ ବିନା ପୂର୍ବରୁ ଇନଷ୍ଟଲ କରାଯାଇଥିବା ଆପକୁ ଅପଡେଟ କରିବା ପାଇଁ ଏହା ହୋଲ୍ଡରକୁ ଅନୁମତି ଦିଏ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"ପାସ୍ୱର୍ଡ ନିୟମାବଳୀ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"ଲକ୍ ସ୍କ୍ରୀନ୍ ପାସ୍ୱର୍ଡ ଓ PINରେ ଅନୁମୋଦିତ ଦୀର୍ଘତା ଓ ବର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ।"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"ସ୍କ୍ରୀନ୍-ଅନଲକ୍ କରିବା ଉଦ୍ୟମ ନୀରିକ୍ଷଣ କରନ୍ତୁ"</string>
@@ -1136,7 +1131,7 @@
<string name="VideoView_error_title" msgid="5750686717225068016">"ଭିଡିଓ ସମସ୍ୟା"</string>
<string name="VideoView_error_text_invalid_progressive_playback" msgid="3782449246085134720">"ଏହି ଡିଭାଇସ୍କୁ ଷ୍ଟ୍ରିମ୍ କରିବା ପାଇଁ ଏହି ଭିଡିଓ ମାନ୍ୟ ନୁହେଁ।"</string>
<string name="VideoView_error_text_unknown" msgid="7658683339707607138">"ଏହି ଭିଡିଓ ଚଲାଇ ହେବନାହିଁ"</string>
- <string name="VideoView_error_button" msgid="5138809446603764272">"ଠିକ୍ ଅଛି"</string>
+ <string name="VideoView_error_button" msgid="5138809446603764272">"ଠିକ ଅଛି"</string>
<string name="relative_time" msgid="8572030016028033243">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="noon" msgid="8365974533050605886">"ମଧ୍ୟାହ୍ନ"</string>
<string name="Noon" msgid="6902418443846838189">"ମଧ୍ୟାହ୍ନ"</string>
@@ -1169,9 +1164,9 @@
<string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"ସିଷ୍ଟମ୍ ପାଇଁ ପ୍ରର୍ଯ୍ୟାପ୍ତ ଷ୍ଟୋରେଜ୍ ନାହିଁ। ସୁନିଶ୍ଚିତ କରନ୍ତୁ ଯେ, ଆପଣଙ୍କ ପାଖରେ 250MB ଖାଲି ଜାଗା ଅଛି ଏବଂ ପୁନଃ ଆରମ୍ଭ କରନ୍ତୁ।"</string>
<string name="app_running_notification_title" msgid="8985999749231486569">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଚାଲୁଛି"</string>
<string name="app_running_notification_text" msgid="5120815883400228566">"ଅଧିକ ସୂଚନା ପାଇଁ କିମ୍ବା ଆପ୍ ବନ୍ଦ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
- <string name="ok" msgid="2646370155170753815">"ଠିକ୍ ଅଛି"</string>
+ <string name="ok" msgid="2646370155170753815">"ଠିକ ଅଛି"</string>
<string name="cancel" msgid="6908697720451760115">"ବାତିଲ କରନ୍ତୁ"</string>
- <string name="yes" msgid="9069828999585032361">"ଠିକ୍ ଅଛି"</string>
+ <string name="yes" msgid="9069828999585032361">"ଠିକ ଅଛି"</string>
<string name="no" msgid="5122037903299899715">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="dialog_alert_title" msgid="651856561974090712">"ଧ୍ୟାନଦିଅନ୍ତୁ"</string>
<string name="loading" msgid="3138021523725055037">"ଲୋଡ୍ କରାଯାଉଛି…"</string>
@@ -1230,7 +1225,7 @@
<string name="anr_activity_process" msgid="3477362583767128667">"<xliff:g id="ACTIVITY">%1$s</xliff:g> କାମ କରୁନାହିଁ"</string>
<string name="anr_application_process" msgid="4978772139461676184">"<xliff:g id="APPLICATION">%1$s</xliff:g> କାମ କରୁନାହିଁ"</string>
<string name="anr_process" msgid="1664277165911816067">"<xliff:g id="PROCESS">%1$s</xliff:g> ପ୍ରୋସେସ୍ କାମ କରୁନାହିଁ"</string>
- <string name="force_close" msgid="9035203496368973803">"ଠିକ୍ ଅଛି"</string>
+ <string name="force_close" msgid="9035203496368973803">"ଠିକ ଅଛି"</string>
<string name="report" msgid="2149194372340349521">"ରିପୋର୍ଟ କରନ୍ତୁ"</string>
<string name="wait" msgid="7765985809494033348">"ଅପେକ୍ଷା କରନ୍ତୁ"</string>
<string name="webpage_unresponsive" msgid="7850879412195273433">"ଏହି ପୃଷ୍ଠାଟି ଚାଲୁନାହିଁ।\n\nଆପଣ ଏହାକୁ ବନ୍ଦ କରିବେ କି?"</string>
@@ -1282,18 +1277,18 @@
<string name="dump_heap_ready_text" msgid="5849618132123045516">"ଆପଣ ପାଇଁ ସେୟାର୍ କରିବାକୁ <xliff:g id="PROC">%1$s</xliff:g> ପ୍ରକ୍ରିୟାର ଏକ ହିପ୍ ଡମ୍ପ ଉପଲବ୍ଧ ଅଛି। ସାବଧାନ: ଏହି ପ୍ରକ୍ରିୟାର ଆକ୍ସେସ୍ ରହିଥିବା ଆପଣଙ୍କର କୌଣସି ବ୍ୟକ୍ତିଗତ ସମ୍ବେଦନଶୀଳ ସୂଚନା ଏହି ହିପ୍ ଡମ୍ପରେ ରହିପାରେ, ଯେଉଁଥିରେ ଆପଣ ଟାଇପ୍ କରିଥିବା କିଛି ଡାଟା ବି ସାମିଲ୍ ହୋଇପାରେ।"</string>
<string name="sendText" msgid="493003724401350724">"ଟେକ୍ସଟ୍ ପାଇଁ ଏକ କାର୍ଯ୍ୟ ବାଛନ୍ତୁ"</string>
<string name="volume_ringtone" msgid="134784084629229029">"ରିଙ୍ଗର୍ ଭଲ୍ୟୁମ୍"</string>
- <string name="volume_music" msgid="7727274216734955095">"ମିଡିଆ ଭଲ୍ୟୁମ୍"</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_call" msgid="7625321655265747433">"ଇନ୍-କଲ୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"ବ୍ଲୁଟୂଥ୍ ଇନ୍-କଲ୍ ଭଲ୍ୟୁମ୍"</string>
- <string name="volume_alarm" msgid="4486241060751798448">"ଆଲାରାମ୍ ଭଲ୍ୟୁମ୍"</string>
+ <string name="volume_alarm" msgid="4486241060751798448">"ଆଲାରାମ ଭଲ୍ୟୁମ"</string>
<string name="volume_notification" msgid="6864412249031660057">"ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍"</string>
<string name="volume_unknown" msgid="4041914008166576293">"ଭଲ୍ୟୁମ୍"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"ବ୍ଲୁଟୂଥ୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"ରିଙ୍ଗଟୋନ୍ ଭଲ୍ୟୁମ୍"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"କଲ୍ ଭଲ୍ୟୁମ୍"</string>
- <string name="volume_icon_description_media" msgid="4997633254078171233">"ମିଡିଆ ଭଲ୍ୟୁମ୍"</string>
+ <string name="volume_icon_description_media" msgid="4997633254078171233">"ମିଡିଆ ଭଲ୍ୟୁମ"</string>
<string name="volume_icon_description_notification" msgid="579091344110747279">"ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍"</string>
<string name="ringtone_default" msgid="9118299121288174597">"ଡିଫଲ୍ଟ ରିଙ୍ଗଟୋନ୍"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"ଡିଫଲ୍ଟ (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
@@ -1360,7 +1355,7 @@
<string name="perms_description_app" msgid="2747752389870161996">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱରା ପ୍ରଦତ୍ତ।"</string>
<string name="no_permissions" msgid="5729199278862516390">"କୌଣସି ଅନୁମତିର ଆବଶ୍ୟକତା ନାହିଁ"</string>
<string name="perm_costs_money" msgid="749054595022779685">"ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ"</string>
- <string name="dlg_ok" msgid="5103447663504839312">"ଠିକ୍ ଅଛି"</string>
+ <string name="dlg_ok" msgid="5103447663504839312">"ଠିକ ଅଛି"</string>
<string name="usb_charging_notification_title" msgid="1674124518282666955">"USB ମାଧ୍ୟମରେ ଏହି ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି"</string>
<string name="usb_supplying_notification_title" msgid="5378546632408101811">"USB ମାଧ୍ୟମରେ ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି"</string>
<string name="usb_mtp_notification_title" msgid="1065989144124499810">"USB ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ ଚାଲୁ କରାଗଲା"</string>
@@ -1875,11 +1870,11 @@
<string name="package_installed_device_owner" msgid="7035926868974878525">"ଆପଣଙ୍କ ଆଡମିନ୍ ଇନଷ୍ଟଲ୍ କରିଛନ୍ତି"</string>
<string name="package_updated_device_owner" msgid="7560272363805506941">"ଆପଣଙ୍କ ଆଡମିନ୍ ଅପଡେଟ୍ କରିଛନ୍ତି"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ଆପଣଙ୍କ ଆଡମିନ୍ ଡିଲିଟ୍ କରିଛନ୍ତି"</string>
- <string name="confirm_battery_saver" msgid="5247976246208245754">"ଠିକ୍ ଅଛି"</string>
+ <string name="confirm_battery_saver" msgid="5247976246208245754">"ଠିକ ଅଛି"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"ବେଟେରୀ ସେଭର ଗାଢ଼ା ଥିମକୁ ଚାଲୁ କରେ ଏବଂ ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପ, କିଛି ଭିଜୁଆଲ ଇଫେକ୍ଟ, କିଛି ଫିଚର ଏବଂ କିଛି ନେଟୱାର୍କ ସଂଯୋଗକୁ ସୀମିତ କିମ୍ବା ବନ୍ଦ କରେ।"</string>
<string name="battery_saver_description" msgid="8518809702138617167">"ବ୍ୟାଟେରୀ ସେଭର୍ ଗାଢ଼ା ଥିମକୁ ଚାଲୁ କରେ ଏବଂ ପୃଷ୍ଠପଟ କାର୍ଯ୍ୟକଳାପ, କିଛି ଭିଜୁଆଲ୍ ଇଫେକ୍ଟ, କିଛି ଫିଚର୍ ଏବଂ କିଛି ନେଟୱାର୍କ ସଂଯୋଗକୁ ସୀମିତ କିମ୍ବା ବନ୍ଦ କରେ।"</string>
- <string name="data_saver_description" msgid="4995164271550590517">"ଡାଟା ବ୍ୟବହାର କମ୍ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପ୍ରାପ୍ତ କରିବାକୁ କିଛି ଆପ୍କୁ ବାରଣ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପ୍, ଡାଟା ଆକ୍ସେସ୍ କରିପାରେ, କିନ୍ତୁ ଏହା କମ୍ ଥର କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ ଯେମିତି ଆପଣ ଇମେଜଗୁଡ଼ିକୁ ଟାପ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ସେଗୁଡ଼ିକ ଡିସପ୍ଲେ ହୁଏ ନାହିଁ।"</string>
- <string name="data_saver_enable_title" msgid="7080620065745260137">"ଡାଟା ସେଭର୍ ଚାଲୁ କରିବେ?"</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"ଡାଟାର ବ୍ୟବହାରକୁ କମ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର ବେକଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପାଇବାକୁ କିଛି ଆପ୍ସକୁ ବାରଣ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପଟି ଡାଟାକୁ ଆକ୍ସେସ କରିପାରେ, କିନ୍ତୁ ଏହା କମ ଥର କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ ଯେମିତି ଆପଣ ଇମେଜଗୁଡ଼ିକୁ ଟାପ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ସେଗୁଡ଼ିକ ଡିସପ୍ଲେ ହୁଏ ନାହିଁ।"</string>
+ <string name="data_saver_enable_title" msgid="7080620065745260137">"ଡାଟା ସେଭର ଚାଲୁ କରିବେ?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"ଚାଲୁ କରନ୍ତୁ"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{ଏକ ମିନିଟ ପାଇଁ ({formattedTime} ପର୍ଯ୍ୟନ୍ତ)}other{# ମିନିଟ ପାଇଁ ({formattedTime} ପର୍ଯ୍ୟନ୍ତ)}}"</string>
<string name="zen_mode_duration_minutes_summary_short" msgid="1187553788355486950">"{count,plural, =1{1 ମିନିଟ ପାଇଁ ({formattedTime} ପର୍ଯ୍ୟନ୍ତ)}other{# ମିନିଟ ପାଇଁ ({formattedTime} ପର୍ଯ୍ୟନ୍ତ)}}"</string>
@@ -1914,7 +1909,7 @@
<string name="stk_cc_ss_to_ussd" msgid="8417905193112944760">"SS ଅନୁରୋଧ, USSD ଅନୁରୋଧକୁ ପରିବର୍ତ୍ତନ ହେଲା"</string>
<string name="stk_cc_ss_to_ss" msgid="132040645206514450">"ନୂତନ SS ଅନୁରୋଧରେ ପରିବର୍ତ୍ତନ ହେଲା"</string>
<string name="notification_phishing_alert_content_description" msgid="494227305355958790">"ଫିସିଂ ଆଲର୍ଟ"</string>
- <string name="notification_work_profile_content_description" msgid="5296477955677725799">"ୱର୍କ ପ୍ରୋଫାଇଲ୍"</string>
+ <string name="notification_work_profile_content_description" msgid="5296477955677725799">"ୱାର୍କ ପ୍ରୋଫାଇଲ"</string>
<string name="notification_alerted_content_description" msgid="6139691253611265992">"ଆଲର୍ଟ କରାଯାଇଛି"</string>
<string name="notification_verified_content_description" msgid="6401483602782359391">"ଯାଞ୍ଚ କରାଯାଇଛି"</string>
<string name="expand_button_content_description_collapsed" msgid="3873368935659010279">"ବଢ଼ାନ୍ତୁ"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"ବର୍ତ୍ତମାନ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ଉପଲବ୍ଧ ନାହିଁ। ଏହା <xliff:g id="APP_NAME_1">%2$s</xliff:g> ଦ୍ଵାରା ପରିଚାଳିତ ହେଉଛି।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ଆପ୍ ଅନପଜ୍ କରନ୍ତୁ"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ୱାର୍କ ଆପ୍ସ ଚାଲୁ କରିବେ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ଆପଣଙ୍କ ୱାର୍କ ଆପ୍ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ ପାଆନ୍ତୁ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ଚାଲୁ କରନ୍ତୁ"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ୱାର୍କ ଆପ୍ସକୁ ପୁଣି ଚାଲୁ କରିବେ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ଜରୁରୀକାଳୀନ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"ଆପଣଙ୍କ ୱାର୍କ ଆପ୍ସ ଏବଂ କଲଗୁଡ଼ିକୁ ଆକ୍ସେସ ପାଆନ୍ତୁ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ଆପ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବର୍ତ୍ତମାନ ଉପଲବ୍ଧ ନାହିଁ।"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ଉପଲବ୍ଧ ନାହିଁ"</string>
@@ -2096,7 +2089,7 @@
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"ଏହି ବିଜ୍ଞପ୍ତିର ରେଙ୍କ ତଳକୁ କରାଯାଇଛି। ମତାମତ ପ୍ରଦାନ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="nas_upgrade_notification_title" msgid="8436359459300146555">"ଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
<string name="nas_upgrade_notification_content" msgid="5157550369837103337">"ପ୍ରସ୍ତାବିତ କାର୍ଯ୍ୟ ଏବଂ ପ୍ରତ୍ୟୁତ୍ତରଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ମାଧ୍ୟମରେ ପ୍ରଦାନ କରାଯାଉଛି। Android ଆଡେପ୍ଟିଭ୍ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଆଉ ସମର୍ଥିତ ନୁହେଁ।"</string>
- <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ଠିକ୍ ଅଛି"</string>
+ <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ଠିକ ଅଛି"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
<string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android 12ରେ Android ଆଡେପ୍ଟିଭ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକରେ ପରିବର୍ତ୍ତନ କରାଯାଇଛି। ଏହି ଫିଚର ପ୍ରସ୍ତାବିତ କାର୍ଯ୍ୟ ଏବଂ ପ୍ରତ୍ୟୁତ୍ତରଗୁଡ଼ିକୁ ଦେଖାଏ ଏବଂ ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବ୍ୟବସ୍ଥିତ କରେ।\n\nଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ କଣ୍ଟାକ୍ଟ ନାମ ଏବଂ ମେସେଜଗୁଡ଼ିକ ପରି ବ୍ୟକ୍ତିଗତ ସୂଚନା ସମେତ ବିଜ୍ଞପ୍ତିର ବିଷୟବସ୍ତୁକୁ ଆକ୍ସେସ କରିପାରିବ। ଏହି ଫିଚର ଫୋନ କଲଗୁଡ଼ିକର ଉତ୍ତର ଦେବା ଏବଂ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\'କୁ ନିୟନ୍ତ୍ରଣ କରିବା ପରି, ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ମଧ୍ୟ ଖାରଜ କରିପାରିବ କିମ୍ବା ସେଗୁଡ଼ିକର ଉତ୍ତର ଦେଇପାରିବ।"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ଚାଲୁ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"କୌଣସି ୱାର୍କ ଆପ୍ ନାହିଁ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"କୌଣସି ବ୍ୟକ୍ତିଗତ ଆପ୍ ନାହିଁ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g>କୁ ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲରେ ଖୋଲିବେ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g>କୁ ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲରେ ଖୋଲିବେ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ବ୍ୟକ୍ତିଗତ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ୱାର୍କ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ନେଟୱାର୍କ ଅନଲକ୍ PIN"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 62c2b83..0b09f9f 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ਜਦੋਂ ਐਪ ਵਰਤੋਂ ਵਿੱਚ ਹੋਵੇ, ਤਾਂ ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਦਿਲ ਦੀ ਧੜਕਣ, ਤਾਪਮਾਨ, ਖੂਨ ਵਿੱਚ ਮੌਜੂਦ ਆਕਸੀਜਨ ਦੀ ਫ਼ੀਸਦ ਵਰਗੇ ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਦੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਣ \'ਤੇ ਦਿਲ ਦੀ ਧੜਕਣ ਵਰਗੇ ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਦੇ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ਜਦੋਂ ਐਪ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀ ਹੋਵੇ, ਤਾਂ ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਦਿਲ ਦੀ ਧੜਕਣ, ਤਾਪਮਾਨ, ਖੂਨ ਵਿੱਚ ਮੌਜੂਦ ਆਕਸੀਜਨ ਦੀ ਫ਼ੀਸਦ ਵਰਗੇ ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਦੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ਐਪ ਦੇ ਵਰਤੋਂ ਵਿੱਚ ਹੋਣ \'ਤੇ, ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਵੱਲੋਂ ਤੁਹਾਡੇ ਸੌਣ ਵੇਲੇ ਰਿਕਾਰਡ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰੋ।"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ਐਪ ਦੇ ਵਰਤੋਂ ਵਿੱਚ ਹੋਣ \'ਤੇ, ਐਪ ਨੂੰ ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਵੱਲੋਂ ਤੁਹਾਡੇ ਸੌਣ ਵੇਲੇ ਰਿਕਾਰਡ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੰਦਾ ਹੈ।"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ਐਪ ਦੇ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਦੇ ਹੋਣ \'ਤੇ, ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਵੱਲੋਂ ਤੁਹਾਡੇ ਸੌਣ ਵੇਲੇ ਰਿਕਾਰਡ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰੋ।"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ਐਪ ਦੇ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਦੇ ਹੋਣ \'ਤੇ, ਐਪ ਨੂੰ ਸਰੀਰ ਸੰਬੰਧੀ ਸੈਂਸਰ ਵੱਲੋਂ ਤੁਹਾਡੇ ਸੌਣ ਵੇਲੇ ਰਿਕਾਰਡ ਕੀਤੇ ਜਾਣ ਵਾਲੇ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੰਦਾ ਹੈ।"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"ਕੈਲੰਡਰ ਵਰਤਾਰਿਆਂ ਅਤੇ ਵੇਰਵਿਆਂ ਨੂੰ ਪੜ੍ਹੋ"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ \'ਤੇ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਕੈਲੰਡਰ ਇਵੈਂਟਾਂ ਨੂੰ ਪੜ੍ਹ ਸਕਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਜਾਂ ਰੱਖਿਅਤ ਕਰ ਸਕਦੀ ਹੈ।"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ਇਹ ਐਪ ਤੁਹਾਡੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਕੈਲੰਡਰ ਇਵੈਂਟਾਂ ਨੂੰ ਪੜ੍ਹ ਸਕਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਜਾਂ ਰੱਖਿਅਤ ਕਰ ਸਕਦੀ ਹੈ।"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ਚਿਹਰਾ ਪਛਾਣਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ਵਰਤੋਂਕਾਰ ਨੇ ਫ਼ੇਸ ਅਣਲਾਕ ਰੱਦ ਕੀਤਾ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ਹੱਦੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਫ਼ੇਸ ਅਣਲਾਕ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸਦੀ ਬਜਾਏ ਸਕ੍ਰੀਨ ਲਾਕ ਦਾਖਲ ਕਰੋ।"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ਚਿਹਰੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ਤੁਸੀਂ ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਹੈ।"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ਇਸ ਨਾਲ ਹੋਲਡਰ ਨੂੰ ਕਿਸੇ ਐਪ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦੇਖਣ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"ਉੱਚ ਸੈਂਪਲਿੰਗ ਰੇਟ \'ਤੇ ਸੈਂਸਰ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"ਐਪ ਨੂੰ 200 Hz ਤੋਂ ਵੱਧ ਦੀ ਦਰ \'ਤੇ ਸੈਂਸਰ ਡਾਟੇ ਦਾ ਨਮੂਨਾ ਲੈਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ਵਰਤੋਂਕਾਰ ਕਾਰਵਾਈ ਤੋਂ ਬਿਨਾਂ ਐਪ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"ਧਾਰਕ ਨੂੰ ਵਰਤੋਂਕਾਰ ਕਾਰਵਾਈ ਤੋਂ ਬਿਨਾਂ ਪਹਿਲਾਂ ਸਥਾਪਤ ਕੀਤੀ ਐਪ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"ਪਾਸਵਰਡ ਨਿਯਮ ਸੈੱਟ ਕਰੋ"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"ਸਕ੍ਰੀਨ ਲਾਕ ਪਾਸਵਰਡਾਂ ਅਤੇ ਪਿੰਨ ਵਿੱਚ ਆਗਿਆ ਦਿੱਤੀ ਲੰਮਾਈ ਅਤੇ ਅੱਖਰਾਂ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ।"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"ਸਕ੍ਰੀਨ ਅਣਲਾਕ ਕਰਨ ਦੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ \'ਤੇ ਨਿਗਰਾਨੀ ਰੱਖੋ"</string>
@@ -1288,13 +1283,13 @@
<string name="volume_call" msgid="7625321655265747433">"ਇਨ-ਕਾਲ ਅਵਾਜ਼"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"ਬਲੂਟੁੱਥ ਇਨ-ਕਾਲ ਅਵਾਜ਼"</string>
<string name="volume_alarm" msgid="4486241060751798448">"ਅਲਾਰਮ ਦੀ ਅਵਾਜ਼"</string>
- <string name="volume_notification" msgid="6864412249031660057">"ਸੂਚਨਾ ਵੌਲਿਊਮ"</string>
+ <string name="volume_notification" msgid="6864412249031660057">"ਸੂਚਨਾ ਦੀ ਅਵਾਜ਼"</string>
<string name="volume_unknown" msgid="4041914008166576293">"ਵੌਲਿਊਮ"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Bluetooth ਵੌਲਿਊਮ"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"ਰਿੰਗਟੋਨ ਵੌਲਿਊਮ"</string>
<string name="volume_icon_description_incall" msgid="4491255105381227919">"ਕਾਲ ਅਵਾਜ਼"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"ਮੀਡੀਆ ਦੀ ਅਵਾਜ਼"</string>
- <string name="volume_icon_description_notification" msgid="579091344110747279">"ਸੂਚਨਾ ਵੌਲਿਊਮ"</string>
+ <string name="volume_icon_description_notification" msgid="579091344110747279">"ਸੂਚਨਾ ਦੀ ਅਵਾਜ਼"</string>
<string name="ringtone_default" msgid="9118299121288174597">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰਿੰਗਟੋਨ"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="397111123930141876">"ਕੋਈ ਨਹੀਂ"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ਐਪ ਫਿਲਹਾਲ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਇਸਦਾ ਪ੍ਰਬੰਧਨ <xliff:g id="APP_NAME_1">%2$s</xliff:g> ਵੱਲੋਂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ਹੋਰ ਜਾਣੋ"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ਐਪ ਤੋਂ ਰੋਕ ਹਟਾਓ"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਚਾਲੂ ਕਰਨੀਆਂ ਹਨ?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ਆਪਣੀਆਂ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ਚਾਲੂ ਕਰੋ"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਰੋਕ ਹਟਾਈਏ?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ਰੋਕ ਹਟਾਓ"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ਐਮਰਜੈਂਸੀ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"ਆਪਣੀਆਂ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਅਤੇ ਕਾਲਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ਐਪ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ਚਾਲੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ਕੋਈ ਕੰਮ ਸੰਬੰਧੀ ਐਪ ਨਹੀਂ"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ਕੋਈ ਨਿੱਜੀ ਐਪ ਨਹੀਂ"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"ਕੀ ਆਪਣੇ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ <xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"ਕੀ ਆਪਣੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ <xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ਨਿੱਜੀ ਬ੍ਰਾਊਜ਼ਰ ਵਰਤੋ"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ਕੰਮ ਸੰਬੰਧੀ ਬ੍ਰਾਊਜ਼ਰ ਵਰਤੋ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ਸਿਮ ਨੈੱਟਵਰਕ ਅਣਲਾਕ ਪਿੰਨ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index efc1421..7965830 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -306,7 +306,7 @@
<string name="permgroupdesc_location" msgid="1995955142118450685">"dostęp do informacji o lokalizacji tego urządzenia"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"Kalendarz"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"dostęp do kalendarza"</string>
- <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
+ <string name="permgrouplab_sms" msgid="795737735126084874">"SMS-y"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"wysyłanie i wyświetlanie SMS‑ów"</string>
<string name="permgrouplab_storage" msgid="17339216290379241">"Pliki"</string>
<string name="permgroupdesc_storage" msgid="5378659041354582769">"dostęp do plików na urządzeniu"</string>
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Zezwala aplikacji na dostęp do danych z czujników na ciele, takich jak tętno, temperatura i poziom saturacji, gdy aplikacja ta jest używana."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Zezwól na dostęp do danych z czujników na ciele, np. tętna, podczas używania aplikacji w tle"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Zezwala aplikacji na dostęp do danych z czujników na ciele, takich jak tętno, temperatura i poziom saturacji, gdy aplikacja ta jest używana w tle."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Dostęp do pochodzących z czujnika na ciele danych temperatury na nadgarstku, kiedy aplikacja jest w użyciu."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Zezwala na dostęp aplikacji do pochodzących z czujnika na ciele danych temperatury na nadgarstku, kiedy aplikacja jest w użyciu."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Dostęp do pochodzących z czujnika na ciele danych temperatury na nadgarstku, kiedy aplikacja działa w tle."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Zezwala na dostęp aplikacji do pochodzących z czujnika na ciele danych temperatury na nadgarstku, kiedy aplikacja działa w tle."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Odczytywanie wydarzeń i informacji z kalendarza"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ta aplikacja może odczytywać wszystkie zapisane na tablecie wydarzenia z kalendarza i udostępniać oraz zapisywać dane kalendarza."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ta aplikacja może odczytywać wszystkie wydarzenia z kalendarza zapisane na urządzeniu z Androidem TV oraz udostępniać i zapisywać dane z kalendarza."</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Analiza twarzy została anulowana."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Użytkownik anulował rozpoznawanie twarzy"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Zbyt wiele prób. Spróbuj ponownie później."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Zbyt wiele prób. Rozpoznawanie twarzy zostało wyłączone."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Zbyt wiele prób. Użyj blokady ekranu."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nie można zweryfikować twarzy. Spróbuj ponownie."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Rozpoznawanie twarzy nie zostało skonfigurowane"</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Umożliwia posiadaczowi rozpoczęcie przeglądania informacji o funkcjach aplikacji."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"dostęp do danych czujnika z wysoką częstotliwością"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Zezwala aplikacji na pobieranie próbek danych z czujnika z częstotliwością wyższą niż 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"aktualizacja aplikacji bez działania ze strony użytkownika"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Pozwala na aktualizowanie zainstalowanej wcześniej aplikacji bez działania ze strony użytkownika"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Określ reguły hasła"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolowanie długości haseł blokady ekranu i kodów PIN oraz dozwolonych w nich znaków."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Monitorowanie prób odblokowania ekranu"</string>
@@ -1376,7 +1371,7 @@
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Wykryto analogowe urządzenie audio"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Podłączone urządzenie nie jest zgodne z tym telefonem. Kliknij, by dowiedzieć się więcej."</string>
<string name="adb_active_notification_title" msgid="408390247354560331">"Podłączono moduł debugowania USB"</string>
- <string name="adb_active_notification_message" msgid="5617264033476778211">"Kliknij, by wyłączyć debugowanie USB"</string>
+ <string name="adb_active_notification_message" msgid="5617264033476778211">"Kliknij, żeby wyłączyć debugowanie USB"</string>
<string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Wybierz, aby wyłączyć debugowanie USB."</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Podłączono debugowanie bezprzewodowe"</string>
<string name="adbwifi_active_notification_message" msgid="930987922852867972">"Kliknij, by wyłączyć debugowanie bezprzewodowe"</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikacja <xliff:g id="APP_NAME_0">%1$s</xliff:g> nie jest teraz dostępna. Zarządza tym aplikacja <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Więcej informacji"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Wznów działanie aplikacji"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Włączyć aplikacje służbowe?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Uzyskaj dostęp do służbowych aplikacji i powiadomień"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Włącz"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Cofnąć wstrzymanie aplikacji służbowych?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Cofnij wstrzymanie"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Połączenie alarmowe"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Uzyskaj dostęp do służbowych aplikacji i połączeń"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacja jest niedostępna"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest obecnie niedostępna."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – brak dostępu"</string>
@@ -2101,7 +2094,7 @@
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"OK"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Wyłącz"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Więcej informacji"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"W Androidzie 12 ulepszone powiadomienia zastąpiły dotychczasowe powiadomienia adaptacyjne. Ta funkcja pokazuje sugerowane działania i odpowiedzi oraz porządkuje powiadomienia.\n\nUlepszone powiadomienia mogą czytać całą zawartość powiadomień, w tym informacje osobiste takie jak nazwy kontaktów i treść wiadomości. Funkcja może też zamykać powiadomienia oraz reagować na nie, np. odbierać połączenia telefoniczne i sterować trybem Nie przeszkadzać."</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"W Androidzie 12 ulepszone powiadomienia zastąpiły dotychczasowe powiadomienia adaptacyjne. Ta funkcja pokazuje sugerowane działania i odpowiedzi oraz porządkuje powiadomienia. \n\nUlepszone powiadomienia mogą czytać całą zawartość powiadomień, w tym informacje prywatne, takie jak nazwy kontaktów i treść wiadomości. Funkcja ta może też zamykać powiadomienia oraz na nie reagować, np. odbierać połączenia telefoniczne i sterować trybem Nie przeszkadzać."</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Powiadomienie z informacją o trybie rutynowym"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Oszczędzanie baterii jest włączone"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Ograniczam wykorzystanie baterii, aby przedłużyć jej żywotność"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Kliknij, aby włączyć"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Brak aplikacji służbowych"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Brak aplikacji osobistych"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Otworzyć aplikację <xliff:g id="APP">%s</xliff:g> w profilu osobistym?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Otworzyć aplikację <xliff:g id="APP">%s</xliff:g> w profilu służbowym?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Użyj przeglądarki osobistej"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Użyj przeglądarki służbowej"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kod PIN do karty SIM odblokowujący sieć"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 8dca406..4256bfa 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite que o app acesse dados do sensor corporal, como a frequência cardíaca, a temperatura e a porcentagem de oxigênio no sangue, enquanto o app está em uso."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Acessar dados do sensor corporal, como a frequência cardíaca, segundo plano"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite que o app acesse dados do sensor corporal, como a frequência cardíaca, a temperatura e a porcentagem de oxigênio no sangue, enquanto o app está em segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Acessar dados de temperatura do sensor corporal no pulso enquanto o app está em uso."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite que o app acesse dados de temperatura do sensor corporal no pulso enquanto está em uso."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Acessar dados de temperatura do sensor corporal no pulso enquanto o app está em segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite que o app acesse dados de temperatura do sensor corporal no pulso enquanto está em segundo plano."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Ler detalhes e eventos da agenda"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Este app pode ler todos os eventos da agenda armazenados no seu tablet e compartilhar ou salvar os dados da sua agenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Este app pode ler todos os eventos da agenda armazenados no seu dispositivo Android TV e compartilhar ou salvar os dados da sua agenda."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operação facial cancelada."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo usuário"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Excesso de tentativas. Tente novamente mais tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Muitas tentativas. Desbloqueio facial desativado."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Muitas tentativas. Como alternativa, use o bloqueio de tela."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível verificar o rosto. Tente novamente."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"O Desbloqueio facial não foi configurado"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"O app <xliff:g id="APP_NAME_0">%1$s</xliff:g> não está disponível no momento. Isso é gerenciado pelo app <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saiba mais"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Retomar app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ativar apps de trabalho?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Acesse seus apps e notificações de trabalho"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Reativar apps de trabalho?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reativar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergência"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Acesse seus apps e ligações de trabalho"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
<string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Toque para ativar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Abrir o app <xliff:g id="APP">%s</xliff:g> no seu perfil pessoal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Abrir o app <xliff:g id="APP">%s</xliff:g> no seu perfil de trabalho?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar o navegador pessoal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar o navegador de trabalho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio da rede do chip"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 71b34a2..06c8183 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite à app aceder a dados de sensores de corpo, como ritmo cardíaco, temperatura e percentagem de oxigénio no sangue, enquanto está a ser usada."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Aceder a dados de sensores de corpo, como ritmo cardíaco, quando em seg. plano"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite à app aceder a dados de sensores de corpo, como ritmo cardíaco, temperatura e percentagem de oxigénio no sangue, enquanto está em segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Aceda a dados de temperatura do pulso de sensores de corpo enquanto a app está a ser usada."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite à app aceder a dados de temperatura do pulso de sensores de corpo enquanto a app está a ser usada."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Aceda a dados de temperatura do pulso de sensores de corpo enquanto a app está em segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite à app aceder a dados de temperatura do pulso de sensores de corpo enquanto a app está em segundo plano."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Ler detalhes e eventos do calendário"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Esta app pode ler todos os eventos do calendário armazenados no seu tablet e partilhar ou guardar os dados do calendário."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Esta app pode ler todos os eventos do calendário armazenados no seu dispositivo Android TV e partilhar ou guardar os dados do calendário."</string>
@@ -689,7 +685,7 @@
<string name="face_acquired_too_right" msgid="6245286514593540859">"Mova o telemóvel para a sua esquerda"</string>
<string name="face_acquired_too_left" msgid="9201762240918405486">"Mova o telemóvel para a sua direita"</string>
<string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Olhe mais diretamente para o dispositivo."</string>
- <string name="face_acquired_not_detected" msgid="1057966913397548150">"Não é possível ver o seu rosto. Mantenha o telemóvel ao nível dos olhos."</string>
+ <string name="face_acquired_not_detected" msgid="1057966913397548150">"Rosto não detetado. Segure o telemóvel ao nível dos olhos."</string>
<string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movimento. Mantenha o telemóvel firme."</string>
<string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volte a inscrever o rosto."</string>
<string name="face_acquired_too_different" msgid="2520389515612972889">"Impossível reconhecer o rosto. Tente novamente."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operação de rosto cancelada."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo utilizador"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Demasiadas tentativas. Tente mais tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Demasiadas tentativas. O Desbloqueio facial foi desativado."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiadas tentativas. Em alternativa, introduza o bloqueio de ecrã."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível validar o rosto. Tente novamente."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Não configurou o Desbloqueio facial"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"A app <xliff:g id="APP_NAME_0">%1$s</xliff:g> não está disponível neste momento. A app <xliff:g id="APP_NAME_1">%2$s</xliff:g> gere esta definição."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saiba mais"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Retomar app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ativar as apps de trabalho?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Obtenha acesso às suas apps de trabalho e notificações"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Retomar apps de trabalho?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Retomar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergência"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Obtenha acesso às suas apps de trabalho e chamadas"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"A app não está disponível"</string>
<string name="app_blocked_message" msgid="542972921087873023">"De momento, a app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para ativar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Sem apps de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Sem apps pessoais"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Abrir a app <xliff:g id="APP">%s</xliff:g> no seu perfil pessoal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Abrir a app <xliff:g id="APP">%s</xliff:g> no seu perfil de trabalho?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar navegador pessoal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar navegador de trabalho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio de rede do cartão SIM"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 8dca406..4256bfa 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite que o app acesse dados do sensor corporal, como a frequência cardíaca, a temperatura e a porcentagem de oxigênio no sangue, enquanto o app está em uso."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Acessar dados do sensor corporal, como a frequência cardíaca, segundo plano"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite que o app acesse dados do sensor corporal, como a frequência cardíaca, a temperatura e a porcentagem de oxigênio no sangue, enquanto o app está em segundo plano."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Acessar dados de temperatura do sensor corporal no pulso enquanto o app está em uso."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite que o app acesse dados de temperatura do sensor corporal no pulso enquanto está em uso."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Acessar dados de temperatura do sensor corporal no pulso enquanto o app está em segundo plano."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite que o app acesse dados de temperatura do sensor corporal no pulso enquanto está em segundo plano."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Ler detalhes e eventos da agenda"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Este app pode ler todos os eventos da agenda armazenados no seu tablet e compartilhar ou salvar os dados da sua agenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Este app pode ler todos os eventos da agenda armazenados no seu dispositivo Android TV e compartilhar ou salvar os dados da sua agenda."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operação facial cancelada."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo usuário"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Excesso de tentativas. Tente novamente mais tarde."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Muitas tentativas. Desbloqueio facial desativado."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Muitas tentativas. Como alternativa, use o bloqueio de tela."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível verificar o rosto. Tente novamente."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"O Desbloqueio facial não foi configurado"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"O app <xliff:g id="APP_NAME_0">%1$s</xliff:g> não está disponível no momento. Isso é gerenciado pelo app <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Saiba mais"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Retomar app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ativar apps de trabalho?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Acesse seus apps e notificações de trabalho"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Ativar"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Reativar apps de trabalho?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reativar"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergência"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Acesse seus apps e ligações de trabalho"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
<string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Toque para ativar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Abrir o app <xliff:g id="APP">%s</xliff:g> no seu perfil pessoal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Abrir o app <xliff:g id="APP">%s</xliff:g> no seu perfil de trabalho?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar o navegador pessoal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar o navegador de trabalho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio da rede do chip"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 871aeb9..7405f22 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Permite aplicației să acceseze date de la senzorii corporali, cum ar fi pulsul, temperatura și procentul de oxigen din sânge, în timpul folosirii aplicației."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Să acceseze date de la senzorii corporali, precum pulsul, când rulează în fundal"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Permite aplicației să acceseze date de la senzorii corporali, cum ar fi pulsul, temperatura și procentul de oxigen din sânge, în timp ce aplicația rulează în fundal."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Accesează date despre temperatura încheieturii de la senzorii corporali în timpul folosirii aplicației."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Permite aplicației să acceseze date despre temperatura încheieturii de la senzorii corporali în timpul folosirii aplicației."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Accesează date despre temperatura încheieturii de la senzorii corporali în timp ce aplicația rulează în fundal."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Permite aplicației să acceseze date despre temperatura încheieturii de la senzorii corporali în timp ce aplicația rulează în fundal."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"să citească evenimentele din calendar și detaliile"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Această aplicație poate să citească toate evenimentele din calendar stocate pe tabletă și să trimită sau să salveze datele din calendar."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Această aplicație poate să citească toate evenimentele din calendar stocate pe dispozitivul Android TV și să trimită sau să salveze datele din calendar."</string>
@@ -714,7 +710,8 @@
<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încearcă mai târziu."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Prea multe încercări. Deblocarea facială este dezactivată."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Prea multe încercări. Folosește blocarea ecranului."</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 ai configurat Deblocarea facială"</string>
@@ -801,10 +798,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Permite proprietarului să înceapă să vadă informațiile despre funcții pentru o aplicație."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"să acceseze date de la senzori la o rată de eșantionare mare"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Permite aplicației să colecteze date de la senzori la o rată de eșantionare de peste 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"să actualizeze aplicația fără acțiuni din partea utilizatorului"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Permite deținătorului să actualizeze aplicația pe care a instalat-o anterior fără acțiuni din partea utilizatorului"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Să seteze reguli pentru parolă"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Stabilește lungimea și tipul de caractere permise pentru parolele și codurile PIN de blocare a ecranului."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Să monitorizeze încercările de deblocare a ecranului"</string>
@@ -1957,11 +1952,9 @@
<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">"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">"Activezi aplicațiile pentru lucru?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Obține acces la aplicațiile și notificările pentru lucru"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Activează"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Reactivezi aplicații lucru?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Reactivează"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgență"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Solicită acces la aplicațiile și apelurile pentru lucru"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplicația nu este disponibilă"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu este disponibilă momentan."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nu este disponibilă"</string>
@@ -2171,8 +2164,10 @@
<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">"Deschizi <xliff:g id="APP">%s</xliff:g> în profilul personal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Deschizi <xliff:g id="APP">%s</xliff:g> în profilul de serviciu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Folosește browserul personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Folosește browserul de serviciu"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Codul PIN de deblocare SIM privind rețeaua"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 88b39ae..e3262f5 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Когда приложение используется, это разрешение предоставляет ему доступ к данным нательных датчиков (например, пульсу, температуре, уровню кислорода в крови)."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Доступ к данным нательных датчиков, когда приложение работает в фоновом режиме"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Когда приложение работает в фоновом режиме, это разрешение предоставляет ему доступ к данным нательных датчиков (например, пульсу, температуре, уровню кислорода в крови)."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Доступ к данным с нательных датчиков о температуре запястья (при использовании приложения)"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Когда приложение используется, это разрешение предоставляет ему доступ к данным о температуре запястья, которые собираются нательными датчиками."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Доступ к данным с нательных датчиков о температуре запястья (при работе приложения в фоновом режиме)"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Когда приложение работает в фоновом режиме, это разрешение предоставляет ему доступ к данным о температуре запястья, которые собираются нательными датчиками."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Чтение мероприятий и данных"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Приложение может считывать, отправлять и сохранять информацию о мероприятиях в календаре планшета."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Приложение может считывать, отправлять и сохранять информацию о мероприятиях в календаре устройства Android TV."</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Распознавание отменено"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Фейсконтроль: операция отменена пользователем."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Слишком много попыток. Повторите позже."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Слишком много попыток. Фейсконтроль отключен."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Слишком много попыток. Используйте другой способ разблокировки экрана."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Не удалось распознать лицо. Повторите попытку."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Вы не настроили фейсконтроль."</string>
@@ -1292,7 +1289,7 @@
<string name="volume_unknown" msgid="4041914008166576293">"Громкость"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Громкость Bluetooth-устройства"</string>
<string name="volume_icon_description_ringer" msgid="2187800636867423459">"Громкость рингтона"</string>
- <string name="volume_icon_description_incall" msgid="4491255105381227919">"Громкости мелодии вызова"</string>
+ <string name="volume_icon_description_incall" msgid="4491255105381227919">"Громкость разговора"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"Громкость мультимедиа"</string>
<string name="volume_icon_description_notification" msgid="579091344110747279">"Громкость уведомлений"</string>
<string name="ringtone_default" msgid="9118299121288174597">"Мелодия по умолчанию"</string>
@@ -1956,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Приложение \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" недоступно. Его работу ограничивает приложение \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\"."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Подробнее"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Возобновить работу приложения"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Включить рабочие приложения?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Вы получите доступ к рабочим приложениям и уведомлениям"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Включить"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Включить рабочие приложения?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Включить"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Экстренный вызов"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Получите доступ к рабочим приложениям и звонкам."</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Приложение недоступно"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" сейчас недоступно."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недоступно: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2170,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Нажмите, чтобы включить"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Не поддерживается рабочими приложениями."</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Не поддерживается личными приложениями."</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Открыть приложение \"<xliff:g id="APP">%s</xliff:g>\" в личном профиле?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Открыть приложение \"<xliff:g id="APP">%s</xliff:g>\" в рабочем профиле?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Использовать личный браузер"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Использовать рабочий браузер"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код для разблокировки сети SIM-карты"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 32d2170..f01cfab 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"යෙදුම භාවිතයේ පවතින අතරතුර හෘද ස්පන්දන වේගය, උෂ්ණත්වය සහ රුධිර ඔක්සිජන් ප්රතිශතය වැනි ශරීර සංවේදක දත්ත වෙත ප්රවේශ වීමට යෙදුමට අවසර දෙයි."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"පසුබිමේ ඇති අතරතුර හෘද ස්පන්දන වේගය වැනි ශරීර සංවේදක දත්ත වෙත ප්රවේශ වන්න"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"යෙදුම පසුබිමේ ඇති අතර හෘද ස්පන්දන වේගය, උෂ්ණත්වය සහ රුධිර ඔක්සිජන් ප්රතිශතය වැනි ශරීර සංවේදක දත්ත වෙත ප්රවේශ වීමට යෙදුමට අවසර දෙයි."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"යෙදුම භාවිතයේ පවතින අතරේ ශරීර සංවේදක මැණික් කටුවේ උෂ්ණත්ව දත්ත වෙත ප්රවේශ වන්න."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"යෙදුම භාවිතයේ ඇති අතරේ, ශරීර සංවේදක මැණික් කටුවේ උෂ්ණත්ව දත්ත වෙත ප්රවේශ වීමට යෙදුමට ඉඩ දෙයි."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"යෙදුම පසුබිමේ ඇති අතරේ ශරීර සංවේදක මැණික් කටුවේ උෂ්ණත්ව දත්ත වෙත ප්රවේශ වන්න."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"යෙදුම පසුබිමේ ඇති අතරේ, ශරීර සංවේදක මැණික් කටුවේ උෂ්ණත්ව දත්ත වෙත ප්රවේශ වීමට යෙදුමට ඉඩ දෙයි."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"දින දර්ශන සිදුවීම් හා විස්තර කියවන්න"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"මෙම යෙදුමට ඔබගේ ටැබ්ලට් පරිගණකය මත ගබඩා වී ඇති සියලු දින දර්ශන කියවීමට සහ සහ ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට සහ සුරැකීමට හැකිය."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"මෙම යෙදුමට ඔබගේ Android TV මත ගබඩා කර ඇති සියලු දින දර්ශන සිදුවීම් කියවීමට සහ ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට හෝ සුරැකීමට හැකිය."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"මුහුණු මෙහෙයුම අවලංගු කරන ලදී."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"පරිශීලකයා විසින් මුහුණෙන් අගුළු හැරීම අවලංගු කරන ලදි"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"උත්සාහයන් ඉතා වැඩි ගණනකි. පසුව නැවත උත්සාහ කරන්න."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"උත්සාහයන් ඉතා වැඩි ගණනකි. මුහුණෙන් අගුළු හැරීම අබලයි."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"උත්සාහයන් ඉතා වැඩි ගණනකි. ඒ වෙනුවට තිර අගුල ඇතුළු කරන්න."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"මුහුණ සත්යාපන කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"ඔබ මුහුණෙන් අගුළු හැරීම පිහිටුවා නැත"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> මේ අවස්ථාවේදී ලබා ගත නොහැකිය. මෙය <xliff:g id="APP_NAME_1">%2$s</xliff:g> මගින් කළමනාකරණය කෙරේ."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"තව දැන ගන්න"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"යෙදුම විරාම කිරීම ඉවත් කරන්න"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"කාර්යාල යෙදු. ක්රියා. කරන්නද?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"ඔබගේ කාර්යාල යෙදුම් සහ දැනුම්දීම් වෙත ප්රවේශය ලබා ගන්න"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ක්රියාත්මක කරන්න"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"කාර්ය යෙදුම් විරාම නොකරන්න ද?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"විරාම නොකරන්න"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"හදිසි අවස්ථාව"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"ඔබේ කාර්යාල යෙදුම් සහ ඇමතුම් වෙත ප්රවේශය ලබා ගන්න"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"යෙදුම ලබා ගත නොහැකිය"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> මේ දැන් ලබා ගත නොහැකිය."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> නොතිබේ"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ක්රියාත්මක කිරීමට තට්ටු කරන්න"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"කාර්යාල යෙදුම් නැත"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"පුද්ගලික යෙදුම් නැත"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> ඔබගේ පුද්ගලික පැතිකඩ තුළ විවෘත කරන්නද?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> ඔබගේ කාර්යාල පැතිකඩ තුළ විවෘත කරන්නද?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"පුද්ගලික බ්රව්සරය භාවිත කරන්න"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"කාර්යාල බ්රව්සරය භාවිත කරන්න"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ජාල අගුලු හැරීමේ PIN"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index a5aaf89..64ec9ae 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Poskytne aplikácii prístup k dátam telových senzorov, ako sú pulz, teplota a saturácia krvi kyslíkom počas používania aplikácie."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Prístup k dátam telových senzorov (napríklad pulzu) počas spustenia na pozadí"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Poskytne aplikácii prístup k dátam telových senzorov, ako sú pulz, teplota a saturácia krvi kyslíkom počas spustenia aplikácie na pozadí."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Prístup k údajom o teplote zápästia z telového senzora počas používania aplikácie."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Umožňuje aplikácii prístup k údajom o teplote zápästia z telového senzora počas používania aplikácie."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Prístup k údajom o teplote zápästia z telového senzora, keď je aplikácia na pozadí."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Umožňuje aplikácii prístup k údajom o teplote zápästia z telového senzora, keď je aplikácia na pozadí."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Čítanie udalostí kalendára a podrobností"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Táto aplikácia môže čítať všetky udalosti kalendára uložené vo vašom tablete a zdieľať alebo ukladať dáta kalendára."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Táto aplikácia môže čítať všetky udalosti kalendára uložené vo vašom zariadení Android TV a zdieľať alebo ukladať údaje kalendára."</string>
@@ -629,11 +625,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Chyba overenia"</string>
<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_partial" msgid="4323789264604479684">"Pevne pritlačte prst na senzor"</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_fast" msgid="1628459767349116104">"Pevne pritlačte prst na 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>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Operácia týkajúca sa tváre bola zrušená"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Odomknutie tvárou zrušil používateľ"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Príliš veľa pokusov. Skúste to neskôr."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Príliš veľa pokusov. Odomknutie tvárou bolo zakázané."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Príliš veľa pokusov. Zadajte namiesto toho zámku obrazovky."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Nedá sa overiť tvár. Skúste to znova."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Nenastavili ste odomknutie tvárou"</string>
@@ -1956,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikácia <xliff:g id="APP_NAME_0">%1$s</xliff:g> nie je momentálne k dispozícii. Spravuje to aplikácia <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Ďalšie informácie"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Znova spustiť aplikáciu"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Zapnúť pracovné aplikácie?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Získajte prístup k svojim pracovným aplikáciám a upozorneniam"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Zapnúť"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušiť pozastavenie aplikácií?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Zrušiť pozastavenie"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Zavolať na tiesňovú linku"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Získajte prístup k svojim pracovným aplikáciám a hovorom"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikácia nie je dostupná"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> nie je teraz dostupná."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nie je k dispozícii"</string>
@@ -2170,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Zapnúť klepnutím"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žiadne pracovné aplikácie"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žiadne osobné aplikácie"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Chcete otvoriť <xliff:g id="APP">%s</xliff:g> v osobnom profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Chcete otvoriť <xliff:g id="APP">%s</xliff:g> v pracovnom profile?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použiť osobný prehliadač"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použiť pracovný prehliadač"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN na odomknutie siete pre SIM kartu"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 8a9ff14..b8692d7 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -212,7 +212,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Vklopi"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Klici in sporočila so izklopljeni"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Delovne aplikacije so začasno zaustavljene. Telefonskih klicev in sporočil SMS ne boste prejemali."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Zaženi delovne aplikacije"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Aktiviraj delovne aplikacije"</string>
<string name="me" msgid="6207584824693813140">"Jaz"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Možnosti tabličnega računalnika"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Možnosti naprave Android TV"</string>
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Aplikaciji dovoljuje dostop do podatkov tipal telesnih funkcij, kot so srčni utrip, temperatura, odstotek kisika v krvi, ko je aplikacija v uporabi."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Dostop do podatkov tipal telesnih funkcij, kot je srčni utrip, ko je v ozadju"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Aplikaciji dovoljuje dostop do podatkov tipal telesnih funkcij, kot so srčni utrip, temperatura, odstotek kisika v krvi, ko je aplikacija v ozadju."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Dostop do podatkov tipal telesnih funkcij o temperaturi na zapestju, ko je aplikacija v uporabi."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Aplikaciji dovoljuje dostop do podatkov tipal telesnih funkcij o temperaturi na zapestju, ko je aplikacija v uporabi."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Dostop do podatkov tipal telesnih funkcij o temperaturi na zapestju, ko je aplikacija v ozadju."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Aplikaciji dovoljuje dostop do podatkov tipal telesnih funkcij o temperaturi na zapestju, ko je aplikacija v ozadju."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Branje dogodkov v koledarjih in podrobnosti koledarjev"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ta aplikacija lahko prebere vse dogodke v koledarju, ki so shranjeni v tabličnem računalniku, ter shrani podatke koledarja ali jih deli z drugimi."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ta aplikacija lahko prebere vse dogodke v koledarju, ki so shranjeni v napravi Android TV, ter shrani podatke koledarja ali jih deli z drugimi."</string>
@@ -629,11 +625,11 @@
<string name="biometric_error_generic" msgid="6784371929985434439">"Napaka pri preverjanju pristnosti"</string>
<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_partial" msgid="4323789264604479684">"Prst dobro pridržite na tipalu"</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_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>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Dejanje z obrazom je bilo preklicano."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Odklepanje z obrazom je preklical uporabnik."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Preveč poskusov. Poskusite znova pozneje."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Preveč poskusov. Odklepanje z obrazom je onemogočeno."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Preveč poskusov. Uporabite odklepanje zaslona s poverilnico."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Obraza ni mogoče preveriti. Poskusite znova."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Odklepanja z obrazom niste nastavili."</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Imetniku omogoča začetek ogledovanja informacij o funkcijah poljubne aplikacije."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"dostop do podatkov tipal z večjo hitrostjo vzorčenja"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Aplikaciji dovoljuje, da vzorči podatke tipal s hitrostjo, večjo od 200 Hz."</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"posodobitev aplikacije brez dejanja uporabnika"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Dovoli shranjevalniku, da posodobi aplikacijo, ki jo je pred tem namestil brez dejanja uporabnika."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Nastavitev pravil za geslo"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Nadzor nad dolžino in znaki, ki so dovoljeni v geslih in kodah PIN za odklepanje zaslona."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Nadzor nad poskusi odklepanja zaslona"</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikacija <xliff:g id="APP_NAME_0">%1$s</xliff:g> trenutno ni na voljo. To upravlja aplikacija <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Več o tem"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Prekliči začasno zaustavitev aplikacije"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vklop delovnih aplikacij?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pridobite dostop do delovnih aplikacij in obvestil za delovni profil."</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Vklopi"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Želite znova aktivirati delovne aplikacije?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Znova aktiviraj"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Nujni primer"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Zagotovite si dostop do delovnih aplikacij in klicev."</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija ni na voljo"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno ni na voljo."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"»<xliff:g id="ACTIVITY">%1$s</xliff:g>« ni na voljo"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Dotaknite se za vklop"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nobena delovna aplikacija ni na voljo"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nobena osebna aplikacija"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Želite aplikacijo <xliff:g id="APP">%s</xliff:g> odpreti v osebnem profilu?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Želite aplikacijo <xliff:g id="APP">%s</xliff:g> odpreti v delovnem profilu?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Uporabi osebni brskalnik"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Uporabi delovni brskalnik"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Koda PIN za odklepanje omrežja kartice SIM"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index eed531a..78e1d89 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Lejon aplikacionin që të ketë qasje te të dhënat e sensorit të trupit, si p.sh. rrahjet e zemrës, temperatura dhe përqindja e oksigjenit në gjak ndërkohë që aplikacioni është në përdorim."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Qasje te të dhënat e sensorit të trupit, si rrahjet e zemrës kur është në sfond"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Lejon aplikacionin që të ketë qasje te të dhënat e sensorit të trupit, si p.sh. rrahjet e zemrës, temperatura dhe përqindja e oksigjenit në gjak ndërkohë që aplikacioni është në sfond."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Qasu te të dhënat e temperaturës së kyçit të dorës nga sensori i trupit ndërsa aplikacioni është në përdorim."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Lejon aplikacionin të ketë qasje te të dhënat e temperaturës së kyçit të dorës nga sensori i trupit, ndërsa aplikacioni është në përdorim."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Qasu te të dhënat e temperaturës së kyçit të dorës nga sensori i trupit ndërsa aplikacioni është në sfond."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Lejon aplikacionin të ketë qasje te të dhënat e temperaturës së kyçit të dorës nga sensori i trupit, ndërsa aplikacioni është në sfond."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Lexo ngjarjet e kalendarit dhe detajet"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ky aplikacion mund të lexojë të gjitha ngjarjet e kalendarit të ruajtura në tabletin tënd dhe të ndajë ose të ruajë të dhënat e kalendarit."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ky aplikacion mund të lexojë të gjitha ngjarjet e kalendarit të ruajtura në pajisjen tënde Android TV dhe të ndajë ose të ruajë të dhënat e kalendarit."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Veprimi me fytyrën u anulua."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"\"Shkyçja me fytyrë\" u anulua nga përdoruesi"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Shumë përpjekje. Provo sërish më vonë."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Shumë përpjekje. \"Shkyçja me fytyrë\" u çaktivizua."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Shumë përpjekje. Fut më mirë kyçjen e ekranit."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Fytyra nuk mund të verifikohet. Provo përsëri."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Nuk e ke konfiguruar \"Shkyçjen me fytyrë\""</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> nuk ofrohet në këtë moment. Kjo menaxhohet nga <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Mëso më shumë"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Anulo pauzën për aplikacionin"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Të aktivizohen aplikacionet e punës?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Merr qasje tek aplikacionet e punës dhe njoftimet e tua"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivizo"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Hiq nga pauza apl. e punës?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Hiq nga pauza"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgjenca"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Merr qasje tek aplikacionet e punës dhe telefonatat e tua"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Aplikacioni nuk ofrohet"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk ofrohet për momentin."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nuk ofrohet"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Trokit për ta aktivizuar"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nuk ka aplikacione pune"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nuk ka aplikacione personale"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Të hapet <xliff:g id="APP">%s</xliff:g> në profilin tënd personal?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Të hapet <xliff:g id="APP">%s</xliff:g> në profilin tënd të punës?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Përdor shfletuesin personal"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Përdor shfletuesin e punës"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kodi PIN i shkyçjes së rrjetit të kartës SIM"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 179707d..5807e1e 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -464,10 +464,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Дозвољава апликацији да приступа подацима сензора за тело, као што су пулс, температура и проценат кисеоника у крви док се апликација користи."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Приступ подацима сензора за тело, као што је пулс, у позадини"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Дозвољава апликацији да приступа подацима сензора за тело, као што су пулс, температура и проценат кисеоника у крви док је апликација у позадини."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Приступајте подацима о температури са сензора за тело на ручном зглобу док се апликација користи."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Дозвољава апликацији да приступа подацима о температури са сензора за тело на ручном зглобу док се апликација користи."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Приступајте подацима о температури са сензора за тело на ручном зглобу док је апликација у позадини."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Дозвољава апликацији да приступа подацима о температури са сензора за тело на ручном зглобу док је апликација у позадини."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Читање догађаја и података из календара"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ова апликација може да чита све догађаје из календара које чувате на таблету, као и да дели или чува податке из календара."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ова апликација може да чита све догађаје из календара које чувате на Android TV уређају, као и да дели или чува податке из календара."</string>
@@ -714,7 +710,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Обрада лица је отказана."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Корисник је отказао откључавање лицем"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Превише покушаја. Пробајте поново касније."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Превише покушаја. Откључавање лицем је онемогућено."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Превише покушаја. Користите закључавање екрана за то."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Провера лица није успела. Пробајте поново."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Нисте подесили откључавање лицем"</string>
@@ -1955,11 +1952,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Апликација <xliff:g id="APP_NAME_0">%1$s</xliff:g> тренутно није доступна. <xliff:g id="APP_NAME_1">%2$s</xliff:g> управља доступношћу."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Сазнајте више"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Опозови паузирање апликације"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Укључујете пословне апликације?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Приступајте пословним апликацијама и обавештењима"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Укључи"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Укључити пословне апликације?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Опозови паузу"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Хитан случај"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Приступајте пословним апликацијама и позивима"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Апликација није доступна"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> тренутно није доступна."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – није доступно"</string>
@@ -2169,8 +2164,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Додирните да бисте укључили"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема пословних апликација"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема личних апликација"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Желите да на личном профилу отворите: <xliff:g id="APP">%s</xliff:g>?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Желите да на пословном профилу отворите: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи лични прегледач"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи пословни прегледач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за откључавање SIM мреже"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 57c31db..fbb4ff4 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Tillåter att appen får åtkomst till data från kroppssensorer, t.ex. puls, kroppstemperatur och blodets syrehalt, medan appen används."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Åtkomst till data från kroppssensorer, t.ex. puls, i bakgrunden"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Tillåter att appen får åtkomst till data från kroppssensorer, t.ex. puls, kroppstemperatur och blodets syrehalt, medan appen är i bakgrunden."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Åtkomst till data om handledstemperatur från kroppssensorer medan appen används."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Tillåter att appen får åtkomst till data om handledstemperatur från kroppssensorer medan appen används."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Åtkomst till data om handledstemperatur från kroppssensorer medan appen är i bakgrunden."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Tillåter att appen får åtkomst till data om handledstemperatur från kroppssensorer medan appen är i bakgrunden."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Läsa kalenderhändelser och kalenderuppgifter"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Appen kan läsa alla kalenderhändelser som sparats på surfplattan och dela eller spara uppgifter i din kalender."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Appen kan läsa alla kalenderhändelser som sparats på Android TV-enheten och dela eller spara uppgifter i din kalender."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Ansiktsåtgärden har avbrutits."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Ansiktslås avbröts av användaren"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Du har gjort för många försök. Försök igen senare."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"För många försök. Ansiktslås har inaktiverats."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"För många försök. Ange skärmlås i stället."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Det gick inte att verifiera ansiktet. Försök igen."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har inte konfigurerat ansiktslås"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Tillåter att innehavaren börjar visa information om funktioner för en app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"åtkomst till sensordata med en hög samplingsfrekvens"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Tillåter att appen får åtkomst till sensordata med en högre samplingsfrekvens än 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"uppdatera appen utan att användaren behöver vidta åtgärder"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Tillåter att innehavaren uppdaterar en tidigare installerad app utan att användaren behöver vidta åtgärder"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Ange lösenordsregler"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Styr tillåten längd och tillåtna tecken i lösenord och pinkoder för skärmlåset."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Övervaka försök att låsa upp skärmen"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> är inte tillgänglig just nu. Detta hanteras av <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Läs mer"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Återuppta app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vill du aktivera jobbappar?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Få åtkomst till jobbappar och aviseringar"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aktivera"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Vill du återuppta jobbappar?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Återuppta"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Nödsituation"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Få åtkomst till jobbappar och samtal"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Appen är inte tillgänglig"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> är inte tillgängligt just nu."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> är inte tillgänglig"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Tryck för att aktivera"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Inga jobbappar"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Inga privata appar"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vill du öppna <xliff:g id="APP">%s</xliff:g> i din privata profil?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vill du öppna <xliff:g id="APP">%s</xliff:g> i din jobbprofil?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Använd privat webbläsare"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Använd jobbwebbläsare"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkod för upplåsning av nätverk för SIM-kort"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 6eb0780..ce28bd7 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Hurushusu programu ifikie data ya vitambuzi shughuli za mwili, kama vile mapigo ya moyo, halijoto na asilimia ya oksijeni kwenye damu wakati programu inatumika."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Fikia data ya vitambuzi shughuli za mwili, kama vile mapigo ya moyo, wakati programu inatumika chinichini"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Hurushusu programu ifikie data ya vitambuzi shughuli za mwili, kama vile mapigo ya moyo, halijoto na asilimia ya oksijeni kwenye damu wakati programu inatumika chinichini."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Fikia data ya kitambuzi cha halijoto ya kifundo cha mkono, wakati programu inatumika."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Huruhusu programu kufikia data ya kitambuzi cha halijoto ya kifundo cha mkono, wakati programu inatumika."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Fikia data ya kitambuzi cha halijoto ya kifundo cha mkono, wakati programu inatumika chinichini."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Huruhusu programu kufikia data ya kitambuzi cha halijoto ya kifundo cha mkono, wakati programu inatumika chinichini."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Soma matukio na maelezo ya kalenda"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Programu hii inaweza kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye kompyuta yako kibao na kushiriki au kuhifadhi data yako ya kalenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Programu hii inaweza kusoma matukio yote ya kalenda yaliyohifadhiwa kwenye kifaa chako cha Android TV na kushiriki au kuhifadhi data ya kalenda yako."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Utendaji wa kitambulisho umeghairiwa."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Hatua ya Kufungua kwa Uso imeghairiwa na mtumiaji"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Umejaribu mara nyingi mno. Jaribu tena baadaye."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Umejaribu mara nyingi mno. Umezima kipengele cha Kufungua kwa Uso."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Umejaribu mara nyingi mno. Weka mbinu ya kufunga skrini badala yake."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Imeshindwa kuthibitisha uso. Jaribu tena."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Hujaweka mipangilio ya kipengele cha Kufungua kwa Uso"</string>
@@ -1876,7 +1873,7 @@
<string name="confirm_battery_saver" msgid="5247976246208245754">"Sawa"</string>
<string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Kiokoa Betri huwasha Mandhari meusi na kudhibiti au kuzima shughuli za chinichini, baadhi ya madoido yanayoonekana, vipengele fulani na baadhi ya miunganisho ya mtandao."</string>
<string name="battery_saver_description" msgid="8518809702138617167">"Kiokoa Betri huwasha Mandhari meusi na kudhibiti au kuzima shughuli za chinichini, baadhi ya madoido yanayoonekana, vipengele fulani na baadhi ya miunganisho ya mtandao."</string>
- <string name="data_saver_description" msgid="4995164271550590517">"Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chinichini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozifungua."</string>
+ <string name="data_saver_description" msgid="4995164271550590517">"Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chinichini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozigusa."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Ungependa Kuwasha Kiokoa Data?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Washa"</string>
<string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{Kwa dakika moja (hadi {formattedTime})}other{Kwa dakika # (hadi {formattedTime})}}"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> haipatikani kwa sasa. Inasimamiwa na <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Pata maelezo zaidi"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Acha kusimamisha programu"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Iwashe programu za kazini?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Pata uwezo wa kufikia arifa na programu zako za kazini"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Washa"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Je, ungependa kuacha kusitisha programu za kazini?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Acha kusitisha"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Simu za dharura"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Pata uwezo wa kufikia simu na programu zako za kazini"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Programu haipatikani"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> haipatikani hivi sasa."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> haipatikani"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Gusa ili uwashe"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Hakuna programu za kazini"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Hakuna programu za binafsi"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Je, unataka kufungua <xliff:g id="APP">%s</xliff:g> katika wasifu wako binafsi?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Je, unataka kufungua <xliff:g id="APP">%s</xliff:g> katika wasifu wako wa kazi?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Tumia kivinjari cha binafsi"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Tumia kivinjari cha kazini"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ya kufungua mtandao wa SIM"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 012444e..26121c2 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ஆப்ஸ் பயன்பாட்டில் இருக்கும்போது இதயத் துடிப்பு, வெப்பநிலை, ரத்த ஆக்ஸிஜன் சதவீதம் போன்ற உடல் சென்சார் தரவை அணுக ஆப்ஸை அனுமதிக்கிறது."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"பின்னணியில் இயங்கும்போது இதயத் துடிப்பு போன்ற உடல் சென்சார் தரவை அணுகுதல்"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ஆப்ஸ் பின்னணியில் இயங்கும்போது இதயத் துடிப்பு, வெப்பநிலை, ரத்த ஆக்ஸிஜன் சதவீதம் போன்ற உடல் சென்சார் தரவை அணுக ஆப்ஸை அனுமதிக்கிறது."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ஆப்ஸ் பயன்பாட்டில் இருக்கும்போது உடல் சென்சார் மணிக்கட்டு வெப்பநிலைத் தரவை அணுகுதல்."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ஆப்ஸ் பயன்பாட்டில் இருக்கும்போது உடல் சென்சார் மணிக்கட்டு வெப்பநிலைத் தரவை அணுகுவதற்கு ஆப்ஸை அனுமதிக்கும்."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ஆப்ஸ் பின்னணியில் இயங்கும்போது உடல் சென்சார் மணிக்கட்டு வெப்பநிலைத் தரவை அணுகுதல்."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ஆப்ஸ் பின்னணியில் இயங்கும்போது உடல் சென்சார் மணிக்கட்டு வெப்பநிலைத் தரவை அணுகுவதற்கு ஆப்ஸை அனுமதிக்கும்."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"கேலெண்டர் நிகழ்வுகளையும் விவரங்களையும் படிக்கலாம்"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"இந்த ஆப்ஸ் உங்கள் டேப்லெட்டில் சேமிக்கப்பட்டுள்ள கேலெண்டர் நிகழ்வுகள் அனைத்தையும் படிக்கலாம், உங்கள் கேலெண்டர் தரவைப் பகிரலாம் அல்லது சேமிக்கலாம்."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"உங்கள் Android TVயில் சேமித்துள்ள அனைத்துக் கேலெண்டர் நிகழ்வுகளையும் இந்த ஆப்ஸால் தெரிந்துகொள்ள முடியும். அத்துடன் உங்களின் கேலெண்டர் தரவைப் பகிரவும் சேமிக்கவும் முடியும்."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"முக அங்கீகாரச் செயல்பாடு ரத்துசெய்யப்பட்டது."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"பயனரால் \'முகம் காட்டித் திறத்தல்\' ரத்துசெய்யப்பட்டது"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"பலமுறை முயன்றுவிட்டீர்கள். பிறகு முயலவும்."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"பலமுறை முயன்றுவிட்டீர்கள். \'முகம் காட்டித் திறத்தல்\' அம்சம் முடக்கப்பட்டது."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"பலமுறை முயன்றுவிட்டீர்கள். இதற்குப் பதிலாக, திரைப் பூட்டைப் பயன்படுத்தவும்."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"முகத்தைச் சரிபார்க்க இயலவில்லை. மீண்டும் முயலவும்."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை அமைக்கவில்லை."</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ஆப்ஸின் அம்சங்கள் குறித்த தகவல்களைப் பார்ப்பதற்கான அனுமதியை ஹோல்டருக்கு வழங்கும்."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"அதிகளவிலான சாம்பிளிங் ரேட்டில் சென்சார் தரவை அணுகுதல்"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"200 ஹெர்ட்ஸ்க்கும் அதிகமான வீதத்தில் சென்சார் தரவை மாதிரியாக்க ஆப்ஸை அனுமதிக்கும்"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"பயனர் நடவடிக்கை இல்லாமல் ஆப்ஸைப் புதுப்பித்தல்"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"பயனர் நடவடிக்கை இல்லாமல் ஏற்கெனவே நிறுவப்பட்ட ஆப்ஸைப் புதுப்பிக்க ஹோல்டரை அனுமதிக்கும்"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"கடவுச்சொல் விதிகளை அமைக்கவும்"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"திரைப் பூட்டின் கடவுச்சொற்கள் மற்றும் பின்களில் அனுமதிக்கப்படும் நீளத்தையும் எழுத்துக்குறிகளையும் கட்டுப்படுத்தும்."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"திரையை அன்லாக் செய்வதற்கான முயற்சிகளைக் கண்காணி"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"இப்போது <xliff:g id="APP_NAME_0">%1$s</xliff:g> ஆப்ஸை உபயோகிக்க இயலாது. இதை <xliff:g id="APP_NAME_1">%2$s</xliff:g> நிர்வகிக்கிறது."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"மேலும் அறிக"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ஆப்ஸ் இயக்கு"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"பணி ஆப்ஸை இயக்கவா?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"உங்கள் பணி ஆப்ஸுக்கும் அறிவிப்புகளுக்குமான அணுகலைப் பெறுங்கள்"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"இயக்கு"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"பணி ஆப்ஸை மீண்டும் இயக்கவா?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"மீண்டும் இயக்கு"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"அவசர அழைப்பு"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"உங்கள் பணி ஆப்ஸுக்கும் அழைப்புகளுக்குமான அணுகலைப் பெறுங்கள்"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"இந்த ஆப்ஸ் இப்போது கிடைப்பதில்லை"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் இப்போது கிடைப்பதில்லை."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> இல்லை"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ஆன் செய்யத் தட்டுக"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"பணி ஆப்ஸ் எதுவுமில்லை"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"தனிப்பட்ட ஆப்ஸ் எதுவுமில்லை"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"உங்கள் தனிப்பட்ட கணக்கில் <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறக்கவா?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"உங்கள் பணிக் கணக்கில் <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறக்கவா?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"தனிப்பட்ட உலாவியைப் பயன்படுத்து"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"பணி உலாவியைப் பயன்படுத்து"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"சிம் நெட்வொர்க் அன்லாக் பின்"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index e333a48..fbac1c4 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"యాప్ ఉపయోగంలో ఉన్నప్పుడు గుండె స్పందన రేటు, ఉష్ణోగ్రత, ఇంకా రక్తంలోని ఆక్సిజన్ శాతం వంటి శరీర సెన్సార్ డేటాను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"బ్యాక్గ్రౌండ్లో గుండె స్పందన రేటు వంటి శరీర సెన్సార్ డేటాను యాక్సెస్ చేయండి"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"యాప్ బ్యాక్గ్రౌండ్లో ఉన్నప్పుడు గుండె స్పందన రేటు, ఉష్ణోగ్రత, ఇంకా రక్తంలోని ఆక్సిజన్ శాతం వంటి శరీర సెన్సార్ డేటాను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"యాప్ వినియోగంలో ఉన్నప్పుడు, శరీర సెన్సార్ మణికట్టు ఉష్ణోగ్రత డేటాను యాక్సెస్ చేయండి."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"యాప్ వినియోగంలో ఉన్నప్పుడు, శరీర సెన్సార్ మణికట్టు ఉష్ణోగ్రత డేటాను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"యాప్ బ్యాక్గ్రౌండ్లో ఉన్నప్పుడు, శరీర సెన్సార్ మణికట్టు ఉష్ణోగ్రత డేటాను యాక్సెస్ చేయండి."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"యాప్ బ్యాక్గ్రౌండ్లో ఉన్నప్పుడు, శరీర సెన్సార్ మణికట్టు ఉష్ణోగ్రత డేటాను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"క్యాలెండర్ ఈవెంట్లు మరియు వివరాలను చదవడం"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"ఈ యాప్ మీ టాబ్లెట్లో స్టోరేజ్ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు మరియు మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"ఈ యాప్ మీ Android TV పరికరంలో స్టోరేజ్ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు, మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ముఖ యాక్టివిటీ రద్దయింది."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ఫేస్ అన్లాక్ను యూజర్ రద్దు చేశారు"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. ఫేస్ అన్లాక్ డిజేబుల్ చేయబడింది."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్ను ఎంటర్ చేయండి."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"మీరు ఫేస్ అన్లాక్ను సెటప్ చేయలేదు"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"యాప్ ఫీచర్ల సమాచారాన్ని చూడటాన్ని ప్రారంభించడానికి హోల్డర్ను అనుమతిస్తుంది."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"అధిక శాంపిల్ రేటు వద్ద సెన్సార్ డేటాను యాక్సెస్ చేయండి"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"200 Hz కంటే ఎక్కువ రేట్ వద్ద శాంపిల్ సెన్సార్ డేటాకు యాప్ను అనుమతిస్తుంది"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"యూజర్ చర్య లేకుండా యాప్ను అప్డేట్ చేయండి"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"యూజర్ చర్య లేకుండా హోల్డర్ మునుపు ఇన్స్టాల్ చేసిన యాప్ను అప్డేట్ చేయడానికి హోల్డర్ను అనుమతిస్తుంది"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"పాస్వర్డ్ నియమాలను సెట్ చేయండి"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"స్క్రీన్ లాక్ పాస్వర్డ్లు మరియు PINల్లో అనుమతించబడిన పొడవు మరియు అక్షరాలను నియంత్రిస్తుంది."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"స్క్రీన్ అన్లాక్ ప్రయత్నాలను పర్యవేక్షించండి"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ప్రస్తుతం అందుబాటులో లేదు. ఇది <xliff:g id="APP_NAME_1">%2$s</xliff:g> ద్వారా నిర్వహించబడుతుంది."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"మరింత తెలుసుకోండి"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"యాప్పై వున్న పాజ్ను తొలగించండి"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"వర్క్ యాప్లను ఆన్ చేయాలా?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"మీ వర్క్ యాప్లు, నోటిఫికేషన్లకు యాక్సెస్ను పొందండి"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"ఆన్ చేయి"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"వర్క్ యాప్స్ అన్పాజ్ చేయాలా?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"అన్పాజ్ చేయండి"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ఎమర్జెన్సీ"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"మీ వర్క్ యాప్లు, కాల్స్కు యాక్సెస్ను పొందండి"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"యాప్ అందుబాటులో లేదు"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ప్రస్తుతం అందుబాటులో లేదు."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> అందుబాటులో లేదు"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"ఆన్ చేయడానికి ట్యాప్ చేయండి"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"వర్క్ యాప్లు లేవు"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"వ్యక్తిగత యాప్లు లేవు"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g>ను మీ వ్యక్తిగత ప్రొఫైల్లో తెరవాలా?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g>ను మీ వర్క్ ప్రొఫైల్లో తెరవాలా?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"వ్యక్తిగత బ్రౌజర్ను ఉపయోగించండి"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"వర్క్ బ్రౌజర్ను ఉపయోగించండి"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM నెట్వర్క్ అన్లాక్ పిన్"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 116e31e..f0340c3 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -209,8 +209,8 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"แอปส่วนตัวจะถูกบล็อกในวันที่ <xliff:g id="DATE">%1$s</xliff:g> เวลา <xliff:g id="TIME">%2$s</xliff:g> ผู้ดูแลระบบไอทีไม่อนุญาตให้หยุดใช้โปรไฟล์งานเกิน <xliff:g id="NUMBER">%3$d</xliff:g> วัน"</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"เปิด"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"การโทรและข้อความปิดอยู่"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"คุณหยุดแอปงานไว้ชั่วคราว และจะไม่ได้รับสายโทรเข้ารวมถึง SMS"</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"เลิกหยุดแอปงาน"</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"คุณได้หยุดแอปงานไว้ชั่วคราว จึงจะไม่ได้รับสายโทรเข้ารวมถึง SMS"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ยกเลิกการหยุดแอปงานชั่วคราว"</string>
<string name="me" msgid="6207584824693813140">"ฉัน"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"ตัวเลือกของแท็บเล็ต"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"ตัวเลือกของ Android TV"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"อนุญาตให้แอปเข้าถึงข้อมูลเซ็นเซอร์ร่างกาย เช่น อัตราการเต้นของหัวใจ อุณหภูมิ และเปอร์เซ็นต์ออกซิเจนในเลือด ขณะใช้งานแอป"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"เข้าถึงข้อมูลเซ็นเซอร์ร่างกาย เช่น อัตราการเต้นของหัวใจ ขณะแอปทำงานในเบื้องหลัง"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"อนุญาตให้แอปเข้าถึงข้อมูลเซ็นเซอร์ร่างกาย เช่น อัตราการเต้นของหัวใจ อุณหภูมิ และเปอร์เซ็นต์ออกซิเจนในเลือด ขณะที่แอปทำงานในเบื้องหลัง"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"เข้าถึงข้อมูลอุณหภูมิบนข้อมือจากเซ็นเซอร์ร่างกายขณะใช้งานแอป"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"อนุญาตให้แอปเข้าถึงข้อมูลอุณหภูมิบนข้อมือจากเซ็นเซอร์ร่างกายขณะใช้งานแอป"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"เข้าถึงข้อมูลอุณหภูมิบนข้อมือจากเซ็นเซอร์ร่างกายขณะที่แอปทำงานในเบื้องหลัง"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"อนุญาตให้แอปเข้าถึงข้อมูลอุณหภูมิบนข้อมือจากเซ็นเซอร์ร่างกายขณะที่แอปทำงานในเบื้องหลัง"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"อ่านกิจกรรมในปฏิทินและรายละเอียด"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"แอปนี้สามารถอ่านกิจกรรมทั้งหมดในปฏิทินที่เก็บไว้ในแท็บเล็ต รวมถึงแชร์หรือบันทึกข้อมูลในปฏิทินของคุณ"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"แอปนี้อ่านกิจกรรมทั้งหมดในปฏิทินที่จัดเก็บไว้ในอุปกรณ์ Android TV ได้ รวมถึงแชร์หรือบันทึกข้อมูลในปฏิทินของคุณได้ด้วย"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"ยกเลิกการดำเนินการกับใบหน้าแล้ว"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"ผู้ใช้ยกเลิกการใช้การปลดล็อกด้วยใบหน้า"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"ดำเนินการหลายครั้งเกินไป ลองอีกครั้งในภายหลัง"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"ลองหลายครั้งเกินไป ปิดใช้การปลดล็อกด้วยใบหน้าแล้ว"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ลองหลายครั้งเกินไป ใช้การล็อกหน้าจอแทน"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"ยืนยันใบหน้าไม่ได้ ลองอีกครั้ง"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"คุณยังไม่ได้ตั้งค่าการปลดล็อกด้วยใบหน้า"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"อนุญาตให้เจ้าของเริ่มดูข้อมูลฟีเจอร์สำหรับแอป"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"เข้าถึงข้อมูลเซ็นเซอร์ที่อัตราการสุ่มตัวอย่างสูง"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"อนุญาตให้แอปสุ่มตัวอย่างข้อมูลเซ็นเซอร์ที่อัตราสูงกว่า 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"อัปเดตแอปโดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"อนุญาตให้ผู้ให้บริการอัปเดตแอปที่ติดตั้งไว้ก่อนหน้านี้โดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"ตั้งค่ากฎรหัสผ่าน"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"ควบคุมความยาวและอักขระที่สามารถใช้ในรหัสผ่านของการล็อกหน้าจอและ PIN"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"ตรวจสอบความพยายามในการปลดล็อกหน้าจอ"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"เปิด <xliff:g id="APP_NAME_0">%1$s</xliff:g> ไม่ได้ในขณะนี้ แอปนี้จัดการโดย <xliff:g id="APP_NAME_1">%2$s</xliff:g>"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ดูข้อมูลเพิ่มเติม"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ยกเลิกการหยุดแอปชั่วคราว"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"เปิดแอปงานใช่ไหม"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"รับสิทธิ์เข้าถึงแอปงานและการแจ้งเตือนต่างๆ"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"เปิด"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ยกเลิกการหยุดแอปงานใช่ไหม"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"ยกเลิกการหยุดชั่วคราว"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ฉุกเฉิน"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"รับสิทธิ์เข้าถึงแอปงานและการโทร"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"แอปไม่พร้อมใช้งาน"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่พร้อมใช้งานในขณะนี้"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ไม่พร้อมใช้งาน"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"แตะเพื่อเปิด"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ไม่มีแอปงาน"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ไม่มีแอปส่วนตัว"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"เปิด <xliff:g id="APP">%s</xliff:g> ในโปรไฟล์ส่วนตัวไหม"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"เปิด <xliff:g id="APP">%s</xliff:g> ในโปรไฟล์งานไหม"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ใช้เบราว์เซอร์ส่วนตัว"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ใช้เบราว์เซอร์งาน"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ปลดล็อกเครือข่ายที่ใช้กับ SIM"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index b31e160..d993981 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Nagpapahintulot sa app na i-access ang data ng sensor ng katawan, gaya ng bilis ng tibok ng puso, temperatura, at porsyento ng oxygen sa dugo, habang ginagamit ang app."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"I-access ang data ng sensor ng katawan gaya ng heart rate habang nasa background"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Nagpapahintulot sa app na i-access ang data ng sensor ng katawan, gaya ng bilis ng tibok ng puso, temperatura, at porsyento ng oxygen sa dugo, habang nasa background ang app."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"I-access ang data ng temperatura ng wrist mula sa sensor ng katawan habang ginagamit ang app."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Nagpapahintulot sa app na i-access ang data ng temperatura ng wrist mula sa sensor ng katawan, habang ginagamit ang app."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"I-access ang data ng temperatura ng wrist mula sa sensor ng katawan habang nasa background ang app."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Nagpapahintulot sa app na i-access ang data ng temperatura ng wrist mula sa sensor ng katawan, habang nasa background ang app."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Magbasa ng mga event sa kalendaryo at detalye"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Mababasa ng app na ito ang lahat ng event sa kalendaryo na naka-store sa iyong tablet at maibabahagi o mase-save nito ang data ng iyong kalendaryo."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Mababasa ng app na ito ang lahat ng event sa kalendaryo na naka-store sa iyong Android TV device at maibabahagi o mase-save nito ang data ng kalendaryo mo."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Nakansela ang operation kaugnay ng mukha."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Kinansela ng user ang Pag-unlock Gamit ang Mukha"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Masyadong maraming pagsubok. Subukang muli mamaya."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Masyado nang maraming beses sinubukan. Na-disable ang Pag-unlock Gamit ang Mukha."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Masyado nang maraming beses sinubukan. Ilagay na lang ang lock ng screen."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Hindi ma-verify ang mukha. Subukang muli."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Hindi mo pa nase-set up ang Pag-unlock Gamit ang Mukha"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Nagbibigay-daan sa may hawak na simulang tingnan ang impormasyon ng mga feature para sa isang app."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"mag-access ng data ng sensor sa mataas na rate ng pag-sample"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Pinapahintulutan ang app na mag-sample ng data ng sensor sa rate na higit sa 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"i-update ang app nang walang pagkilos mula sa user"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Pinapayagan ang may-ari na i-update ang app na dati nitong na-install nang walang pagkilos mula sa user"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Magtakda ng mga panuntunan sa password"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kontrolin ang haba at ang mga character na pinapayagan sa mga password at PIN sa screen lock."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Subaybayan ang mga pagsubok sa pag-unlock ng screen"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Hindi available ang <xliff:g id="APP_NAME_0">%1$s</xliff:g> sa ngayon. Pinamamahalaan ito ng <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Matuto pa"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"I-unpause ang app"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"I-on ang app para sa trabaho?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Makakuha ng access sa iyong mga app para sa trabaho at notification"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"I-on"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"I-unpause ang mga work app?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"I-unpause"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergency"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Makakuha ng access sa iyong mga app para sa trabaho at tawag"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Hindi available ang app"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Hindi available sa ngayon ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Hindi available ang <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"I-tap para i-on"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Walang app para sa trabaho"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Walang personal na app"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Buksan ang <xliff:g id="APP">%s</xliff:g> sa iyong personal na profile?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Buksan ang <xliff:g id="APP">%s</xliff:g> sa iyong profile sa trabaho?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gamitin ang personal na browser"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gamitin ang browser sa trabaho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para sa pag-unlock ng network ng SIM"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index aaf7644..1ec3682 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Kullanımdaki uygulamanın nabız, vücut ısısı, kandaki oksijen yüzdesi gibi vücut sensörü verilerine erişmesine izin verir."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Arka plandayken nabız gibi vücut sensörü verilerine erişme"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Arka plandaki uygulamanın nabız, vücut ısısı, kandaki oksijen yüzdesi gibi vücut sensörü verilerine erişmesine izin verir."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Uygulama kullanımdayken bilek ısısı gibi vücut sensörü verilerine erişme."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Kullanımdaki uygulamanın bilek ısısı gibi vücut sensörü verilerine erişmesine izin verir."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Uygulama arka plandayken bilek ısısı gibi vücut sensörü verilerine erişme."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Arka plandaki uygulamanın bilek ısısı gibi vücut sensörü verilerine erişmesine izin verir."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Takvim etkinlikleri ve ayrıntılarını okuma"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Bu uygulama, tabletinizde kayıtlı tüm takvim etkinliklerini okuyabilir ve takvim verilerinizi paylaşabilir ya da kaydedebilir."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Bu uygulama, Android TV cihazınızda kayıtlı tüm takvim etkinliklerini okuyabilir ve takvim verilerinizi paylaşabilir ya da kaydedebilir."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Yüz işlemi iptal edildi."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Yüz Tanıma Kilidi kullanıcı tarafından iptal edildi"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Çok fazla deneme yapıldı. Daha sonra tekrar deneyin."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Çok fazla deneme yapıldı. Yüz Tanıma Kilidi devre dışı."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Çok fazla deneme yapıldı. Bunun yerine ekran kilidini girin."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Yüz doğrulanamıyor. Tekrar deneyin."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Yüz Tanıma Kilidi ayarlamadınız"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"İzin sahibinin, bir uygulamanın özellik bilgilerini görüntülemeye başlamasına izin verir."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"sensör verilerine daha yüksek örnekleme hızında eriş"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Uygulamanın, sensör verilerini 200 Hz\'den daha yüksek bir hızda örneklemesine olanak tanır"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"uygulamayı kullanıcı işlemi olmadan güncelleme"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"İzin sahibinin, daha önce yüklediği uygulamayı kullanıcı işlemi olmadan güncellemesine izin verir"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Şifre kuralları ayarla"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Ekran kilidini açma şifrelerinde ve PIN\'lerde izin verilen uzunluğu ve karakterleri denetler."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Ekran kilidini açma denemelerini izle"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> uygulaması şu anda kullanılamıyor. Uygulamanın kullanım durumu <xliff:g id="APP_NAME_1">%2$s</xliff:g> tarafından yönetiliyor."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Daha fazla bilgi"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Uygulamanın duraklatmasını kaldır"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"İş uygulamaları açılsın mı?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"İş uygulamalarınıza ve bildirimlerinize erişin"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Aç"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"İş uygulamaları devam ettirilsin mi?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Devam ettir"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Acil durum"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"İş uygulamalarınıza ve telefon aramalarınıza erişin"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Uygulama kullanılamıyor"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması şu anda kullanılamıyor."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> kullanılamıyor"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Açmak için dokunun"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş uygulaması yok"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Kişisel uygulama yok"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> uygulaması kişisel profilinizde açılsın mı?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> uygulaması iş profilinizde açılsın mı?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kişisel tarayıcıyı kullan"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"İş tarayıcısını kullan"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ağ kilidi açma PIN kodu"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 8ad1c69..235e538b 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -465,10 +465,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Під час використання додатка він матиме доступ до даних датчиків на тілі, наприклад пульсу, температури та відсотка кисню в крові."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Доступ до показників датчиків на тілі, наприклад пульсу, у фоновому режимі"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Коли додаток працюватиме у фоновому режимі, він матиме доступ до показників датчиків на тілі, наприклад пульсу, температури та відсотка кисню в крові."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Отримувати доступ до даних датчика на тілі про температуру в зоні зап’ястя, коли додаток використовується."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Під час використання додатка він матиме доступ до даних датчика на тілі про температуру в зоні зап’ястя."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Отримувати доступ до даних датчика на тілі про температуру в зоні зап’ястя, коли додаток працює у фоновому режимі."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Коли додаток працюватиме у фоновому режимі, він матиме доступ до даних датчика на тілі про температуру в зоні зап’ястя."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Переглядати події календаря й додаткову інформацію"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Цей додаток може переглядати всі події календаря, збережені на вашому планшеті, а також надсилати та зберігати дані календаря."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Додаток може переглядати всі події календаря, збережені на вашому пристрої Android TV, а також надсилати та зберігати дані календаря."</string>
@@ -669,7 +665,7 @@
</string-array>
<string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"Сталася помилка. Повторіть спробу."</string>
<string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Значок відбитка пальця"</string>
- <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Фейсконтроль"</string>
+ <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Фейс-контроль"</string>
<string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Сталася помилка з фейсконтролем"</string>
<string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Натисніть, щоб видалити свою модель обличчя, а потім знову додайте її"</string>
<string name="face_setup_notification_title" msgid="8843461561970741790">"Налаштування фейсконтролю"</string>
@@ -715,7 +711,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Дію з обличчям скасовано."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Користувач скасував операцію фейсконтролю"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Забагато спроб. Повторіть пізніше."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Забагато спроб. Фейсконтроль вимкнено."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Забагато спроб. Розблокуйте екран іншим способом."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Не вдається перевірити обличчя. Повторіть спробу."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Ви не налаштували фейсконтроль"</string>
@@ -802,10 +799,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Дозволяє додатку почати перегляд інформації про функції іншого додатка."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"доступ до даних датчиків із високою частотою дикретизації"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Додаток зможе дискретизувати дані даних датчиків із частотою понад 200 Гц"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"оновлювати додаток без дій із боку користувача"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Дозволяє власнику оновлювати раніше встановлений додаток без дій із боку користувача"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Устан. правила пароля"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Укажіть максимальну довжину та кількість символів для паролів розблокування екрана та PIN-кодів."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Відстежувати спроби розблокування екрана"</string>
@@ -1047,7 +1042,7 @@
<string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"Розгорнути область розблокування."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"Розблокування повзунком."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"Розблокування ключем."</string>
- <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Фейсконтроль."</string>
+ <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Фейс-контроль."</string>
<string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"Розблокування PIN-кодом."</string>
<string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"Розблокування SIM-карти PIN-кодом."</string>
<string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"Розблокування SIM-карти PUK-кодом."</string>
@@ -1958,11 +1953,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"Додаток <xliff:g id="APP_NAME_0">%1$s</xliff:g> зараз недоступний. Керує додаток <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Докладніше"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Відновити доступ до додатка"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Увімкнути робочі додатки?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Отримайте доступ до своїх робочих додатків і сповіщень"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Увімкнути"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Увімкнути робочі додатки?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Увімкнути"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Екстрений виклик"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Отримайте доступ до своїх робочих додатків і дзвінків"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Додаток недоступний"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> зараз недоступний."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недоступно: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2172,8 +2165,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Торкніться, щоб увімкнути"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Немає робочих додатків"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Немає особистих додатків"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Відкрити додаток <xliff:g id="APP">%s</xliff:g> в особистому профілі?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Відкрити додаток <xliff:g id="APP">%s</xliff:g> у робочому профілі?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Використати особистий веб-переглядач"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Використати робочий веб-переглядач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код розблокування мережі SIM-карти"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 09b3f49..cafa9d2 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"ایپ کے استعمال میں ہونے کے دوران ایپ کو حرکت قلب کی شرح، درجہ حرارت اور خون میں آکسیجن کا فیصد جیسے باڈی سینسر ڈیٹا تک رسائی کی اجازت دیتا ہے۔"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"پس منظر میں ہونے کے دوران حرکت قلب کی شرح جیسے باڈی سینسر ڈیٹا تک رسائی پائیں"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"ایپ کے پس منظر میں ہونے کے دوران ایپ کو حرکت قلب کی شرح، درجہ حرارت اور خون میں آکسیجن کا فیصد جیسے باڈی سینسر ڈیٹا تک رسائی کی اجازت دیتا ہے۔"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"ایپ کے استعمال میں ہونے کے دوران، باڈی سینسر کلائی کے درجہ حرارت کے ڈیٹا تک رسائی حاصل کریں۔"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"ایپ کے استعمال میں ہونے کے دوران، ایپ کو باڈی سینسر کلائی کے درجہ حرارت کے ڈیٹا تک رسائی کی اجازت دیتا ہے۔"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"ایپ کے پس منظر میں ہونے کے دوران، باڈی سینسر کلائی کے درجہ حرارت کے ڈیٹا تک رسائی حاصل کریں۔"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"ایپ کے پس منظر میں ہونے کے دوران، ایپ کو باڈی سینسر کلائی کے درجہ حرارت کے ڈیٹا تک رسائی کی اجازت دیتا ہے۔"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"کیلنڈر ایونٹس اور تفاصیل پڑھیں"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"یہ ایپ آپ کے ٹیبلیٹ پر اسٹور کردہ سبھی کیلنڈر ایونٹس کو پڑھ سکتی ہے اور آپ کے کیلنڈر ڈیٹا کا اشتراک یا اسے محفوظ کر سکتی ہے۔"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"یہ ایپ آپ کے Android TV آلہ پر اسٹور کردہ سبھی کیلنڈر ایونٹس کو پڑھ سکتی ہے اور آپ کے کیلنڈر ڈیٹا کا اشتراک یا اسے محفوظ کر سکتی ہے۔"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"چہرے پر ہونے والی کارروائی منسوخ ہو گئی۔"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"صارف نے فیس اَنلاک کو منسوخ کر دیا"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"کافی زیادہ کوششیں کی گئیں۔ دوبارہ کوشش کریں۔"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"کافی زیادہ کوششیں۔ فیس اَنلاک کو غیر فعال کر دیا گیا۔"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"کافی زیادہ کوششیں۔ اس کے بجائے اسکرین لاک درج کریں۔"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"چہرے کی توثیق نہیں کی جا سکی۔ پھر آزمائيں۔"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"آپ نے فیس اَنلاک کو سیٹ نہیں کیا ہے"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ابھی دستیاب نہیں ہے۔ یہ <xliff:g id="APP_NAME_1">%2$s</xliff:g> کے زیر انتظام ہے۔"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"مزید جانیں"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ایپ کو غیر موقوف کریں"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"ورک ایپس آن کریں؟"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"اپنی ورک ایپس اور اطلاعات تک رسائی حاصل کریں"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"آن کریں"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"ورک ایپس کو غیر موقوف کریں؟"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"غیر موقوف کریں"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ایمرجنسی"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"اپنی ورک ایپس اور کالز تک رسائی حاصل کریں"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"ایپ دستیاب نہیں ہے"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ابھی دستیاب نہیں ہے۔"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> دستیاب نہیں ہے"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"آن کرنے کیلئے تھپتھپائیں"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"کوئی ورک ایپ نہیں"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"کوئی ذاتی ایپ نہیں"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"اپنی ذاتی پروفائل میں <xliff:g id="APP">%s</xliff:g> کھولیں؟"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"اپنی دفتری پروفائل میں <xliff:g id="APP">%s</xliff:g> کھولیں؟"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ذاتی براؤزر استعمال کریں"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"ورک براؤزر استعمال کریں"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM نیٹ ورک غیر مقفل کرنے کا PIN"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 27f6329..6104446 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -210,7 +210,7 @@
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Yoqish"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Chaqiruv va xabarlar yoniq emas"</string>
<string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Ayrim ishga oid ilovalar pauza qilingan. Telefon chaqiruvlari yoki SMS xabarlar kelmay turadi."</string>
- <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Ishga oid ilovalarni qaytarish"</string>
+ <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Pauzadan chiqarish"</string>
<string name="me" msgid="6207584824693813140">"Men"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"Planshet sozlamalari"</string>
<string name="power_dialog" product="tv" msgid="7792839006640933763">"Android TV parametrlari"</string>
@@ -310,7 +310,7 @@
<string name="permgroupdesc_storage" msgid="5378659041354582769">"qurilmangizdagi fayllarga kirish"</string>
<string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"Musiqa va audio"</string>
<string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"qurilmadagi musiqa va audioga ruxsat"</string>
- <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Video va suratlar"</string>
+ <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Suratlar va videolar"</string>
<string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"qurilmadagi rasm va videolarga ruxsat"</string>
<string name="permgrouplab_microphone" msgid="2480597427667420076">"Mikrofon"</string>
<string name="permgroupdesc_microphone" msgid="1047786732792487722">"ovoz yozib olish"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Ilovaga yurak urishi, harorat, qondagi kislorod foizi kabi tanadagi sensor maʼlumotlaridan foydalanishga ruxsat beradi."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Fonda ishlaganda yurak urishi kabi tanadagi sensor maʼlumotlariga ruxsat"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Ilovaga yurak urishi, harorat, qondagi kislorod foizi kabi tanadagi sensor maʼlumotlaridan ilova fonda ishlaganda foydalanishga ruxsat beradi."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Ilova ishlayotgan vaqtda tana sensori bilak harorati maʼlumotlariga kirish."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Ilovaga tana sensori bilak harorati maʼlumotlaridan ilova ishlayotganda foydalanishga ruxsat beradi."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Ilova fonda ishlayotgan vaqtda tana sensori bilak harorati maʼlumotlariga kirish."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Ilovaga tana sensori bilan harorati maʼlumotlaridan ilova fonda ishlayotganda foydalanishga ruxsat beradi."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Taqvim tadbirlari va tafsilotlarini o‘qish"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Bu ilova planshetdagi barcha taqvim tadbirlarini o‘qiy olishi hamda taqvim ma’lumotlarini ulashishi yoki saqlashi mumkin."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Bu ilova Android TV qurilmangizda barcha taqvim tadbirlarini oʻqiy olishi hamda taqvim maʼlumotlarini ulashishi yoki saqlashi mumkin."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Yuzni aniqlash bekor qilindi."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Yuz bilan ochishni foydalanuvchi bekor qildi"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Juda ko‘p urinildi. Keyinroq qaytadan urining."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Juda koʻp urinildi. Yuz bilan ochish faolsizlantirildi."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Juda koʻp urinildi. Ekran qulfi bilan oching."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Yuzingiz tasdiqlanmadi. Qaytadan urining."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Hali yuz bilan ochishni sozlamagansiz"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Qurilma egasiga ilova funksiyalari axborotini koʻrishga ruxsat beradi."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"yuqori diskretlash chastotali sensor axborotiga ruxsat"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Ilova sensor axborotini 200 Hz dan yuqori tezlikda hisoblashi mumkin"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"ilovani foydalanuvchi ishtirokisiz yangilash"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Oldin oʻrnatilgan ilovani foydalanuvchi ishtirokisiz yangilash imkonini beradi."</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Parol qoidalarini o‘rnatish"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Ekran qulfi paroli va PIN kodlari uchun qo‘yiladigan talablarni (belgilar soni va uzunligi) nazorat qiladi."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Ekranni qulfdan chiqarishga urinishlarni nazorat qilish"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ishlamayapti. Uning ishlashini <xliff:g id="APP_NAME_1">%2$s</xliff:g> cheklamoqda."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Batafsil"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Ilovani pauzadan chiqarish"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Ishga oid ilovalar yoqilsinmi?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Ishga oid ilovalaringiz va bildirishnomalarga ruxsat oling"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Yoqish"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Ishga oid ilovalar qaytarilsinmi?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Davom ettirish"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Favqulodda holat"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Ishga oid ilovalaringiz va chaqiruvlarga ruxsat oling"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Ilova ishlamayapti"</string>
<string name="app_blocked_message" msgid="542972921087873023">"Ayni vaqtda <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi ishlamayapti."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> kanali ish faoliyatida emas"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Yoqish uchun bosing"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ishga oid ilovalar topilmadi"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Shaxsiy ilovalar topilmadi"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"<xliff:g id="APP">%s</xliff:g> shaxsiy profilda ochilsinmi?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"<xliff:g id="APP">%s</xliff:g> shaxsiy profilda ochilsinmi?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Shaxsiy brauzerdan foydalanish"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ishga oid brauzerdan foydalanish"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM kartaning tarmoqdagi qulfini ochish uchun PIN kod"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 6dcdb13..eba580c 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Cho phép ứng dụng truy cập vào dữ liệu cảm biến cơ thể khi đang dùng, chẳng hạn như nhịp tim, thân nhiệt và tỷ lệ phần trăm oxy trong máu."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Truy cập vào dữ liệu cảm biến cơ thể khi ở chế độ nền, chẳng hạn như nhịp tim"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Cho phép ứng dụng truy cập vào dữ liệu cảm biến cơ thể khi ở chế độ nền, chẳng hạn như nhịp tim, thân nhiệt và tỷ lệ phần trăm oxy trong máu."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Quyền truy cập vào dữ liệu nhiệt độ cổ tay đo bằng cảm biến cơ thể khi ứng dụng đang được sử dụng."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Cho phép ứng dụng truy cập vào dữ liệu nhiệt độ cổ tay đo bằng cảm biến cơ thể khi ứng dụng đang được sử dụng."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Quyền truy cập vào dữ liệu nhiệt độ cổ tay đo bằng cảm biến cơ thể khi ứng dụng ở chế độ nền."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Cho phép ứng dụng truy cập vào dữ liệu nhiệt độ cổ tay đo bằng cảm biến cơ thể khi ứng dụng ở chế độ nền."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Đọc chi tiết và sự kiện lịch"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Ứng dụng này có thể đọc tất cả các sự kiện lịch được lưu trữ trên máy tính bảng của bạn và chia sẻ hoặc lưu dữ liệu lịch của bạn."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Ứng dụng này có thể đọc tất cả sự kiện trên lịch mà bạn lưu vào thiết bị Android TV cũng như chia sẻ hoặc lưu dữ liệu lịch của bạn."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Đã hủy thao tác dùng khuôn mặt."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Người dùng đã hủy thao tác Mở khóa bằng khuôn mặt"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Bạn đã thử quá nhiều lần. Hãy thử lại sau."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Bạn đã thử quá nhiều lần. Thao tác Mở khóa bằng khuôn mặt đã bị vô hiệu hóa."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Bạn đã thử quá nhiều lần. Hãy nhập phương thức khóa màn hình."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Không thể xác minh khuôn mặt. Hãy thử lại."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Bạn chưa thiết lập tính năng Mở khóa bằng khuôn mặt"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"Cho phép chủ sở hữu bắt đầu xem thông tin về tính năng của một ứng dụng."</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"truy cập vào dữ liệu cảm biến ở tốc độ lấy mẫu cao"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"Cho phép ứng dụng lấy mẫu dữ liệu cảm biến ở tốc độ lớn hơn 200 Hz"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"cập nhật ứng dụng mà không cần người dùng thực hiện hành động"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"Cho phép chủ sở hữu cập nhật ứng dụng họ từng cài đặt mà không cần người dùng thực hiện hành động"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"Đặt quy tắc mật khẩu"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"Kiểm soát độ dài và ký tự được phép trong mật khẩu khóa màn hình và mã PIN."</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"Giám sát những lần thử mở khóa màn hình"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> hiện không sử dụng được. Chính sách này do <xliff:g id="APP_NAME_1">%2$s</xliff:g> quản lý."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Tìm hiểu thêm"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Mở lại ứng dụng"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Bật các ứng dụng công việc?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Bạn sẽ có quyền truy cập vào các ứng dụng công việc và thông báo"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Bật"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Tiếp tục dùng ứng dụng công việc?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Tiếp tục dùng"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Khẩn cấp"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Hãy lấy quyền cập vào ứng dụng công việc và cuộc gọi"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Ứng dụng này không dùng được"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện không dùng được."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"Không hỗ trợ <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Nhấn để bật"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Không có ứng dụng công việc"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Không có ứng dụng cá nhân"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Mở <xliff:g id="APP">%s</xliff:g> trong hồ sơ cá nhân của bạn?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Mở <xliff:g id="APP">%s</xliff:g> trong hồ sơ công việc của bạn?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Dùng trình duyệt cá nhân"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Dùng trình duyệt công việc"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Mã PIN mở khóa mạng SIM"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 51282d3..1e25289 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -209,7 +209,7 @@
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"系统将于 <xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME">%2$s</xliff:g> 屏蔽个人应用。IT 管理员不允许您的工作资料保持关闭状态超过 <xliff:g id="NUMBER">%3$d</xliff:g> 天。"</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"开启"</string>
<string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"通话和短信已关闭"</string>
- <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"您已暂停工作应用。您将不会收到来电或短信。"</string>
+ <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"您已暂停工作应用,将不会收到来电或短信。"</string>
<string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"恢复工作应用"</string>
<string name="me" msgid="6207584824693813140">"我"</string>
<string name="power_dialog" product="tablet" msgid="8333207765671417261">"平板电脑选项"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允许应用在使用期间访问身体传感器数据,如心率、体温和血氧浓度。"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"在后台运行时可访问身体传感器数据,如心率"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允许应用在后台运行时访问身体传感器数据,如心率、体温和血氧浓度。"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"在应用使用期间访问身体传感器的手腕温度数据。"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"允许应用在使用期间访问身体传感器的手腕温度数据。"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"在应用于后台运行时访问身体传感器的手腕温度数据。"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"允许应用在后台运行时访问身体传感器的手腕温度数据。"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"读取日历活动和详情"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"此应用可读取您平板电脑上存储的所有日历活动,并分享或保存您的日历数据。"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"此应用可读取您的 Android TV 设备上存储的所有日历活动,以及分享或保存您的日历数据。"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"面孔处理操作已取消。"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"用户已取消人脸解锁"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"尝试次数过多,请稍后重试。"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"尝试次数过多,人脸解锁已停用。"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"尝试次数过多,请改为通过解除屏幕锁定来验证身份。"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"无法验证人脸,请重试。"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"您尚未设置人脸解锁"</string>
@@ -800,10 +797,8 @@
<string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"允许具有该权限的应用开始查看某个应用的功能信息。"</string>
<string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"以高采样率访问传感器数据"</string>
<string name="permdesc_highSamplingRateSensors" msgid="8430061978931155995">"允许应用以高于 200 Hz 的频率对传感器数据进行采样"</string>
- <!-- no translation found for permlab_updatePackagesWithoutUserAction (3363272609642618551) -->
- <skip />
- <!-- no translation found for permdesc_updatePackagesWithoutUserAction (4567739631260526366) -->
- <skip />
+ <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"无需用户操作即可更新应用"</string>
+ <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"允许拥有权限的应用直接更新其先前安装的应用,无需用户操作"</string>
<string name="policylab_limitPassword" msgid="4851829918814422199">"设置密码规则"</string>
<string name="policydesc_limitPassword" msgid="4105491021115793793">"控制锁屏密码和 PIN 码所允许的长度和字符。"</string>
<string name="policylab_watchLogin" msgid="7599669460083719504">"监控屏幕解锁尝试次数"</string>
@@ -1956,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g>目前无法使用。该应用是由<xliff:g id="APP_NAME_1">%2$s</xliff:g>所管理。"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"了解详情"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"取消暂停应用"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"要开启工作应用访问权限吗?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"获取工作应用和通知的访问权限"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"开启"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"是否为工作应用解除暂停状态?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"解除暂停"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"紧急呼叫"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"获取工作应用和通话的访问权限"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"应用无法使用"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g>目前无法使用。"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>不可用"</string>
@@ -2170,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"点按即可开启"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"没有支持该内容的工作应用"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"没有支持该内容的个人应用"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"要使用个人资料打开 <xliff:g id="APP">%s</xliff:g> 吗?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"要使用工作资料打开 <xliff:g id="APP">%s</xliff:g> 吗?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用个人浏览器"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作浏览器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 网络解锁 PIN 码"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index c7311bd..74e44a6 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允許應用程式在使用時存取人體感應器資料,例如心率、體溫、血氧百分比等。"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"在背景執行時存取人體感應器資料,例如心率"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允許應用程式在背景執行時存取人體感應器資料,例如心率、體溫、血氧百分比等。"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"應用程式在使用期間存取人體感應器手腕溫度資料。"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"允許應用程式在使用期間存取人體感應器手腕溫度資料。"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"應用程式在背景執行時存取人體感應器手腕溫度資料。"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"允許應用程式在背景執行時存取人體感應器手腕溫度資料。"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"讀取日曆活動和詳情"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"此應用程式可以讀取所有儲存在您的平板電腦的日曆活動,並分享或儲存您的日曆資料。"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"此應用程式可以讀取所有儲存在 Android TV 裝置上的日曆活動,並分享或儲存您的日曆資料。"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"面孔操作已取消。"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"使用者已取消「面孔解鎖」"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"嘗試次數過多,請稍後再試。"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"嘗試次數過多,因此系統已停用「面孔解鎖」。"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"嘗試次數過多,請改為解除螢幕鎖定來驗證身分。"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證面孔。請再試一次。"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"您尚未設定「面孔解鎖」"</string>
@@ -1874,8 +1871,8 @@
<string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理員更新"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理員刪除"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"好"</string>
- <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"「省電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
- <string name="battery_saver_description" msgid="8518809702138617167">"「省電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
+ <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"「慳電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
+ <string name="battery_saver_description" msgid="8518809702138617167">"「慳電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
<string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟「數據節省模式」嗎?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"目前無法使用 <xliff:g id="APP_NAME_0">%1$s</xliff:g>。此應用程式是由「<xliff:g id="APP_NAME_1">%2$s</xliff:g>」管理。"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"瞭解詳情"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"取消暫停應用程式"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"要開啟工作應用程式存取權嗎?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"開啟工作應用程式和通知的存取權"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"開啟"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"要取消暫停工作應用程式嗎?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"取消暫停"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"撥打緊急電話"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"要求存取工作應用程式和通話"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"無法使用應用程式"</string>
<string name="app_blocked_message" msgid="542972921087873023">"目前無法使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"無法使用「<xliff:g id="ACTIVITY">%1$s</xliff:g>」"</string>
@@ -2099,10 +2094,10 @@
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"瞭解詳情"</string>
<string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"加強版通知在 Android 12 取代了 Android 自動調整通知。此功能會顯示建議的操作和回覆,更可為您整理通知。\n\n加強版通知功能可存取您的通知內容 (包括聯絡人姓名和訊息等個人資料),亦可以關閉或回應通知,例如接聽來電和控制「請勿騷擾」功能。"</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"「日常安排模式」資料通知"</string>
- <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"已開啟「省電模式」"</string>
+ <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"已開啟「慳電模式」"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"減少用電可延長電池壽命"</string>
- <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"省電模式"</string>
- <string name="battery_saver_off_notification_title" msgid="7637255960468032515">"已關閉省電模式"</string>
+ <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"慳電模式"</string>
+ <string name="battery_saver_off_notification_title" msgid="7637255960468032515">"已關閉慳電模式"</string>
<string name="battery_saver_charged_notification_summary" product="default" msgid="5544457317418624367">"手機電量充足。各項功能已不再受限。"</string>
<string name="battery_saver_charged_notification_summary" product="tablet" msgid="4426317048139996888">"平板電腦電量充足。各項功能已不再受限。"</string>
<string name="battery_saver_charged_notification_summary" product="device" msgid="1031562417867646649">"裝置電量充足。各項功能已不再受限。"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"輕按即可啟用"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"要在個人設定檔中開啟「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"要在工作設定檔中開啟「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 網絡解鎖 PIN"</string>
@@ -2327,7 +2324,7 @@
<string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"裝置過熱"</string>
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"由於手機過熱,雙螢幕功能無法使用"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"無法使用雙螢幕功能"</string>
- <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"由於「省電模式」已開啟,因此無法使用雙螢幕功能。您可以前往「設定」中關閉此模式。"</string>
+ <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"由於「慳電模式」已開啟,因此無法使用雙螢幕功能。您可以前往「設定」中關閉此模式。"</string>
<string name="device_state_notification_settings_button" msgid="691937505741872749">"前往「設定」"</string>
<string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"關閉"</string>
<string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"已設定「<xliff:g id="DEVICE_NAME">%s</xliff:g>」"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index ca8ac36..7a036bf 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允許應用程式在使用期間存取人體感應器資料,例如心跳速率、體溫和血氧比例。"</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"在背景執行時可存取人體感應器資料,例如心跳速率"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允許應用程式在背景執行時存取人體感應器資料,例如心跳速率、體溫和血氧比例。"</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"在應用程式使用期間存取手錶人體感應器上的溫度資料。"</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"允許應用程式在使用期間存取手錶人體感應器上的溫度資料。"</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"在背景執行應用程式時存取手錶人體感應器上的溫度資料。"</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"允許應用程式在背景執行時存取手錶人體感應器上的溫度資料。"</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"讀取日曆活動和詳細資訊"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"這個應用程式可讀取所有儲存在平板電腦上的日曆活動資訊,以及共用或儲存日曆資料。"</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"這個應用程式可讀取所有儲存在 Android TV 裝置上的日曆活動,以及共用或儲存日曆資料。"</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"臉孔處理作業已取消。"</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"使用者已取消人臉解鎖作業"</string>
<string name="face_error_lockout" msgid="7864408714994529437">"嘗試次數過多,請稍後再試。"</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"嘗試次數過多,因此系統已停用人臉解鎖功能。"</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"嘗試次數過多,請改用螢幕鎖定功能驗證身分。"</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證臉孔,請再試一次。"</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"你尚未設定人臉解鎖功能"</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"目前無法使用「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」。這項設定是由「<xliff:g id="APP_NAME_1">%2$s</xliff:g>」管理。"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"瞭解詳情"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"取消暫停應用程式"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"要開啟工作應用程式存取權嗎?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"開啟工作應用程式和通知的存取權"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"開啟"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"要取消暫停工作應用程式嗎?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"取消暫停"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"撥打緊急電話"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"要求存取工作應用程式和通話"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"應用程式無法使用"</string>
<string name="app_blocked_message" msgid="542972921087873023">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」目前無法使用。"</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"無法存取「<xliff:g id="ACTIVITY">%1$s</xliff:g>」"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"輕觸即可啟用"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"要在個人資料夾中開啟「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"要在工作資料夾中開啟「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 卡網路解鎖 PIN 碼"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index fe38bd2..1bd0d80 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -316,7 +316,7 @@
<string name="permgroupdesc_microphone" msgid="1047786732792487722">"rekhoda ividiyo"</string>
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Umsebenzi womzimba"</string>
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"finyelela kumsebenzi wakho womzimba"</string>
- <string name="permgrouplab_camera" msgid="9090413408963547706">"Ikhamela"</string>
+ <string name="permgrouplab_camera" msgid="9090413408963547706">"Ikhamera"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"thatha izithombe uphinde urekhode ividiyo"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Amadivayisi aseduze"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"thola futhi uxhume kumadivayisi aseduze"</string>
@@ -463,10 +463,6 @@
<string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Ivumela i-app ukuthi ifinyelele idatha yenzwa yomzimba, efana nokushaya kwenhliziyo, izinga lokushisa, namaphesenti komoyampilo wegazi, kuyilapho i-app isetshenziswa."</string>
<string name="permlab_bodySensors_background" msgid="4912560779957760446">"Finyelela kudatha yenzwa yomzimba, njengokushaya kwenhliziyo, ngenkathi ungemuva"</string>
<string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"Ivumela i-app ukuthi ifinyelele idatha yenzwa yomzimba, efana nokushaya kwenhliziyo, izinga lokushisa, namaphesenti komoyampilo wegazi, kuyilapho i-app ingemuva."</string>
- <string name="permlab_bodySensorsWristTemperature" msgid="5007987988922337657">"Finyelela kudatha yezinga lokushisa lenzwa yomzimba ngenkathi i-app isetshenziswa."</string>
- <string name="permdesc_bodySensorsWristTemperature" product="default" msgid="4978345709781045181">"Ivumela i-app ukuthi ifinyelele idatha yezinga lokushisa kwengalo yenzwa yomzimba, kuyilapho i-app isetshenziswa."</string>
- <string name="permlab_bodySensors_wristTemperature_background" msgid="7692772783509074356">"Finyelela kudatha yezinga lokushisa lenzwa yomzimba ngenkathi i-app ingemuva."</string>
- <string name="permdesc_bodySensors_wristTemperature_background" product="default" msgid="3170369705518699219">"Ivumela i-app ifinyelele idatha yezinga lokushisa lengalo yenzwa yomzimba, kuyilapho i-app ingemuva."</string>
<string name="permlab_readCalendar" msgid="6408654259475396200">"Funda imicimbi yekhalenda nemininingwane"</string>
<string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"Lolu hlelo lokusebenza lungafunda yonke imicimbi yekhalenda elondolozwe kuthebhulethi yakho nokwabelana noma ukulondoloza idatha yakho yekhalenda."</string>
<string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"Lolu hlelo lokusebenza lungafunda yonke imicimbi yekhalenda elondolozwe kudivayisi yakho ye-Android TV nokwabelana noma ukulondoloza idatha yakho yekhalenda."</string>
@@ -713,7 +709,8 @@
<string name="face_error_canceled" msgid="2164434737103802131">"Umsebenzi wobuso ukhanselwe."</string>
<string name="face_error_user_canceled" msgid="5766472033202928373">"Ukuvula ngobuso kukhanselwe umsebenzisi."</string>
<string name="face_error_lockout" msgid="7864408714994529437">"Imizamo eminingi kakhulu. Zama futhi emuva kwesikhathi."</string>
- <string name="face_error_lockout_permanent" msgid="3277134834042995260">"Imizamo eminingi kakhulu. Ukuvula ngobuso kukhutshaziwe."</string>
+ <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
+ <skip />
<string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Imizamo eminingi kakhulu. Kunalokho faka ukukhiya isikrini."</string>
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Ayikwazi ukuqinisekisa ubuso. Zama futhi."</string>
<string name="face_error_not_enrolled" msgid="1134739108536328412">"Awukakusethi Ukuvula ngobuso."</string>
@@ -1954,11 +1951,9 @@
<string name="app_suspended_default_message" msgid="6451215678552004172">"I-<xliff:g id="APP_NAME_0">%1$s</xliff:g> ayitholakali okwamanje. Lokhu kuphethwe i-<xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Funda kabanzi"</string>
<string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Susa ukuphumuza uhlelo lokusebenza"</string>
- <string name="work_mode_off_title" msgid="961171256005852058">"Vula ama-app okusebenza womsebenzi?"</string>
- <string name="work_mode_off_message" msgid="7319580997683623309">"Thola ukufinyelela kuma-app akho womsebenzi kanye nezaziso"</string>
- <string name="work_mode_turn_on" msgid="3662561662475962285">"Vula"</string>
+ <string name="work_mode_off_title" msgid="6367463960165135829">"Susa ukumisa ama-app omsebenzi?"</string>
+ <string name="work_mode_turn_on" msgid="5316648862401307800">"Qhubekisa"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Isimo esiphuthumayo"</string>
- <string name="work_mode_dialer_off_message" msgid="2193299184850387465">"Thola ukufinyelela kuma-app akho womsebenzi kanye namakholi"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"Uhlelo lokusebenza alutholakali"</string>
<string name="app_blocked_message" msgid="542972921087873023">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayitholakali khona manje."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"okungatholakali <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
@@ -2168,8 +2163,10 @@
<string name="resolver_switch_on_work" msgid="463709043650610420">"Thepha ukuze uvule"</string>
<string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Awekho ama-app womsebenzi"</string>
<string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Awekho ama-app womuntu siqu"</string>
- <string name="miniresolver_open_in_personal" msgid="3874522693661065566">"Vula i-<xliff:g id="APP">%s</xliff:g> kwiphrofayela yakho siqu?"</string>
- <string name="miniresolver_open_in_work" msgid="4415223793669536559">"Vula i-<xliff:g id="APP">%s</xliff:g> kwiphrofayela yakho yomsebenzi?"</string>
+ <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
+ <skip />
+ <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
+ <skip />
<string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Sebenzisa isiphequluli somuntu siqu"</string>
<string name="miniresolver_use_work_browser" msgid="543575306251952994">"Sebenzisa isiphequluli somsebenzi"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Iphinikhodi yokuvula inethiwekhi ye-SIM"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index cd25726..7de36a71 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1335,7 +1335,15 @@
<!-- The container color of surface, which replaces the previous surface at elevation level
2. @hide -->
<attr name="materialColorSurfaceContainer" format="color"/>
-
+ <!-- The primary branding color for the app. By default, this is the color applied to the
+ action bar background. @hide -->
+ <attr name="materialColorPrimary" format="color"/>
+ <!-- The secondary branding color for the app, usually a bright complement to the primary
+ branding color. @hide -->
+ <attr name="materialColorSecondary" format="color"/>
+ <!-- A color that passes accessibility guidelines for text/iconography when drawn on top
+ of tertiary. @hide -->
+ <attr name="materialColorTertiary" format="color"/>
</declare-styleable>
<!-- **************************************************************** -->
diff --git a/core/res/res/values/config_telephony.xml b/core/res/res/values/config_telephony.xml
index fab7609..a57a051 100644
--- a/core/res/res/values/config_telephony.xml
+++ b/core/res/res/values/config_telephony.xml
@@ -125,6 +125,10 @@
<string name="config_satellite_service_package" translatable="false"></string>
<java-symbol type="string" name="config_satellite_service_package" />
+ <!-- Telephony satellite gateway service package name to bind to by default. -->
+ <string name="config_satellite_gateway_service_package" translatable="false"></string>
+ <java-symbol type="string" name="config_satellite_gateway_service_package" />
+
<!-- Telephony pointing UI package name to be launched. -->
<string name="config_pointing_ui_package" translatable="false"></string>
<java-symbol type="string" name="config_pointing_ui_package" />
@@ -142,10 +146,6 @@
<bool name="config_enhanced_iwlan_handover_check">true</bool>
<java-symbol type="bool" name="config_enhanced_iwlan_handover_check" />
- <!-- Whether using the new SubscriptionManagerService or the old SubscriptionController -->
- <bool name="config_using_subscription_manager_service">true</bool>
- <java-symbol type="bool" name="config_using_subscription_manager_service" />
-
<!-- Whether asynchronously update the subscription database or not. Async mode increases
the performance, but sync mode reduces the chance of database/cache out-of-sync. -->
<bool name="config_subscription_database_async_update">true</bool>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 947dc2d..c6462f1 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1452,7 +1452,8 @@
without your intervention. This may result in unexpected charges or calls.
Note that this doesn\'t allow the app to call emergency numbers.
Malicious apps may cost you money by making calls without your
- confirmation.</string>
+ confirmation, or dial carrier codes which cause incoming calls to be
+ automatically forwarded to another number.</string>
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_accessImsCallService">access IMS call service</string>
@@ -1970,8 +1971,8 @@
<string name="face_error_user_canceled">Face Unlock canceled by user</string>
<!-- Generic error message shown when the face operation fails because too many attempts have been made. [CHAR LIMIT=50] -->
<string name="face_error_lockout">Too many attempts. Try again later.</string>
- <!-- Generic error message shown when the face operation fails because strong authentication is required. [CHAR LIMIT=90] -->
- <string name="face_error_lockout_permanent">Too many attempts. Face Unlock disabled.</string>
+ <!-- Generic error message shown when the face operation fails because strong authentication is required. [CHAR LIMIT=100] -->
+ <string name="face_error_lockout_permanent">Too many attempts. Face Unlock unavailable.</string>
<!-- Generic error message shown when the face operation fails because strong authentication is required. [CHAR LIMIT=90] -->
<string name="face_error_lockout_screen_lock">Too many attempts. Enter screen lock instead.</string>
<!-- Generic error message shown when the face hardware can't recognize the face. [CHAR LIMIT=50] -->
@@ -5896,9 +5897,9 @@
<string name="resolver_cant_access_personal_apps_explanation">This content can\u2019t be opened with personal apps</string>
<!-- Error message. This text lets the user know that they need to turn on work apps in order to share or open content. There's also a button a user can tap to turn on the apps. [CHAR LIMIT=NONE] -->
- <string name="resolver_turn_on_work_apps">Work profile is paused</string>
- <!-- Button text. This button turns on a user's work profile so they can access their work apps and data. [CHAR LIMIT=NONE] -->
- <string name="resolver_switch_on_work">Tap to turn on</string>
+ <string name="resolver_turn_on_work_apps">Work apps are paused</string>
+ <!-- Button text. This button unpauses a user's work apps and data. [CHAR LIMIT=NONE] -->
+ <string name="resolver_switch_on_work">Unpause</string>
<!-- Error message. This text lets the user know that their current work apps don't support the specific content. [CHAR LIMIT=NONE] -->
<string name="resolver_no_work_apps_available">No work apps</string>
@@ -5907,9 +5908,9 @@
<string name="resolver_no_personal_apps_available">No personal apps</string>
<!-- Dialog title. User must choose between opening content in a cross-profile app or same-profile browser. [CHAR LIMIT=NONE] -->
- <string name="miniresolver_open_in_personal">Open <xliff:g id="app" example="YouTube">%s</xliff:g> in your personal profile?</string>
+ <string name="miniresolver_open_in_personal">Open personal <xliff:g id="app" example="YouTube">%s</xliff:g></string>
<!-- Dialog title. User must choose between opening content in a cross-profile app or same-profile browser. [CHAR LIMIT=NONE] -->
- <string name="miniresolver_open_in_work">Open <xliff:g id="app" example="YouTube">%s</xliff:g> in your work profile?</string>
+ <string name="miniresolver_open_in_work">Open work <xliff:g id="app" example="YouTube">%s</xliff:g></string>
<!-- Button option. Open the link in the personal browser. [CHAR LIMIT=NONE] -->
<string name="miniresolver_use_personal_browser">Use personal browser</string>
<!-- Button option. Open the link in the work browser. [CHAR LIMIT=NONE] -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index b93a786..b7df6a4 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -5035,11 +5035,9 @@
<java-symbol name="materialColorOnTertiary" type="attr"/>
<java-symbol name="materialColorSurfaceDim" type="attr"/>
<java-symbol name="materialColorSurfaceBright" type="attr"/>
- <java-symbol name="materialColorSecondary" type="attr"/>
<java-symbol name="materialColorOnError" type="attr"/>
<java-symbol name="materialColorSurface" type="attr"/>
<java-symbol name="materialColorSurfaceContainerHigh" type="attr"/>
- <java-symbol name="materialColorTertiary" type="attr"/>
<java-symbol name="materialColorSurfaceContainerHighest" type="attr"/>
<java-symbol name="materialColorOnSurfaceVariant" type="attr"/>
<java-symbol name="materialColorOutline" type="attr"/>
@@ -5047,8 +5045,71 @@
<java-symbol name="materialColorOnPrimary" type="attr"/>
<java-symbol name="materialColorOnSurface" type="attr"/>
<java-symbol name="materialColorSurfaceContainer" type="attr"/>
- <java-symbol name="materialColorSurfaceContainer" type="attr"/>
+ <java-symbol name="materialColorPrimary" type="attr"/>
+ <java-symbol name="materialColorSecondary" type="attr"/>
+ <java-symbol name="materialColorTertiary" type="attr"/>
<java-symbol type="attr" name="actionModeUndoDrawable" />
<java-symbol type="attr" name="actionModeRedoDrawable" />
+
+ <!-- Remaining symbols for Themes -->
+ <java-symbol type="style" name="Theme.DeviceDefault.Autofill.Save" />
+ <java-symbol type="style" name="Theme.DeviceDefault.AutofillHalfScreenDialogButton" />
+ <java-symbol type="style" name="Theme.DeviceDefault.AutofillHalfScreenDialogList" />
+ <java-symbol type="style" name="Theme.DeviceDefault.DayNight" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.Alert.DayNight" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.FixedSize" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.MinWidth" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.NoActionBar.FixedSize" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog.Presentation" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Dialog" />
+ <java-symbol type="style" name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.DialogWhenLarge" />
+ <java-symbol type="style" name="Theme.DeviceDefault.DocumentsUI" />
+ <java-symbol type="style" name="Theme.DeviceDefault.InputMethod" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.DarkActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.FixedSize" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.MinWidth" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar.FixedSize" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog.Presentation" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Dialog" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.DialogWhenLarge" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.NoActionBar.Overscan" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Panel" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.SearchBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light.Voice" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Light" />
+ <java-symbol type="style" name="Theme.DeviceDefault.NoActionBar.Fullscreen" />
+ <java-symbol type="style" name="Theme.DeviceDefault.NoActionBar.Overscan" />
+ <java-symbol type="style" name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" />
+ <java-symbol type="style" name="Theme.DeviceDefault.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Notification" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Panel" />
+ <java-symbol type="style" name="Theme.DeviceDefault.ResolverCommon" />
+ <java-symbol type="style" name="Theme.DeviceDefault.SearchBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.Dark.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.Dialog.Alert" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.Dialog.NoActionBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.Dialog" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.DialogBase" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings.DialogWhenLarge" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Settings" />
+ <java-symbol type="style" name="Theme.DeviceDefault.System.Dialog.Alert" />
+ <java-symbol type="style" name="Theme.DeviceDefault.System.Dialog" />
+ <java-symbol type="style" name="Theme.DeviceDefault.SystemUI.Dialog" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Wallpaper.NoTitleBar" />
+ <java-symbol type="style" name="Theme.DeviceDefault.Wallpaper" />
+ <java-symbol type="style" name="Theme.DeviceDefault" />
+ <java-symbol type="style" name="Theme.DeviceDefaultBase" />
+ <java-symbol type="style" name="ThemeOverlay.DeviceDefault.Accent" />
+ <java-symbol type="style" name="ThemeOverlay.DeviceDefault.Accent.Light" />
+ <java-symbol type="style" name="ThemeOverlay.DeviceDefault.Dark.ActionBar.Accent" />
</resources>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 7068453..a2d54b2 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -270,11 +270,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -282,6 +280,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="Theme.DeviceDefault" parent="Theme.DeviceDefaultBase" />
@@ -364,11 +365,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -376,6 +375,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar. This theme
@@ -457,11 +459,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -469,6 +469,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar and
@@ -552,11 +555,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -564,6 +565,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent
@@ -646,11 +650,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -658,6 +660,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for dialog windows and activities. This changes the window to be
@@ -748,11 +753,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -760,6 +763,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a
@@ -841,11 +847,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -853,6 +857,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar -->
@@ -933,11 +940,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -945,6 +950,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width
@@ -1026,11 +1034,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1038,6 +1044,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
@@ -1135,11 +1144,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1147,6 +1154,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for a window without an action bar that will be displayed either
@@ -1229,11 +1239,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1241,6 +1249,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for a presentation window on a secondary display. -->
@@ -1321,11 +1332,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1333,6 +1342,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for panel windows. This removes all extraneous window
@@ -1415,11 +1427,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1427,6 +1437,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
@@ -1508,11 +1521,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1520,6 +1531,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
@@ -1601,11 +1615,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1613,6 +1625,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- DeviceDefault style for input methods, which is used by the
@@ -1694,11 +1709,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -1706,6 +1719,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault style for input methods, which is used by the
@@ -1787,11 +1803,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -1799,6 +1813,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Material.Dialog.Alert">
@@ -1880,11 +1897,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1892,6 +1907,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Theme for the dialog shown when an app crashes or ANRs. -->
@@ -1978,11 +1996,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -1990,6 +2006,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Material.Dialog.NoFrame">
@@ -2069,11 +2088,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -2081,6 +2098,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault} with a light-colored style -->
@@ -2298,11 +2318,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2310,6 +2328,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of the DeviceDefault (light) theme that has a solid (opaque) action bar with an
@@ -2391,11 +2412,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2403,6 +2422,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar -->
@@ -2483,11 +2505,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2495,6 +2515,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar.
@@ -2576,11 +2599,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2588,6 +2609,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar
@@ -2671,11 +2695,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2683,6 +2705,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent
@@ -2765,11 +2790,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2777,6 +2800,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault light theme for dialog windows and activities. This changes the window to be
@@ -2865,11 +2891,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2877,6 +2901,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} that has a nice minimum width for a
@@ -2961,11 +2988,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -2973,6 +2998,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} without an action bar -->
@@ -3056,11 +3084,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3068,6 +3094,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog_NoActionBar} that has a nice minimum
@@ -3152,11 +3181,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3164,6 +3191,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
@@ -3229,11 +3259,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3241,6 +3269,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. -->
@@ -3306,11 +3337,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3318,6 +3347,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault light theme for a window that will be displayed either full-screen on smaller
@@ -3402,11 +3434,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3414,6 +3444,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault light theme for a window without an action bar that will be displayed either
@@ -3499,11 +3532,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3511,6 +3542,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault light theme for a presentation window on a secondary display. -->
@@ -3594,11 +3628,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3606,6 +3638,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault light theme for panel windows. This removes all extraneous window
@@ -3688,11 +3723,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3700,6 +3733,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Material.Light.Dialog.Alert">
@@ -3781,11 +3817,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3793,6 +3827,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Dialog.Alert.DayNight" parent="Theme.DeviceDefault.Light.Dialog.Alert" />
@@ -3874,11 +3911,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3886,6 +3921,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Light.Voice" parent="Theme.Material.Light.Voice">
@@ -3965,11 +4003,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -3977,6 +4013,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- DeviceDefault theme for a window that should look like the Settings app. -->
@@ -4063,11 +4102,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4075,7 +4112,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
-
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.SystemUI" parent="Theme.DeviceDefault.Light">
@@ -4143,11 +4182,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4155,7 +4192,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
-
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.SystemUI.Dialog" parent="Theme.DeviceDefault.Light.Dialog">
@@ -4215,11 +4254,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4227,7 +4264,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
-
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Variant of {@link #Theme_DeviceDefault_Settings_Dark} with no action bar -->
@@ -4309,11 +4348,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -4321,6 +4358,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="Theme.DeviceDefault.Settings.DialogBase" parent="Theme.Material.Light.BaseDialog">
@@ -4386,11 +4426,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4398,7 +4436,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
-
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Settings.Dialog" parent="Theme.DeviceDefault.Settings.DialogBase">
@@ -4504,11 +4544,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4516,6 +4554,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Settings.Dialog.Alert" parent="Theme.Material.Settings.Dialog.Alert">
@@ -4599,11 +4640,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4611,6 +4650,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Settings.Dialog.NoActionBar" parent="Theme.DeviceDefault.Light.Dialog.NoActionBar" />
@@ -4720,11 +4762,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -4732,7 +4772,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
-
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="ThemeOverlay.DeviceDefault.Accent.Light">
@@ -4772,11 +4814,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4784,6 +4824,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<!-- Theme overlay that replaces colorAccent with the colorAccent from {@link #Theme_DeviceDefault_DayNight}. -->
@@ -4827,11 +4870,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -4839,6 +4880,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="Theme.DeviceDefault.Light.Dialog.Alert.UserSwitchingDialog" parent="Theme.DeviceDefault.NoActionBar.Fullscreen">
@@ -4878,11 +4922,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_light</item>
- <item name="materialColorSecondary">@color/system_secondary_light</item>
<item name="materialColorOnError">@color/system_on_error_light</item>
<item name="materialColorSurface">@color/system_surface_light</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_light</item>
- <item name="materialColorTertiary">@color/system_tertiary_light</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_light</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_light</item>
<item name="materialColorOutline">@color/system_outline_light</item>
@@ -4890,6 +4932,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_light</item>
<item name="materialColorOnSurface">@color/system_on_surface_light</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_light</item>
+ <item name="materialColorPrimary">@color/system_primary_light</item>
+ <item name="materialColorSecondary">@color/system_secondary_light</item>
+ <item name="materialColorTertiary">@color/system_tertiary_light</item>
</style>
<style name="Theme.DeviceDefault.Notification" parent="@style/Theme.Material.Notification">
@@ -4940,11 +4985,9 @@
<item name="materialColorOnTertiary">@color/system_on_tertiary_dark</item>
<item name="materialColorSurfaceDim">@color/system_surface_dim_dark</item>
<item name="materialColorSurfaceBright">@color/system_surface_bright_dark</item>
- <item name="materialColorSecondary">@color/system_secondary_dark</item>
<item name="materialColorOnError">@color/system_on_error_dark</item>
<item name="materialColorSurface">@color/system_surface_dark</item>
<item name="materialColorSurfaceContainerHigh">@color/system_surface_container_high_dark</item>
- <item name="materialColorTertiary">@color/system_tertiary_dark</item>
<item name="materialColorSurfaceContainerHighest">@color/system_surface_container_highest_dark</item>
<item name="materialColorOnSurfaceVariant">@color/system_on_surface_variant_dark</item>
<item name="materialColorOutline">@color/system_outline_dark</item>
@@ -4952,6 +4995,9 @@
<item name="materialColorOnPrimary">@color/system_on_primary_dark</item>
<item name="materialColorOnSurface">@color/system_on_surface_dark</item>
<item name="materialColorSurfaceContainer">@color/system_surface_container_dark</item>
+ <item name="materialColorPrimary">@color/system_primary_dark</item>
+ <item name="materialColorSecondary">@color/system_secondary_dark</item>
+ <item name="materialColorTertiary">@color/system_tertiary_dark</item>
</style>
<style name="Theme.DeviceDefault.AutofillHalfScreenDialogList" parent="Theme.DeviceDefault.DayNight">
<item name="colorListDivider">@color/list_divider_opacity_device_default_light</item>
diff --git a/core/tests/coretests/res/drawable-nodpi/test_too_big.png b/core/tests/coretests/res/drawable-nodpi/test_too_big.png
new file mode 100644
index 0000000..3754072
--- /dev/null
+++ b/core/tests/coretests/res/drawable-nodpi/test_too_big.png
Binary files differ
diff --git a/core/tests/coretests/src/android/animation/ValueAnimatorTests.java b/core/tests/coretests/src/android/animation/ValueAnimatorTests.java
index a53d57f..a102b3e 100644
--- a/core/tests/coretests/src/android/animation/ValueAnimatorTests.java
+++ b/core/tests/coretests/src/android/animation/ValueAnimatorTests.java
@@ -1127,6 +1127,31 @@
mActivityRule.runOnUiThread(() -> {});
}
+ @Test
+ public void restartValueAnimator() throws Throwable {
+ CountDownLatch latch = new CountDownLatch(1);
+ ValueAnimator.AnimatorUpdateListener listener = new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ if (((float) animation.getAnimatedValue()) != A1_START_VALUE) {
+ latch.countDown();
+ }
+ }
+ };
+ a1.addUpdateListener(listener);
+
+ mActivityRule.runOnUiThread(() -> {
+ a1.start();
+ });
+
+ // wait for a change in the value
+ assertTrue(latch.await(2, TimeUnit.SECONDS));
+
+ mActivityRule.runOnUiThread(() -> {
+ a1.start();
+ assertEquals(A1_START_VALUE, a1.getAnimatedValue());
+ });
+ }
class MyUpdateListener implements ValueAnimator.AnimatorUpdateListener {
boolean wasRunning = false;
long firstRunningFrameTime = -1;
diff --git a/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt b/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt
index a0d8dcf..ba6c8fa 100644
--- a/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt
+++ b/core/tests/coretests/src/android/content/res/FontScaleConverterFactoryTest.kt
@@ -122,6 +122,22 @@
}
}
+ @SmallTest
+ fun testIsNonLinearFontScalingActive() {
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(0f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(-1f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(0.85f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1.02f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1.10f)).isFalse()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1.15f)).isTrue()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1.1499999f))
+ .isTrue()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(1.5f)).isTrue()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(2f)).isTrue()
+ assertThat(FontScaleConverterFactory.isNonLinearFontScalingActive(3f)).isTrue()
+ }
+
@LargeTest
@Test
fun allFeasibleScalesAndConversionsDoNotCrash() {
diff --git a/core/tests/coretests/src/android/graphics/drawable/IconTest.java b/core/tests/coretests/src/android/graphics/drawable/IconTest.java
index 75390a2..5d92296 100644
--- a/core/tests/coretests/src/android/graphics/drawable/IconTest.java
+++ b/core/tests/coretests/src/android/graphics/drawable/IconTest.java
@@ -20,6 +20,7 @@
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.RecordingCanvas;
import android.graphics.Region;
import android.os.Handler;
import android.os.HandlerThread;
@@ -371,6 +372,90 @@
}
}
+ private int getMaxWidth(int origWidth, int origHeight, int maxNumPixels) {
+ float aspRatio = (float) origWidth / (float) origHeight;
+ int newHeight = (int) Math.sqrt(maxNumPixels / aspRatio);
+ return (int) (newHeight * aspRatio);
+ }
+
+ private int getMaxHeight(int origWidth, int origHeight, int maxNumPixels) {
+ float aspRatio = (float) origWidth / (float) origHeight;
+ return (int) Math.sqrt(maxNumPixels / aspRatio);
+ }
+
+ @SmallTest
+ public void testScaleDownMaxSizeWithBitmap() throws Exception {
+ final int bmpWidth = 13_000;
+ final int bmpHeight = 10_000;
+ final int bmpBpp = 4;
+ final int maxNumPixels = RecordingCanvas.MAX_BITMAP_SIZE / bmpBpp;
+ final int maxWidth = getMaxWidth(bmpWidth, bmpHeight, maxNumPixels);
+ final int maxHeight = getMaxHeight(bmpWidth, bmpHeight, maxNumPixels);
+
+ final Bitmap bm = Bitmap.createBitmap(bmpWidth, bmpHeight, Bitmap.Config.ARGB_8888);
+ final Icon ic = Icon.createWithBitmap(bm);
+ final Drawable drawable = ic.loadDrawable(mContext);
+
+ assertThat(drawable.getIntrinsicWidth()).isEqualTo(maxWidth);
+ assertThat(drawable.getIntrinsicHeight()).isEqualTo(maxHeight);
+ }
+
+ @SmallTest
+ public void testScaleDownMaxSizeWithAdaptiveBitmap() throws Exception {
+ final int bmpWidth = 20_000;
+ final int bmpHeight = 10_000;
+ final int bmpBpp = 4;
+ final int maxNumPixels = RecordingCanvas.MAX_BITMAP_SIZE / bmpBpp;
+ final int maxWidth = getMaxWidth(bmpWidth, bmpHeight, maxNumPixels);
+ final int maxHeight = getMaxHeight(bmpWidth, bmpHeight, maxNumPixels);
+
+ final Bitmap bm = Bitmap.createBitmap(bmpWidth, bmpHeight, Bitmap.Config.ARGB_8888);
+ final Icon ic = Icon.createWithAdaptiveBitmap(bm);
+ final AdaptiveIconDrawable adaptiveDrawable = (AdaptiveIconDrawable) ic.loadDrawable(
+ mContext);
+ final Drawable drawable = adaptiveDrawable.getForeground();
+
+ assertThat(drawable.getIntrinsicWidth()).isEqualTo(maxWidth);
+ assertThat(drawable.getIntrinsicHeight()).isEqualTo(maxHeight);
+ }
+
+ @SmallTest
+ public void testScaleDownMaxSizeWithResource() throws Exception {
+ final Icon ic = Icon.createWithResource(getContext(), R.drawable.test_too_big);
+ final BitmapDrawable drawable = (BitmapDrawable) ic.loadDrawable(mContext);
+
+ assertThat(drawable.getBitmap().getByteCount()).isAtMost(RecordingCanvas.MAX_BITMAP_SIZE);
+ }
+
+ @SmallTest
+ public void testScaleDownMaxSizeWithFile() throws Exception {
+ final Bitmap bit1 = ((BitmapDrawable) getContext().getDrawable(R.drawable.test_too_big))
+ .getBitmap();
+ final File dir = getContext().getExternalFilesDir(null);
+ final File file1 = new File(dir, "file1-too-big.png");
+ bit1.compress(Bitmap.CompressFormat.PNG, 100,
+ new FileOutputStream(file1));
+
+ final Icon ic = Icon.createWithFilePath(file1.toString());
+ final BitmapDrawable drawable = (BitmapDrawable) ic.loadDrawable(mContext);
+
+ assertThat(drawable.getBitmap().getByteCount()).isAtMost(RecordingCanvas.MAX_BITMAP_SIZE);
+ }
+
+ @SmallTest
+ public void testScaleDownMaxSizeWithData() throws Exception {
+ final int bmpBpp = 4;
+ final Bitmap originalBits = ((BitmapDrawable) getContext().getDrawable(
+ R.drawable.test_too_big)).getBitmap();
+ final ByteArrayOutputStream ostream = new ByteArrayOutputStream(
+ originalBits.getWidth() * originalBits.getHeight() * bmpBpp);
+ originalBits.compress(Bitmap.CompressFormat.PNG, 100, ostream);
+ final byte[] pngdata = ostream.toByteArray();
+ final Icon ic = Icon.createWithData(pngdata, 0, pngdata.length);
+ final BitmapDrawable drawable = (BitmapDrawable) ic.loadDrawable(mContext);
+
+ assertThat(drawable.getBitmap().getByteCount()).isAtMost(RecordingCanvas.MAX_BITMAP_SIZE);
+ }
// ======== utils ========
diff --git a/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java b/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java
index 9a202ae..1075d44 100644
--- a/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/face/FaceManagerTest.java
@@ -21,8 +21,11 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -38,6 +41,8 @@
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;
+import com.android.internal.R;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -50,6 +55,7 @@
import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
@Presubmit
@@ -70,6 +76,8 @@
private IFaceService mService;
@Mock
private FaceManager.AuthenticationCallback mAuthCallback;
+ @Mock
+ private FaceManager.EnrollmentCallback mEnrollmentCallback;
@Captor
private ArgumentCaptor<IFaceAuthenticatorsRegisteredCallback> mCaptor;
@@ -107,9 +115,7 @@
@Test
public void getSensorPropertiesInternal_noBinderCalls() throws RemoteException {
- verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());
-
- mCaptor.getValue().onAllAuthenticatorsRegistered(mProps);
+ initializeProperties();
List<FaceSensorPropertiesInternal> actual = mFaceManager.getSensorPropertiesInternal();
assertThat(actual).containsExactlyElementsIn(mProps);
@@ -148,4 +154,33 @@
verify(mAuthCallback).onAuthenticationError(eq(FACE_ERROR_HW_UNAVAILABLE), any());
}
+
+ @Test
+ public void enrollment_errorWhenFaceEnrollmentExists() throws RemoteException {
+ when(mResources.getInteger(R.integer.config_faceMaxTemplatesPerUser)).thenReturn(1);
+ when(mService.getEnrolledFaces(anyInt(), anyInt(), anyString()))
+ .thenReturn(Collections.emptyList())
+ .thenReturn(Collections.singletonList(new Face("Face" /* name */, 0 /* faceId */,
+ 0 /* deviceId */)));
+
+ initializeProperties();
+ mFaceManager.enroll(USER_ID, new byte[]{},
+ new CancellationSignal(), mEnrollmentCallback, null /* disabledFeatures */);
+
+ verify(mService).enroll(eq(USER_ID), any(), any(), any(), anyString(), any(), any(),
+ anyBoolean());
+
+ mFaceManager.enroll(USER_ID, new byte[]{},
+ new CancellationSignal(), mEnrollmentCallback, null /* disabledFeatures */);
+
+ verify(mService, atMost(1 /* maxNumberOfInvocations */)).enroll(eq(USER_ID), any(), any(),
+ any(), anyString(), any(), any(), anyBoolean());
+ verify(mEnrollmentCallback).onEnrollmentError(eq(FACE_ERROR_HW_UNAVAILABLE), anyString());
+ }
+
+ private void initializeProperties() throws RemoteException {
+ verify(mService).addAuthenticatorsRegisteredCallback(mCaptor.capture());
+
+ mCaptor.getValue().onAllAuthenticatorsRegistered(mProps);
+ }
}
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt b/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
index 4f27e99..fdcc7c9 100644
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
+++ b/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
@@ -15,11 +15,14 @@
*/
package android.hardware.input
+import android.content.Context
+import android.content.ContextWrapper
import android.hardware.BatteryState
import android.os.Handler
import android.os.HandlerExecutor
import android.os.test.TestLooper
import android.platform.test.annotations.Presubmit
+import androidx.test.core.app.ApplicationProvider
import com.android.server.testutils.any
import java.util.concurrent.Executor
import kotlin.test.assertEquals
@@ -32,8 +35,10 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
+import org.mockito.Mockito
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.`when`
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoJUnitRunner
@@ -53,6 +58,7 @@
private var registeredListener: IInputDeviceBatteryListener? = null
private val monitoredDevices = mutableListOf<Int>()
private lateinit var executor: Executor
+ private lateinit var context: Context
private lateinit var inputManager: InputManager
@Mock
@@ -60,11 +66,15 @@
@Before
fun setUp() {
+ context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
testLooper = TestLooper()
executor = HandlerExecutor(Handler(testLooper.looper))
registeredListener = null
monitoredDevices.clear()
- inputManager = InputManager.resetInstance(iInputManagerMock)
+ InputManagerGlobal.resetInstance(iInputManagerMock)
+ inputManager = InputManager(context)
+ `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+ .thenReturn(inputManager)
// Handle battery listener registration.
doAnswer {
@@ -102,7 +112,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
private fun notifyBatteryStateChanged(
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java b/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java
index bf65af3..1e505ab 100644
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java
@@ -28,9 +28,12 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.content.ContextWrapper;
import android.hardware.lights.Light;
import android.hardware.lights.LightState;
import android.hardware.lights.LightsManager;
@@ -40,6 +43,8 @@
import android.util.ArrayMap;
import android.view.InputDevice;
+import androidx.test.InstrumentationRegistry;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -76,12 +81,15 @@
@Before
public void setUp() throws Exception {
+ final Context context = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
when(mIInputManagerMock.getInputDevice(eq(DEVICE_ID))).thenReturn(
createInputDevice(DEVICE_ID));
- mInputManager = InputManager.resetInstance(mIInputManagerMock);
+ InputManagerGlobal.resetInstance(mIInputManagerMock);
+ mInputManager = new InputManager(context);
+ when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
ArrayMap<Integer, LightState> lightStatesById = new ArrayMap<>();
doAnswer(invocation -> {
@@ -106,7 +114,7 @@
@After
public void tearDown() {
- InputManager.clearInstance();
+ InputManagerGlobal.clearInstance();
}
private InputDevice createInputDevice(int id) {
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java b/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java
index 6cf2314..b33cfdd 100644
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java
+++ b/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java
@@ -81,9 +81,9 @@
@Before
public void setUp() throws Exception {
final Context context = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
- InputManager inputManager = InputManager.resetInstance(mIInputManagerMock);
-
- when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager);
+ InputManagerGlobal.resetInstance(mIInputManagerMock);
+ mInputManager = new InputManager(context);
+ when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
@@ -98,13 +98,11 @@
.thenReturn(true);
when(mIInputManagerMock.registerSensorListener(any())).thenReturn(true);
-
- mInputManager = context.getSystemService(InputManager.class);
}
@After
public void tearDown() {
- InputManager.clearInstance();
+ InputManagerGlobal.clearInstance();
}
private class InputTestSensorEventListener implements SensorEventListener {
diff --git a/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt b/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt
index ee7a608..2ebe362 100644
--- a/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt
+++ b/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt
@@ -15,11 +15,14 @@
*/
package android.hardware.input
+import android.content.Context
+import android.content.ContextWrapper
import android.content.res.Resources
import android.platform.test.annotations.Presubmit
import android.view.Display
import android.view.DisplayInfo
import android.view.InputDevice
+import androidx.test.core.app.ApplicationProvider
import org.junit.After
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertEquals
@@ -28,6 +31,7 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
+import org.mockito.Mockito
import org.mockito.Mockito.eq
import org.mockito.Mockito.`when`
import org.mockito.junit.MockitoJUnit
@@ -52,17 +56,20 @@
@get:Rule
val rule = MockitoJUnit.rule()!!
- private lateinit var inputManager: InputManager
-
private lateinit var devicesChangedListener: IInputDevicesChangedListener
private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
+ private lateinit var context: Context
+ private lateinit var inputManager: InputManager
@Mock
private lateinit var iInputManager: IInputManager
@Before
fun setUp() {
- inputManager = InputManager.resetInstance(iInputManager)
+ context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+ InputManagerGlobal.resetInstance(iInputManager)
+ inputManager = InputManager(context)
+ `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
`when`(iInputManager.inputDeviceIds).then {
deviceGenerationMap.keys.toIntArray()
}
@@ -70,7 +77,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
private fun notifyDeviceChanged(
diff --git a/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt b/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt
index 91d19a1..ce816ab 100644
--- a/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt
+++ b/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt
@@ -16,10 +16,13 @@
package android.hardware.input
+import android.content.Context
+import android.content.ContextWrapper
import android.os.Handler
import android.os.HandlerExecutor
import android.os.test.TestLooper
import android.platform.test.annotations.Presubmit
+import androidx.test.core.app.ApplicationProvider
import com.android.server.testutils.any
import org.junit.After
import org.junit.Before
@@ -27,7 +30,9 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
+import org.mockito.Mockito
import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.`when`
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoJUnitRunner
import java.util.concurrent.Executor
@@ -51,6 +56,7 @@
private lateinit var testLooper: TestLooper
private var registeredListener: IKeyboardBacklightListener? = null
private lateinit var executor: Executor
+ private lateinit var context: Context
private lateinit var inputManager: InputManager
@Mock
@@ -58,10 +64,14 @@
@Before
fun setUp() {
+ context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+ InputManagerGlobal.resetInstance(iInputManagerMock)
testLooper = TestLooper()
executor = HandlerExecutor(Handler(testLooper.looper))
registeredListener = null
- inputManager = InputManager.resetInstance(iInputManagerMock)
+ inputManager = InputManager(context)
+ `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+ .thenReturn(inputManager)
// Handle keyboard backlight listener registration.
doAnswer {
@@ -89,7 +99,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
private fun notifyKeyboardBacklightChanged(
diff --git a/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java b/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java
index 4eea076..7d5a0364 100644
--- a/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java
+++ b/core/tests/coretests/src/android/internal/os/anr/AnrLatencyTrackerTests.java
@@ -59,7 +59,10 @@
.thenReturn(175L)
.thenReturn(198L)
.thenReturn(203L)
- .thenReturn(209L);
+ .thenReturn(209L)
+ .thenReturn(211L)
+ .thenReturn(212L)
+ .thenReturn(220L);
}
@Test
@@ -68,6 +71,7 @@
mLatencyTracker.appNotRespondingStarted();
mLatencyTracker.waitingOnAnrRecordLockStarted();
mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.earlyDumpRequestSubmittedWithSize(5);
mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
mLatencyTracker.appNotRespondingEnded();
@@ -90,7 +94,16 @@
mLatencyTracker.waitingOnProcLockStarted();
mLatencyTracker.waitingOnProcLockEnded();
+ mLatencyTracker.dumpStackTracesTempFileStarted();
+ mLatencyTracker.dumpingPidStarted(5);
+
mLatencyTracker.dumpStackTracesStarted();
+ mLatencyTracker.copyingFirstPidStarted();
+
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpStackTracesTempFileEnded();
+
+ mLatencyTracker.copyingFirstPidEnded(true);
mLatencyTracker.dumpingFirstPidsStarted();
mLatencyTracker.dumpingPidStarted(1);
mLatencyTracker.dumpingPidEnded();
@@ -111,7 +124,7 @@
mLatencyTracker.close();
assertThat(mLatencyTracker.dumpAsCommaSeparatedArrayWithHeader())
- .isEqualTo("DurationsV2: 50,5,25,8,115,2,3,7,8,15,2,7,23,10,3,6\n\n");
+ .isEqualTo("DurationsV3: 50,5,33,11,112,4,2,4,6,5,1,10,5,10,3,9,11,129,5,8,1\n\n");
verify(mLatencyTracker, times(1)).pushAtom();
}
@@ -121,6 +134,7 @@
mLatencyTracker.appNotRespondingStarted();
mLatencyTracker.waitingOnAnrRecordLockStarted();
mLatencyTracker.waitingOnAnrRecordLockEnded();
+ mLatencyTracker.earlyDumpRequestSubmittedWithSize(5);
mLatencyTracker.anrRecordPlacingOnQueueWithSize(3);
mLatencyTracker.appNotRespondingEnded();
@@ -143,7 +157,18 @@
mLatencyTracker.waitingOnProcLockStarted();
mLatencyTracker.waitingOnProcLockEnded();
+
+
+ mLatencyTracker.dumpStackTracesTempFileStarted();
+ mLatencyTracker.dumpingPidStarted(5);
+
mLatencyTracker.dumpStackTracesStarted();
+ mLatencyTracker.copyingFirstPidStarted();
+
+ mLatencyTracker.dumpingPidEnded();
+ mLatencyTracker.dumpStackTracesTempFileEnded();
+
+ mLatencyTracker.copyingFirstPidEnded(true);
mLatencyTracker.dumpingFirstPidsStarted();
mLatencyTracker.dumpingPidStarted(1);
mLatencyTracker.dumpingPidEnded();
diff --git a/core/tests/coretests/src/android/view/WindowInsetsTest.java b/core/tests/coretests/src/android/view/WindowInsetsTest.java
index 4fed396..b4ba23c 100644
--- a/core/tests/coretests/src/android/view/WindowInsetsTest.java
+++ b/core/tests/coretests/src/android/view/WindowInsetsTest.java
@@ -40,14 +40,14 @@
@Test
public void systemWindowInsets_afterConsuming_isConsumed() {
assertTrue(new WindowInsets(WindowInsets.createCompatTypeMap(new Rect(1, 2, 3, 4)), null,
- null, false, false, null, null, null, null,
+ null, false, false, 0, null, null, null, null,
WindowInsets.Type.systemBars(), false)
.consumeSystemWindowInsets().isConsumed());
}
@Test
public void multiNullConstructor_isConsumed() {
- assertTrue(new WindowInsets(null, null, null, false, false, null, null, null, null,
+ assertTrue(new WindowInsets(null, null, null, false, false, 0, null, null, null, null,
WindowInsets.Type.systemBars(), false).isConsumed());
}
@@ -63,8 +63,8 @@
boolean[] visible = new boolean[SIZE];
WindowInsets.assignCompatInsets(maxInsets, new Rect(0, 10, 0, 0));
WindowInsets.assignCompatInsets(insets, new Rect(0, 0, 0, 0));
- WindowInsets windowInsets = new WindowInsets(insets, maxInsets, visible, false, false, null,
- null, null, DisplayShape.NONE, systemBars(),
+ WindowInsets windowInsets = new WindowInsets(insets, maxInsets, visible, false, false,
+ 0, null, null, null, DisplayShape.NONE, systemBars(),
true /* compatIgnoreVisibility */);
assertEquals(Insets.of(0, 10, 0, 0), windowInsets.getSystemWindowInsets());
}
diff --git a/core/tests/coretests/src/com/android/internal/widget/ActionBarOverlayLayoutTest.java b/core/tests/coretests/src/com/android/internal/widget/ActionBarOverlayLayoutTest.java
index 4d4ec35..a1a4265 100644
--- a/core/tests/coretests/src/com/android/internal/widget/ActionBarOverlayLayoutTest.java
+++ b/core/tests/coretests/src/com/android/internal/widget/ActionBarOverlayLayoutTest.java
@@ -169,7 +169,7 @@
private WindowInsets insetsWith(Insets content, DisplayCutout cutout) {
return new WindowInsets(WindowInsets.createCompatTypeMap(content.toRect()), null, null,
- false, false, cutout, null, null, null, WindowInsets.Type.systemBars(), false);
+ false, false, 0, cutout, null, null, null, WindowInsets.Type.systemBars(), false);
}
private ViewGroup createViewGroupWithId(int id) {
diff --git a/core/tests/utiltests/src/com/android/internal/util/QuickSelectTest.java b/core/tests/utiltests/src/com/android/internal/util/QuickSelectTest.java
new file mode 100644
index 0000000..1b9d2ef
--- /dev/null
+++ b/core/tests/utiltests/src/com/android/internal/util/QuickSelectTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Tests for {@link QuickSelect}.
+ */
+public final class QuickSelectTest extends TestCase {
+
+ public void testQuickSelect() throws Exception {
+ test((List<Integer>) null, 0, null);
+ test(Arrays.asList(), -1, null);
+ test(Arrays.asList(), 0, null);
+ test(Arrays.asList(), 1, null);
+ test(Arrays.asList(1), -1, 1, 0, null);
+ test(Arrays.asList(1), 1, -1, 0, null);
+ test(Arrays.asList(1), 0, 1, -1, null);
+ test(Arrays.asList(1), 1, 1, 0, null);
+ test(Arrays.asList(1), 0, 1);
+ test(Arrays.asList(1), 1, null);
+ test(Arrays.asList(1, 2, 3, 4, 5), 0, 1);
+ test(Arrays.asList(1, 2, 3, 4, 5), 1, 2);
+ test(Arrays.asList(1, 2, 3, 4, 5), 2, 3);
+ test(Arrays.asList(1, 2, 3, 4, 5), 3, 4);
+ test(Arrays.asList(1, 2, 3, 4, 5), 4, 5);
+ test(Arrays.asList(1, 2, 3, 4, 5), 5, null);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 2, 7);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 4, 9);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 7, 20);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 8, null);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 1, 3, 0, 3);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 1, 3, 1, 4);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 1, 3, 2, 10);
+ test(Arrays.asList(7, 10, 4, 3, 20, 15, 8, 9), 1, 3, 3, null);
+
+ test((int[]) null, 0, null);
+ test(new int[0], -1, null);
+ test(new int[0], 0, null);
+ test(new int[0], 1, null);
+ test(new int[] {1}, -1, 1, 0, null);
+ test(new int[] {1}, 1, -1, 0, null);
+ test(new int[] {1}, 1, 0, -1, null);
+ test(new int[] {1}, 1, 1, 0, null);
+ test(new int[] {1}, 0, 1);
+ test(new int[] {1}, 1, null);
+ test(new int[] {1, 2, 3, 4, 5}, 0, 1);
+ test(new int[] {1, 2, 3, 4, 5}, 1, 2);
+ test(new int[] {1, 2, 3, 4, 5}, 2, 3);
+ test(new int[] {1, 2, 3, 4, 5}, 3, 4);
+ test(new int[] {1, 2, 3, 4, 5}, 4, 5);
+ test(new int[] {1, 2, 3, 4, 5}, 5, null);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 2, 7);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 4, 9);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 7, 20);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 8, null);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 0, 3);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 1, 4);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 2, 10);
+ test(new int[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 3, null);
+
+ test((long[]) null, 0, null);
+ test(new long[0], -1, null);
+ test(new long[0], 0, null);
+ test(new long[0], 1, null);
+ test(new long[] {1}, -1, 1, 0, null);
+ test(new long[] {1}, 1, -1, 0, null);
+ test(new long[] {1}, 1, 0, -1, null);
+ test(new long[] {1}, 1, 1, 0, null);
+ test(new long[] {1}, 0, 1L);
+ test(new long[] {1}, 1, null);
+ test(new long[] {1, 2, 3, 4, 5}, 0, 1L);
+ test(new long[] {1, 2, 3, 4, 5}, 1, 2L);
+ test(new long[] {1, 2, 3, 4, 5}, 2, 3L);
+ test(new long[] {1, 2, 3, 4, 5}, 3, 4L);
+ test(new long[] {1, 2, 3, 4, 5}, 4, 5L);
+ test(new long[] {1, 2, 3, 4, 5}, 5, null);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 2, 7L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 4, 9L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 7, 20L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 8, null);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 0, 3L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 1, 4L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 2, 10L);
+ test(new long[] {7, 10, 4, 3, 20, 15, 8, 9}, 1, 3, 3, null);
+ }
+
+ private void test(List<Integer> input, int k, Integer expected) throws Exception {
+ test(input, 0, input == null ? 0 : input.size(), k, expected);
+ }
+
+ private void test(List<Integer> input, int start, int length, int k, Integer expected)
+ throws Exception {
+ try {
+ final Integer result = QuickSelect.select(input, start, length, k, Integer::compare);
+ assertEquals(expected, result);
+ } catch (IllegalArgumentException e) {
+ if (expected != null) {
+ throw new Exception(e);
+ }
+ }
+ }
+
+ private void test(int[] input, int k, Integer expected) throws Exception {
+ test(input, 0, input == null ? 0 : input.length, k, expected);
+ }
+
+ private void test(int[] input, int start, int length, int k, Integer expected)
+ throws Exception {
+ try {
+ final int result = QuickSelect.select(input, start, length, k);
+ assertEquals((int) expected, result);
+ } catch (IllegalArgumentException e) {
+ if (expected != null) {
+ throw new Exception(e);
+ }
+ }
+ }
+
+ private void test(long[] input, int k, Long expected) throws Exception {
+ test(input, 0, input == null ? 0 : input.length, k, expected);
+ }
+
+ private void test(long[] input, int start, int length, int k, Long expected) throws Exception {
+ try {
+ final long result = QuickSelect.select(input, start, length, k);
+ assertEquals((long) expected, result);
+ } catch (IllegalArgumentException e) {
+ if (expected != null) {
+ throw new Exception(e);
+ }
+ }
+ }
+}
diff --git a/data/etc/Android.bp b/data/etc/Android.bp
index f233c6e..6a1f3f9 100644
--- a/data/etc/Android.bp
+++ b/data/etc/Android.bp
@@ -54,6 +54,12 @@
src: "hiddenapi-package-whitelist.xml",
}
+prebuilt_etc {
+ name: "preinstalled-packages-asl-files.xml",
+ sub_dir: "sysconfig",
+ src: "preinstalled-packages-asl-files.xml",
+}
+
// Privapp permission whitelist files
prebuilt_etc {
diff --git a/data/etc/preinstalled-packages-asl-files.xml b/data/etc/preinstalled-packages-asl-files.xml
new file mode 100644
index 0000000..6b5401c
--- /dev/null
+++ b/data/etc/preinstalled-packages-asl-files.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2023 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<!--
+This XML file declares which preinstalled apps have Android Security Label data by declaring the
+path to the XML file containing this data.
+
+Example usage:
+ <asl-file package="com.foo.bar" path="/vendor/etc/asl/com.foo.bar.xml"/>
+-->
+
+<config></config>
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 0faf62e..40cb7f2 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -122,6 +122,7 @@
<permission name="android.permission.BIND_CARRIER_SERVICES"/>
<permission name="android.permission.BIND_CELL_BROADCAST_SERVICE"/>
<permission name="android.permission.BIND_IMS_SERVICE"/>
+ <permission name="android.permission.BIND_SATELLITE_GATEWAY_SERVICE"/>
<permission name="android.permission.BIND_SATELLITE_SERVICE"/>
<permission name="android.permission.BIND_TELEPHONY_DATA_SERVICE"/>
<permission name="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"/>
@@ -515,6 +516,10 @@
<permission name="android.permission.READ_RESTRICTED_STATS"/>
<!-- Permission required for CTS test -->
<permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE"/>
+ <!-- Permission required for CTS test - CtsVoiceInteractionTestCases -->
+ <permission name="android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER"/>
+ <!-- Permission required for CTS test - SatelliteManagerTest -->
+ <permission name="android.permission.SATELLITE_COMMUNICATION"/>
</privapp-permissions>
<privapp-permissions package="com.android.statementservice">
diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java
index a76d74e..708feeb 100644
--- a/graphics/java/android/graphics/drawable/Icon.java
+++ b/graphics/java/android/graphics/drawable/Icon.java
@@ -35,6 +35,7 @@
import android.graphics.BitmapFactory;
import android.graphics.BlendMode;
import android.graphics.PorterDuff;
+import android.graphics.RecordingCanvas;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
@@ -70,6 +71,7 @@
public final class Icon implements Parcelable {
private static final String TAG = "Icon";
+ private static final boolean DEBUG = false;
/**
* An icon that was created using {@link Icon#createWithBitmap(Bitmap)}.
@@ -361,15 +363,52 @@
}
/**
+ * Resizes image if size too large for Canvas to draw
+ * @param bitmap Bitmap to be resized if size > {@link RecordingCanvas.MAX_BITMAP_SIZE}
+ * @return resized bitmap
+ */
+ private Bitmap fixMaxBitmapSize(Bitmap bitmap) {
+ if (bitmap != null && bitmap.getByteCount() > RecordingCanvas.MAX_BITMAP_SIZE) {
+ int bytesPerPixel = bitmap.getRowBytes() / bitmap.getWidth();
+ int maxNumPixels = RecordingCanvas.MAX_BITMAP_SIZE / bytesPerPixel;
+ float aspRatio = (float) bitmap.getWidth() / (float) bitmap.getHeight();
+ int newHeight = (int) Math.sqrt(maxNumPixels / aspRatio);
+ int newWidth = (int) (newHeight * aspRatio);
+
+ if (DEBUG) {
+ Log.d(TAG,
+ "Image size too large: " + bitmap.getByteCount() + ". Resizing bitmap to: "
+ + newWidth + " " + newHeight);
+ }
+
+ return scaleDownIfNecessary(bitmap, newWidth, newHeight);
+ }
+ return bitmap;
+ }
+
+ /**
+ * Resizes BitmapDrawable if size too large for Canvas to draw
+ * @param drawable Drawable to be resized if size > {@link RecordingCanvas.MAX_BITMAP_SIZE}
+ * @return resized Drawable
+ */
+ private Drawable fixMaxBitmapSize(Resources res, Drawable drawable) {
+ if (drawable instanceof BitmapDrawable) {
+ Bitmap scaledBmp = fixMaxBitmapSize(((BitmapDrawable) drawable).getBitmap());
+ return new BitmapDrawable(res, scaledBmp);
+ }
+ return drawable;
+ }
+
+ /**
* Do the heavy lifting of loading the drawable, but stop short of applying any tint.
*/
private Drawable loadDrawableInner(Context context) {
switch (mType) {
case TYPE_BITMAP:
- return new BitmapDrawable(context.getResources(), getBitmap());
+ return new BitmapDrawable(context.getResources(), fixMaxBitmapSize(getBitmap()));
case TYPE_ADAPTIVE_BITMAP:
return new AdaptiveIconDrawable(null,
- new BitmapDrawable(context.getResources(), getBitmap()));
+ new BitmapDrawable(context.getResources(), fixMaxBitmapSize(getBitmap())));
case TYPE_RESOURCE:
if (getResources() == null) {
// figure out where to load resources from
@@ -400,7 +439,8 @@
}
}
try {
- return getResources().getDrawable(getResId(), context.getTheme());
+ return fixMaxBitmapSize(getResources(),
+ getResources().getDrawable(getResId(), context.getTheme()));
} catch (RuntimeException e) {
Log.e(TAG, String.format("Unable to load resource 0x%08x from pkg=%s",
getResId(),
@@ -409,21 +449,21 @@
}
break;
case TYPE_DATA:
- return new BitmapDrawable(context.getResources(),
- BitmapFactory.decodeByteArray(getDataBytes(), getDataOffset(), getDataLength())
- );
+ return new BitmapDrawable(context.getResources(), fixMaxBitmapSize(
+ BitmapFactory.decodeByteArray(getDataBytes(), getDataOffset(),
+ getDataLength())));
case TYPE_URI:
InputStream is = getUriInputStream(context);
if (is != null) {
return new BitmapDrawable(context.getResources(),
- BitmapFactory.decodeStream(is));
+ fixMaxBitmapSize(BitmapFactory.decodeStream(is)));
}
break;
case TYPE_URI_ADAPTIVE_BITMAP:
is = getUriInputStream(context);
if (is != null) {
return new AdaptiveIconDrawable(null, new BitmapDrawable(context.getResources(),
- BitmapFactory.decodeStream(is)));
+ fixMaxBitmapSize(BitmapFactory.decodeStream(is))));
}
break;
}
diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
index ffd041f6..fe5432f 100644
--- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java
@@ -320,6 +320,8 @@
private final boolean mCriticalToDeviceEncryption;
private final int mMaxUsageCount;
private final String mAttestKeyAlias;
+ private final long mBoundToSecureUserId;
+
/*
* ***NOTE***: All new fields MUST also be added to the following:
* ParcelableKeyGenParameterSpec class.
@@ -362,7 +364,8 @@
boolean unlockedDeviceRequired,
boolean criticalToDeviceEncryption,
int maxUsageCount,
- String attestKeyAlias) {
+ String attestKeyAlias,
+ long boundToSecureUserId) {
if (TextUtils.isEmpty(keyStoreAlias)) {
throw new IllegalArgumentException("keyStoreAlias must not be empty");
}
@@ -422,6 +425,7 @@
mCriticalToDeviceEncryption = criticalToDeviceEncryption;
mMaxUsageCount = maxUsageCount;
mAttestKeyAlias = attestKeyAlias;
+ mBoundToSecureUserId = boundToSecureUserId;
}
/**
@@ -842,10 +846,20 @@
}
/**
+ * Return the secure user id that this key should be bound to.
+ *
+ * Normally an authentication-bound key is tied to the secure user id of the current user
+ * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the authenticator
+ * id of the current biometric set for keys requiring explicit biometric authorization).
+ * If this parameter is set (this method returning non-zero value), the key should be tied to
+ * the specified secure user id, overriding the logic above.
+ *
+ * This is only applicable when {@link #isUserAuthenticationRequired} is {@code true}
+ *
* @hide
*/
public long getBoundToSpecificSecureUserId() {
- return GateKeeper.INVALID_SECURE_USER_ID;
+ return mBoundToSecureUserId;
}
/**
@@ -920,6 +934,7 @@
private boolean mCriticalToDeviceEncryption = false;
private int mMaxUsageCount = KeyProperties.UNRESTRICTED_USAGE_COUNT;
private String mAttestKeyAlias = null;
+ private long mBoundToSecureUserId = GateKeeper.INVALID_SECURE_USER_ID;
/**
* Creates a new instance of the {@code Builder}.
@@ -990,6 +1005,7 @@
mCriticalToDeviceEncryption = sourceSpec.isCriticalToDeviceEncryption();
mMaxUsageCount = sourceSpec.getMaxUsageCount();
mAttestKeyAlias = sourceSpec.getAttestKeyAlias();
+ mBoundToSecureUserId = sourceSpec.getBoundToSpecificSecureUserId();
}
/**
@@ -1725,6 +1741,27 @@
}
/**
+ * Set the secure user id that this key should be bound to.
+ *
+ * Normally an authentication-bound key is tied to the secure user id of the current user
+ * (either the root SID from GateKeeper for auth-bound keys with a timeout, or the
+ * authenticator id of the current biometric set for keys requiring explicit biometric
+ * authorization). If this parameter is set (this method returning non-zero value), the key
+ * should be tied to the specified secure user id, overriding the logic above.
+ *
+ * This is only applicable when {@link #setUserAuthenticationRequired} is set to
+ * {@code true}
+ *
+ * @see KeyGenParameterSpec#getBoundToSpecificSecureUserId()
+ * @hide
+ */
+ @NonNull
+ public Builder setBoundToSpecificSecureUserId(long secureUserId) {
+ mBoundToSecureUserId = secureUserId;
+ return this;
+ }
+
+ /**
* Builds an instance of {@code KeyGenParameterSpec}.
*/
@NonNull
@@ -1762,7 +1799,8 @@
mUnlockedDeviceRequired,
mCriticalToDeviceEncryption,
mMaxUsageCount,
- mAttestKeyAlias);
+ mAttestKeyAlias,
+ mBoundToSecureUserId);
}
}
}
diff --git a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
index a6e3366..9356eb8 100644
--- a/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
+++ b/keystore/java/android/security/keystore/ParcelableKeyGenParameterSpec.java
@@ -111,6 +111,7 @@
out.writeBoolean(mSpec.isCriticalToDeviceEncryption());
out.writeInt(mSpec.getMaxUsageCount());
out.writeString(mSpec.getAttestKeyAlias());
+ out.writeLong(mSpec.getBoundToSpecificSecureUserId());
}
private static Date readDateOrNull(Parcel in) {
@@ -172,6 +173,7 @@
final boolean criticalToDeviceEncryption = in.readBoolean();
final int maxUsageCount = in.readInt();
final String attestKeyAlias = in.readString();
+ final long boundToSecureUserId = in.readLong();
// The KeyGenParameterSpec is intentionally not constructed using a Builder here:
// The intention is for this class to break if new parameters are added to the
// KeyGenParameterSpec constructor (whereas using a builder would silently drop them).
@@ -208,7 +210,8 @@
unlockedDeviceRequired,
criticalToDeviceEncryption,
maxUsageCount,
- attestKeyAlias);
+ attestKeyAlias,
+ boundToSecureUserId);
}
public static final @android.annotation.NonNull Creator<ParcelableKeyGenParameterSpec> CREATOR = new Creator<ParcelableKeyGenParameterSpec>() {
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
index 66f27f5..a184dff 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
@@ -39,7 +39,6 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import java.util.Set;
import java.util.function.Consumer;
/**
@@ -167,14 +166,13 @@
}
@Override
- protected void onListenersChanged(
- @NonNull Set<Consumer<List<CommonFoldingFeature>>> callbacks) {
- super.onListenersChanged(callbacks);
- if (callbacks.isEmpty()) {
+ protected void onListenersChanged() {
+ super.onListenersChanged();
+ if (hasListeners()) {
+ mRawFoldSupplier.addDataChangedCallback(this::notifyFoldingFeatureChange);
+ } else {
mCurrentDeviceState = INVALID_DEVICE_STATE;
mRawFoldSupplier.removeDataChangedCallback(this::notifyFoldingFeatureChange);
- } else {
- mRawFoldSupplier.addDataChangedCallback(this::notifyFoldingFeatureChange);
}
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
index 7906342..8906e6d 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
@@ -31,7 +31,6 @@
import com.android.internal.R;
import java.util.Optional;
-import java.util.Set;
import java.util.function.Consumer;
/**
@@ -86,11 +85,11 @@
}
@Override
- protected void onListenersChanged(Set<Consumer<String>> callbacks) {
- if (callbacks.isEmpty()) {
- unregisterObserversIfNeeded();
- } else {
+ protected void onListenersChanged() {
+ if (hasListeners()) {
registerObserversIfNeeded();
+ } else {
+ unregisterObserversIfNeeded();
}
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/RearDisplayPresentation.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/RearDisplayPresentation.java
index 1ff1694..849b500 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/RearDisplayPresentation.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/RearDisplayPresentation.java
@@ -42,14 +42,14 @@
/**
* {@code mStateConsumer} is notified that their content is now visible when the
* {@link Presentation} object is started. There is no comparable callback for
- * {@link WindowAreaComponent#SESSION_STATE_INVISIBLE} in {@link #onStop()} due to the
+ * {@link WindowAreaComponent#SESSION_STATE_CONTENT_INVISIBLE} in {@link #onStop()} due to the
* timing of when a {@link android.hardware.devicestate.DeviceStateRequest} is cancelled
* ending rear display presentation mode happening before the {@link Presentation} is stopped.
*/
@Override
protected void onStart() {
super.onStart();
- mStateConsumer.accept(WindowAreaComponent.SESSION_STATE_VISIBLE);
+ mStateConsumer.accept(WindowAreaComponent.SESSION_STATE_CONTENT_VISIBLE);
}
@NonNull
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
index bf07773..abf2301 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/area/WindowAreaComponentImpl.java
@@ -328,8 +328,8 @@
// due to not having a good mechanism to know when
// the content is no longer visible before it's fully removed
if (getLastReportedRearDisplayPresentationStatus()
- == SESSION_STATE_VISIBLE) {
- consumer.accept(SESSION_STATE_INVISIBLE);
+ == SESSION_STATE_CONTENT_VISIBLE) {
+ consumer.accept(SESSION_STATE_CONTENT_INVISIBLE);
}
mRearDisplayPresentationController = null;
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
index 46c925a..de52f09 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
@@ -51,10 +51,10 @@
public final void addDataChangedCallback(@NonNull Consumer<T> callback) {
synchronized (mLock) {
mCallbacks.add(callback);
- Optional<T> currentData = getCurrentData();
- currentData.ifPresent(callback);
- onListenersChanged(mCallbacks);
}
+ Optional<T> currentData = getCurrentData();
+ currentData.ifPresent(callback);
+ onListenersChanged();
}
/**
@@ -67,11 +67,22 @@
public final void removeDataChangedCallback(@NonNull Consumer<T> callback) {
synchronized (mLock) {
mCallbacks.remove(callback);
- onListenersChanged(mCallbacks);
+ }
+ onListenersChanged();
+ }
+
+ /**
+ * Returns {@code true} if there are any registered callbacks {@code false} if there are no
+ * registered callbacks.
+ */
+ // TODO(b/278132889) Improve the structure of BaseDataProdcuer while avoiding known issues.
+ public final boolean hasListeners() {
+ synchronized (mLock) {
+ return !mCallbacks.isEmpty();
}
}
- protected void onListenersChanged(Set<Consumer<T>> callbacks) {}
+ protected void onListenersChanged() {}
/**
* @return the current data if available and {@code Optional.empty()} otherwise.
diff --git a/libs/WindowManager/Shell/res/layout/bubble_manage_menu.xml b/libs/WindowManager/Shell/res/layout/bubble_manage_menu.xml
index 8d1da0f7..298ad30 100644
--- a/libs/WindowManager/Shell/res/layout/bubble_manage_menu.xml
+++ b/libs/WindowManager/Shell/res/layout/bubble_manage_menu.xml
@@ -63,11 +63,11 @@
android:tint="@color/bubbles_icon_tint"/>
<TextView
- android:id="@+id/bubble_manage_menu_dont_bubble_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault" />
+ android:textAppearance="@*android:style/TextAppearance.DeviceDefault"
+ android:text="@string/bubbles_dont_bubble_conversation" />
</LinearLayout>
diff --git a/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml b/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml
index f6b21ba..fb1980a 100644
--- a/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml
+++ b/libs/WindowManager/Shell/res/layout/desktop_mode_app_controls_window_decor.xml
@@ -31,8 +31,7 @@
android:orientation="horizontal"
android:clickable="true"
android:focusable="true"
- android:paddingStart="8dp"
- android:background="?android:selectableItemBackgroundBorderless">
+ android:paddingStart="8dp">
<ImageView
android:id="@+id/application_icon"
@@ -88,6 +87,6 @@
android:src="@drawable/decor_close_button_dark"
android:scaleType="fitCenter"
android:gravity="end"
- android:background="?android:selectableItemBackgroundBorderless"
+ android:background="@null"
android:tint="@color/desktop_mode_caption_close_button_dark"/>
</com.android.wm.shell.windowdecor.WindowDecorLinearLayout>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml
index dcce4698..ab64f9e 100644
--- a/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml
+++ b/libs/WindowManager/Shell/res/layout/tv_pip_menu.xml
@@ -67,7 +67,7 @@
<!-- Temporarily extending the background to show an edu text hint for opening the menu -->
<FrameLayout
- android:id="@+id/tv_pip_menu_edu_text_drawer_placeholder"
+ android:id="@+id/tv_pip_menu_edu_text_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tv_pip"
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index d158cec..de4a225 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Beweeg na regs onder"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-instellings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Maak borrel toe"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Moenie borrels wys nie"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Moenie dat gesprek \'n borrel word nie"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Klets met borrels"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nuwe gesprekke verskyn as swerwende ikone, of borrels Tik op borrel om dit oop te maak. Sleep om dit te skuif."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Kanselleer"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Herbegin"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Moenie weer wys nie"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dubbeltik om hierdie app te skuif"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dubbeltik om\nhierdie app te skuif"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimeer"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Maak klein"</string>
<string name="close_button_text" msgid="2913281996024033299">"Maak toe"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skermskoot"</string>
<string name="close_text" msgid="4986518933445178928">"Maak toe"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Maak kieslys toe"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Maak kieslys oop"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index 7831c30..21172e2 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ታችኛውን ቀኝ ያንቀሳቅሱ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"የ<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ቅንብሮች"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"አረፋን አሰናብት"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ዓረፋ አትፍጠር"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ውይይቶችን በአረፋ አታሳይ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"አረፋዎችን በመጠቀም ይወያዩ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"አዲስ ውይይቶች እንደ ተንሳፋፊ አዶዎች ወይም አረፋዎች ሆነው ይታያሉ። አረፋን ለመክፈት መታ ያድርጉ። ለመውሰድ ይጎትቱት።"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ይቅር"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"እንደገና ያስጀምሩ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ዳግም አታሳይ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ይህን መተግበሪያ ለማንቀሳቀስ ሁለቴ መታ ያድርጉ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ይህን መተግበሪያ\nለማንቀሳቀስ ሁለቴ መታ ያድርጉ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"አስፋ"</string>
<string name="minimize_button_text" msgid="271592547935841753">"አሳንስ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ዝጋ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ቅጽበታዊ ገጽ እይታ"</string>
<string name="close_text" msgid="4986518933445178928">"ዝጋ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ምናሌ ዝጋ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"ምናሌን ክፈት"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml
index 09781c7..a714b49 100644
--- a/libs/WindowManager/Shell/res/values-ar/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ar/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"نقل إلى أسفل اليسار"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"إعدادات <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"إغلاق فقاعة المحادثة"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"عدم إظهار فقاعات المحادثات"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"عدم عرض المحادثة كفقاعة محادثة"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"الدردشة باستخدام فقاعات المحادثات"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"تظهر المحادثات الجديدة كرموز عائمة أو كفقاعات. انقر لفتح فقاعة المحادثة، واسحبها لتحريكها."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"إلغاء"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"إعادة التشغيل"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"عدم عرض مربّع حوار التأكيد مجددًا"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"انقر مرّتَين لنقل هذا التطبيق."</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"انقر مرّتَين لنقل\nهذا التطبيق."</string>
<string name="maximize_button_text" msgid="1650859196290301963">"تكبير"</string>
<string name="minimize_button_text" msgid="271592547935841753">"تصغير"</string>
<string name="close_button_text" msgid="2913281996024033299">"إغلاق"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"لقطة شاشة"</string>
<string name="close_text" msgid="4986518933445178928">"إغلاق"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"إغلاق القائمة"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"فتح القائمة"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml
index 856a132..6d86747 100644
--- a/libs/WindowManager/Shell/res/values-as/strings.xml
+++ b/libs/WindowManager/Shell/res/values-as/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"তলৰ সোঁফালে নিয়ক"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ছেটিং"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"বাবল অগ্ৰাহ্য কৰক"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"বাবল কৰাটো বন্ধ কৰক"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"বাৰ্তালাপ বাবল নকৰিব"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Bubbles ব্যৱহাৰ কৰি চাট কৰক"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"নতুন বাৰ্তালাপ উপঙি থকা চিহ্নসমূহ অথবা bubbles হিচাপে প্ৰদর্শিত হয়। Bubbles খুলিবলৈ টিপক। এইটো স্থানান্তৰ কৰিবলৈ টানি নিয়ক।"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"বাতিল কৰক"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ৰিষ্টাৰ্ট কৰক"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"পুনৰাই নেদেখুৱাব"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"এই এপ্টো স্থানান্তৰ কৰিবলৈ দুবাৰ টিপক"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"এই এপ্টো\nস্থানান্তৰ কৰিবলৈ দুবাৰ টিপক"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"সৰ্বাধিক মাত্ৰালৈ বঢ়াওক"</string>
<string name="minimize_button_text" msgid="271592547935841753">"মিনিমাইজ কৰক"</string>
<string name="close_button_text" msgid="2913281996024033299">"বন্ধ কৰক"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"স্ক্ৰীনশ্বট"</string>
<string name="close_text" msgid="4986518933445178928">"বন্ধ কৰক"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"মেনু বন্ধ কৰক"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"মেনু খোলক"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index 1efeb4a..7c66282 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Aşağıya sağa köçürün"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ayarları"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Yumrucuğu ləğv edin"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Yumrucuqları dayandırın"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Söhbəti yumrucuqda göstərmə"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Yumrucuqlardan istifadə edərək söhbət edin"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Yeni söhbətlər üzən nişanlar və ya yumrucuqlar kimi görünür. Yumrucuğu açmaq üçün toxunun. Hərəkət etdirmək üçün sürüşdürün."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Ləğv edin"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Yenidən başladın"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Yenidən göstərməyin"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Tətbiqi köçürmək üçün iki dəfə toxunun"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tətbiqi köçürmək üçün\niki dəfə toxunun"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Böyüdün"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Kiçildin"</string>
<string name="close_button_text" msgid="2913281996024033299">"Bağlayın"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skrinşot"</string>
<string name="close_text" msgid="4986518933445178928">"Bağlayın"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menyunu bağlayın"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Menyunu açın"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
index 6c50766..8de9d11 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premesti dole desno"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Podešavanja za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblačić"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Bez oblačića"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne koristi oblačiće za konverzaciju"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Ćaskajte u oblačićima"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nove konverzacije se prikazuju kao plutajuće ikone ili oblačići. Dodirnite da biste otvorili oblačić. Prevucite da biste ga premestili."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Otkaži"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartuj"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovo"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dvaput dodirnite da biste premestili ovu aplikaciju"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvaput dodirnite da biste\npremestili ovu aplikaciju"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Uvećajte"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Umanjite"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zatvorite"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Snimak ekrana"</string>
<string name="close_text" msgid="4986518933445178928">"Zatvorite"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvorite meni"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otvorite meni"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml
index 88d9793..3d99514 100644
--- a/libs/WindowManager/Shell/res/values-be/strings.xml
+++ b/libs/WindowManager/Shell/res/values-be/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Перамясціць правей і ніжэй"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Налады \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\""</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Адхіліць апавяшчэнне"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Выключыць усплывальныя апавяшчэнні"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Не паказваць размову ў выглядзе ўсплывальных апавяшчэнняў"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Усплывальныя апавяшчэнні"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Новыя размовы будуць паказвацца як рухомыя значкі ці ўсплывальныя апавяшчэнні. Націсніце, каб адкрыць усплывальнае апавяшчэнне. Перацягніце яго, каб перамясціць."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Скасаваць"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перазапусціць"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Больш не паказваць"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Каб перамясціць праграму, націсніце двойчы"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Каб перамясціць праграму,\nнацісніце двойчы"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Разгарнуць"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Згарнуць"</string>
<string name="close_button_text" msgid="2913281996024033299">"Закрыць"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Здымак экрана"</string>
<string name="close_text" msgid="4986518933445178928">"Закрыць"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Закрыць меню"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Адкрыць меню"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index bf061b2..0473f27 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Преместване долу вдясно"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Настройки за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Отхвърляне на балончетата"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Без балончета"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Без балончета за разговора"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Чат с балончета"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Новите разговори се показват като плаващи икони, или балончета. Докоснете балонче, за да го отворите, или го плъзнете, за да го преместите."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Отказ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартиране"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Да не се показва отново"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Докоснете двукратно, за да преместите това приложение"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Докоснете двукратно, за да\nпреместите това приложение"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Увеличаване"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Намаляване"</string>
<string name="close_button_text" msgid="2913281996024033299">"Затваряне"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Екранна снимка"</string>
<string name="close_text" msgid="4986518933445178928">"Затваряне"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затваряне на менюто"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Отваряне на менюто"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index 453a2fc..4fe1be0 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"নিচে ডান দিকে সরান"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> সেটিংস"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"বাবল খারিজ করুন"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"বাবল করা বন্ধ করুন"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"কথোপকথন বাবল হিসেবে দেখাবে না"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"বাবল ব্যবহার করে চ্যাট করুন"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"নতুন কথোপকথন ভেসে থাকা আইকন বা বাবল হিসেবে দেখানো হয়। বাবল খুলতে ট্যাপ করুন। সেটি সরাতে ধরে টেনে আনুন।"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"বাতিল করুন"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"রিস্টার্ট করুন"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"আর দেখতে চাই না"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"এই অ্যাপ সরাতে ডবল ট্যাপ করুন"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"এই অ্যাপ সরাতে\nডবল ট্যাপ করুন"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"বড় করুন"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ছোট করুন"</string>
<string name="close_button_text" msgid="2913281996024033299">"বন্ধ করুন"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"স্ক্রিনশট"</string>
<string name="close_text" msgid="4986518933445178928">"বন্ধ করুন"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"\'মেনু\' বন্ধ করুন"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"মেনু খুলুন"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index 987f0a7..b39b497 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Pomjerite dolje desno"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Postavke aplikacije <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblačić"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Zaustavi oblačiće"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nemoj prikazivati razgovor u oblačićima"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatajte koristeći oblačiće"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Novi razgovori se prikazuju kao plutajuće ikone ili oblačići. Dodirnite da otvorite oblačić. Prevucite da ga premjestite."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Otkaži"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Ponovo pokreni"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovo"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dodirnite dvaput da pomjerite aplikaciju"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dodirnite dvaput da\npomjerite aplikaciju"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziranje"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimiziranje"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zatvaranje"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Snimak ekrana"</string>
<string name="close_text" msgid="4986518933445178928">"Zatvaranje"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvaranje menija"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otvaranje menija"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 499f2d7..fe76e73 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mou a baix a la dreta"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configuració de l\'aplicació <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignora la bombolla"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"No mostris com a bombolla"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostris la conversa com a bombolla"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Xateja amb bombolles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Les converses noves es mostren com a icones flotants o bombolles. Toca per obrir una bombolla. Arrossega-la per moure-la."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel·la"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reinicia"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No ho tornis a mostrar"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Fes doble toc per moure aquesta aplicació"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Fes doble toc per\nmoure aquesta aplicació"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximitza"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimitza"</string>
<string name="close_button_text" msgid="2913281996024033299">"Tanca"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de pantalla"</string>
<string name="close_text" msgid="4986518933445178928">"Tanca"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Tanca el menú"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Obre el menú"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index 8d80b9a..70e2970 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Přesunout vpravo dolů"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavení <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Zavřít bublinu"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Nezobrazovat bubliny"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nezobrazovat konverzaci v bublinách"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatujte pomocí bublin"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nové konverzace se zobrazují jako plovoucí ikony, neboli bubliny. Klepnutím bublinu otevřete. Přetažením ji posunete."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Zrušit"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartovat"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Tuto zprávu příště nezobrazovat"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dvojitým klepnutím přesunete aplikaci"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvojitým klepnutím\npřesunete aplikaci"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovat"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimalizovat"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zavřít"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Snímek obrazovky"</string>
<string name="close_text" msgid="4986518933445178928">"Zavřít"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zavřít nabídku"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otevřít nabídku"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml
index 86d7021..c91cd7a 100644
--- a/libs/WindowManager/Shell/res/values-da/strings.xml
+++ b/libs/WindowManager/Shell/res/values-da/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flyt ned til højre"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Indstillinger for <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Afvis boble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Stop med at vise bobler"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Vis ikke samtaler i bobler"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat ved hjælp af bobler"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nye samtaler vises som svævende ikoner eller bobler. Tryk for at åbne boblen. Træk for at flytte den."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annuller"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Genstart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Vis ikke igen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Tryk to gange for at flytte appen"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tryk to gange\nfor at flytte appen"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimér"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimer"</string>
<string name="close_button_text" msgid="2913281996024033299">"Luk"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Luk"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Luk menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Åbn menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 9d08828..6ce475a 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Nach unten rechts verschieben"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Einstellungen für <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Bubble schließen"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Keine Bubbles zulassen"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Unterhaltung nicht als Bubble anzeigen"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Bubbles zum Chatten verwenden"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Neue Unterhaltungen erscheinen als unverankerte Symbole, „Bubbles“ genannt. Wenn du eine Bubble öffnen möchtest, tippe sie an. Wenn du sie verschieben möchtest, zieh an ihr."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Abbrechen"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Neu starten"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nicht mehr anzeigen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Doppeltippen, um die App zu verschieben"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Zum Verschieben\ndoppeltippen"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximieren"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimieren"</string>
<string name="close_button_text" msgid="2913281996024033299">"Schließen"</string>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index 5f6a293..ab5c44e 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Μετακίνηση κάτω δεξιά"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Ρυθμίσεις <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Παράβλ. για συννεφ."</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Να μην εμφανίζει συννεφάκια"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Να μην γίνει προβολή της συζήτησης σε συννεφάκια."</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Συζητήστε χρησιμοποιώντας συννεφάκια."</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Οι νέες συζητήσεις εμφανίζονται ως κινούμενα εικονίδια ή συννεφάκια. Πατήστε για να ανοίξετε το συννεφάκι. Σύρετε για να το μετακινήσετε."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Ακύρωση"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Επανεκκίνηση"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Να μην εμφανιστεί ξανά"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Διπλό πάτημα για μεταφορά αυτής της εφαρμογής"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Πατήστε δύο φορές για\nμετακίνηση αυτής της εφαρμογής"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Μεγιστοποίηση"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Ελαχιστοποίηση"</string>
<string name="close_button_text" msgid="2913281996024033299">"Κλείσιμο"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Στιγμιότυπο οθόνης"</string>
<string name="close_text" msgid="4986518933445178928">"Κλείσιμο"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Κλείσιμο μενού"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Άνοιγμα μενού"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
index 3460894..ea91014 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Don’t bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat using bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Double-tap to move this app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
<string name="close_button_text" msgid="2913281996024033299">"Close"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Open menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
index 8cba053..01bdf95 100644
--- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Don’t bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat using bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don’t show again"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Double-tap to move this app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximize"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimize"</string>
<string name="close_button_text" msgid="2913281996024033299">"Close"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 3460894..ea91014 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Don’t bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat using bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Double-tap to move this app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
<string name="close_button_text" msgid="2913281996024033299">"Close"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Open menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
index 3460894..ea91014 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Don’t bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat using bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don\'t show again"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Double-tap to move this app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimise"</string>
<string name="close_button_text" msgid="2913281996024033299">"Close"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Open menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml
index 696e714..f6dac79 100644
--- a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Move bottom right"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> settings"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dismiss bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Don’t bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Don’t bubble conversation"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat using bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"New conversations appear as floating icons, or bubbles. Tap to open bubble. Drag to move it."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancel"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Don’t show again"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Double-tap to move this app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Double-tap to\nmove this app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximize"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimize"</string>
<string name="close_button_text" msgid="2913281996024033299">"Close"</string>
diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
index fff2749..0190ea8 100644
--- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Ubicar abajo a la derecha"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configuración de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Descartar burbuja"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"No mostrar burbujas"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostrar la conversación en burbuja"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat con burbujas"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Las conversaciones nuevas aparecen como elementos flotantes o burbujas. Presiona para abrir la burbuja. Arrástrala para moverla."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No volver a mostrar"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Presiona dos veces para mover esta app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Presiona dos veces\npara mover esta app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de pantalla"</string>
<string name="close_text" msgid="4986518933445178928">"Cerrar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Cerrar menú"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir el menú"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index 5fcd12d..ea44bea 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover abajo a la derecha"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Ajustes de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Cerrar burbuja"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"No mostrar burbujas"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"No mostrar conversación en burbuja"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatea con burbujas"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Las conversaciones nuevas aparecen como iconos flotantes llamados \"burbujas\". Toca una burbuja para abrirla. Arrástrala para moverla."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"No volver a mostrar"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toca dos veces para mover esta aplicación"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toca dos veces para\nmover esta aplicación"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de pantalla"</string>
<string name="close_text" msgid="4986518933445178928">"Cerrar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Cerrar menú"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir menú"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index 07fd683..90feff3 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Teisalda alla paremale"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Rakenduse <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> seaded"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Sule mull"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ära kuva mulle"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ära kuva vestlust mullina"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Vestelge mullide abil"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Uued vestlused kuvatakse hõljuvate ikoonidena ehk mullidena. Puudutage mulli avamiseks. Lohistage mulli, et seda liigutada."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Tühista"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Taaskäivita"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ära kuva uuesti"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Rakenduse teisaldamiseks topeltpuudutage"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Rakenduse teisaldamiseks\ntopeltpuudutage"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimeeri"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimeeri"</string>
<string name="close_button_text" msgid="2913281996024033299">"Sule"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Ekraanipilt"</string>
<string name="close_text" msgid="4986518933445178928">"Sule"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Sule menüü"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Ava menüü"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index be972d9..de27a80 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Eraman behealdera, eskuinetara"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> aplikazioaren ezarpenak"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Baztertu burbuila"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ez erakutsi burbuilarik"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ez erakutsi elkarrizketak burbuila gisa"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Txateatu burbuilen bidez"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Elkarrizketa berriak ikono gainerakor edo burbuila gisa agertzen dira. Sakatu burbuila irekitzeko. Arrasta ezazu mugitzeko."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Utzi"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Berrabiarazi"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ez erakutsi berriro"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Sakatu birritan aplikazioa mugitzeko"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Sakatu birritan\naplikazioa mugitzeko"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizatu"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizatu"</string>
<string name="close_button_text" msgid="2913281996024033299">"Itxi"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Pantaila-argazkia"</string>
<string name="close_text" msgid="4986518933445178928">"Itxi"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Itxi menua"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Ireki menua"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index 26f5fcf..13a2ea2 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"انتقال به پایین سمت چپ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"تنظیمات <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"رد کردن حبابک"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"حبابک نشان داده نشود"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"مکالمه در حباب نشان داده نشود"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"گپ بااستفاده از حبابکها"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"مکالمههای جدید بهصورت نمادهای شناور یا حبابکها نشان داده میشوند. برای باز کردن حبابکها ضربه بزنید. برای جابهجایی، آن را بکشید."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"لغو کردن"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"بازراهاندازی"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"دوباره نشان داده نشود"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"برای جابهجایی این برنامه، دوضربه بزنید"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"برای جابهجا کردن این برنامه\nدوضربه بزنید"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"بزرگ کردن"</string>
<string name="minimize_button_text" msgid="271592547935841753">"کوچک کردن"</string>
<string name="close_button_text" msgid="2913281996024033299">"بستن"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"نماگرفت"</string>
<string name="close_text" msgid="4986518933445178928">"بستن"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"بستن منو"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"باز کردن منو"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index 5686d9a..92fa760 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Siirrä oikeaan alareunaan"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: asetukset"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ohita kupla"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Älä näytä puhekuplia"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Älä näytä kuplia keskusteluista"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chattaile kuplien avulla"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Uudet keskustelut näkyvät kelluvina kuvakkeina tai kuplina. Avaa kupla napauttamalla. Siirrä sitä vetämällä."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Peru"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Käynnistä uudelleen"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Älä näytä uudelleen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Siirrä sovellus kaksoisnapauttamalla"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Kaksoisnapauta, jos\nhaluat siirtää sovellusta"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Suurenna"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Pienennä"</string>
<string name="close_button_text" msgid="2913281996024033299">"Sulje"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Kuvakaappaus"</string>
<string name="close_text" msgid="4986518933445178928">"Sulje"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Sulje valikko"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Avaa valikko"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
index 2788de6..7814b7d 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -32,17 +32,13 @@
<string name="accessibility_action_pip_resize" msgid="4623966104749543182">"Redimensionner"</string>
<string name="accessibility_action_pip_stash" msgid="4060775037619702641">"Ajouter à la réserve"</string>
<string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Retirer de la réserve"</string>
- <!-- no translation found for dock_forced_resizable (7429086980048964687) -->
- <skip />
- <!-- no translation found for dock_non_resizeble_failed_to_dock_text (2733543750291266047) -->
- <skip />
+ <string name="dock_forced_resizable" msgid="7429086980048964687">"L\'application peut ne pas fonctionner avec l\'écran partagé"</string>
+ <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"L\'application ne prend pas en charge l\'écran partagé"</string>
<string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"Cette application ne peut être ouverte que dans une fenêtre."</string>
<string name="forced_resizable_secondary_display" msgid="1768046938673582671">"Il est possible que l\'application ne fonctionne pas sur un écran secondaire."</string>
<string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"L\'application ne peut pas être lancée sur des écrans secondaires."</string>
- <!-- no translation found for accessibility_divider (6407584574218956849) -->
- <skip />
- <!-- no translation found for divider_title (1963391955593749442) -->
- <skip />
+ <string name="accessibility_divider" msgid="6407584574218956849">"Séparateur d\'écran partagé"</string>
+ <string name="divider_title" msgid="1963391955593749442">"Séparateur d\'écran partagé"</string>
<string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"Plein écran à la gauche"</string>
<string name="accessibility_action_divider_left_70" msgid="8859845045360659250">"70 % à la gauche"</string>
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % à la gauche"</string>
@@ -72,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Déplacer dans coin inf. droit"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Paramètres <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorer la bulle"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ne pas afficher de bulles"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne pas afficher les conversations dans des bulles"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Clavarder en utilisant des bulles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Les nouvelles conversations s\'affichent sous forme d\'icônes flottantes (de bulles). Touchez une bulle pour l\'ouvrir. Faites-la glisser pour la déplacer."</string>
@@ -89,8 +84,7 @@
<string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu?\nTouchez pour rétablir"</string>
<string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo? Touchez pour ignorer."</string>
<string name="letterbox_education_dialog_title" msgid="7739895354143295358">"Voir et en faire plus"</string>
- <!-- no translation found for letterbox_education_split_screen_text (449233070804658627) -->
- <skip />
+ <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"Faites glisser une autre application pour utiliser l\'écran partagé"</string>
<string name="letterbox_education_reposition_text" msgid="4589957299813220661">"Touchez deux fois à côté d\'une application pour la repositionner"</string>
<string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
<string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Développer pour en savoir plus."</string>
@@ -99,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annuler"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Redémarrer"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne plus afficher"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toucher deux fois pour déplacer cette application"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toucher deux fois pour\ndéplacer cette application"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Réduire"</string>
<string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
@@ -115,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Capture d\'écran"</string>
<string name="close_text" msgid="4986518933445178928">"Fermer"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fermer le menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Ouvrir le menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index 6e1a583..da5b5c9 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Déplacer en bas à droite"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Paramètres <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Fermer la bulle"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Désactiver les info-bulles"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne pas afficher la conversation dans une bulle"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatter en utilisant des bulles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Les nouvelles conversations s\'affichent sous forme d\'icônes flottantes ou de bulles. Appuyez sur la bulle pour l\'ouvrir. Faites-la glisser pour la déplacer."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annuler"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Redémarrer"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne plus afficher"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Appuyez deux fois pour déplacer cette appli"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Appuyez deux fois\npour déplacer cette appli"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Réduire"</string>
<string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Capture d\'écran"</string>
<string name="close_text" msgid="4986518933445178928">"Fermer"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fermer le menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Ouvrir le menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index aaaf3bd..c08cff8 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover á parte inferior dereita"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configuración de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorar burbulla"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Non mostrar burbullas"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Non mostrar a conversa como burbulla"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatear usando burbullas"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"As conversas novas aparecen como iconas flotantes ou burbullas. Toca para abrir a burbulla e arrastra para movela."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Non mostrar outra vez"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toca dúas veces para mover esta aplicación"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toca dúas veces para\nmover esta aplicación"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Pechar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de pantalla"</string>
<string name="close_text" msgid="4986518933445178928">"Pechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Pechar o menú"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir menú"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml
index ee5a335..2a52199 100644
--- a/libs/WindowManager/Shell/res/values-gu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gu/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"નીચે જમણે ખસેડો"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> સેટિંગ"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"બબલને છોડી દો"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"બબલ બતાવશો નહીં"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"વાતચીતને બબલ કરશો નહીં"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"બબલનો ઉપયોગ કરીને ચૅટ કરો"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"નવી વાતચીત ફ્લોટિંગ આઇકન અથવા બબલ જેવી દેખાશે. બબલને ખોલવા માટે ટૅપ કરો. તેને ખસેડવા માટે ખેંચો."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"રદ કરો"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ફરી શરૂ કરો"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ફરીથી બતાવશો નહીં"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"આ ઍપને ખસેડવા માટે બે વાર ટૅપ કરો"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"આ ઍપને ખસેડવા માટે\nબે વાર ટૅપ કરો"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"મોટું કરો"</string>
<string name="minimize_button_text" msgid="271592547935841753">"નાનું કરો"</string>
<string name="close_button_text" msgid="2913281996024033299">"બંધ કરો"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"સ્ક્રીનશૉટ"</string>
<string name="close_text" msgid="4986518933445178928">"બંધ કરો"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"મેનૂ બંધ કરો"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"મેનૂ ખોલો"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index 258862a..fb5040b 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"सबसे नीचे दाईं ओर ले जाएं"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> की सेटिंग"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल खारिज करें"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"बबल होने से रोकें"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"बातचीत को बबल न करें"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"बबल्स का इस्तेमाल करके चैट करें"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"नई बातचीत फ़्लोटिंग आइकॉन या बबल्स की तरह दिखेंगी. बबल को खोलने के लिए टैप करें. इसे एक जगह से दूसरी जगह ले जाने के लिए खींचें और छोड़ें."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"रद्द करें"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रीस्टार्ट करें"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"फिर से न दिखाएं"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ऐप्लिकेशन की जगह बदलने के लिए दो बार टैप करें"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ऐप्लिकेशन की जगह बदलने के लिए\nदो बार टैप करें"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"बड़ा करें"</string>
<string name="minimize_button_text" msgid="271592547935841753">"विंडो छोटी करें"</string>
<string name="close_button_text" msgid="2913281996024033299">"बंद करें"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"स्क्रीनशॉट"</string>
<string name="close_text" msgid="4986518933445178928">"बंद करें"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेन्यू बंद करें"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"मेन्यू खोलें"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml
index 21fdf5d..2535657 100644
--- a/libs/WindowManager/Shell/res/values-hr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hr/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premjestite u donji desni kut"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Postavke za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Odbaci oblačić"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ne prikazuj oblačiće"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Zaustavi razgovor u oblačićima"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Oblačići u chatu"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Novi razgovori pojavljuju se kao pomične ikone ili oblačići. Dodirnite za otvaranje oblačića. Povucite da biste ga premjestili."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Odustani"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Pokreni ponovno"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovno"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dvaput dodirnite da biste premjestili ovu aplikaciju"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvaput dodirnite da biste\npremjestili ovu aplikaciju"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziraj"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimiziraj"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zatvori"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Snimka zaslona"</string>
<string name="close_text" msgid="4986518933445178928">"Zatvorite"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvorite izbornik"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otvaranje izbornika"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index a0928d3..7566439 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Áthelyezés le és jobbra"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> beállításai"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Buborék elvetése"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ne jelenjen meg buborékban"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ne jelenjen meg a beszélgetés buborékban"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Buborékokat használó csevegés"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Az új beszélgetések lebegő ikonként, vagyis buborékként jelennek meg. A buborék megnyitásához koppintson rá. Áthelyezéshez húzza a kívánt helyre."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Mégse"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Újraindítás"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne jelenjen meg többé"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Koppintson duplán az alkalmazás áthelyezéséhez"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Koppintson duplán\naz alkalmazás áthelyezéséhez"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Teljes méret"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Kis méret"</string>
<string name="close_button_text" msgid="2913281996024033299">"Bezárás"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Képernyőkép"</string>
<string name="close_text" msgid="4986518933445178928">"Bezárás"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menü bezárása"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Menü megnyitása"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index f5c2e4b..2b20870 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Տեղափոխել ներքև՝ աջ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> – կարգավորումներ"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Փակել ամպիկը"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ցույց չտալ ամպիկները"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Զրույցը չցուցադրել ամպիկի տեսքով"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Զրույցի ամպիկներ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Նոր զրույցները կհայտնվեն լողացող պատկերակների կամ ամպիկների տեսքով։ Հպեք՝ ամպիկը բացելու համար։ Քաշեք՝ այն տեղափոխելու համար։"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Չեղարկել"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Վերագործարկել"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Այլևս ցույց չտալ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Կրկնակի հպեք՝ հավելվածը տեղափոխելու համար"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Կրկնակի հպեք՝\nհավելվածը տեղափոխելու համար"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Ծավալել"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Ծալել"</string>
<string name="close_button_text" msgid="2913281996024033299">"Փակել"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Սքրինշոթ"</string>
<string name="close_text" msgid="4986518933445178928">"Փակել"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Փակել ընտրացանկը"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Բացել ընտրացանկը"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 3a7d4b3..5747deb 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Pindahkan ke kanan bawah"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Setelan <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Tutup balon"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Berhenti menampilkan balon"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Jangan gunakan percakapan balon"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat dalam tampilan balon"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Percakapan baru muncul sebagai ikon mengambang, atau balon. Ketuk untuk membuka balon. Tarik untuk memindahkannya."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Batal"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Mulai ulang"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Jangan tampilkan lagi"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Ketuk dua kali untuk memindahkan aplikasi ini"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ketuk dua kali untuk\nmemindahkan aplikasi ini"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimalkan"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimalkan"</string>
<string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Tutup"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Tutup Menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Buka Menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index f745305..145d26d 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Færðu neðst til hægri"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Stillingar <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Loka blöðru"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ekki sýna blöðrur"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ekki setja samtal í blöðru"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Spjalla með blöðrum"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Ný samtöl birtast sem fljótandi tákn eða blöðrur. Ýttu til að opna blöðru. Dragðu hana til að færa."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Hætta við"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Endurræsa"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ekki sýna þetta aftur"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Ýttu tvisvar til að færa þetta forrit"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ýttu tvisvar til\nað færa þetta forrit"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Stækka"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minnka"</string>
<string name="close_button_text" msgid="2913281996024033299">"Loka"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skjámynd"</string>
<string name="close_text" msgid="4986518933445178928">"Loka"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Loka valmynd"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Opna valmynd"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml
index f1edced..025646c 100644
--- a/libs/WindowManager/Shell/res/values-it/strings.xml
+++ b/libs/WindowManager/Shell/res/values-it/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Sposta in basso a destra"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Impostazioni <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignora bolla"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Non mostrare i fumetti"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Non mettere la conversazione nella bolla"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatta utilizzando le bolle"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Le nuove conversazioni vengono mostrate come icone mobili o bolle. Tocca per aprire la bolla. Trascinala per spostarla."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annulla"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Riavvia"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Non mostrare più"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Tocca due volte per spostare questa app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tocca due volte per\nspostare questa app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Ingrandisci"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Riduci a icona"</string>
<string name="close_button_text" msgid="2913281996024033299">"Chiudi"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Chiudi"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Chiudi il menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Apri menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index d07c91f..bb3845b 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"העברה לפינה הימנית התחתונה"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"הגדרות <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"סגירת בועה"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ללא בועות"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"אין להציג בועות לשיחה"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"לדבר בבועות"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"שיחות חדשות מופיעות כסמלים צפים, או בועות. יש להקיש כדי לפתוח בועה. יש לגרור כדי להזיז אותה."</string>
@@ -93,8 +92,8 @@
<string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"אפשר להפעיל מחדש את האפליקציה כדי שהיא תוצג באופן טוב יותר במסך, אבל ייתכן שההתקדמות שלך או כל שינוי שלא נשמר יאבדו"</string>
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ביטול"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"הפעלה מחדש"</string>
- <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"אין צורך להציג את זה שוב"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"אפשר להקיש הקשה כפולה כדי להזיז את האפליקציה הזו"</string>
+ <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"אין להציג שוב"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"אפשר להקיש הקשה כפולה כדי\nלהעביר את האפליקציה למקום אחר"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"הגדלה"</string>
<string name="minimize_button_text" msgid="271592547935841753">"מזעור"</string>
<string name="close_button_text" msgid="2913281996024033299">"סגירה"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"צילום מסך"</string>
<string name="close_text" msgid="4986518933445178928">"סגירה"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"סגירת התפריט"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"פתיחת התפריט"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml
index ea42aa5..6c1bafe 100644
--- a/libs/WindowManager/Shell/res/values-ja/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ja/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"右下に移動"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> の設定"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"バブルを閉じる"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"バブルで表示しない"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"会話をバブルで表示しない"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"チャットでバブルを使う"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"新しい会話はフローティング アイコン(バブル)として表示されます。タップするとバブルが開きます。ドラッグしてバブルを移動できます。"</string>
@@ -89,12 +88,12 @@
<string name="letterbox_education_reposition_text" msgid="4589957299813220661">"位置を変えるにはアプリの外側をダブルタップしてください"</string>
<string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
<string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"開くと詳細が表示されます。"</string>
- <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"再起動して画面をすっきりさせますか?"</string>
- <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"アプリを再起動して画面をすっきりさせることはできますが、進捗状況が失われ、保存されていない変更が消える可能性があります"</string>
+ <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"アプリを再起動して画面表示を最適化しますか?"</string>
+ <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"アプリを再起動することにより表示を最適化できますが、保存されていない変更は失われる可能性があります"</string>
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"キャンセル"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"再起動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"次回から表示しない"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ダブルタップすると、このアプリを移動できます"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ダブルタップすると\nこのアプリを移動できます"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
<string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
<string name="close_button_text" msgid="2913281996024033299">"閉じる"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"スクリーンショット"</string>
<string name="close_text" msgid="4986518933445178928">"閉じる"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"メニューを閉じる"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"メニューを開く"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml
index 16ba1aa..e58e67a 100644
--- a/libs/WindowManager/Shell/res/values-ka/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ka/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"გადაანაცვ. ქვემოთ და მარჯვნივ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-ის პარამეტრები"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ბუშტის დახურვა"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ბუშტის გამორთვა"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"აიკრძალოს საუბრის ბუშტები"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ჩეთი ბუშტების გამოყენებით"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ახალი საუბრები გამოჩნდება როგორც მოტივტივე ხატულები ან ბუშტები. შეეხეთ ბუშტის გასახსნელად. გადაიტანეთ ჩავლებით."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"გაუქმება"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"გადატვირთვა"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"აღარ გამოჩნდეს"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ამ აპის გადასატანად ორმაგად შეეხეთ მას"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ამ აპის გადასატანად\nორმაგად შეეხეთ მას"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"მაქსიმალურად გაშლა"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ჩაკეცვა"</string>
<string name="close_button_text" msgid="2913281996024033299">"დახურვა"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ეკრანის ანაბეჭდი"</string>
<string name="close_text" msgid="4986518933445178928">"დახურვა"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"მენიუს დახურვა"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"მენიუს გახსნა"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index f42cdc3..7c9120e 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -32,17 +32,13 @@
<string name="accessibility_action_pip_resize" msgid="4623966104749543182">"Өлшемін өзгерту"</string>
<string name="accessibility_action_pip_stash" msgid="4060775037619702641">"Жасыру"</string>
<string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Көрсету"</string>
- <!-- no translation found for dock_forced_resizable (7429086980048964687) -->
- <skip />
- <!-- no translation found for dock_non_resizeble_failed_to_dock_text (2733543750291266047) -->
- <skip />
+ <string name="dock_forced_resizable" msgid="7429086980048964687">"Қолданба экранды бөлу режимінде жұмыс істемеуі мүмкін."</string>
+ <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"Қолданбада экранды бөлу мүмкін емес."</string>
<string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"Бұл қолданбаны тек 1 терезеден ашуға болады."</string>
<string name="forced_resizable_secondary_display" msgid="1768046938673582671">"Қолданба қосымша дисплейде жұмыс істемеуі мүмкін."</string>
<string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"Қолданба қосымша дисплейлерде іске қосуды қолдамайды."</string>
- <!-- no translation found for accessibility_divider (6407584574218956849) -->
- <skip />
- <!-- no translation found for divider_title (1963391955593749442) -->
- <skip />
+ <string name="accessibility_divider" msgid="6407584574218956849">"Экранды бөлу режимінің бөлгіші"</string>
+ <string name="divider_title" msgid="1963391955593749442">"Экранды бөлу режимінің бөлгіші"</string>
<string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"Сол жағын толық экранға шығару"</string>
<string name="accessibility_action_divider_left_70" msgid="8859845045360659250">"70% сол жақта"</string>
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% сол жақта"</string>
@@ -72,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Төменгі оң жаққа жылжыту"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> параметрлері"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Қалқымалы хабарды жабу"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Қалқыма хабарлар көрсетпеу"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Әңгіменің қалқыма хабары көрсетілмесін"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Қалқыма хабарлар арқылы сөйлесу"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Жаңа әңгімелер қалқыма белгішелер немесе хабарлар түрінде көрсетіледі. Қалқыма хабарды ашу үшін түртіңіз. Жылжыту үшін сүйреңіз."</string>
@@ -89,8 +84,7 @@
<string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Жөнделмеді ме?\nҚайтару үшін түртіңіз."</string>
<string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада қателер шықпады ма? Жабу үшін түртіңіз."</string>
<string name="letterbox_education_dialog_title" msgid="7739895354143295358">"Қосымша ақпаратты қарап, әрекеттер жасау"</string>
- <!-- no translation found for letterbox_education_split_screen_text (449233070804658627) -->
- <skip />
+ <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"Экранды бөлу үшін басқа қолданбаға өтіңіз."</string>
<string name="letterbox_education_reposition_text" msgid="4589957299813220661">"Қолданбаның орнын өзгерту үшін одан тыс жерді екі рет түртіңіз."</string>
<string name="letterbox_education_got_it" msgid="4057634570866051177">"Түсінікті"</string>
<string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Толығырақ ақпарат алу үшін терезені жайыңыз."</string>
@@ -99,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Бас тарту"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Өшіріп қосу"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Қайта көрсетілмесін"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Бұл қолданбаны басқа орынға жылжыту үшін екі рет түртіңіз."</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Бұл қолданбаны басқа орынға\nжылжыту үшін екі рет түртіңіз."</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Жаю"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Кішірейту"</string>
<string name="close_button_text" msgid="2913281996024033299">"Жабу"</string>
@@ -115,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Скриншот"</string>
<string name="close_text" msgid="4986518933445178928">"Жабу"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Мәзірді жабу"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Мәзірді ашу"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml
index be5047e..4530267 100644
--- a/libs/WindowManager/Shell/res/values-km/strings.xml
+++ b/libs/WindowManager/Shell/res/values-km/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ផ្លាស់ទីទៅផ្នែកខាងក្រោមខាងស្ដាំ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"ការកំណត់ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ច្រានចោលពពុះ"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"កុំបង្ហាញពពុះ"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"កុំបង្ហាញការសន្ទនាជាពពុះ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ជជែកដោយប្រើពពុះ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ការសន្ទនាថ្មីៗបង្ហាញជាពពុះ ឬរូបអណ្ដែត។ ចុច ដើម្បីបើកពពុះ។ អូស ដើម្បីផ្លាស់ទីពពុះនេះ។"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"បោះបង់"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ចាប់ផ្ដើមឡើងវិញ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"កុំបង្ហាញម្ដងទៀត"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ចុចពីរដង ដើម្បីផ្លាស់ទីកម្មវិធីនេះ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ចុចពីរដងដើម្បី\nផ្លាស់ទីកម្មវិធីនេះ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ពង្រីក"</string>
<string name="minimize_button_text" msgid="271592547935841753">"បង្រួម"</string>
<string name="close_button_text" msgid="2913281996024033299">"បិទ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"រូបថតអេក្រង់"</string>
<string name="close_text" msgid="4986518933445178928">"បិទ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"បិទម៉ឺនុយ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"បើកម៉ឺនុយ"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml
index 8b0fae8..2dfbad4 100644
--- a/libs/WindowManager/Shell/res/values-kn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kn/strings.xml
@@ -24,7 +24,7 @@
<string name="pip_menu_title" msgid="5393619322111827096">"ಮೆನು"</string>
<string name="pip_menu_accessibility_title" msgid="8129016817688656249">"ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೆನು"</string>
<string name="pip_notification_title" msgid="1347104727641353453">"<xliff:g id="NAME">%s</xliff:g> ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರವಾಗಿದೆ"</string>
- <string name="pip_notification_message" msgid="8854051911700302620">"<xliff:g id="NAME">%s</xliff:g> ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="pip_notification_message" msgid="8854051911700302620">"<xliff:g id="NAME">%s</xliff:g> ಈ ಫೀಚರ್ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಲು ಮತ್ತು ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="pip_play" msgid="3496151081459417097">"ಪ್ಲೇ"</string>
<string name="pip_pause" msgid="690688849510295232">"ವಿರಾಮಗೊಳಿಸಿ"</string>
<string name="pip_skip_to_next" msgid="8403429188794867653">"ಮುಂದಕ್ಕೆ ಸ್ಕಿಪ್ ಮಾಡಿ"</string>
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ಕೆಳಗಿನ ಬಲಭಾಗಕ್ಕೆ ಸರಿಸಿ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ಬಬಲ್ ವಜಾಗೊಳಿಸಿ"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ಬಬಲ್ ತೋರಿಸಬೇಡಿ"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ಸಂಭಾಷಣೆಯನ್ನು ಬಬಲ್ ಮಾಡಬೇಡಿ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ಬಬಲ್ಸ್ ಬಳಸಿ ಚಾಟ್ ಮಾಡಿ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ಹೊಸ ಸಂಭಾಷಣೆಗಳು ತೇಲುವ ಐಕಾನ್ಗಳು ಅಥವಾ ಬಬಲ್ಸ್ ಆಗಿ ಗೋಚರಿಸುತ್ತವೆ. ಬಬಲ್ ತೆರೆಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ. ಅದನ್ನು ಡ್ರ್ಯಾಗ್ ಮಾಡಲು ಎಳೆಯಿರಿ."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ರದ್ದುಮಾಡಿ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ಮರುಪ್ರಾರಂಭಿಸಿ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಸರಿಸಲು ಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಸರಿಸಲು\nಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ಹಿಗ್ಗಿಸಿ"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ಕುಗ್ಗಿಸಿ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ಮುಚ್ಚಿರಿ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string>
<string name="close_text" msgid="4986518933445178928">"ಮುಚ್ಚಿ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ಮೆನು ಮುಚ್ಚಿ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"ಮೆನು ತೆರೆಯಿರಿ"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index 1978989..39d717d 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"오른쪽 하단으로 이동"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> 설정"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"대화창 닫기"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"도움말 풍선 중지"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"대화를 대화창으로 표시하지 않기"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"대화창으로 채팅하기"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"새로운 대화가 플로팅 아이콘인 대화창으로 표시됩니다. 대화창을 열려면 탭하세요. 드래그하여 이동할 수 있습니다."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"취소"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"다시 시작"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"다시 표시 안함"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"두 번 탭하여 이 앱 이동"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"두 번 탭하여\n이 앱 이동"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"최대화"</string>
<string name="minimize_button_text" msgid="271592547935841753">"최소화"</string>
<string name="close_button_text" msgid="2913281996024033299">"닫기"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"스크린샷"</string>
<string name="close_text" msgid="4986518933445178928">"닫기"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"메뉴 닫기"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"메뉴 열기"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index 745cea3..f210ea2 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Төмөнкү оң жакка жылдыруу"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> параметрлери"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Калкып чыкма билдирмени жабуу"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Калкып чыкма билдирмелер көрсөтүлбөсүн"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Жазышууда калкып чыкма билдирмелер көрүнбөсүн"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Калкып чыкма билдирмелер аркылуу маектешүү"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Жаңы жазышуулар калкыма сүрөтчөлөр же калкып чыкма билдирмелер түрүндө көрүнөт. Калкып чыкма билдирмелерди ачуу үчүн таптап коюңуз. Жылдыруу үчүн сүйрөңүз."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Токтотуу"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Өчүрүп күйгүзүү"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Экинчи көрүнбөсүн"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Бул колдонмону жылдыруу үчүн эки жолу таптаңыз"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Бул колдонмону жылдыруу үчүн\nэки жолу таптаңыз"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Чоңойтуу"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Кичирейтүү"</string>
<string name="close_button_text" msgid="2913281996024033299">"Жабуу"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Скриншот"</string>
<string name="close_text" msgid="4986518933445178928">"Жабуу"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Менюну жабуу"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Менюну ачуу"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index 4dd5ade..a25699f 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ຍ້າຍຂວາລຸ່ມ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"ການຕັ້ງຄ່າ <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ປິດຟອງໄວ້"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ບໍ່ຕ້ອງສະແດງ bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ຢ່າໃຊ້ຟອງໃນການສົນທະນາ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ສົນທະນາໂດຍໃຊ້ຟອງ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ການສົນທະນາໃໝ່ຈະປາກົດເປັນໄອຄອນ ຫຼື ຟອງແບບລອຍ. ແຕະເພື່ອເປີດຟອງ. ລາກເພື່ອຍ້າຍມັນ."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ຍົກເລີກ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ຣີສະຕາດ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ບໍ່ຕ້ອງສະແດງອີກ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ແຕະສອງເທື່ອເພື່ອຍ້າຍແອັບນີ້"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ແຕະສອງເທື່ອເພື່ອ\nຍ້າຍແອັບນີ້"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ຂະຫຍາຍໃຫຍ່ສຸດ"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ຫຍໍ້ລົງ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ປິດ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ຮູບໜ້າຈໍ"</string>
<string name="close_text" msgid="4986518933445178928">"ປິດ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ປິດເມນູ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"ເປີດເມນູ"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml
index 7c1e7e1..d893fcf 100644
--- a/libs/WindowManager/Shell/res/values-lt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lt/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Perkelti į apačią dešinėje"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"„<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>“ nustatymai"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Atsisakyti burbulo"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Nerodyti debesėlių"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nerodyti pokalbio burbule"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Pokalbis naudojant burbulus"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nauji pokalbiai rodomi kaip slankiosios piktogramos arba burbulai. Palieskite, kad atidarytumėte burbulą. Vilkite, kad perkeltumėte."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Atšaukti"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Paleisti iš naujo"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Daugiau neberodyti"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dukart palieskite, kad perkeltumėte šią programą"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dukart palieskite, kad\nperkeltumėte šią programą"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Padidinti"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Sumažinti"</string>
<string name="close_button_text" msgid="2913281996024033299">"Uždaryti"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Ekrano kopija"</string>
<string name="close_text" msgid="4986518933445178928">"Uždaryti"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Uždaryti meniu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Atidaryti meniu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index 69db08a..a1fbcdd 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Pārvietot apakšpusē pa labi"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Lietotnes <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> iestatījumi"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Nerādīt burbuli"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Pārtraukt burbuļu rādīšanu"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nerādīt sarunu burbuļos"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Tērzēšana, izmantojot burbuļus"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Jaunas sarunas tiek rādītas kā peldošas ikonas vai burbuļi. Pieskarieties, lai atvērtu burbuli. Velciet, lai to pārvietotu."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Atcelt"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartēt"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Vairs nerādīt"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Lai pārvietotu šo lietotni, veiciet dubultskārienu"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Veiciet dubultskārienu,\nlai pārvietotu šo lietotni"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimizēt"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizēt"</string>
<string name="close_button_text" msgid="2913281996024033299">"Aizvērt"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Ekrānuzņēmums"</string>
<string name="close_text" msgid="4986518933445178928">"Aizvērt"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Aizvērt izvēlni"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Atvērt izvēlni"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index d9479d3..427433c 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Премести долу десно"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Поставки за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Отфрли балонче"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Не прикажувај балонче"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Не прикажувај го разговорот во балончиња"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Разговор во балончиња"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Новите разговори ќе се појавуваат како лебдечки икони или балончиња. Допрете за отворање на балончето. Повлечете за да го преместите."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Откажи"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартирај"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Не прикажувај повторно"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Допрете двапати за да ја поместите апликацијава"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Допрете двапати за да ја\nпоместите апликацијава"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Зголеми"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Минимизирај"</string>
<string name="close_button_text" msgid="2913281996024033299">"Затвори"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Слика од екранот"</string>
<string name="close_text" msgid="4986518933445178928">"Затворете"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворете го менито"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Отвори го менито"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml
index 2afde7b..5cca248 100644
--- a/libs/WindowManager/Shell/res/values-ml/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ml/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ചുവടെ വലതുഭാഗത്തേക്ക് നീക്കുക"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ക്രമീകരണം"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ബബിൾ ഡിസ്മിസ് ചെയ്യൂ"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ബബിൾ ചെയ്യരുത്"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"സംഭാഷണം ബബിൾ ചെയ്യരുത്"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ബബിളുകൾ ഉപയോഗിച്ച് ചാറ്റ് ചെയ്യുക"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"പുതിയ സംഭാഷണങ്ങൾ ഫ്ലോട്ടിംഗ് ഐക്കണുകളോ ബബിളുകളോ ആയി ദൃശ്യമാവുന്നു. ബബിൾ തുറക്കാൻ ടാപ്പ് ചെയ്യൂ. ഇത് നീക്കാൻ വലിച്ചിടുക."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"റദ്ദാക്കുക"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"റീസ്റ്റാർട്ട് ചെയ്യൂ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"വീണ്ടും കാണിക്കരുത്"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ഈ ആപ്പ് നീക്കാൻ ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ഈ ആപ്പ് നീക്കാൻ\nഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"വലുതാക്കുക"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ചെറുതാക്കുക"</string>
<string name="close_button_text" msgid="2913281996024033299">"അടയ്ക്കുക"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"സ്ക്രീൻഷോട്ട്"</string>
<string name="close_text" msgid="4986518933445178928">"അടയ്ക്കുക"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"മെനു അടയ്ക്കുക"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"മെനു തുറക്കുക"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index 69bd08e..72e54fc 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Баруун доош зөөх"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-н тохиргоо"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Бөмбөлгийг хаах"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Бөмбөлөг бүү харуул"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Харилцан яриаг бүү бөмбөлөг болго"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Бөмбөлөг ашиглан чатлаарай"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Шинэ харилцан яриа нь хөвөгч дүрс тэмдэг эсвэл бөмбөлөг хэлбэрээр харагддаг. Бөмбөлгийг нээхийн тулд товшино уу. Түүнийг зөөхийн тулд чирнэ үү."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Цуцлах"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Дахин эхлүүлэх"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Дахиж бүү харуул"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Энэ аппыг зөөхийн тулд хоёр товшино уу"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Энэ аппыг зөөхийн тулд\nхоёр товшино уу"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Томруулах"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Багасгах"</string>
<string name="close_button_text" msgid="2913281996024033299">"Хаах"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Дэлгэцийн агшин"</string>
<string name="close_text" msgid="4986518933445178928">"Хаах"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Цэсийг хаах"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Цэс нээх"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index 5382b94..a9e6319a 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"तळाशी उजवीकडे हलवा"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> सेटिंग्ज"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल डिसमिस करा"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"बबल दाखवू नका"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"संभाषणाला बबल करू नका"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"बबल वापरून चॅट करा"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"नवीन संभाषणे फ्लोटिंग आयकन किंवा बबल म्हणून दिसतात. बबल उघडण्यासाठी टॅप करा. हे हलवण्यासाठी ड्रॅग करा."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"रद्द करा"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रीस्टार्ट करा"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"पुन्हा दाखवू नका"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"हे ॲप हलवण्यासाठी दोनदा टॅप करा"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"हे ॲप हलवण्यासाठी\nदोनदा टॅप करा"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"मोठे करा"</string>
<string name="minimize_button_text" msgid="271592547935841753">"लहान करा"</string>
<string name="close_button_text" msgid="2913281996024033299">"बंद करा"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"स्क्रीनशॉट"</string>
<string name="close_text" msgid="4986518933445178928">"बंद करा"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेनू बंद करा"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"मेनू उघडा"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml
index c1b2d49..b475317 100644
--- a/libs/WindowManager/Shell/res/values-ms/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ms/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Alihkan ke bawah sebelah kanan"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Tetapan <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ketepikan gelembung"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Hentikan gelembung"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Jangan jadikan perbualan dalam bentuk gelembung"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Bersembang menggunakan gelembung"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Perbualan baharu muncul sebagai ikon terapung atau gelembung. Ketik untuk membuka gelembung. Seret untuk mengalihkan gelembung tersebut."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Batal"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Mulakan semula"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Jangan tunjukkan lagi"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Ketik dua kali untuk mengalihkan apl ini"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Ketik dua kali untuk\nalih apl ini"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimumkan"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimumkan"</string>
<string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Tangkapan skrin"</string>
<string name="close_text" msgid="4986518933445178928">"Tutup"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Tutup Menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Buka Menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index f3b7bfc..cb6a1df 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ညာအောက်ခြေသို့ ရွှေ့ပါ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ဆက်တင်များ"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ပူဖောင်းကွက် ပယ်ရန်"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ပူဖောင်းကွက် မပြပါနှင့်"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"စကားဝိုင်းကို ပူဖောင်းကွက် မပြုလုပ်ပါနှင့်"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ပူဖောင်းကွက် သုံး၍ ချတ်လုပ်ခြင်း"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"စကားဝိုင်းအသစ်များကို မျောနေသည့် သင်္ကေတများ သို့မဟုတ် ပူဖောင်းကွက်များအဖြစ် မြင်ရပါမည်။ ပူဖောင်းကွက်ကိုဖွင့်ရန် တို့ပါ။ ရွှေ့ရန် ၎င်းကို ဖိဆွဲပါ။"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"မလုပ်တော့"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ပြန်စရန်"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"နောက်ထပ်မပြပါနှင့်"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"နှစ်ချက်တို့ပြီး ဤအက်ပ်ကို ရွှေ့ပါ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ဤအက်ပ်ကို ရွှေ့ရန်\nနှစ်ချက်တို့ပါ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ချဲ့ရန်"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ချုံ့ရန်"</string>
<string name="close_button_text" msgid="2913281996024033299">"ပိတ်ရန်"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
<string name="close_text" msgid="4986518933445178928">"ပိတ်ရန်"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"မီနူး ပိတ်ရန်"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"မီနူး ဖွင့်ရန်"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index bf197d5..6c80144 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flytt til nederst til høyre"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>-innstillinger"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Lukk boblen"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ikke vis bobler"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ikke vis samtaler i bobler"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat med bobler"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nye samtaler vises som flytende ikoner eller bobler. Trykk for å åpne en boble. Dra for å flytte den."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Avbryt"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Start på nytt"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ikke vis dette igjen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dobbelttrykk for å flytte denne appen"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dobbelttrykk for\nå flytte denne appen"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimer"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimer"</string>
<string name="close_button_text" msgid="2913281996024033299">"Lukk"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skjermdump"</string>
<string name="close_text" msgid="4986518933445178928">"Lukk"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Lukk menyen"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Åpne menyen"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index 519a7cb..f9f5805 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"पुछारमा दायाँतिर सार्नुहोस्"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> का सेटिङहरू"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"बबल खारेज गर्नुहोस्"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"बबल नदेखाइयोस्"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"वार्तालाप बबलको रूपमा नदेखाइयोस्"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"बबलहरू प्रयोग गरी कुराकानी गर्नुहोस्"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"नयाँ वार्तालापहरू तैरने आइकन वा बबलका रूपमा देखिन्छन्। बबल खोल्न ट्याप गर्नुहोस्। बबल सार्न सो बबललाई ड्र्याग गर्नुहोस्।"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"रद्द गर्नुहोस्"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"रिस्टार्ट गर्नुहोस्"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"फेरि नदेखाइयोस्"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"यो एप सार्न डबल ट्याप गर्नुहोस्"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"यो एप सार्न डबल\nट्याप गर्नुहोस्"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ठुलो बनाउनुहोस्"</string>
<string name="minimize_button_text" msgid="271592547935841753">"मिनिमाइज गर्नुहोस्"</string>
<string name="close_button_text" msgid="2913281996024033299">"बन्द गर्नुहोस्"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"स्क्रिनसट"</string>
<string name="close_text" msgid="4986518933445178928">"बन्द गर्नुहोस्"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेनु बन्द गर्नुहोस्"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"मेनु खोल्नुहोस्"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml
index 7847901..3064ccc 100644
--- a/libs/WindowManager/Shell/res/values-nl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nl/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Naar rechtsonder verplaatsen"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Instellingen voor <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Bubbel sluiten"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Niet als bubbel tonen"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Gesprekken niet in bubbels tonen"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatten met bubbels"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nieuwe gesprekken worden als zwevende iconen of bubbels getoond. Tik om een bubbel te openen. Sleep om een bubbel te verplaatsen."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annuleren"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Opnieuw opstarten"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Niet opnieuw tonen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dubbeltik om deze app te verplaatsen"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dubbeltik om\ndeze app te verplaatsen"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximaliseren"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimaliseren"</string>
<string name="close_button_text" msgid="2913281996024033299">"Sluiten"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Sluiten"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menu sluiten"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Menu openen"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index efc1af3..e4c7053 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ତଳ ଡାହାଣକୁ ନିଅନ୍ତୁ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ସେଟିଂସ୍"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ବବଲ୍ ଖାରଜ କରନ୍ତୁ"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ବବଲ କରନ୍ତୁ ନାହିଁ"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ବାର୍ତ୍ତାଳାପକୁ ବବଲ୍ କରନ୍ତୁ ନାହିଁ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ବବଲଗୁଡ଼ିକୁ ବ୍ୟବହାର କରି ଚାଟ୍ କରନ୍ତୁ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ନୂଆ ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ ଫ୍ଲୋଟିଂ ଆଇକନ୍ କିମ୍ବା ବବଲ୍ ଭାବେ ଦେଖାଯିବ। ବବଲ୍ ଖୋଲିବାକୁ ଟାପ୍ କରନ୍ତୁ। ଏହାକୁ ମୁଭ୍ କରିବାକୁ ଟାଣନ୍ତୁ।"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ଏହି ଆପକୁ ମୁଭ କରାଇବାକୁ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ଏହି ଆପକୁ ମୁଭ\nକରିବା ପାଇଁ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ବଡ଼ କରନ୍ତୁ"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ଛୋଟ କରନ୍ତୁ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ବନ୍ଦ କରନ୍ତୁ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ସ୍କ୍ରିନସଟ"</string>
<string name="close_text" msgid="4986518933445178928">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ମେନୁ ବନ୍ଦ କରନ୍ତୁ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"ମେନୁ ଖୋଲନ୍ତୁ"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml
index fbcaf6e..d9f7f34 100644
--- a/libs/WindowManager/Shell/res/values-pa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pa/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ਹੇਠਾਂ ਵੱਲ ਸੱਜੇ ਲਿਜਾਓ"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ਸੈਟਿੰਗਾਂ"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ਬਬਲ ਨੂੰ ਖਾਰਜ ਕਰੋ"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ਬਬਲ ਨਾ ਕਰੋ"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ਗੱਲਬਾਤ \'ਤੇ ਬਬਲ ਨਾ ਲਾਓ"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"ਬਬਲ ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"ਨਵੀਆਂ ਗੱਲਾਂਬਾਤਾਂ ਫਲੋਟਿੰਗ ਪ੍ਰਤੀਕਾਂ ਜਾਂ ਬਬਲ ਦੇ ਰੂਪ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ। ਬਬਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ। ਇਸਨੂੰ ਲਿਜਾਣ ਲਈ ਘਸੀਟੋ।"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ਰੱਦ ਕਰੋ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ਇਸ ਐਪ ਦੀ ਟਿਕਾਣਾ ਬਦਲਣ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ਇਸ ਐਪ ਦਾ ਟਿਕਾਣਾ ਬਦਲਣ ਲਈ\nਡਬਲ ਟੈਪ ਕਰੋ"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ਵੱਡਾ ਕਰੋ"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ਛੋਟਾ ਕਰੋ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ਬੰਦ ਕਰੋ"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
<string name="close_text" msgid="4986518933445178928">"ਬੰਦ ਕਰੋ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ਮੀਨੂ ਬੰਦ ਕਰੋ"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"ਮੀਨੂ ਖੋਲ੍ਹੋ"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index 9451c6e..0699f5d 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Przenieś w prawy dolny róg"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> – ustawienia"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Zamknij dymek"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Nie twórz dymków"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nie wyświetlaj rozmowy jako dymka"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Czatuj, korzystając z dymków"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nowe rozmowy będą wyświetlane jako pływające ikony lub dymki. Kliknij, by otworzyć dymek. Przeciągnij, by go przenieść."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Anuluj"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Uruchom ponownie"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nie pokazuj ponownie"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Kliknij dwukrotnie, aby przenieść tę aplikację"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Aby przenieść aplikację,\nkliknij dwukrotnie"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksymalizuj"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimalizuj"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zamknij"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Zrzut ekranu"</string>
<string name="close_text" msgid="4986518933445178928">"Zamknij"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zamknij menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otwórz menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
index 6b18719..eea9be2 100644
--- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover para canto inferior direito"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configurações de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dispensar balão"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Parar de mostrar balões"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não criar balões de conversa"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Converse usando balões"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Novas conversas aparecerão como ícones flutuantes, ou balões. Toque para abrir o balão. Arraste para movê-lo."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar novamente"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toque duas vezes para mover o app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes para\nmover o app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de tela"</string>
<string name="close_text" msgid="4986518933445178928">"Fechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fechar menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir o menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index ede86fa..ed0cdb6 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover parte inferior direita"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Definições de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ignorar balão"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Não apresentar balões"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não apresentar a conversa em balões"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Converse no chat através de balões"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"As novas conversas aparecem como ícones flutuantes ou balões. Toque para abrir o balão. Arraste para o mover."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar de novo"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toque duas vezes para mover esta app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes\npara mover esta app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de ecrã"</string>
<string name="close_text" msgid="4986518933445178928">"Fechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fechar menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml
index 6b18719..eea9be2 100644
--- a/libs/WindowManager/Shell/res/values-pt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover para canto inferior direito"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configurações de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Dispensar balão"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Parar de mostrar balões"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Não criar balões de conversa"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Converse usando balões"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Novas conversas aparecerão como ícones flutuantes, ou balões. Toque para abrir o balão. Arraste para movê-lo."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Cancelar"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reiniciar"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Não mostrar novamente"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Toque duas vezes para mover o app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Toque duas vezes para\nmover o app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizar"</string>
<string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captura de tela"</string>
<string name="close_text" msgid="4986518933445178928">"Fechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fechar menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Abrir o menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 4aade7f..8a64b16 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mută în dreapta jos"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Setări <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Închide balonul"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Nu afișa bule"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nu afișa conversația în balon"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chat cu baloane"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Conversațiile noi apar ca pictograme flotante sau baloane. Atinge pentru a deschide balonul. Trage pentru a-l muta."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Anulează"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Repornește"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Nu mai afișa"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Atinge de două ori ca să muți aplicația"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Atinge de două ori\nca să muți aplicația"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximizează"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizează"</string>
<string name="close_button_text" msgid="2913281996024033299">"Închide"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Captură de ecran"</string>
<string name="close_text" msgid="4986518933445178928">"Închide"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Închide meniul"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Deschide meniul"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml
index b9733dd..a7db44d 100644
--- a/libs/WindowManager/Shell/res/values-ru/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ru/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Перенести в правый нижний угол"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: настройки"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Скрыть всплывающий чат"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Отключить всплывающие подсказки"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Не показывать всплывающий чат для разговора"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Всплывающие чаты"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Новые разговоры будут появляться в виде плавающих значков, или всплывающих чатов. Чтобы открыть чат, нажмите на него, а чтобы переместить – перетащите."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Отмена"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перезапустить"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Больше не показывать"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Нажмите дважды, чтобы переместить приложение."</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Дважды нажмите, чтобы\nпереместить приложение."</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Развернуть"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Свернуть"</string>
<string name="close_button_text" msgid="2913281996024033299">"Закрыть"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Скриншот"</string>
<string name="close_text" msgid="4986518933445178928">"Закрыть"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Закрыть меню"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Открыть меню"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml
index 3b67693..4153ce2 100644
--- a/libs/WindowManager/Shell/res/values-si/strings.xml
+++ b/libs/WindowManager/Shell/res/values-si/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"පහළ දකුණට ගෙන යන්න"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> සැකසීම්"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"බුබුලු ඉවත ලන්න"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"බුබුළු නොකරන්න"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"සංවාදය බුබුලු නොදමන්න"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"බුබුලු භාවිතයෙන් කතාබහ කරන්න"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"නව සංවාද පාවෙන අයිකන හෝ බුබුලු ලෙස දිස් වේ. බුබුල විවෘත කිරීමට තට්ටු කරන්න. එය ගෙන යාමට අදින්න."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"අවලංගු කරන්න"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"යළි අරඹන්න"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"නැවත නොපෙන්වන්න"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"මෙම යෙදුම ගෙන යාමට දෙවරක් තට්ටු කරන්න"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"මෙම යෙදුම ගෙන යාමට\nදෙවරක් තට්ටු කරන්න"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"විහිදන්න"</string>
<string name="minimize_button_text" msgid="271592547935841753">"කුඩා කරන්න"</string>
<string name="close_button_text" msgid="2913281996024033299">"වසන්න"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"තිර රුව"</string>
<string name="close_text" msgid="4986518933445178928">"වසන්න"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"මෙනුව වසන්න"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"මෙනුව විවෘත කරන්න"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml
index adf582f..4e38943 100644
--- a/libs/WindowManager/Shell/res/values-sk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sk/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Presunúť doprava nadol"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavenia aplikácie <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Zavrieť bublinu"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Nezobrazovať bubliny"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Nezobrazovať konverzáciu ako bublinu"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Čet pomocou bublín"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nové konverzácie sa zobrazujú ako plávajúce ikony či bubliny. Bublinu otvoríte klepnutím. Premiestnite ju presunutím."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Zrušiť"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Reštartovať"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Už nezobrazovať"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Túto aplikáciu presuniete dvojitým klepnutím"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Túto aplikáciu\npresuniete dvojitým klepnutím"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovať"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimalizovať"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zavrieť"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Snímka obrazovky"</string>
<string name="close_text" msgid="4986518933445178928">"Zavrieť"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zavrieť ponuku"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Otvoriť ponuku"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml
index 08c1b38..b0e67a7 100644
--- a/libs/WindowManager/Shell/res/values-sl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sl/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Premakni spodaj desno"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Nastavitve za <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Opusti oblaček"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ne prikazuj oblačkov aplikacij"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Pogovora ne prikaži v oblačku"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Klepet z oblački"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Novi pogovori so prikazani kot lebdeče ikone ali oblački. Če želite odpreti oblaček, se ga dotaknite. Če ga želite premakniti, ga povlecite."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Prekliči"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Znova zaženi"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikaži več"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Dvakrat se dotaknite, če želite premakniti to aplikacijo"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Dvakrat se dotaknite\nza premik te aplikacije"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimiraj"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimiraj"</string>
<string name="close_button_text" msgid="2913281996024033299">"Zapri"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Posnetek zaslona"</string>
<string name="close_text" msgid="4986518933445178928">"Zapri"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zapri meni"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Odpri meni"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index e184ee0..29bfb92 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Lëvize poshtë djathtas"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Cilësimet e <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Hiqe flluskën"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Mos shfaq flluska"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Mos e vendos bisedën në flluskë"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Bisedo duke përdorur flluskat"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Bisedat e reja shfaqen si ikona pluskuese ose flluska. Trokit për të hapur flluskën. Zvarrit për ta zhvendosur."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Anulo"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Rinis"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Mos e shfaq përsëri"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Trokit dy herë për ta lëvizur këtë aplikacion"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Trokit dy herë për të\nlëvizur këtë aplikacion"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Maksimizo"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimizo"</string>
<string name="close_button_text" msgid="2913281996024033299">"Mbyll"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Pamja e ekranit"</string>
<string name="close_text" msgid="4986518933445178928">"Mbyll"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Mbyll menynë"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Hap menynë"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index e6be8d3..307efc9 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Премести доле десно"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Подешавања за <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Одбаци облачић"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Без облачића"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Не користи облачиће за конверзацију"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Ћаскајте у облачићима"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Нове конверзације се приказују као плутајуће иконе или облачићи. Додирните да бисте отворили облачић. Превуците да бисте га преместили."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Откажи"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартуј"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Не приказуј поново"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Двапут додирните да бисте преместили ову апликацију"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Двапут додирните да бисте\nпреместили ову апликацију"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Увећајте"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Умањите"</string>
<string name="close_button_text" msgid="2913281996024033299">"Затворите"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Снимак екрана"</string>
<string name="close_text" msgid="4986518933445178928">"Затворите"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворите мени"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Отворите мени"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index a5c4e23..33652cd 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Flytta längst ned till höger"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Inställningar för <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Stäng bubbla"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Visa inte bubblor"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Visa inte konversationen i bubblor"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Chatta med bubblor"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Nya konversationer visas som flytande ikoner, så kallade bubblor. Tryck på bubblan om du vill öppna den. Dra den om du vill flytta den."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Avbryt"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Starta om"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Visa inte igen"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Tryck snabbt två gånger för att flytta denna app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Tryck snabbt två gånger\nför att flytta denna app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Utöka"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Minimera"</string>
<string name="close_button_text" msgid="2913281996024033299">"Stäng"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skärmbild"</string>
<string name="close_text" msgid="4986518933445178928">"Stäng"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Stäng menyn"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Öppna menyn"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index f25f7db..fe2ad1f 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Sogeza chini kulia"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Mipangilio ya <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Ondoa kiputo"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Isifanye viputo"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Usiweke viputo kwenye mazungumzo"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Piga gumzo ukitumia viputo"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Mazungumzo mapya huonekena kama aikoni au viputo vinavyoelea. Gusa ili ufungue kiputo. Buruta ili ukisogeze."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Ghairi"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Zima kisha uwashe"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Usionyeshe tena"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Gusa mara mbili ili usogeze programu hii"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Gusa mara mbili ili\nusogeze programu hii"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Panua"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Punguza"</string>
<string name="close_button_text" msgid="2913281996024033299">"Funga"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Picha ya skrini"</string>
<string name="close_text" msgid="4986518933445178928">"Funga"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Funga Menyu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Fungua Menyu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index b150164..fd5f0e6 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -32,17 +32,13 @@
<string name="accessibility_action_pip_resize" msgid="4623966104749543182">"அளவு மாற்று"</string>
<string name="accessibility_action_pip_stash" msgid="4060775037619702641">"Stash"</string>
<string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Unstash"</string>
- <!-- no translation found for dock_forced_resizable (7429086980048964687) -->
- <skip />
- <!-- no translation found for dock_non_resizeble_failed_to_dock_text (2733543750291266047) -->
- <skip />
+ <string name="dock_forced_resizable" msgid="7429086980048964687">"திரைப் பிரிப்புப் பயன்முறையில் ஆப்ஸ் செயல்படாமல் போகக்கூடும்"</string>
+ <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"திரைப் பிரிப்புப் பயன்முறையை ஆப்ஸ் ஆதரிக்காது"</string>
<string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"இந்த ஆப்ஸை 1 சாளரத்தில் மட்டுமே திறக்க முடியும்."</string>
<string name="forced_resizable_secondary_display" msgid="1768046938673582671">"இரண்டாம்நிலைத் திரையில் ஆப்ஸ் வேலை செய்யாமல் போகக்கூடும்."</string>
<string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"இரண்டாம்நிலைத் திரைகளில் பயன்பாட்டைத் தொடங்க முடியாது."</string>
- <!-- no translation found for accessibility_divider (6407584574218956849) -->
- <skip />
- <!-- no translation found for divider_title (1963391955593749442) -->
- <skip />
+ <string name="accessibility_divider" msgid="6407584574218956849">"திரைப் பிரிப்பான்"</string>
+ <string name="divider_title" msgid="1963391955593749442">"திரைப் பிரிப்பான்"</string>
<string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"இடது புறம் முழுத் திரை"</string>
<string name="accessibility_action_divider_left_70" msgid="8859845045360659250">"இடது புறம் 70%"</string>
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"இடது புறம் 50%"</string>
@@ -72,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"கீழே வலதுபுறமாக நகர்த்து"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> அமைப்புகள்"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"குமிழை அகற்று"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"குமிழ்களைக் காட்ட வேண்டாம்"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"உரையாடலைக் குமிழாக்காதே"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"குமிழ்களைப் பயன்படுத்தி அரட்டையடியுங்கள்"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"புதிய உரையாடல்கள் மிதக்கும் ஐகான்களாகவோ குமிழ்களாகவோ தோன்றும். குமிழைத் திறக்க தட்டவும். நகர்த்த இழுக்கவும்."</string>
@@ -89,8 +84,7 @@
<string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"சிக்கல்கள் சரிசெய்யப்படவில்லையா?\nமாற்றியமைக்க தட்டவும்"</string>
<string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"கேமரா தொடர்பான சிக்கல்கள் எதுவும் இல்லையா? நிராகரிக்க தட்டவும்."</string>
<string name="letterbox_education_dialog_title" msgid="7739895354143295358">"பலவற்றைப் பார்த்தல் மற்றும் செய்தல்"</string>
- <!-- no translation found for letterbox_education_split_screen_text (449233070804658627) -->
- <skip />
+ <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"திரைப் பிரிப்புக்கு மற்றொரு ஆப்ஸை இழுக்கலாம்"</string>
<string name="letterbox_education_reposition_text" msgid="4589957299813220661">"ஆப்ஸை இடம் மாற்ற அதன் வெளியில் இருமுறை தட்டலாம்"</string>
<string name="letterbox_education_got_it" msgid="4057634570866051177">"சரி"</string>
<string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"கூடுதல் தகவல்களுக்கு விரிவாக்கலாம்."</string>
@@ -99,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ரத்துசெய்"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"மீண்டும் தொடங்கு"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"மீண்டும் காட்டாதே"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"இந்த ஆப்ஸை நகர்த்த இருமுறை தட்டவும்"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"இந்த ஆப்ஸை நகர்த்த\nஇருமுறை தட்டவும்"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"பெரிதாக்கும்"</string>
<string name="minimize_button_text" msgid="271592547935841753">"சிறிதாக்கும்"</string>
<string name="close_button_text" msgid="2913281996024033299">"மூடும்"</string>
@@ -115,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ஸ்கிரீன்ஷாட்"</string>
<string name="close_text" msgid="4986518933445178928">"மூடும்"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"மெனுவை மூடும்"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"மெனுவைத் திற"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml
index c75930b..6f95aa9 100644
--- a/libs/WindowManager/Shell/res/values-te/strings.xml
+++ b/libs/WindowManager/Shell/res/values-te/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"దిగవు కుడివైపునకు జరుపు"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> సెట్టింగ్లు"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"బబుల్ను విస్మరించు"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"బబుల్ను చూపడం ఆపండి"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"సంభాషణను బబుల్ చేయవద్దు"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"బబుల్స్ను ఉపయోగించి చాట్ చేయండి"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"కొత్త సంభాషణలు తేలియాడే చిహ్నాలుగా లేదా బబుల్స్ లాగా కనిపిస్తాయి. బబుల్ని తెరవడానికి నొక్కండి. తరలించడానికి లాగండి."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"రద్దు చేయండి"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"రీస్టార్ట్ చేయండి"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"మళ్లీ చూపవద్దు"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"ఈ యాప్ను తరలించడానికి డబుల్-ట్యాప్ చేయండి"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"ఈ యాప్ను తరలించడానికి\nడబుల్-ట్యాప్ చేయండి"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"గరిష్టీకరించండి"</string>
<string name="minimize_button_text" msgid="271592547935841753">"కుదించండి"</string>
<string name="close_button_text" msgid="2913281996024033299">"మూసివేయండి"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"స్క్రీన్షాట్"</string>
<string name="close_text" msgid="4986518933445178928">"మూసివేయండి"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"మెనూను మూసివేయండి"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"మెనూను తెరవండి"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml
index 22368c0..6733940 100644
--- a/libs/WindowManager/Shell/res/values-th/strings.xml
+++ b/libs/WindowManager/Shell/res/values-th/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ย้ายไปด้านขาวล่าง"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"การตั้งค่า <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"ปิดบับเบิล"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"ไม่ต้องแสดงบับเบิล"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"ไม่ต้องแสดงการสนทนาเป็นบับเบิล"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"แชทโดยใช้บับเบิล"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"การสนทนาใหม่ๆ จะปรากฏเป็นไอคอนแบบลอยหรือบับเบิล แตะเพื่อเปิดบับเบิล ลากเพื่อย้ายที่"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"ยกเลิก"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"รีสตาร์ท"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"ไม่ต้องแสดงข้อความนี้อีก"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"แตะสองครั้งเพื่อย้ายแอปนี้"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"แตะสองครั้ง\nเพื่อย้ายแอปนี้"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"ขยายใหญ่สุด"</string>
<string name="minimize_button_text" msgid="271592547935841753">"ย่อ"</string>
<string name="close_button_text" msgid="2913281996024033299">"ปิด"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"ภาพหน้าจอ"</string>
<string name="close_text" msgid="4986518933445178928">"ปิด"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ปิดเมนู"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"เปิดเมนู"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml
index de25366..8cf4eb484 100644
--- a/libs/WindowManager/Shell/res/values-tl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tl/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Ilipat sa kanan sa ibaba"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Mga setting ng <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"I-dismiss ang bubble"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Huwag i-bubble"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Huwag ipakita sa bubble ang mga pag-uusap"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Mag-chat gamit ang bubbles"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Lumalabas bilang mga nakalutang na icon o bubble ang mga bagong pag-uusap. I-tap para buksan ang bubble. I-drag para ilipat ito."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Kanselahin"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"I-restart"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Huwag nang ipakita ulit"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"I-double tap para ilipat ang app na ito"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"I-double tap para\nilipat ang app na ito"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"I-maximize"</string>
<string name="minimize_button_text" msgid="271592547935841753">"I-minimize"</string>
<string name="close_button_text" msgid="2913281996024033299">"Isara"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
<string name="close_text" msgid="4986518933445178928">"Isara"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Isara ang Menu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Buksan ang Menu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index bf4feda..1454435 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Sağ alta taşı"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ayarları"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Baloncuğu kapat"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Bildirim baloncuğu gösterme"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Görüşmeyi baloncuk olarak görüntüleme"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Baloncukları kullanarak sohbet edin"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Yeni görüşmeler kayan simgeler veya baloncuk olarak görünür. Açmak için baloncuğa dokunun. Baloncuğu taşımak için sürükleyin."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"İptal"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Yeniden başlat"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Bir daha gösterme"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Bu uygulamayı taşımak için iki kez dokunun"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Bu uygulamayı taşımak için\niki kez dokunun"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Ekranı Kapla"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Küçült"</string>
<string name="close_button_text" msgid="2913281996024033299">"Kapat"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Ekran görüntüsü"</string>
<string name="close_text" msgid="4986518933445178928">"Kapat"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menüyü kapat"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Menüyü Aç"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index 2800e4c..78df129 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Перемістити праворуч униз"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Налаштування параметра \"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>\""</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Закрити підказку"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Не показувати спливаючі чати"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Не показувати спливаючі чати для розмов"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Спливаючий чат"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Нові повідомлення чату з\'являються у вигляді спливаючих значків. Щоб відкрити чат, натисніть його, а щоб перемістити – перетягніть."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Скасувати"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Перезапустити"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Більше не показувати"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Двічі торкніться, щоб перемістити цей додаток"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Двічі торкніться, щоб\nперемістити цей додаток"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Збільшити"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Згорнути"</string>
<string name="close_button_text" msgid="2913281996024033299">"Закрити"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Знімок екрана"</string>
<string name="close_text" msgid="4986518933445178928">"Закрити"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Закрити меню"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Відкрити меню"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index f94ee98..ca16424 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"نیچے دائیں جانب لے جائیں"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ترتیبات"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"بلبلہ برخاست کریں"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"بلبلہ دکھانا بند کریں"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"گفتگو بلبلہ نہ کریں"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"بلبلے کے ذریعے چیٹ کریں"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"نئی گفتگوئیں فلوٹنگ آئیکن یا بلبلے کے طور پر ظاہر ہوں گی۔ بلبلہ کھولنے کے لیے تھپتھپائیں۔ اسے منتقل کرنے کے لیے گھسیٹیں۔"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"منسوخ کریں"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"ری اسٹارٹ کریں"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"دوبارہ نہ دکھائیں"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"اس ایپ کو منتقل کرنے کیلئے دو بار تھپتھپائیں"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"اس ایپ کو منتقل کرنے کیلئے\nدو بار تھپتھپائیں"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"بڑا کریں"</string>
<string name="minimize_button_text" msgid="271592547935841753">"چھوٹا کریں"</string>
<string name="close_button_text" msgid="2913281996024033299">"بند کریں"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"اسکرین شاٹ"</string>
<string name="close_text" msgid="4986518933445178928">"بند کریں"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"مینیو بند کریں"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"مینو کھولیں"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml
index ac7cc72..c0dc033 100644
--- a/libs/WindowManager/Shell/res/values-uz/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uz/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Quyi oʻngga surish"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> sozlamalari"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Bulutchani yopish"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Qalqib chiqmasin"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Suhbatlar bulutchalar shaklida chiqmasin"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Bulutchalar yordamida subhatlashish"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Yangi xabarlar qalqib chiquvchi belgilar yoki bulutchalar kabi chiqadi. Xabarni ochish uchun bildirishnoma ustiga bosing. Xabarni qayta joylash uchun bildirishnomani suring."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Bekor qilish"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Qaytadan"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Boshqa chiqmasin"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Bu ilovaga olish uchun ikki marta bosing"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Bu ilovani siljitish uchun\nikki marta bosing"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Yoyish"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Kichraytirish"</string>
<string name="close_button_text" msgid="2913281996024033299">"Yopish"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Skrinshot"</string>
<string name="close_text" msgid="4986518933445178928">"Yopish"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menyuni yopish"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Menyuni ochish"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index fab5ec1..7d97400 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -32,17 +32,13 @@
<string name="accessibility_action_pip_resize" msgid="4623966104749543182">"Đổi kích thước"</string>
<string name="accessibility_action_pip_stash" msgid="4060775037619702641">"Ẩn"</string>
<string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Hiện"</string>
- <!-- no translation found for dock_forced_resizable (7429086980048964687) -->
- <skip />
- <!-- no translation found for dock_non_resizeble_failed_to_dock_text (2733543750291266047) -->
- <skip />
+ <string name="dock_forced_resizable" msgid="7429086980048964687">"Có thể ứng dụng không dùng được chế độ chia đôi màn hình"</string>
+ <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"Ứng dụng không hỗ trợ chế độ chia đôi màn hình"</string>
<string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"Ứng dụng này chỉ có thể mở 1 cửa sổ."</string>
<string name="forced_resizable_secondary_display" msgid="1768046938673582671">"Ứng dụng có thể không hoạt động trên màn hình phụ."</string>
<string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"Ứng dụng không hỗ trợ khởi chạy trên màn hình phụ."</string>
- <!-- no translation found for accessibility_divider (6407584574218956849) -->
- <skip />
- <!-- no translation found for divider_title (1963391955593749442) -->
- <skip />
+ <string name="accessibility_divider" msgid="6407584574218956849">"Trình chia đôi màn hình"</string>
+ <string name="divider_title" msgid="1963391955593749442">"Trình chia đôi màn hình"</string>
<string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"Toàn màn hình bên trái"</string>
<string name="accessibility_action_divider_left_70" msgid="8859845045360659250">"Trái 70%"</string>
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Trái 50%"</string>
@@ -72,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Chuyển tới dưới cùng bên phải"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Cài đặt <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Đóng bong bóng"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Không hiện bong bóng trò chuyện"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Dừng sử dụng bong bóng cho cuộc trò chuyện"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Trò chuyện bằng bong bóng trò chuyện"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Các cuộc trò chuyện mới sẽ xuất hiện dưới dạng biểu tượng nổi hoặc bong bóng trò chuyện. Nhấn để mở bong bóng trò chuyện. Kéo để di chuyển bong bóng trò chuyện."</string>
@@ -89,8 +84,7 @@
<string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bạn chưa khắc phục vấn đề?\nHãy nhấn để hủy bỏ"</string>
<string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Không có vấn đề với máy ảnh? Hãy nhấn để đóng."</string>
<string name="letterbox_education_dialog_title" msgid="7739895354143295358">"Xem và làm được nhiều việc hơn"</string>
- <!-- no translation found for letterbox_education_split_screen_text (449233070804658627) -->
- <skip />
+ <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"Kéo một ứng dụng khác vào để chia đôi màn hình"</string>
<string name="letterbox_education_reposition_text" msgid="4589957299813220661">"Nhấn đúp bên ngoài ứng dụng để đặt lại vị trí"</string>
<string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
<string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Mở rộng để xem thêm thông tin."</string>
@@ -99,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Huỷ"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Khởi động lại"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Không hiện lại"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Nhấn đúp để di chuyển ứng dụng này"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Nhấn đúp để\ndi chuyển ứng dụng này"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Phóng to"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Thu nhỏ"</string>
<string name="close_button_text" msgid="2913281996024033299">"Đóng"</string>
@@ -115,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Ảnh chụp màn hình"</string>
<string name="close_text" msgid="4986518933445178928">"Đóng"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Đóng trình đơn"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Mở Trình đơn"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
index 5cf7ab2..d1f50db 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移至右下角"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>设置"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"关闭对话泡"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"不显示对话泡"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"不以对话泡形式显示对话"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"使用对话泡聊天"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"新对话会以浮动图标或对话泡形式显示。点按即可打开对话泡。拖动即可移动对话泡。"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"取消"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重启"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不再显示"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"点按两次即可移动此应用"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"点按两次\n即可移动此应用"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
<string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
<string name="close_button_text" msgid="2913281996024033299">"关闭"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"屏幕截图"</string>
<string name="close_text" msgid="4986518933445178928">"关闭"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"关闭菜单"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"打开菜单"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index 03a1438..6f399e5 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移去右下角"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"「<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>」設定"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"關閉小視窗氣泡"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"不要顯示對話氣泡"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"不要透過小視窗顯示對話"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"使用小視窗進行即時通訊"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"新對話會以浮動圖示 (小視窗) 顯示。輕按即可開啟小視窗。拖曳即可移動小視窗。"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"取消"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重新啟動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不要再顯示"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"輕按兩下即可移動此應用程式"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"輕按兩下\n即可移動此應用程式"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
<string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
<string name="close_button_text" msgid="2913281996024033299">"關閉"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"螢幕截圖"</string>
<string name="close_text" msgid="4986518933445178928">"關閉"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"關閉選單"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"打開選單"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
index d0e52b4..4ca49e1 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"移至右下方"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"「<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>」設定"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"關閉對話框"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"不要顯示對話框"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"不要以對話框形式顯示對話"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"透過對話框來聊天"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"新的對話會以浮動圖示或對話框形式顯示。輕觸即可開啟對話框,拖曳則可移動對話框。"</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"取消"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"重新啟動"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不要再顯示"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"輕觸兩下可移動這個應用程式"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"輕觸兩下即可\n移動這個應用程式"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
<string name="minimize_button_text" msgid="271592547935841753">"最小化"</string>
<string name="close_button_text" msgid="2913281996024033299">"關閉"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"螢幕截圖"</string>
<string name="close_text" msgid="4986518933445178928">"關閉"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"關閉選單"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"開啟選單"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index 0eb3148..478b5a6 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -68,7 +68,6 @@
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Hambisa inkinobho ngakwesokudla"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> izilungiselelo"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"Cashisa ibhamuza"</string>
- <string name="bubbles_dont_bubble" msgid="3216183855437329223">"Ungabhamuzi"</string>
<string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"Ungayibhamuzi ingxoxo"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"Xoxa usebenzisa amabhamuza"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"Izingxoxo ezintsha zivela njengezithonjana ezintantayo, noma amabhamuza. Thepha ukuze uvule ibhamuza. Hudula ukuze ulihambise."</string>
@@ -94,7 +93,7 @@
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"Khansela"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"Qala kabusha"</string>
<string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ungabonisi futhi"</string>
- <string name="letterbox_reachability_reposition_text" msgid="4507890186297500893">"Thepha kabili ukuze uhambise le-app"</string>
+ <string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"Thepha kabili ukuze\nuhambise le-app"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"Khulisa"</string>
<string name="minimize_button_text" msgid="271592547935841753">"Nciphisa"</string>
<string name="close_button_text" msgid="2913281996024033299">"Vala"</string>
@@ -110,6 +109,5 @@
<string name="screenshot_text" msgid="1477704010087786671">"Isithombe-skrini"</string>
<string name="close_text" msgid="4986518933445178928">"Vala"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Vala Imenyu"</string>
- <!-- no translation found for expand_menu_text (3847736164494181168) -->
- <skip />
+ <string name="expand_menu_text" msgid="3847736164494181168">"Vula Imenyu"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values/strings.xml b/libs/WindowManager/Shell/res/values/strings.xml
index 87a7c3e..b192fdf 100644
--- a/libs/WindowManager/Shell/res/values/strings.xml
+++ b/libs/WindowManager/Shell/res/values/strings.xml
@@ -146,8 +146,6 @@
<string name="bubbles_app_settings"><xliff:g id="notification_title" example="Android Messages">%1$s</xliff:g> settings</string>
<!-- Text used for the bubble dismiss area. Bubbles dragged to, or flung towards, this area will go away. [CHAR LIMIT=30] -->
<string name="bubble_dismiss_text">Dismiss bubble</string>
- <!-- Button text to stop an app from bubbling [CHAR LIMIT=60]-->
- <string name="bubbles_dont_bubble">Don\u2019t bubble</string>
<!-- Button text to stop a conversation from bubbling [CHAR LIMIT=60]-->
<string name="bubbles_dont_bubble_conversation">Don\u2019t bubble conversation</string>
<!-- Title text for the bubbles feature education cling shown when a bubble is on screen for the first time. [CHAR LIMIT=60]-->
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
index 47d3a5c..dc27ceb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java
@@ -20,6 +20,9 @@
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BACK_PREVIEW;
import static com.android.wm.shell.sysui.ShellSharedConstants.KEY_EXTRA_SHELL_BACK_ANIMATION;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
@@ -37,7 +40,9 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings.Global;
+import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.MathUtils;
import android.util.SparseArray;
import android.view.IRemoteAnimationRunner;
import android.view.InputDevice;
@@ -56,6 +61,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.view.AppearanceRegion;
+import com.android.wm.shell.animation.FlingAnimationUtils;
import com.android.wm.shell.common.ExternalInterfaceBinder;
import com.android.wm.shell.common.RemoteCallable;
import com.android.wm.shell.common.ShellExecutor;
@@ -80,6 +86,17 @@
public static boolean IS_U_ANIMATION_ENABLED =
SystemProperties.getInt("persist.wm.debug.predictive_back_anim",
SETTING_VALUE_ON) == SETTING_VALUE_ON;
+
+ public static final float FLING_MAX_LENGTH_SECONDS = 0.1f; // 100ms
+ public static final float FLING_SPEED_UP_FACTOR = 0.6f;
+
+ /**
+ * The maximum additional progress in case of fling gesture.
+ * The end animation starts after the user lifts the finger from the screen, we continue to
+ * fire {@link BackEvent}s until the velocity reaches 0.
+ */
+ private static final float MAX_FLING_PROGRESS = 0.3f; /* 30% of the screen */
+
/** Predictive back animation developer option */
private final AtomicBoolean mEnableAnimations = new AtomicBoolean(false);
/**
@@ -96,6 +113,7 @@
private boolean mShouldStartOnNextMoveEvent = false;
/** @see #setTriggerBack(boolean) */
private boolean mTriggerBack;
+ private FlingAnimationUtils mFlingAnimationUtils;
@Nullable
private BackNavigationInfo mBackNavigationInfo;
@@ -174,6 +192,11 @@
mBgHandler = bgHandler;
shellInit.addInitCallback(this::onInit, this);
mAnimationBackground = backAnimationBackground;
+ DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
+ mFlingAnimationUtils = new FlingAnimationUtils.Builder(displayMetrics)
+ .setMaxLengthSeconds(FLING_MAX_LENGTH_SECONDS)
+ .setSpeedUpFactor(FLING_SPEED_UP_FACTOR)
+ .build();
}
@VisibleForTesting
@@ -465,6 +488,78 @@
}
}
+
+ /**
+ * Allows us to manage the fling gesture, it smoothly animates the current progress value to
+ * the final position, calculated based on the current velocity.
+ *
+ * @param callback the callback to be invoked when the animation ends.
+ */
+ private void dispatchOrAnimateOnBackInvoked(IOnBackInvokedCallback callback) {
+ if (callback == null) {
+ return;
+ }
+
+ boolean animationStarted = false;
+
+ if (mBackNavigationInfo != null && mBackNavigationInfo.isAnimationCallback()) {
+
+ final BackMotionEvent backMotionEvent = mTouchTracker.createProgressEvent();
+ if (backMotionEvent != null) {
+ // Constraints - absolute values
+ float minVelocity = mFlingAnimationUtils.getMinVelocityPxPerSecond();
+ float maxVelocity = mFlingAnimationUtils.getHighVelocityPxPerSecond();
+ float maxX = mTouchTracker.getMaxX(); // px
+ float maxFlingDistance = maxX * MAX_FLING_PROGRESS; // px
+
+ // Current state
+ float currentX = backMotionEvent.getTouchX();
+ float velocity = MathUtils.constrain(backMotionEvent.getVelocityX(),
+ -maxVelocity, maxVelocity);
+
+ // Target state
+ float animationFaction = velocity / maxVelocity; // value between -1 and 1
+ float flingDistance = animationFaction * maxFlingDistance; // px
+ float endX = MathUtils.constrain(currentX + flingDistance, 0f, maxX);
+
+ if (!Float.isNaN(endX)
+ && currentX != endX
+ && Math.abs(velocity) >= minVelocity) {
+ ValueAnimator animator = ValueAnimator.ofFloat(currentX, endX);
+
+ mFlingAnimationUtils.apply(
+ /* animator = */ animator,
+ /* currValue = */ currentX,
+ /* endValue = */ endX,
+ /* velocity = */ velocity,
+ /* maxDistance = */ maxFlingDistance
+ );
+
+ animator.addUpdateListener(animation -> {
+ Float animatedValue = (Float) animation.getAnimatedValue();
+ float progress = mTouchTracker.getProgress(animatedValue);
+ final BackMotionEvent backEvent = mTouchTracker
+ .createProgressEvent(progress);
+ dispatchOnBackProgressed(mActiveCallback, backEvent);
+ });
+
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ dispatchOnBackInvoked(callback);
+ }
+ });
+ animator.start();
+ animationStarted = true;
+ }
+ }
+ }
+
+ if (!animationStarted) {
+ dispatchOnBackInvoked(callback);
+ }
+ }
+
private void dispatchOnBackInvoked(IOnBackInvokedCallback callback) {
if (callback == null) {
return;
@@ -530,7 +625,7 @@
if (mBackNavigationInfo != null) {
final IOnBackInvokedCallback callback = mBackNavigationInfo.getOnBackInvokedCallback();
if (mTriggerBack) {
- dispatchOnBackInvoked(callback);
+ dispatchOrAnimateOnBackInvoked(callback);
} else {
dispatchOnBackCancelled(callback);
}
@@ -605,7 +700,7 @@
// The next callback should be {@link #onBackAnimationFinished}.
if (mTriggerBack) {
- dispatchOnBackInvoked(mActiveCallback);
+ dispatchOrAnimateOnBackInvoked(mActiveCallback);
} else {
dispatchOnBackCancelled(mActiveCallback);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java
index 904574b..7a00f5b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java
@@ -16,7 +16,10 @@
package com.android.wm.shell.back;
+import android.annotation.FloatRange;
import android.os.SystemProperties;
+import android.util.MathUtils;
+import android.view.MotionEvent;
import android.view.RemoteAnimationTarget;
import android.window.BackEvent;
import android.window.BackMotionEvent;
@@ -99,28 +102,42 @@
}
BackMotionEvent createProgressEvent() {
- float progressThreshold = PROGRESS_THRESHOLD >= 0
- ? PROGRESS_THRESHOLD : mProgressThreshold;
- progressThreshold = progressThreshold == 0 ? 1 : progressThreshold;
float progress = 0;
// Progress is always 0 when back is cancelled and not restarted.
if (!mCancelled) {
- // If back is committed, progress is the distance between the last and first touch
- // point, divided by the max drag distance. Otherwise, it's the distance between
- // the last touch point and the starting threshold, divided by max drag distance.
- // The starting threshold is initially the first touch location, and updated to
- // the location everytime back is restarted after being cancelled.
- float startX = mTriggerBack ? mInitTouchX : mStartThresholdX;
- float deltaX = Math.max(
- mSwipeEdge == BackEvent.EDGE_LEFT
- ? mLatestTouchX - startX
- : startX - mLatestTouchX,
- 0);
- progress = Math.min(Math.max(deltaX / progressThreshold, 0), 1);
+ progress = getProgress(mLatestTouchX);
}
return createProgressEvent(progress);
}
+ /**
+ * Progress value computed from the touch position.
+ *
+ * @param touchX the X touch position of the {@link MotionEvent}.
+ * @return progress value
+ */
+ @FloatRange(from = 0.0, to = 1.0)
+ float getProgress(float touchX) {
+ // If back is committed, progress is the distance between the last and first touch
+ // point, divided by the max drag distance. Otherwise, it's the distance between
+ // the last touch point and the starting threshold, divided by max drag distance.
+ // The starting threshold is initially the first touch location, and updated to
+ // the location everytime back is restarted after being cancelled.
+ float startX = mTriggerBack ? mInitTouchX : mStartThresholdX;
+ float deltaX = Math.abs(startX - touchX);
+ float maxX = getMaxX();
+ maxX = maxX == 0 ? 1 : maxX;
+ return MathUtils.constrain(deltaX / maxX, 0, 1);
+ }
+
+ /**
+ * Maximum X value (in pixels).
+ * Progress is considered to be completed (1f) when this limit is exceeded.
+ */
+ float getMaxX() {
+ return PROGRESS_THRESHOLD >= 0 ? PROGRESS_THRESHOLD : mProgressThreshold;
+ }
+
BackMotionEvent createProgressEvent(float progress) {
return new BackMotionEvent(
/* touchX = */ mLatestTouchX,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
index 026ea069..d3f3958 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
@@ -47,7 +47,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.InstanceId;
-import com.android.launcher3.icons.BubbleBadgeIconFactory;
import com.android.launcher3.icons.BubbleIconFactory;
import com.android.wm.shell.bubbles.bar.BubbleBarExpandedView;
import com.android.wm.shell.bubbles.bar.BubbleBarLayerView;
@@ -65,7 +64,11 @@
public class Bubble implements BubbleViewProvider {
private static final String TAG = "Bubble";
- public static final String KEY_APP_BUBBLE = "key_app_bubble";
+ /** A string suffix used in app bubbles' {@link #mKey}. */
+ private static final String KEY_APP_BUBBLE = "key_app_bubble";
+
+ /** Whether the bubble is an app bubble. */
+ private final boolean mIsAppBubble;
private final String mKey;
@Nullable
@@ -182,7 +185,7 @@
private PendingIntent mDeleteIntent;
/**
- * Used only for a special bubble in the stack that has the key {@link #KEY_APP_BUBBLE}.
+ * Used only for a special bubble in the stack that has {@link #mIsAppBubble} set to true.
* There can only be one of these bubbles in the stack and this intent will be populated for
* that bubble.
*/
@@ -217,24 +220,54 @@
mMainExecutor = mainExecutor;
mTaskId = taskId;
mBubbleMetadataFlagListener = listener;
+ mIsAppBubble = false;
}
- public Bubble(Intent intent,
+ private Bubble(
+ Intent intent,
UserHandle user,
@Nullable Icon icon,
+ boolean isAppBubble,
+ String key,
Executor mainExecutor) {
- mKey = KEY_APP_BUBBLE;
mGroupKey = null;
mLocusId = null;
mFlags = 0;
mUser = user;
mIcon = icon;
+ mIsAppBubble = isAppBubble;
+ mKey = key;
mShowBubbleUpdateDot = false;
mMainExecutor = mainExecutor;
mTaskId = INVALID_TASK_ID;
mAppIntent = intent;
mDesiredHeight = Integer.MAX_VALUE;
mPackageName = intent.getPackage();
+
+ }
+
+ /** Creates an app bubble. */
+ public static Bubble createAppBubble(
+ Intent intent,
+ UserHandle user,
+ @Nullable Icon icon,
+ Executor mainExecutor) {
+ return new Bubble(intent,
+ user,
+ icon,
+ /* isAppBubble= */ true,
+ /* key= */ getAppBubbleKeyForApp(intent.getPackage(), user),
+ mainExecutor);
+ }
+
+ /**
+ * Returns the key for an app bubble from an app with package name, {@code packageName} on an
+ * Android user, {@code user}.
+ */
+ public static String getAppBubbleKeyForApp(String packageName, UserHandle user) {
+ Objects.requireNonNull(packageName);
+ Objects.requireNonNull(user);
+ return KEY_APP_BUBBLE + ":" + user.getIdentifier() + ":" + packageName;
}
@VisibleForTesting(visibility = PRIVATE)
@@ -242,6 +275,7 @@
final Bubbles.BubbleMetadataFlagListener listener,
final Bubbles.PendingIntentCanceledListener intentCancelListener,
Executor mainExecutor) {
+ mIsAppBubble = false;
mKey = entry.getKey();
mGroupKey = entry.getGroupKey();
mLocusId = entry.getLocusId();
@@ -436,7 +470,6 @@
* @param stackView the view the bubble is added to, iff showing as floating.
* @param layerView the layer the bubble is added to, iff showing in the bubble bar.
* @param iconFactory the icon factory use to create images for the bubble.
- * @param badgeIconFactory the icon factory to create app badges for the bubble.
*/
void inflate(BubbleViewInfoTask.Callback callback,
Context context,
@@ -444,7 +477,6 @@
@Nullable BubbleStackView stackView,
@Nullable BubbleBarLayerView layerView,
BubbleIconFactory iconFactory,
- BubbleBadgeIconFactory badgeIconFactory,
boolean skipInflation) {
if (isBubbleLoading()) {
mInflationTask.cancel(true /* mayInterruptIfRunning */);
@@ -455,7 +487,6 @@
stackView,
layerView,
iconFactory,
- badgeIconFactory,
skipInflation,
callback,
mMainExecutor);
@@ -819,7 +850,7 @@
}
boolean isAppBubble() {
- return KEY_APP_BUBBLE.equals(mKey);
+ return mIsAppBubble;
}
Intent getSettingsIntent(final Context context) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
index fd66153..21f02b1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
@@ -24,7 +24,6 @@
import static android.view.View.VISIBLE;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_GESTURE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
@@ -89,7 +88,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.statusbar.IStatusBarService;
-import com.android.launcher3.icons.BubbleBadgeIconFactory;
import com.android.launcher3.icons.BubbleIconFactory;
import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer;
@@ -209,7 +207,6 @@
@Nullable private BubbleStackView mStackView;
@Nullable private BubbleBarLayerView mLayerView;
private BubbleIconFactory mBubbleIconFactory;
- private BubbleBadgeIconFactory mBubbleBadgeIconFactory;
private BubblePositioner mBubblePositioner;
private Bubbles.SysuiProxy mSysuiProxy;
@@ -321,8 +318,7 @@
mBubbleData = data;
mSavedUserBubbleData = new SparseArray<>();
mBubbleIconFactory = new BubbleIconFactory(context,
- context.getResources().getDimensionPixelSize(R.dimen.bubble_size));
- mBubbleBadgeIconFactory = new BubbleBadgeIconFactory(context,
+ context.getResources().getDimensionPixelSize(R.dimen.bubble_size),
context.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size),
context.getResources().getColor(R.color.important_conversation),
context.getResources().getDimensionPixelSize(
@@ -700,6 +696,10 @@
return mBubblePositioner;
}
+ BubbleIconFactory getIconFactory() {
+ return mBubbleIconFactory;
+ }
+
public Bubbles.SysuiProxy getSysuiProxy() {
return mSysuiProxy;
}
@@ -936,8 +936,7 @@
mStackView.onThemeChanged();
}
mBubbleIconFactory = new BubbleIconFactory(mContext,
- mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size));
- mBubbleBadgeIconFactory = new BubbleBadgeIconFactory(mContext,
+ mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size),
mContext.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size),
mContext.getResources().getColor(R.color.important_conversation),
mContext.getResources().getDimensionPixelSize(
@@ -951,7 +950,6 @@
mStackView,
mLayerView,
mBubbleIconFactory,
- mBubbleBadgeIconFactory,
false /* skipInflation */);
}
for (Bubble b : mBubbleData.getOverflowBubbles()) {
@@ -961,7 +959,6 @@
mStackView,
mLayerView,
mBubbleIconFactory,
- mBubbleBadgeIconFactory,
false /* skipInflation */);
}
}
@@ -978,8 +975,7 @@
mScreenBounds.set(newConfig.windowConfiguration.getBounds());
mBubbleData.onMaxBubblesChanged();
mBubbleIconFactory = new BubbleIconFactory(mContext,
- mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size));
- mBubbleBadgeIconFactory = new BubbleBadgeIconFactory(mContext,
+ mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size),
mContext.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size),
mContext.getResources().getColor(R.color.important_conversation),
mContext.getResources().getDimensionPixelSize(
@@ -1196,14 +1192,15 @@
return;
}
+ String appBubbleKey = Bubble.getAppBubbleKeyForApp(intent.getPackage(), user);
PackageManager packageManager = getPackageManagerForUser(mContext, user.getIdentifier());
- if (!isResizableActivity(intent, packageManager, KEY_APP_BUBBLE)) return;
+ if (!isResizableActivity(intent, packageManager, appBubbleKey)) return;
- Bubble existingAppBubble = mBubbleData.getBubbleInStackWithKey(KEY_APP_BUBBLE);
+ Bubble existingAppBubble = mBubbleData.getBubbleInStackWithKey(appBubbleKey);
if (existingAppBubble != null) {
BubbleViewProvider selectedBubble = mBubbleData.getSelectedBubble();
if (isStackExpanded()) {
- if (selectedBubble != null && KEY_APP_BUBBLE.equals(selectedBubble.getKey())) {
+ if (selectedBubble != null && appBubbleKey.equals(selectedBubble.getKey())) {
// App bubble is expanded, lets collapse
collapseStack();
} else {
@@ -1217,7 +1214,7 @@
}
} else {
// App bubble does not exist, lets add and expand it
- Bubble b = new Bubble(intent, user, icon, mMainExecutor);
+ Bubble b = Bubble.createAppBubble(intent, user, icon, mMainExecutor);
b.setShouldAutoExpand(true);
inflateAndAdd(b, /* suppressFlyout= */ true, /* showInShade= */ false);
}
@@ -1250,8 +1247,8 @@
}
/** Sets the app bubble's taskId which is cached for SysUI. */
- public void setAppBubbleTaskId(int taskId) {
- mImpl.mCachedState.setAppBubbleTaskId(taskId);
+ public void setAppBubbleTaskId(String key, int taskId) {
+ mImpl.mCachedState.setAppBubbleTaskId(key, taskId);
}
/**
@@ -1275,7 +1272,6 @@
mStackView,
mLayerView,
mBubbleIconFactory,
- mBubbleBadgeIconFactory,
true /* skipInflation */);
});
return null;
@@ -1351,7 +1347,7 @@
bubble.setInflateSynchronously(mInflateSynchronously);
bubble.inflate(b -> mBubbleData.notificationEntryUpdated(b, suppressFlyout, showInShade),
mContext, this, mStackView, mLayerView,
- mBubbleIconFactory, mBubbleBadgeIconFactory,
+ mBubbleIconFactory,
false /* skipInflation */);
}
@@ -2049,7 +2045,8 @@
private HashSet<String> mSuppressedBubbleKeys = new HashSet<>();
private HashMap<String, String> mSuppressedGroupToNotifKeys = new HashMap<>();
private HashMap<String, Bubble> mShortcutIdToBubble = new HashMap<>();
- private int mAppBubbleTaskId = INVALID_TASK_ID;
+
+ private HashMap<String, Integer> mAppBubbleTaskIds = new HashMap();
private ArrayList<Bubble> mTmpBubbles = new ArrayList<>();
@@ -2081,20 +2078,20 @@
mSuppressedBubbleKeys.clear();
mShortcutIdToBubble.clear();
- mAppBubbleTaskId = INVALID_TASK_ID;
+ mAppBubbleTaskIds.clear();
for (Bubble b : mTmpBubbles) {
mShortcutIdToBubble.put(b.getShortcutId(), b);
updateBubbleSuppressedState(b);
- if (KEY_APP_BUBBLE.equals(b.getKey())) {
- mAppBubbleTaskId = b.getTaskId();
+ if (b.isAppBubble()) {
+ mAppBubbleTaskIds.put(b.getKey(), b.getTaskId());
}
}
}
/** Sets the app bubble's taskId which is cached for SysUI. */
- synchronized void setAppBubbleTaskId(int taskId) {
- mAppBubbleTaskId = taskId;
+ synchronized void setAppBubbleTaskId(String key, int taskId) {
+ mAppBubbleTaskIds.put(key, taskId);
}
/**
@@ -2147,7 +2144,7 @@
pw.println(" suppressing: " + key);
}
- pw.print("mAppBubbleTaskId: " + mAppBubbleTaskId);
+ pw.print("mAppBubbleTaskIds: " + mAppBubbleTaskIds.values());
}
}
@@ -2209,7 +2206,7 @@
@Override
public boolean isAppBubbleTaskId(int taskId) {
- return mCachedState.mAppBubbleTaskId == taskId;
+ return mCachedState.mAppBubbleTaskIds.values().contains(taskId);
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java
index f9cf9d3..cc8f50e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java
@@ -17,7 +17,6 @@
import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
-import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_DATA;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
@@ -38,6 +37,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;
+import com.android.launcher3.icons.BubbleIconFactory;
import com.android.wm.shell.R;
import com.android.wm.shell.bubbles.Bubbles.DismissReason;
import com.android.wm.shell.common.bubbles.BubbleBarUpdate;
@@ -779,7 +779,7 @@
|| !(reason == Bubbles.DISMISS_AGED
|| reason == Bubbles.DISMISS_USER_GESTURE
|| reason == Bubbles.DISMISS_RELOAD_FROM_DISK)
- || KEY_APP_BUBBLE.equals(bubble.getKey())) {
+ || bubble.isAppBubble()) {
return;
}
if (DEBUG_BUBBLE_DATA) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
index a317c44..6c482c8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
@@ -246,7 +246,7 @@
mBubble.getAppBubbleIntent()
.addFlags(FLAG_ACTIVITY_NEW_DOCUMENT)
.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK),
- PendingIntent.FLAG_IMMUTABLE,
+ PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null);
mTaskView.startActivity(pi, /* fillInIntent= */ null, options,
launchBounds);
@@ -287,9 +287,9 @@
// The taskId is saved to use for removeTask, preventing appearance in recent tasks.
mTaskId = taskId;
- if (Bubble.KEY_APP_BUBBLE.equals(getBubbleKey())) {
+ if (mBubble != null && mBubble.isAppBubble()) {
// Let the controller know sooner what the taskId is.
- mController.setAppBubbleTaskId(mTaskId);
+ mController.setAppBubbleTaskId(mBubble.getKey(), mTaskId);
}
// With the task org, the taskAppeared callback will only happen once the task has
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflow.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflow.kt
index c2a05b7..c49451d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflow.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflow.kt
@@ -95,7 +95,11 @@
overflowBtn?.iconDrawable?.setTint(shapeColor)
val iconFactory = BubbleIconFactory(context,
- context.getResources().getDimensionPixelSize(R.dimen.bubble_size))
+ context.getResources().getDimensionPixelSize(R.dimen.bubble_size),
+ context.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size),
+ context.getResources().getColor(R.color.important_conversation),
+ context.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.importance_ring_stroke_width))
// Update bitmap
val fg = InsetDrawable(overflowBtn?.iconDrawable, overflowIconInset)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index 6624162..1b20f67 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -842,7 +842,7 @@
private DismissView mDismissView;
private ViewGroup mManageMenu;
- private TextView mManageDontBubbleText;
+ private ViewGroup mManageDontBubbleView;
private ViewGroup mManageSettingsView;
private ImageView mManageSettingsIcon;
private TextView mManageSettingsText;
@@ -1217,8 +1217,8 @@
mUnbubbleConversationCallback.accept(mBubbleData.getSelectedBubble().getKey());
});
- mManageDontBubbleText = mManageMenu
- .findViewById(R.id.bubble_manage_menu_dont_bubble_text);
+ mManageDontBubbleView = mManageMenu
+ .findViewById(R.id.bubble_manage_menu_dont_bubble_container);
mManageSettingsView = mManageMenu.findViewById(R.id.bubble_manage_menu_settings_container);
mManageSettingsView.setOnClickListener(
@@ -2890,14 +2890,16 @@
final Bubble bubble = mBubbleData.getBubbleInStackWithKey(mExpandedBubble.getKey());
if (bubble != null && !bubble.isAppBubble()) {
// Setup options for non app bubbles
- mManageDontBubbleText.setText(R.string.bubbles_dont_bubble_conversation);
+ mManageDontBubbleView.setVisibility(VISIBLE);
mManageSettingsIcon.setImageBitmap(bubble.getRawAppBadge());
mManageSettingsText.setText(getResources().getString(
R.string.bubbles_app_settings, bubble.getAppName()));
mManageSettingsView.setVisibility(VISIBLE);
} else {
// Setup options for app bubbles
- mManageDontBubbleText.setText(R.string.bubbles_dont_bubble);
+ // App bubbles have no conversations
+ // so we don't show the option to not bubble conversation
+ mManageDontBubbleView.setVisibility(GONE);
// App bubbles are not notification based
// so we don't show the option to go to notification settings
mManageSettingsView.setVisibility(GONE);
@@ -2966,6 +2968,15 @@
}
/**
+ * Checks whether manage menu don't bubble conversation action is available and visible
+ * Used for testing
+ */
+ @VisibleForTesting
+ public boolean isManageMenuDontBubbleVisible() {
+ return mManageDontBubbleView != null && mManageDontBubbleView.getVisibility() == VISIBLE;
+ }
+
+ /**
* Checks whether manage menu notification settings action is available and visible
* Used for testing
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
index d1081de..8ab9841 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleViewInfoTask.java
@@ -42,7 +42,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.ColorUtils;
import com.android.launcher3.icons.BitmapInfo;
-import com.android.launcher3.icons.BubbleBadgeIconFactory;
import com.android.launcher3.icons.BubbleIconFactory;
import com.android.wm.shell.R;
import com.android.wm.shell.bubbles.bar.BubbleBarExpandedView;
@@ -75,7 +74,6 @@
private WeakReference<BubbleStackView> mStackView;
private WeakReference<BubbleBarLayerView> mLayerView;
private BubbleIconFactory mIconFactory;
- private BubbleBadgeIconFactory mBadgeIconFactory;
private boolean mSkipInflation;
private Callback mCallback;
private Executor mMainExecutor;
@@ -90,7 +88,6 @@
@Nullable BubbleStackView stackView,
@Nullable BubbleBarLayerView layerView,
BubbleIconFactory factory,
- BubbleBadgeIconFactory badgeFactory,
boolean skipInflation,
Callback c,
Executor mainExecutor) {
@@ -100,7 +97,6 @@
mStackView = new WeakReference<>(stackView);
mLayerView = new WeakReference<>(layerView);
mIconFactory = factory;
- mBadgeIconFactory = badgeFactory;
mSkipInflation = skipInflation;
mCallback = c;
mMainExecutor = mainExecutor;
@@ -110,10 +106,10 @@
protected BubbleViewInfo doInBackground(Void... voids) {
if (mController.get().isShowingAsBubbleBar()) {
return BubbleViewInfo.populateForBubbleBar(mContext.get(), mController.get(),
- mLayerView.get(), mBadgeIconFactory, mBubble, mSkipInflation);
+ mLayerView.get(), mIconFactory, mBubble, mSkipInflation);
} else {
return BubbleViewInfo.populate(mContext.get(), mController.get(), mStackView.get(),
- mIconFactory, mBadgeIconFactory, mBubble, mSkipInflation);
+ mIconFactory, mBubble, mSkipInflation);
}
}
@@ -156,7 +152,7 @@
@Nullable
public static BubbleViewInfo populateForBubbleBar(Context c, BubbleController controller,
- BubbleBarLayerView layerView, BubbleBadgeIconFactory badgeIconFactory, Bubble b,
+ BubbleBarLayerView layerView, BubbleIconFactory iconFactory, Bubble b,
boolean skipInflation) {
BubbleViewInfo info = new BubbleViewInfo();
@@ -195,7 +191,7 @@
return null;
}
- info.rawBadgeBitmap = badgeIconFactory.getBadgeBitmap(badgedIcon, false).icon;
+ info.rawBadgeBitmap = iconFactory.getBadgeBitmap(badgedIcon, false).icon;
return info;
}
@@ -203,8 +199,7 @@
@VisibleForTesting
@Nullable
public static BubbleViewInfo populate(Context c, BubbleController controller,
- BubbleStackView stackView, BubbleIconFactory iconFactory,
- BubbleBadgeIconFactory badgeIconFactory, Bubble b,
+ BubbleStackView stackView, BubbleIconFactory iconFactory, Bubble b,
boolean skipInflation) {
BubbleViewInfo info = new BubbleViewInfo();
@@ -256,16 +251,16 @@
bubbleDrawable = appIcon;
}
- BitmapInfo badgeBitmapInfo = badgeIconFactory.getBadgeBitmap(badgedIcon,
+ BitmapInfo badgeBitmapInfo = iconFactory.getBadgeBitmap(badgedIcon,
b.isImportantConversation());
info.badgeBitmap = badgeBitmapInfo.icon;
// Raw badge bitmap never includes the important conversation ring
info.rawBadgeBitmap = b.isImportantConversation()
- ? badgeIconFactory.getBadgeBitmap(badgedIcon, false).icon
+ ? iconFactory.getBadgeBitmap(badgedIcon, false).icon
: badgeBitmapInfo.icon;
float[] bubbleBitmapScale = new float[1];
- info.bubbleBitmap = iconFactory.createIconBitmap(bubbleDrawable, bubbleBitmapScale);
+ info.bubbleBitmap = iconFactory.getBubbleBitmap(bubbleDrawable, bubbleBitmapScale);
// Dot color & placement
Path iconPath = PathParser.createPathFromPathData(
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
index 4970fa0..56616cb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
@@ -165,6 +165,10 @@
t.remove(mGapBackgroundLeash);
mGapBackgroundLeash = null;
}
+ if (mScreenshot != null) {
+ t.remove(mScreenshot);
+ mScreenshot = null;
+ }
mHostLeash = null;
mIcon = null;
mResizingIconView = null;
@@ -324,6 +328,8 @@
if (!mShown && mIsResizing && !mOldBounds.equals(mResizingBounds)) {
if (mScreenshotAnimator != null && mScreenshotAnimator.isRunning()) {
mScreenshotAnimator.cancel();
+ } else if (mScreenshot != null) {
+ t.remove(mScreenshot);
}
mTempRect.set(mOldBounds);
@@ -340,6 +346,8 @@
if (!mShown && mIsResizing && !mOldBounds.equals(mResizingBounds)) {
if (mScreenshotAnimator != null && mScreenshotAnimator.isRunning()) {
mScreenshotAnimator.cancel();
+ } else if (mScreenshot != null) {
+ t.remove(mScreenshot);
}
mScreenshot = screenshot;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index d04ce15..b6216b3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -146,13 +146,17 @@
t.apply();
// execute the runnable if non-null after WCT is applied to finish resizing pip
- if (mPipFinishResizeWCTRunnable != null) {
- mPipFinishResizeWCTRunnable.run();
- mPipFinishResizeWCTRunnable = null;
- }
+ maybePerformFinishResizeCallback();
}
};
+ private void maybePerformFinishResizeCallback() {
+ if (mPipFinishResizeWCTRunnable != null) {
+ mPipFinishResizeWCTRunnable.run();
+ mPipFinishResizeWCTRunnable = null;
+ }
+ }
+
// These callbacks are called on the update thread
private final PipAnimationController.PipAnimationCallback mPipAnimationCallback =
new PipAnimationController.PipAnimationCallback() {
@@ -619,11 +623,11 @@
* Removes PiP immediately.
*/
public void removePip() {
- if (!mPipTransitionState.isInPip() || mToken == null) {
+ if (!mPipTransitionState.isInPip() || mToken == null || mLeash == null) {
ProtoLog.wtf(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"%s: Not allowed to removePip in current state"
- + " mState=%d mToken=%s", TAG, mPipTransitionState.getTransitionState(),
- mToken);
+ + " mState=%d mToken=%s mLeash=%s", TAG,
+ mPipTransitionState.getTransitionState(), mToken, mLeash);
return;
}
@@ -1007,6 +1011,7 @@
return;
}
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+ mPipTransitionController.onFixedRotationFinished();
clearWaitForFixedRotation();
return;
}
@@ -1527,6 +1532,9 @@
if (snapshotSurface != null) {
mSyncTransactionQueue.queue(wct);
mSyncTransactionQueue.runInSync(t -> {
+ // reset the pinch gesture
+ maybePerformFinishResizeCallback();
+
// Scale the snapshot from its pre-resize bounds to the post-resize bounds.
mSurfaceTransactionHelper.scale(t, snapshotSurface, preResizeBounds,
snapshotDest);
@@ -1606,6 +1614,10 @@
if (direction == TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN) {
mSplitScreenOptional.ifPresent(splitScreenController ->
splitScreenController.enterSplitScreen(mTaskInfo.taskId, wasPipTopLeft, wct));
+ } else if (direction == TRANSITION_DIRECTION_LEAVE_PIP) {
+ // when leaving PiP we can call the callback without sync
+ maybePerformFinishResizeCallback();
+ mTaskOrganizer.applyTransaction(wct);
} else {
mTaskOrganizer.applySyncTransaction(wct, mPipFinishResizeWCTCallback);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
index aa3afc5..99cb6f7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
@@ -409,9 +409,31 @@
@Override
public void onFixedRotationStarted() {
+ fadeEnteredPipIfNeed(false /* show */);
+ }
+
+ @Override
+ public void onFixedRotationFinished() {
+ fadeEnteredPipIfNeed(true /* show */);
+ }
+
+ private void fadeEnteredPipIfNeed(boolean show) {
// The transition with this fixed rotation may be handled by other handler before reaching
// PipTransition, so we cannot do this in #startAnimation.
- if (mPipTransitionState.getTransitionState() == ENTERED_PIP && !mHasFadeOut) {
+ if (!mPipTransitionState.hasEnteredPip()) {
+ return;
+ }
+ if (show && mHasFadeOut) {
+ // If there is a pending transition, then let startAnimation handle it. And if it is
+ // handled, mHasFadeOut will be set to false and this runnable will be no-op. Otherwise
+ // make sure the PiP will reshow, e.g. swipe-up with fixed rotation (fade-out) but
+ // return to the current app (only finish the recent transition).
+ mTransitions.runOnIdle(() -> {
+ if (mHasFadeOut && mPipTransitionState.hasEnteredPip()) {
+ fadeExistingPip(true /* show */);
+ }
+ });
+ } else if (!show && !mHasFadeOut) {
// Fade out the existing PiP to avoid jump cut during seamless rotation.
fadeExistingPip(false /* show */);
}
@@ -611,6 +633,7 @@
0 /* startingAngle */, rotationDelta);
animator.setTransitionDirection(TRANSITION_DIRECTION_LEAVE_PIP)
.setPipAnimationCallback(mPipAnimationCallback)
+ .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
.setDuration(mEnterExitAnimationDuration)
.start();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
index ff7ab8b..949d6f5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
@@ -123,6 +123,10 @@
public void onFixedRotationStarted() {
}
+ /** Called when the fixed rotation finished. */
+ public void onFixedRotationFinished() {
+ }
+
public PipTransitionController(
@NonNull ShellInit shellInit,
@NonNull ShellTaskOrganizer shellTaskOrganizer,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
index 222307f..5f6b3fe 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
@@ -31,6 +31,12 @@
abstract class TvPipAction {
+ /**
+ * Extras key for adding a boolean to the {@link Notification.Action} to differentiate custom
+ * from system actions, most importantly to identify custom close actions.
+ **/
+ public static final String EXTRA_IS_PIP_CUSTOM_ACTION = "EXTRA_IS_PIP_CUSTOM_ACTION";
+
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"ACTION_"}, value = {
ACTION_FULLSCREEN,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipCustomAction.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipCustomAction.java
index bca27a5..977aad4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipCustomAction.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipCustomAction.java
@@ -86,7 +86,7 @@
Bundle extras = new Bundle();
extras.putCharSequence(Notification.EXTRA_PICTURE_CONTENT_DESCRIPTION,
mRemoteAction.getContentDescription());
- extras.putBoolean(Notification.EXTRA_CONTAINS_CUSTOM_VIEW, true);
+ extras.putBoolean(TvPipAction.EXTRA_IS_PIP_CUSTOM_ACTION, true);
builder.addExtras(extras);
builder.setSemanticAction(isCloseAction()
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java
index 6eef225..f86f987 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuEduTextDrawer.java
@@ -23,6 +23,7 @@
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE;
+import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -115,6 +116,10 @@
scheduleLifecycleEvents();
}
+ int getEduTextDrawerHeight() {
+ return getVisibility() == GONE ? 0 : getHeight();
+ }
+
private void scheduleLifecycleEvents() {
final int startScrollDelay = mContext.getResources().getInteger(
R.integer.pip_edu_text_start_scroll_delay);
@@ -226,20 +231,41 @@
.start();
// Start animation to close the drawer by animating its height to 0
- final ValueAnimator heightAnimation = ValueAnimator.ofInt(getHeight(), 0);
- heightAnimation.setDuration(eduTextSlideExitAnimationDuration);
- heightAnimation.setInterpolator(TvPipInterpolators.BROWSE);
- heightAnimation.addUpdateListener(animator -> {
+ final ValueAnimator heightAnimator = ValueAnimator.ofInt(getHeight(), 0);
+ heightAnimator.setDuration(eduTextSlideExitAnimationDuration);
+ heightAnimator.setInterpolator(TvPipInterpolators.BROWSE);
+ heightAnimator.addUpdateListener(animator -> {
final ViewGroup.LayoutParams params = getLayoutParams();
params.height = (int) animator.getAnimatedValue();
setLayoutParams(params);
- if (params.height == 0) {
- setVisibility(GONE);
+ });
+ heightAnimator.addListener(new Animator.AnimatorListener() {
+ @Override
+ public void onAnimationStart(@NonNull Animator animator) {
+ }
+
+ @Override
+ public void onAnimationEnd(@NonNull Animator animator) {
+ onCloseEduTextAnimationEnd();
+ }
+
+ @Override
+ public void onAnimationCancel(@NonNull Animator animator) {
+ onCloseEduTextAnimationEnd();
+ }
+
+ @Override
+ public void onAnimationRepeat(@NonNull Animator animator) {
}
});
- heightAnimation.start();
+ heightAnimator.start();
- mListener.onCloseEduText();
+ mListener.onCloseEduTextAnimationStart();
+ }
+
+ public void onCloseEduTextAnimationEnd() {
+ setVisibility(GONE);
+ mListener.onCloseEduTextAnimationEnd();
}
/**
@@ -270,11 +296,8 @@
* A listener for edu text drawer event states.
*/
interface Listener {
- /**
- * The edu text closing impacts the size of the Picture-in-Picture window and influences
- * how it is positioned on the screen.
- */
- void onCloseEduText();
+ void onCloseEduTextAnimationStart();
+ void onCloseEduTextAnimationEnd();
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
index 6eb719b..d076418 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuView.java
@@ -57,7 +57,8 @@
* A View that represents Pip Menu on TV. It's responsible for displaying the Pip menu actions from
* the TvPipActionsProvider as well as the buttons for manually moving the PiP.
*/
-public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener {
+public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener,
+ TvPipMenuEduTextDrawer.Listener {
private static final String TAG = "TvPipMenuView";
private final TvPipMenuView.Listener mListener;
@@ -76,6 +77,7 @@
private final View mDimLayer;
private final TvPipMenuEduTextDrawer mEduTextDrawer;
+ private final ViewGroup mEduTextContainer;
private final int mPipMenuOuterSpace;
private final int mPipMenuBorderWidth;
@@ -139,9 +141,9 @@
mPipMenuBorderWidth = context.getResources()
.getDimensionPixelSize(R.dimen.pip_menu_border_width);
- mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, mListener);
- ((FrameLayout) findViewById(R.id.tv_pip_menu_edu_text_drawer_placeholder))
- .addView(mEduTextDrawer);
+ mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, this);
+ mEduTextContainer = (ViewGroup) findViewById(R.id.tv_pip_menu_edu_text_container);
+ mEduTextContainer.addView(mEduTextDrawer);
}
void onPipTransitionToTargetBoundsStarted(Rect targetBounds) {
@@ -235,11 +237,13 @@
* pip menu when it gains focus.
*/
private void updatePipFrameBounds() {
- final ViewGroup.LayoutParams pipFrameParams = mPipFrameView.getLayoutParams();
- if (pipFrameParams != null) {
- pipFrameParams.width = mCurrentPipBounds.width() + 2 * mPipMenuBorderWidth;
- pipFrameParams.height = mCurrentPipBounds.height() + 2 * mPipMenuBorderWidth;
- mPipFrameView.setLayoutParams(pipFrameParams);
+ if (mPipFrameView.getVisibility() == VISIBLE) {
+ final ViewGroup.LayoutParams pipFrameParams = mPipFrameView.getLayoutParams();
+ if (pipFrameParams != null) {
+ pipFrameParams.width = mCurrentPipBounds.width() + 2 * mPipMenuBorderWidth;
+ pipFrameParams.height = mCurrentPipBounds.height() + 2 * mPipMenuBorderWidth;
+ mPipFrameView.setLayoutParams(pipFrameParams);
+ }
}
final ViewGroup.LayoutParams pipViewParams = mPipView.getLayoutParams();
@@ -262,7 +266,7 @@
Rect getPipMenuContainerBounds(Rect pipBounds) {
final Rect menuUiBounds = new Rect(pipBounds);
menuUiBounds.inset(-mPipMenuOuterSpace, -mPipMenuOuterSpace);
- menuUiBounds.bottom += mEduTextDrawer.getHeight();
+ menuUiBounds.bottom += mEduTextDrawer.getEduTextDrawerHeight();
return menuUiBounds;
}
@@ -406,6 +410,17 @@
}
@Override
+ public void onCloseEduTextAnimationStart() {
+ mListener.onCloseEduText();
+ }
+
+ @Override
+ public void onCloseEduTextAnimationEnd() {
+ mPipFrameView.setVisibility(GONE);
+ mEduTextContainer.setVisibility(GONE);
+ }
+
+ @Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == ACTION_UP) {
@@ -551,7 +566,7 @@
}
}
- interface Listener extends TvPipMenuEduTextDrawer.Listener {
+ interface Listener {
void onBackPress();
@@ -573,5 +588,11 @@
* has lost focus.
*/
void onPipWindowFocusChanged(boolean focused);
+
+ /**
+ * The edu text closing impacts the size of the Picture-in-Picture window and influences
+ * how it is positioned on the screen.
+ */
+ void onCloseEduText();
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java b/libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java
index c9b3a1a..ef5e501 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/protolog/ShellProtoLogGroup.java
@@ -32,6 +32,8 @@
Consts.TAG_WM_SHELL),
WM_SHELL_TRANSITIONS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
Consts.TAG_WM_SHELL),
+ WM_SHELL_RECENTS_TRANSITION(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
+ "ShellRecents"),
WM_SHELL_DRAG_AND_DROP(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
Consts.TAG_WM_SHELL),
WM_SHELL_STARTING_WINDOW(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
index c8d6a5e8..4f362d4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
@@ -47,7 +47,9 @@
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
+import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.util.TransitionUtil;
@@ -96,6 +98,9 @@
void startRecentsTransition(PendingIntent intent, Intent fillIn, Bundle options,
IApplicationThread appThread, IRecentsAnimationRunner listener) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "RecentsTransitionHandler.startRecentsTransition");
+
// only care about latest one.
mAnimApp = appThread;
WindowContainerTransaction wct = new WindowContainerTransaction();
@@ -116,7 +121,7 @@
mixer.setRecentsTransition(transition);
}
if (transition == null) {
- controller.cancel();
+ controller.cancel("startRecentsTransition");
return;
}
controller.setTransition(transition);
@@ -127,6 +132,7 @@
public WindowContainerTransaction handleRequest(IBinder transition,
TransitionRequestInfo request) {
// do not directly handle requests. Only entry point should be via startRecentsTransition
+ Slog.e(TAG, "RecentsTransitionHandler.handleRequest: Unexpected transition request");
return null;
}
@@ -143,11 +149,17 @@
SurfaceControl.Transaction finishTransaction,
Transitions.TransitionFinishCallback finishCallback) {
final int controllerIdx = findController(transition);
- if (controllerIdx < 0) return false;
+ if (controllerIdx < 0) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "RecentsTransitionHandler.startAnimation: no controller found");
+ return false;
+ }
final RecentsController controller = mControllers.get(controllerIdx);
Transitions.setRunningRemoteTransitionDelegate(mAnimApp);
mAnimApp = null;
if (!controller.start(info, startTransaction, finishTransaction, finishCallback)) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "RecentsTransitionHandler.startAnimation: failed to start animation");
return false;
}
return true;
@@ -158,7 +170,11 @@
SurfaceControl.Transaction t, IBinder mergeTarget,
Transitions.TransitionFinishCallback finishCallback) {
final int targetIdx = findController(mergeTarget);
- if (targetIdx < 0) return;
+ if (targetIdx < 0) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "RecentsTransitionHandler.mergeAnimation: no controller found");
+ return;
+ }
final RecentsController controller = mControllers.get(targetIdx);
controller.merge(info, t, finishCallback);
}
@@ -166,13 +182,20 @@
@Override
public void onTransitionConsumed(IBinder transition, boolean aborted,
SurfaceControl.Transaction finishTransaction) {
- final int idx = findController(transition);
- if (idx < 0) return;
- mControllers.get(idx).cancel();
+ // Only one recents transition can be handled at a time, but currently the first transition
+ // will trigger a no-op in the second transition which holds the active recents animation
+ // runner on the launcher side. For now, cancel all existing animations to ensure we
+ // don't get into a broken state with an orphaned animation runner, and later we can try to
+ // merge the latest transition into the currently running one
+ for (int i = mControllers.size() - 1; i >= 0; i--) {
+ mControllers.get(i).cancel("onTransitionConsumed");
+ }
}
/** There is only one of these and it gets reset on finish. */
private class RecentsController extends IRecentsAnimationController.Stub {
+ private final int mInstanceId;
+
private IRecentsAnimationRunner mListener;
private IBinder.DeathRecipient mDeathHandler;
private Transitions.TransitionFinishCallback mFinishCB = null;
@@ -212,40 +235,49 @@
private int mState = STATE_NORMAL;
RecentsController(IRecentsAnimationRunner listener) {
+ mInstanceId = System.identityHashCode(this);
mListener = listener;
- mDeathHandler = () -> mExecutor.execute(() -> {
- if (mListener == null) return;
- if (mFinishCB != null) {
- finish(mWillFinishToHome, false /* leaveHint */);
- }
- });
+ mDeathHandler = () -> {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.DeathRecipient: binder died", mInstanceId);
+ finish(mWillFinishToHome, false /* leaveHint */);
+ };
try {
mListener.asBinder().linkToDeath(mDeathHandler, 0 /* flags */);
} catch (RemoteException e) {
+ Slog.e(TAG, "RecentsController: failed to link to death", e);
mListener = null;
}
}
void setTransition(IBinder transition) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.setTransition: id=%s", mInstanceId, transition);
mTransition = transition;
}
- void cancel() {
+ void cancel(String reason) {
// restoring (to-home = false) involves submitting more WM changes, so by default, use
// toHome = true when canceling.
- cancel(true /* toHome */);
+ cancel(true /* toHome */, reason);
}
- void cancel(boolean toHome) {
+ void cancel(boolean toHome, String reason) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.cancel: toHome=%b reason=%s",
+ mInstanceId, toHome, reason);
if (mListener != null) {
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.cancel: calling onAnimationCanceled",
+ mInstanceId);
mListener.onAnimationCanceled(null, null);
} catch (RemoteException e) {
Slog.e(TAG, "Error canceling recents animation", e);
}
}
if (mFinishCB != null) {
- finish(toHome, false /* userLeave */);
+ finishInner(toHome, false /* userLeave */);
} else {
cleanUp();
}
@@ -272,6 +304,9 @@
}
}
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.cancel: calling onAnimationCanceled with snapshots",
+ mInstanceId);
mListener.onAnimationCanceled(taskIds, snapshots);
} catch (RemoteException e) {
Slog.e(TAG, "Error canceling recents animation", e);
@@ -281,6 +316,8 @@
}
void cleanUp() {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.cleanup", mInstanceId);
if (mListener != null && mDeathHandler != null) {
mListener.asBinder().unlinkToDeath(mDeathHandler, 0 /* flags */);
mDeathHandler = null;
@@ -304,6 +341,8 @@
boolean start(TransitionInfo info, SurfaceControl.Transaction t,
SurfaceControl.Transaction finishT, Transitions.TransitionFinishCallback finishCB) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.start", mInstanceId);
if (mListener == null || mTransition == null) {
cleanUp();
return false;
@@ -363,6 +402,8 @@
info.getChanges().size() - i, info, t, mLeashMap);
apps.add(target);
if (TransitionUtil.isClosingType(change.getMode())) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ " adding pausing taskId=%d", taskInfo.taskId);
// raise closing (pausing) task to "above" layer so it isn't covered
t.setLayer(target.leash, info.getChanges().size() * 3 - i);
mPausingTasks.add(new TaskState(change, target.leash));
@@ -377,19 +418,23 @@
} else if (taskInfo != null && taskInfo.topActivityType == ACTIVITY_TYPE_HOME) {
// do nothing
} else if (TransitionUtil.isOpeningType(change.getMode())) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ " adding opening taskId=%d", taskInfo.taskId);
mOpeningTasks.add(new TaskState(change, target.leash));
}
}
}
t.apply();
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.start: calling onAnimationStart", mInstanceId);
mListener.onAnimationStart(this,
apps.toArray(new RemoteAnimationTarget[apps.size()]),
wallpapers.toArray(new RemoteAnimationTarget[wallpapers.size()]),
new Rect(0, 0, 0, 0), new Rect());
} catch (RemoteException e) {
Slog.e(TAG, "Error starting recents animation", e);
- cancel();
+ cancel("onAnimationStart() failed");
}
return true;
}
@@ -398,14 +443,21 @@
void merge(TransitionInfo info, SurfaceControl.Transaction t,
Transitions.TransitionFinishCallback finishCallback) {
if (mFinishCB == null) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: skip, no finish callback",
+ mInstanceId);
// This was no-op'd (likely a repeated start) and we've already sent finish.
return;
}
if (info.getType() == TRANSIT_SLEEP) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: transit_sleep", mInstanceId);
// A sleep event means we need to stop animations immediately, so cancel here.
- cancel();
+ cancel("transit_sleep");
return;
}
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge", mInstanceId);
ArrayList<TransitionInfo.Change> openingTasks = null;
ArrayList<TransitionInfo.Change> closingTasks = null;
mOpeningSeparateHome = false;
@@ -422,7 +474,7 @@
&& taskInfo.configuration.windowConfiguration.isAlwaysOnTop()) {
// Tasks that are always on top (e.g. bubbles), will handle their own transition
// as they are on top of everything else. So cancel the merge here.
- cancel();
+ cancel("task #" + taskInfo.taskId + " is always_on_top");
return;
}
hasTaskChange = hasTaskChange || taskInfo != null;
@@ -453,7 +505,7 @@
// Finish recents animation if the display is changed, so the default
// transition handler can play the animation such as rotation effect.
if (change.hasFlags(TransitionInfo.FLAG_IS_DISPLAY)) {
- cancel(mWillFinishToHome);
+ cancel(mWillFinishToHome, "display change");
return;
}
// Don't consider order-only changes as changing apps.
@@ -497,7 +549,10 @@
+ " something unexpected: " + change.getTaskInfo().taskId);
continue;
}
- mPausingTasks.add(mOpeningTasks.remove(openingIdx));
+ final TaskState openingTask = mOpeningTasks.remove(openingIdx);
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ " pausing opening taskId=%d", openingTask.mTaskInfo.taskId);
+ mPausingTasks.add(openingTask);
didMergeThings = true;
}
}
@@ -514,7 +569,10 @@
// Something is showing/opening a previously-pausing app.
appearedTargets[i] = TransitionUtil.newTarget(
change, layer, mPausingTasks.get(pausingIdx).mLeash);
- mOpeningTasks.add(mPausingTasks.remove(pausingIdx));
+ final TaskState pausingTask = mPausingTasks.remove(pausingIdx);
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ " opening pausing taskId=%d", pausingTask.mTaskInfo.taskId);
+ mOpeningTasks.add(pausingTask);
// Setup hides opening tasks initially, so make it visible again (since we
// are already showing it).
t.show(change.getLeash());
@@ -527,6 +585,8 @@
final int rootIdx = TransitionUtil.rootIndexFor(change, mInfo);
t.reparent(appearedTargets[i].leash, mInfo.getRoot(rootIdx).getLeash());
t.setLayer(appearedTargets[i].leash, layer);
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ " opening new taskId=%d", appearedTargets[i].taskId);
mOpeningTasks.add(new TaskState(change, appearedTargets[i].leash));
}
}
@@ -540,20 +600,27 @@
mergeActivityOnly(info, t);
} else if (!didMergeThings) {
// Didn't recognize anything in incoming transition so don't merge it.
- Slog.w(TAG, "Don't know how to merge this transition.");
+ Slog.w(TAG, "Don't know how to merge this transition, foundRecentsClosing="
+ + foundRecentsClosing);
+ if (foundRecentsClosing) {
+ mWillFinishToHome = false;
+ cancel(false /* toHome */, "didn't merge");
+ }
return;
}
// At this point, we are accepting the merge.
t.apply();
// not using the incoming anim-only surfaces
info.releaseAnimSurfaces();
- finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
if (appearedTargets == null) return;
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: calling onTasksAppeared", mInstanceId);
mListener.onTasksAppeared(appearedTargets);
} catch (RemoteException e) {
Slog.e(TAG, "Error sending appeared tasks to recents animation", e);
}
+ finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
}
/** For now, just set-up a jump-cut to the new activity. */
@@ -572,6 +639,8 @@
@Override
public TaskSnapshot screenshotTask(int taskId) {
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.screenshotTask: taskId=%d", mInstanceId, taskId);
return ActivityTaskManager.getService().takeTaskSnapshot(taskId);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to screenshot task", e);
@@ -582,12 +651,20 @@
@Override
public void setInputConsumerEnabled(boolean enabled) {
mExecutor.execute(() -> {
- if (mFinishCB == null || !enabled) return;
+ if (mFinishCB == null || !enabled) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "RecentsController.setInputConsumerEnabled: skip, cb?=%b enabled?=%b",
+ mFinishCB != null, enabled);
+ return;
+ }
// transient launches don't receive focus automatically. Since we are taking over
// the gesture now, take focus explicitly.
// This also moves recents back to top if the user gestured before a switch
// animation finished.
try {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.setInputConsumerEnabled: set focus to recents",
+ mInstanceId);
ActivityTaskManager.getService().setFocusedTask(mRecentsTaskId);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to set focused task", e);
@@ -602,6 +679,9 @@
@Override
public void setFinishTaskTransaction(int taskId,
PictureInPictureSurfaceTransaction finishTransaction, SurfaceControl overlay) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.setFinishTaskTransaction: taskId=%d",
+ mInstanceId, taskId);
mExecutor.execute(() -> {
if (mFinishCB == null) return;
mPipTransaction = finishTransaction;
@@ -619,6 +699,9 @@
Slog.e(TAG, "Duplicate call to finish");
return;
}
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.finishInner: toHome=%b userLeave=%b willFinishToHome=%b",
+ mInstanceId, toHome, sendUserLeaveHint, mWillFinishToHome);
final Transitions.TransitionFinishCallback finishCB = mFinishCB;
mFinishCB = null;
@@ -630,6 +713,7 @@
else wct.restoreTransientOrder(mRecentsTask);
}
if (!toHome && !mWillFinishToHome && mPausingTasks != null && mState == STATE_NORMAL) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, " returning to app");
// The gesture is returning to the pausing-task(s) rather than continuing with
// recents, so end the transition by moving the app back to the top (and also
// re-showing it's task).
@@ -642,6 +726,7 @@
wct.restoreTransientOrder(mRecentsTask);
}
} else if (toHome && mOpeningSeparateHome && mPausingTasks != null) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, " 3p launching home");
// Special situation where 3p launcher was changed during recents (this happens
// during tapltests...). Here we get both "return to home" AND "home opening".
// This is basically going home, but we have to restore the recents and home order.
@@ -660,6 +745,7 @@
wct.restoreTransientOrder(mRecentsTask);
}
} else {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, " normal finish");
// The general case: committing to recents, going home, or switching tasks.
for (int i = 0; i < mOpeningTasks.size(); ++i) {
t.show(mOpeningTasks.get(i).mTaskSurface);
@@ -716,6 +802,8 @@
*/
@Override
public void detachNavigationBarFromApp(boolean moveHomeToTop) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.detachNavigationBarFromApp", mInstanceId);
mExecutor.execute(() -> {
if (mTransition == null) return;
try {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
index 36c9077..7991c52 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
@@ -388,11 +388,6 @@
}
// Sync Transactions can't operate simultaneously with shell transition collection.
if (isUsingShellTransitions()) {
- if (mTaskViewTransitions.hasPending()) {
- // There is already a transition in-flight. The window bounds will be synced
- // once it is complete.
- return;
- }
mTaskViewTransitions.setTaskBounds(this, boundsOnScreen);
return;
}
@@ -489,12 +484,14 @@
finishTransaction.reparent(mTaskLeash, mSurfaceControl)
.setPosition(mTaskLeash, 0, 0)
.apply();
-
+ mTaskViewTransitions.updateBoundsState(this, mTaskViewBase.getCurrentBoundsOnScreen());
+ mTaskViewTransitions.updateVisibilityState(this, true /* visible */);
wct.setBounds(mTaskToken, mTaskViewBase.getCurrentBoundsOnScreen());
} else {
// The surface has already been destroyed before the task has appeared,
// so go ahead and hide the task entirely
wct.setHidden(mTaskToken, true /* hidden */);
+ mTaskViewTransitions.updateVisibilityState(this, false /* visible */);
// listener callback is below
}
if (newTask) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
index 3b1ce49..81d69a4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
@@ -26,6 +26,7 @@
import android.app.ActivityManager;
import android.graphics.Rect;
import android.os.IBinder;
+import android.util.ArrayMap;
import android.util.Slog;
import android.view.SurfaceControl;
import android.view.WindowManager;
@@ -33,10 +34,13 @@
import android.window.TransitionRequestInfo;
import android.window.WindowContainerTransaction;
+import androidx.annotation.VisibleForTesting;
+
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.util.TransitionUtil;
import java.util.ArrayList;
+import java.util.Objects;
/**
* Handles Shell Transitions that involve TaskView tasks.
@@ -44,7 +48,8 @@
public class TaskViewTransitions implements Transitions.TransitionHandler {
static final String TAG = "TaskViewTransitions";
- private final ArrayList<TaskViewTaskController> mTaskViews = new ArrayList<>();
+ private final ArrayMap<TaskViewTaskController, TaskViewRequestedState> mTaskViews =
+ new ArrayMap<>();
private final ArrayList<PendingTransition> mPending = new ArrayList<>();
private final Transitions mTransitions;
private final boolean[] mRegistered = new boolean[]{ false };
@@ -54,7 +59,8 @@
* in-flight (collecting) at a time (because otherwise, the operations could get merged into
* a single transition). So, keep a queue here until we add a queue in server-side.
*/
- private static class PendingTransition {
+ @VisibleForTesting
+ static class PendingTransition {
final @WindowManager.TransitionType int mType;
final WindowContainerTransaction mWct;
final @NonNull TaskViewTaskController mTaskView;
@@ -78,6 +84,14 @@
}
}
+ /**
+ * Visibility and bounds state that has been requested for a {@link TaskViewTaskController}.
+ */
+ private static class TaskViewRequestedState {
+ boolean mVisible;
+ Rect mBounds = new Rect();
+ }
+
public TaskViewTransitions(Transitions transitions) {
mTransitions = transitions;
// Defer registration until the first TaskView because we want this to be the "first" in
@@ -92,7 +106,7 @@
mTransitions.addHandler(this);
}
}
- mTaskViews.add(tv);
+ mTaskViews.put(tv, new TaskViewRequestedState());
}
void removeTaskView(TaskViewTaskController tv) {
@@ -105,24 +119,30 @@
}
/**
- * Looks through the pending transitions for one matching `taskView`.
+ * Looks through the pending transitions for a closing transaction that matches the provided
+ * `taskView`.
* @param taskView the pending transition should be for this.
- * @param closing When true, this only returns a pending transition of the close/hide type.
- * Otherwise it selects open/show.
- * @param latest When true, this will only check the most-recent pending transition for the
- * specified taskView. If it doesn't match `closing`, this will return null even
- * if there is a match earlier. The idea behind this is to check the state of
- * the taskviews "as if all transitions already happened".
*/
- private PendingTransition findPending(TaskViewTaskController taskView, boolean closing,
- boolean latest) {
+ private PendingTransition findPendingCloseTransition(TaskViewTaskController taskView) {
for (int i = mPending.size() - 1; i >= 0; --i) {
if (mPending.get(i).mTaskView != taskView) continue;
- if (TransitionUtil.isClosingType(mPending.get(i).mType) == closing) {
+ if (TransitionUtil.isClosingType(mPending.get(i).mType)) {
return mPending.get(i);
}
- if (latest) {
- return null;
+ }
+ return null;
+ }
+
+ /**
+ * Looks through the pending transitions for one matching `taskView`.
+ * @param taskView the pending transition should be for this.
+ * @param type the type of transition it's looking for
+ */
+ PendingTransition findPending(TaskViewTaskController taskView, int type) {
+ for (int i = mPending.size() - 1; i >= 0; --i) {
+ if (mPending.get(i).mTaskView != taskView) continue;
+ if (mPending.get(i).mType == type) {
+ return mPending.get(i);
}
}
return null;
@@ -152,7 +172,7 @@
if (taskView == null) return null;
// Opening types should all be initiated by shell
if (!TransitionUtil.isClosingType(request.getType())) return null;
- PendingTransition pending = findPending(taskView, true /* closing */, false /* latest */);
+ PendingTransition pending = findPendingCloseTransition(taskView);
if (pending == null) {
pending = new PendingTransition(request.getType(), null, taskView, null /* cookie */);
}
@@ -166,9 +186,9 @@
private TaskViewTaskController findTaskView(ActivityManager.RunningTaskInfo taskInfo) {
for (int i = 0; i < mTaskViews.size(); ++i) {
- if (mTaskViews.get(i).getTaskInfo() == null) continue;
- if (taskInfo.token.equals(mTaskViews.get(i).getTaskInfo().token)) {
- return mTaskViews.get(i);
+ if (mTaskViews.keyAt(i).getTaskInfo() == null) continue;
+ if (taskInfo.token.equals(mTaskViews.keyAt(i).getTaskInfo().token)) {
+ return mTaskViews.keyAt(i);
}
}
return null;
@@ -176,30 +196,53 @@
void startTaskView(@NonNull WindowContainerTransaction wct,
@NonNull TaskViewTaskController taskView, @NonNull IBinder launchCookie) {
+ updateVisibilityState(taskView, true /* visible */);
mPending.add(new PendingTransition(TRANSIT_OPEN, wct, taskView, launchCookie));
startNextTransition();
}
void setTaskViewVisible(TaskViewTaskController taskView, boolean visible) {
- PendingTransition pending = findPending(taskView, !visible, true /* latest */);
- if (pending != null) {
- // Already opening or creating a task, so no need to do anything here.
- return;
- }
+ if (mTaskViews.get(taskView).mVisible == visible) return;
if (taskView.getTaskInfo() == null) {
// Nothing to update, task is not yet available
return;
}
+ mTaskViews.get(taskView).mVisible = visible;
final WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setHidden(taskView.getTaskInfo().token, !visible /* hidden */);
- pending = new PendingTransition(
+ wct.setBounds(taskView.getTaskInfo().token, mTaskViews.get(taskView).mBounds);
+ PendingTransition pending = new PendingTransition(
visible ? TRANSIT_TO_FRONT : TRANSIT_TO_BACK, wct, taskView, null /* cookie */);
mPending.add(pending);
startNextTransition();
// visibility is reported in transition.
}
+ void updateBoundsState(TaskViewTaskController taskView, Rect boundsOnScreen) {
+ TaskViewRequestedState state = mTaskViews.get(taskView);
+ state.mBounds.set(boundsOnScreen);
+ }
+
+ void updateVisibilityState(TaskViewTaskController taskView, boolean visible) {
+ TaskViewRequestedState state = mTaskViews.get(taskView);
+ state.mVisible = visible;
+ }
+
void setTaskBounds(TaskViewTaskController taskView, Rect boundsOnScreen) {
+ TaskViewRequestedState state = mTaskViews.get(taskView);
+ if (Objects.equals(boundsOnScreen, state.mBounds)) {
+ return;
+ }
+ state.mBounds.set(boundsOnScreen);
+ if (!state.mVisible) {
+ // Task view isn't visible, the bounds will next visibility update.
+ return;
+ }
+ if (hasPending()) {
+ // There is already a transition in-flight, the window bounds will be set in
+ // prepareOpenAnimation.
+ return;
+ }
WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setBounds(taskView.getTaskInfo().token, boundsOnScreen);
mPending.add(new PendingTransition(TRANSIT_CHANGE, wct, taskView, null /* cookie */));
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
index 5a92f78..7c729a4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
@@ -235,6 +235,7 @@
private TransitionInfo subCopy(@NonNull TransitionInfo info,
@WindowManager.TransitionType int newType, boolean withChanges) {
final TransitionInfo out = new TransitionInfo(newType, withChanges ? info.getFlags() : 0);
+ out.setTrack(info.getTrack());
out.setDebugId(info.getDebugId());
if (withChanges) {
for (int i = 0; i < info.getChanges().size(); ++i) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
index bdb7d44..5c8791e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
@@ -90,14 +90,21 @@
* Basically: --start--> PENDING --onTransitionReady--> READY --play--> ACTIVE --finish--> |
* --merge--> MERGED --^
*
- * At the moment, only one transition can be animating at a time. While a transition is animating,
- * transitions will be queued in the "ready" state for their turn. At the same time, whenever a
- * transition makes it to the head of the "ready" queue, it will attempt to merge to with the
- * "active" transition. If the merge succeeds, it will be moved to the "active" transition's
- * "merged" and then the next "ready" transition can attempt to merge.
+ * The READY and beyond lifecycle is managed per "track". Within a track, all the animations are
+ * serialized as described; however, multiple tracks can play simultaneously. This implies that,
+ * within a track, only one transition can be animating ("active") at a time.
*
- * Once the "active" transition animation is finished, it will be removed from the "active" list
- * and then the next "ready" transition can play.
+ * While a transition is animating in a track, transitions dispatched to the track will be queued
+ * in the "ready" state for their turn. At the same time, whenever a transition makes it to the
+ * head of the "ready" queue, it will attempt to merge to with the "active" transition. If the
+ * merge succeeds, it will be moved to the "active" transition's "merged" list and then the next
+ * "ready" transition can attempt to merge. Once the "active" transition animation is finished,
+ * the next "ready" transition can play.
+ *
+ * Track assignments are expected to be provided by WMCore and this generally tries to maintain
+ * the same assignments. If, however, WMCore decides that a transition conflicts with >1 active
+ * track, it will be marked as SYNC. This means that all currently active tracks must be flushed
+ * before the SYNC transition can play.
*/
public class Transitions implements RemoteCallable<Transitions> {
static final String TAG = "ShellTransitions";
@@ -172,12 +179,15 @@
private float mTransitionAnimationScaleSetting = 1.0f;
/**
- * How much time we allow for an animation to finish itself on sleep. If it takes longer, we
+ * How much time we allow for an animation to finish itself on sync. If it takes longer, we
* will force-finish it (on this end) which may leave it in a bad state but won't hang the
* device. This needs to be pretty small because it is an allowance for each queued animation,
* however it can't be too small since there is some potential IPC involved.
*/
- private static final int SLEEP_ALLOWANCE_MS = 120;
+ private static final int SYNC_ALLOWANCE_MS = 120;
+
+ /** For testing only. Disables the force-finish timeout on sync. */
+ private boolean mDisableForceSync = false;
private static final class ActiveTransition {
IBinder mToken;
@@ -190,23 +200,45 @@
/** Ordered list of transitions which have been merged into this one. */
private ArrayList<ActiveTransition> mMerged;
+ boolean isSync() {
+ return (mInfo.getFlags() & TransitionInfo.FLAG_SYNC) != 0;
+ }
+
+ int getTrack() {
+ return mInfo != null ? mInfo.getTrack() : -1;
+ }
+
@Override
public String toString() {
if (mInfo != null && mInfo.getDebugId() >= 0) {
- return "(#" + mInfo.getDebugId() + ")" + mToken;
+ return "(#" + mInfo.getDebugId() + ")" + mToken + "@" + getTrack();
}
- return mToken.toString();
+ return mToken.toString() + "@" + getTrack();
+ }
+ }
+
+ private static class Track {
+ /** Keeps track of transitions which are ready to play but still waiting for their turn. */
+ final ArrayList<ActiveTransition> mReadyTransitions = new ArrayList<>();
+
+ /** The currently playing transition in this track. */
+ ActiveTransition mActiveTransition = null;
+
+ boolean isIdle() {
+ return mActiveTransition == null && mReadyTransitions.isEmpty();
}
}
/** Keeps track of transitions which have been started, but aren't ready yet. */
private final ArrayList<ActiveTransition> mPendingTransitions = new ArrayList<>();
- /** Keeps track of transitions which are ready to play but still waiting for their turn. */
- private final ArrayList<ActiveTransition> mReadyTransitions = new ArrayList<>();
+ /**
+ * Transitions which are ready to play, but haven't been sent to a track yet because a sync
+ * is ongoing.
+ */
+ private final ArrayList<ActiveTransition> mReadyDuringSync = new ArrayList<>();
- /** Keeps track of currently playing transitions. For now, there can only be 1 max. */
- private final ArrayList<ActiveTransition> mActiveTransitions = new ArrayList<>();
+ private final ArrayList<Track> mTracks = new ArrayList<>();
public Transitions(@NonNull Context context,
@NonNull ShellInit shellInit,
@@ -374,14 +406,17 @@
* will be executed when the last active transition is finished.
*/
public void runOnIdle(Runnable runnable) {
- if (mActiveTransitions.isEmpty() && mPendingTransitions.isEmpty()
- && mReadyTransitions.isEmpty()) {
+ if (isIdle()) {
runnable.run();
} else {
mRunWhenIdleQueue.add(runnable);
}
}
+ void setDisableForceSyncForTest(boolean disable) {
+ mDisableForceSync = disable;
+ }
+
/**
* Sets up visibility/alpha/transforms to resemble the starting state of an animation.
*/
@@ -429,6 +464,7 @@
&& (change.getFlags() & FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT) == 0) {
t.setAlpha(leash, 0.f);
}
+ finishT.show(leash);
} else if (mode == TRANSIT_CLOSE || mode == TRANSIT_TO_BACK) {
finishT.hide(leash);
}
@@ -541,6 +577,13 @@
return true;
}
+ private Track getOrCreateTrack(int trackId) {
+ while (trackId >= mTracks.size()) {
+ mTracks.add(new Track());
+ }
+ return mTracks.get(trackId);
+ }
+
@VisibleForTesting
void onTransitionReady(@NonNull IBinder transitionToken, @NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction t, @NonNull SurfaceControl.Transaction finishT) {
@@ -553,29 +596,58 @@
+ Arrays.toString(mPendingTransitions.stream().map(
activeTransition -> activeTransition.mToken).toArray()));
}
- if (activeIdx > 0) {
- Log.e(TAG, "Transition became ready out-of-order " + mPendingTransitions.get(activeIdx)
- + ". Expected order: " + Arrays.toString(mPendingTransitions.stream().map(
- activeTransition -> activeTransition.mToken).toArray()));
- }
// Move from pending to ready
final ActiveTransition active = mPendingTransitions.remove(activeIdx);
- mReadyTransitions.add(active);
active.mInfo = info;
active.mStartT = t;
active.mFinishT = finishT;
+ if (activeIdx > 0) {
+ Log.i(TAG, "Transition might be ready out-of-order " + activeIdx + " for " + active
+ + ". This is ok if it's on a different track.");
+ }
+ if (!mReadyDuringSync.isEmpty()) {
+ mReadyDuringSync.add(active);
+ } else {
+ dispatchReady(active);
+ }
+ }
- for (int i = 0; i < mObservers.size(); ++i) {
- mObservers.get(i).onTransitionReady(transitionToken, info, t, finishT);
+ /**
+ * Returns true if dispatching succeeded, otherwise false. Dispatching can fail if it is
+ * blocked by a sync or sleep.
+ */
+ boolean dispatchReady(ActiveTransition active) {
+ final TransitionInfo info = active.mInfo;
+
+ if (info.getType() == TRANSIT_SLEEP || active.isSync()) {
+ // Adding to *front*! If we are here, it means that it was pulled off the front
+ // so we are just putting it back; or, it is the first one so it doesn't matter.
+ mReadyDuringSync.add(0, active);
+ boolean hadPreceding = false;
+ // Now flush all the tracks.
+ for (int i = 0; i < mTracks.size(); ++i) {
+ final Track tr = mTracks.get(i);
+ if (tr.isIdle()) continue;
+ hadPreceding = true;
+ // Sleep starts a process of forcing all prior transitions to finish immediately
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
+ "Start finish-for-sync track %d", i);
+ finishForSync(i, null /* forceFinish */);
+ }
+ if (hadPreceding) {
+ return false;
+ }
+ // Actually able to process the sleep now, so re-remove it from the queue and continue
+ // the normal flow.
+ mReadyDuringSync.remove(active);
}
- if (info.getType() == TRANSIT_SLEEP) {
- if (activeIdx > 0 || !mActiveTransitions.isEmpty() || mReadyTransitions.size() > 1) {
- // Sleep starts a process of forcing all prior transitions to finish immediately
- ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Start finish-for-sleep");
- finishForSleep(null /* forceFinish */);
- return;
- }
+ final Track track = getOrCreateTrack(info.getTrack());
+ track.mReadyTransitions.add(active);
+
+ for (int i = 0; i < mObservers.size(); ++i) {
+ mObservers.get(i).onTransitionReady(
+ active.mToken, info, active.mStartT, active.mFinishT);
}
if (info.getRootCount() == 0 && !alwaysReportToKeyguard(info)) {
@@ -584,7 +656,7 @@
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "No transition roots in %s so"
+ " abort", active);
onAbort(active);
- return;
+ return true;
}
final int changeSize = info.getChanges().size();
@@ -614,16 +686,17 @@
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
"Non-visible anim so abort: %s", active);
onAbort(active);
- return;
+ return true;
}
setupStartState(active.mInfo, active.mStartT, active.mFinishT);
- if (mReadyTransitions.size() > 1) {
+ if (track.mReadyTransitions.size() > 1) {
// There are already transitions waiting in the queue, so just return.
- return;
+ return true;
}
- processReadyQueue();
+ processReadyQueue(track);
+ return true;
}
/**
@@ -643,25 +716,53 @@
return false;
}
- void processReadyQueue() {
- if (mReadyTransitions.isEmpty()) {
- // Check if idle.
- if (mActiveTransitions.isEmpty() && mPendingTransitions.isEmpty()) {
- ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "All active transition "
- + "animations finished");
- // Run all runnables from the run-when-idle queue.
- for (int i = 0; i < mRunWhenIdleQueue.size(); i++) {
- mRunWhenIdleQueue.get(i).run();
+ private boolean areTracksIdle() {
+ for (int i = 0; i < mTracks.size(); ++i) {
+ if (!mTracks.get(i).isIdle()) return false;
+ }
+ return true;
+ }
+
+ private boolean isAnimating() {
+ return !mReadyDuringSync.isEmpty() || !areTracksIdle();
+ }
+
+ private boolean isIdle() {
+ return mPendingTransitions.isEmpty() && !isAnimating();
+ }
+
+ void processReadyQueue(Track track) {
+ if (track.mReadyTransitions.isEmpty()) {
+ if (track.mActiveTransition == null) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Track %d became idle",
+ mTracks.indexOf(track));
+ if (areTracksIdle()) {
+ if (!mReadyDuringSync.isEmpty()) {
+ // Dispatch everything unless we hit another sync
+ while (!mReadyDuringSync.isEmpty()) {
+ ActiveTransition next = mReadyDuringSync.remove(0);
+ boolean success = dispatchReady(next);
+ // Hit a sync or sleep, so stop dispatching.
+ if (!success) break;
+ }
+ } else if (mPendingTransitions.isEmpty()) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "All active transition "
+ + "animations finished");
+ // Run all runnables from the run-when-idle queue.
+ for (int i = 0; i < mRunWhenIdleQueue.size(); i++) {
+ mRunWhenIdleQueue.get(i).run();
+ }
+ mRunWhenIdleQueue.clear();
+ }
}
- mRunWhenIdleQueue.clear();
}
return;
}
- final ActiveTransition ready = mReadyTransitions.get(0);
- if (mActiveTransitions.isEmpty()) {
- // The normal case, just play it (currently we only support 1 active transition).
- mReadyTransitions.remove(0);
- mActiveTransitions.add(ready);
+ final ActiveTransition ready = track.mReadyTransitions.get(0);
+ if (track.mActiveTransition == null) {
+ // The normal case, just play it.
+ track.mReadyTransitions.remove(0);
+ track.mActiveTransition = ready;
if (ready.mAborted) {
// finish now since there's nothing to animate. Calls back into processReadyQueue
onFinish(ready, null, null);
@@ -669,11 +770,11 @@
}
playTransition(ready);
// Attempt to merge any more queued-up transitions.
- processReadyQueue();
+ processReadyQueue(track);
return;
}
// An existing animation is playing, so see if we can merge.
- final ActiveTransition playing = mActiveTransitions.get(0);
+ final ActiveTransition playing = track.mActiveTransition;
if (ready.mAborted) {
// record as merged since it is no-op. Calls back into processReadyQueue
onMerged(playing, ready);
@@ -687,18 +788,23 @@
}
private void onMerged(@NonNull ActiveTransition playing, @NonNull ActiveTransition merged) {
+ if (playing.getTrack() != merged.getTrack()) {
+ throw new IllegalStateException("Can't merge across tracks: " + merged + " into "
+ + playing);
+ }
+ final Track track = mTracks.get(playing.getTrack());
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Transition was merged: %s into %s",
merged, playing);
int readyIdx = 0;
- if (mReadyTransitions.isEmpty() || mReadyTransitions.get(0) != merged) {
+ if (track.mReadyTransitions.isEmpty() || track.mReadyTransitions.get(0) != merged) {
Log.e(TAG, "Merged transition out-of-order? " + merged);
- readyIdx = mReadyTransitions.indexOf(merged);
+ readyIdx = track.mReadyTransitions.indexOf(merged);
if (readyIdx < 0) {
Log.e(TAG, "Merged a transition that is no-longer queued? " + merged);
return;
}
}
- mReadyTransitions.remove(readyIdx);
+ track.mReadyTransitions.remove(readyIdx);
if (playing.mMerged == null) {
playing.mMerged = new ArrayList<>();
}
@@ -711,7 +817,7 @@
mObservers.get(i).onTransitionMerged(merged.mToken, playing.mToken);
}
// See if we should merge another transition.
- processReadyQueue();
+ processReadyQueue(track);
}
private void playTransition(@NonNull ActiveTransition active) {
@@ -780,6 +886,7 @@
/** Aborts a transition. This will still queue it up to maintain order. */
private void onAbort(ActiveTransition transition) {
+ final Track track = mTracks.get(transition.getTrack());
// apply immediately since they may be "parallel" operations: We currently we use abort for
// thing which are independent to other transitions (like starting-window transfer).
transition.mStartT.apply();
@@ -795,11 +902,11 @@
releaseSurfaces(transition.mInfo);
// This still went into the queue (to maintain the correct finish ordering).
- if (mReadyTransitions.size() > 1) {
+ if (track.mReadyTransitions.size() > 1) {
// There are already transitions waiting in the queue, so just return.
return;
}
- processReadyQueue();
+ processReadyQueue(track);
}
/**
@@ -814,17 +921,14 @@
private void onFinish(ActiveTransition active,
@Nullable WindowContainerTransaction wct,
@Nullable WindowContainerTransactionCallback wctCB) {
- int activeIdx = mActiveTransitions.indexOf(active);
- if (activeIdx < 0) {
+ final Track track = mTracks.get(active.getTrack());
+ if (track.mActiveTransition != active) {
Log.e(TAG, "Trying to finish a non-running transition. Either remote crashed or "
+ " a handler didn't properly deal with a merge. " + active,
new RuntimeException());
return;
- } else if (activeIdx != 0) {
- // Relevant right now since we only allow 1 active transition at a time.
- Log.e(TAG, "Finishing a transition out of order. " + active);
}
- mActiveTransitions.remove(activeIdx);
+ track.mActiveTransition = null;
for (int i = 0; i < mObservers.size(); ++i) {
mObservers.get(i).onTransitionFinished(active.mToken, active.mAborted);
@@ -876,18 +980,20 @@
}
// Now that this is done, check the ready queue for more work.
- processReadyQueue();
+ processReadyQueue(track);
}
private boolean isTransitionKnown(IBinder token) {
for (int i = 0; i < mPendingTransitions.size(); ++i) {
if (mPendingTransitions.get(i).mToken == token) return true;
}
- for (int i = 0; i < mReadyTransitions.size(); ++i) {
- if (mReadyTransitions.get(i).mToken == token) return true;
- }
- for (int i = 0; i < mActiveTransitions.size(); ++i) {
- final ActiveTransition active = mActiveTransitions.get(i);
+ for (int t = 0; t < mTracks.size(); ++t) {
+ final Track tr = mTracks.get(t);
+ for (int i = 0; i < tr.mReadyTransitions.size(); ++i) {
+ if (tr.mReadyTransitions.get(i).mToken == token) return true;
+ }
+ final ActiveTransition active = tr.mActiveTransition;
+ if (active == null) continue;
if (active.mToken == token) return true;
if (active.mMerged == null) continue;
for (int m = 0; m < active.mMerged.size(); ++m) {
@@ -962,7 +1068,7 @@
*
* This works by "merging" the sleep transition into the currently-playing transition (even if
* its out-of-order) -- turning SLEEP into a signal. If the playing transition doesn't finish
- * within `SLEEP_ALLOWANCE_MS` from this merge attempt, this will then finish it directly (and
+ * within `SYNC_ALLOWANCE_MS` from this merge attempt, this will then finish it directly (and
* send an abort/consumed message).
*
* This is then repeated until there are no more pending sleep transitions.
@@ -970,48 +1076,53 @@
* @param forceFinish When non-null, this is the transition that we last sent the SLEEP merge
* signal to -- so it will be force-finished if it's still running.
*/
- private void finishForSleep(@Nullable ActiveTransition forceFinish) {
- if ((mActiveTransitions.isEmpty() && mReadyTransitions.isEmpty())
- || mSleepHandler.mSleepTransitions.isEmpty()) {
- // Done finishing things.
- // Prevent any weird leaks... shouldn't happen though.
- mSleepHandler.mSleepTransitions.clear();
- return;
- }
- if (forceFinish != null && mActiveTransitions.contains(forceFinish)) {
- Log.e(TAG, "Forcing transition to finish due to sleep timeout: " + forceFinish);
- forceFinish.mAborted = true;
- // Last notify of it being consumed. Note: mHandler should never be null,
- // but check just to be safe.
- if (forceFinish.mHandler != null) {
- forceFinish.mHandler.onTransitionConsumed(
- forceFinish.mToken, true /* aborted */, null /* finishTransaction */);
+ private void finishForSync(int trackIdx, @Nullable ActiveTransition forceFinish) {
+ final Track track = mTracks.get(trackIdx);
+ if (forceFinish != null) {
+ final Track trk = mTracks.get(forceFinish.getTrack());
+ if (trk != track) {
+ Log.e(TAG, "finishForSleep: mismatched Tracks between forceFinish and logic "
+ + forceFinish.getTrack() + " vs " + trackIdx);
}
- onFinish(forceFinish, null, null);
+ if (trk.mActiveTransition == forceFinish) {
+ Log.e(TAG, "Forcing transition to finish due to sync timeout: " + forceFinish);
+ forceFinish.mAborted = true;
+ // Last notify of it being consumed. Note: mHandler should never be null,
+ // but check just to be safe.
+ if (forceFinish.mHandler != null) {
+ forceFinish.mHandler.onTransitionConsumed(
+ forceFinish.mToken, true /* aborted */, null /* finishTransaction */);
+ }
+ onFinish(forceFinish, null, null);
+ }
+ }
+ if (track.isIdle() || mReadyDuringSync.isEmpty()) {
+ // Done finishing things.
+ return;
}
final SurfaceControl.Transaction dummyT = new SurfaceControl.Transaction();
final TransitionInfo dummyInfo = new TransitionInfo(TRANSIT_SLEEP, 0 /* flags */);
- while (!mActiveTransitions.isEmpty() && !mSleepHandler.mSleepTransitions.isEmpty()) {
- final ActiveTransition playing = mActiveTransitions.get(0);
- int sleepIdx = findByToken(mReadyTransitions, mSleepHandler.mSleepTransitions.get(0));
- if (sleepIdx >= 0) {
- // Try to signal that we are sleeping by attempting to merge the sleep transition
- // into the playing one.
- final ActiveTransition nextSleep = mReadyTransitions.get(sleepIdx);
- ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Attempt to merge SLEEP %s"
- + " into %s", nextSleep, playing);
- playing.mHandler.mergeAnimation(nextSleep.mToken, dummyInfo, dummyT,
- playing.mToken, (wct, cb) -> {});
- } else {
- Log.e(TAG, "Couldn't find sleep transition in ready list: "
- + mSleepHandler.mSleepTransitions.get(0));
+ while (track.mActiveTransition != null && !mReadyDuringSync.isEmpty()) {
+ final ActiveTransition playing = track.mActiveTransition;
+ final ActiveTransition nextSync = mReadyDuringSync.get(0);
+ if (!nextSync.isSync()) {
+ Log.e(TAG, "Somehow blocked on a non-sync transition? " + nextSync);
}
+ // Attempt to merge a SLEEP info to signal that the playing transition needs to
+ // fast-forward.
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Attempt to merge sync %s"
+ + " into %s via a SLEEP proxy", nextSync, playing);
+ playing.mHandler.mergeAnimation(nextSync.mToken, dummyInfo, dummyT,
+ playing.mToken, (wct, cb) -> {});
// it's possible to complete immediately. If that happens, just repeat the signal
// loop until we either finish everything or start playing an animation that isn't
// finishing immediately.
- if (!mActiveTransitions.isEmpty() && mActiveTransitions.get(0) == playing) {
- // Give it a (very) short amount of time to process it before forcing.
- mMainExecutor.executeDelayed(() -> finishForSleep(playing), SLEEP_ALLOWANCE_MS);
+ if (track.mActiveTransition == playing) {
+ if (!mDisableForceSync) {
+ // Give it a short amount of time to process it before forcing.
+ mMainExecutor.executeDelayed(() -> finishForSync(trackIdx, playing),
+ SYNC_ALLOWANCE_MS);
+ }
break;
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
index 8e8faca..e8a6a15 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
@@ -127,7 +127,7 @@
if (decoration == null) {
createWindowDecoration(taskInfo, taskSurface, startT, finishT);
} else {
- decoration.relayout(taskInfo, startT, finishT);
+ decoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */);
}
}
@@ -139,7 +139,7 @@
final CaptionWindowDecoration decoration = mWindowDecorByTaskId.get(taskInfo.taskId);
if (decoration == null) return;
- decoration.relayout(taskInfo, startT, finishT);
+ decoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */);
}
@Override
@@ -192,7 +192,8 @@
windowDecoration.setCaptionListeners(touchEventListener, touchEventListener);
windowDecoration.setDragPositioningCallback(taskPositioner);
windowDecoration.setDragDetector(touchEventListener.mDragDetector);
- windowDecoration.relayout(taskInfo, startT, finishT);
+ windowDecoration.relayout(taskInfo, startT, finishT,
+ false /* applyStartTransactionOnDraw */);
setupCaptionColor(taskInfo, windowDecoration);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
index dfde7e6..116af70 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
@@ -90,15 +90,15 @@
@Override
void relayout(RunningTaskInfo taskInfo) {
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
- relayout(taskInfo, t, t);
- mSyncQueue.runInSync(transaction -> {
- transaction.merge(t);
- t.close();
- });
+ // Use |applyStartTransactionOnDraw| so that the transaction (that applies task crop) is
+ // synced with the buffer transaction (that draws the View). Both will be shown on screen
+ // at the same, whereas applying them independently causes flickering. See b/270202228.
+ relayout(taskInfo, t, t, true /* applyStartTransactionOnDraw */);
}
void relayout(RunningTaskInfo taskInfo,
- SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
+ SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT,
+ boolean applyStartTransactionOnDraw) {
final int shadowRadiusID = taskInfo.isFocused
? R.dimen.freeform_decor_shadow_focused_thickness
: R.dimen.freeform_decor_shadow_unfocused_thickness;
@@ -115,6 +115,7 @@
mRelayoutParams.mLayoutResId = R.layout.caption_window_decor;
mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height;
mRelayoutParams.mShadowRadiusId = shadowRadiusID;
+ mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult);
// After this line, mTaskInfo is up-to-date and should be used instead of taskInfo
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
index 5226eee..49a5eac 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java
@@ -247,7 +247,7 @@
if (decoration == null) {
createWindowDecoration(taskInfo, taskSurface, startT, finishT);
} else {
- decoration.relayout(taskInfo, startT, finishT);
+ decoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */);
}
}
@@ -259,7 +259,7 @@
final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskInfo.taskId);
if (decoration == null) return;
- decoration.relayout(taskInfo, startT, finishT);
+ decoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */);
}
@Override
@@ -335,7 +335,8 @@
@Override
public boolean onTouch(View v, MotionEvent e) {
final int id = v.getId();
- if (id != R.id.caption_handle && id != R.id.desktop_mode_caption) {
+ if (id != R.id.caption_handle && id != R.id.desktop_mode_caption
+ && id != R.id.open_menu_button && id != R.id.close_window) {
return false;
}
moveTaskToFront(mTaskOrganizer.getRunningTaskInfo(mTaskId));
@@ -780,7 +781,8 @@
windowDecoration.setCaptionListeners(touchEventListener, touchEventListener);
windowDecoration.setDragPositioningCallback(taskPositioner);
windowDecoration.setDragDetector(touchEventListener.mDragDetector);
- windowDecoration.relayout(taskInfo, startT, finishT);
+ windowDecoration.relayout(taskInfo, startT, finishT,
+ false /* applyStartTransactionOnDraw */);
incrementEventReceiverTasks(taskInfo.displayId);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
index 67e99d7..af3fb0e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java
@@ -173,15 +173,15 @@
@Override
void relayout(ActivityManager.RunningTaskInfo taskInfo) {
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
- relayout(taskInfo, t, t);
- mSyncQueue.runInSync(transaction -> {
- transaction.merge(t);
- t.close();
- });
+ // Use |applyStartTransactionOnDraw| so that the transaction (that applies task crop) is
+ // synced with the buffer transaction (that draws the View). Both will be shown on screen
+ // at the same, whereas applying them independently causes flickering. See b/270202228.
+ relayout(taskInfo, t, t, true /* applyStartTransactionOnDraw */);
}
void relayout(ActivityManager.RunningTaskInfo taskInfo,
- SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
+ SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT,
+ boolean applyStartTransactionOnDraw) {
final int shadowRadiusID = taskInfo.isFocused
? R.dimen.freeform_decor_shadow_focused_thickness
: R.dimen.freeform_decor_shadow_unfocused_thickness;
@@ -216,6 +216,7 @@
mRelayoutParams.mLayoutResId = windowDecorLayoutId;
mRelayoutParams.mCaptionHeightId = R.dimen.freeform_decor_caption_height;
mRelayoutParams.mShadowRadiusId = shadowRadiusID;
+ mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
relayout(mRelayoutParams, startT, finishT, wct, oldRootView, mResult);
// After this line, mTaskInfo is up-to-date and should be used instead of taskInfo
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
index 19a3182..9a1b4ff 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -91,7 +91,6 @@
Display mDisplay;
Context mDecorWindowContext;
SurfaceControl mDecorationContainerSurface;
- SurfaceControl mTaskBackgroundSurface;
SurfaceControl mCaptionContainerSurface;
private WindowlessWindowManager mCaptionWindowManager;
@@ -202,6 +201,11 @@
.inflate(params.mLayoutResId, null);
}
+ final Resources resources = mDecorWindowContext.getResources();
+ final Rect taskBounds = taskConfig.windowConfiguration.getBounds();
+ outResult.mWidth = taskBounds.width();
+ outResult.mHeight = taskBounds.height();
+
// DecorationContainerSurface
if (mDecorationContainerSurface == null) {
final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
@@ -216,38 +220,9 @@
TaskConstants.TASK_CHILD_LAYER_WINDOW_DECORATIONS);
}
- final Rect taskBounds = taskConfig.windowConfiguration.getBounds();
- final Resources resources = mDecorWindowContext.getResources();
- outResult.mWidth = taskBounds.width();
- outResult.mHeight = taskBounds.height();
startT.setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
.show(mDecorationContainerSurface);
- // TODO(b/270202228): This surface can be removed. Instead, use
- // |mDecorationContainerSurface| to set the background now that it no longer has outsets
- // and its crop is set to the task bounds.
- // TaskBackgroundSurface
- if (mTaskBackgroundSurface == null) {
- final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
- mTaskBackgroundSurface = builder
- .setName("Background of Task=" + mTaskInfo.taskId)
- .setEffectLayer()
- .setParent(mTaskSurface)
- .build();
-
- startT.setLayer(mTaskBackgroundSurface, TaskConstants.TASK_CHILD_LAYER_TASK_BACKGROUND);
- }
-
- float shadowRadius = loadDimension(resources, params.mShadowRadiusId);
- int backgroundColorInt = mTaskInfo.taskDescription.getBackgroundColor();
- mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
- mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
- mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
- startT.setWindowCrop(mTaskBackgroundSurface, taskBounds.width(), taskBounds.height())
- .setShadowRadius(mTaskBackgroundSurface, shadowRadius)
- .setColor(mTaskBackgroundSurface, mTmpColor)
- .show(mTaskBackgroundSurface);
-
// CaptionContainerSurface, CaptionWindowManager
if (mCaptionContainerSurface == null) {
final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
@@ -260,10 +235,35 @@
final int captionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId);
final int captionWidth = taskBounds.width();
-
startT.setWindowCrop(mCaptionContainerSurface, captionWidth, captionHeight)
.show(mCaptionContainerSurface);
+ if (ViewRootImpl.CAPTION_ON_SHELL) {
+ outResult.mRootView.setTaskFocusState(mTaskInfo.isFocused);
+
+ // Caption insets
+ mCaptionInsetsRect.set(taskBounds);
+ mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight + params.mCaptionY;
+ wct.addInsetsSource(mTaskInfo.token,
+ mOwner, 0 /* index */, WindowInsets.Type.captionBar(), mCaptionInsetsRect);
+ } else {
+ startT.hide(mCaptionContainerSurface);
+ }
+
+ // Task surface itself
+ float shadowRadius = loadDimension(resources, params.mShadowRadiusId);
+ int backgroundColorInt = mTaskInfo.taskDescription.getBackgroundColor();
+ mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
+ mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
+ mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
+ Point taskPosition = mTaskInfo.positionInParent;
+ startT.setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight)
+ .setShadowRadius(mTaskSurface, shadowRadius)
+ .setColor(mTaskSurface, mTmpColor)
+ .show(mTaskSurface);
+ finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
+ .setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight);
+
if (mCaptionWindowManager == null) {
// Put caption under a container surface because ViewRootImpl sets the destination frame
// of windowless window layers and BLASTBufferQueue#update() doesn't support offset.
@@ -283,28 +283,16 @@
if (mViewHost == null) {
mViewHost = mSurfaceControlViewHostFactory.create(mDecorWindowContext, mDisplay,
mCaptionWindowManager);
+ if (params.mApplyStartTransactionOnDraw) {
+ mViewHost.getRootSurfaceControl().applyTransactionOnDraw(startT);
+ }
mViewHost.setView(outResult.mRootView, lp);
} else {
+ if (params.mApplyStartTransactionOnDraw) {
+ mViewHost.getRootSurfaceControl().applyTransactionOnDraw(startT);
+ }
mViewHost.relayout(lp);
}
-
- if (ViewRootImpl.CAPTION_ON_SHELL) {
- outResult.mRootView.setTaskFocusState(mTaskInfo.isFocused);
-
- // Caption insets
- mCaptionInsetsRect.set(taskBounds);
- mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight + params.mCaptionY;
- wct.addInsetsSource(mTaskInfo.token,
- mOwner, 0 /* index */, WindowInsets.Type.captionBar(), mCaptionInsetsRect);
- } else {
- startT.hide(mCaptionContainerSurface);
- }
-
- // Task surface itself
- Point taskPosition = mTaskInfo.positionInParent;
- startT.show(mTaskSurface);
- finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
- .setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight);
}
/**
@@ -344,12 +332,6 @@
released = true;
}
- if (mTaskBackgroundSurface != null) {
- t.remove(mTaskBackgroundSurface);
- mTaskBackgroundSurface = null;
- released = true;
- }
-
if (released) {
t.apply();
}
@@ -435,6 +417,8 @@
int mCaptionX;
int mCaptionY;
+ boolean mApplyStartTransactionOnDraw;
+
void reset() {
mLayoutResId = Resources.ID_NULL;
mCaptionHeightId = Resources.ID_NULL;
@@ -443,6 +427,8 @@
mCaptionX = 0;
mCaptionY = 0;
+
+ mApplyStartTransactionOnDraw = false;
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/DesktopModeAppControlsWindowDecorationViewHolder.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/DesktopModeAppControlsWindowDecorationViewHolder.kt
index 78cfcbd..b67acd5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/DesktopModeAppControlsWindowDecorationViewHolder.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/DesktopModeAppControlsWindowDecorationViewHolder.kt
@@ -35,7 +35,9 @@
captionView.setOnTouchListener(onCaptionTouchListener)
captionHandle.setOnTouchListener(onCaptionTouchListener)
openMenuButton.setOnClickListener(onCaptionButtonClickListener)
+ openMenuButton.setOnTouchListener(onCaptionTouchListener)
closeWindowButton.setOnClickListener(onCaptionButtonClickListener)
+ closeWindowButton.setOnTouchListener(onCaptionTouchListener)
appNameTextView.text = appName
appIconImageView.setImageDrawable(appIcon)
}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
index c416ad0..45024f3 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonAssertions.kt
@@ -223,15 +223,6 @@
portraitPosTop,
scenario.endRotation
)
- .then()
- .isInvisible(component)
- .then()
- .splitAppLayerBoundsSnapToDivider(
- component,
- landscapePosLeft,
- portraitPosTop,
- scenario.endRotation
- )
} else {
splitAppLayerBoundsSnapToDivider(
component,
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt
index 62936e0..625987a 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenUtils.kt
@@ -293,7 +293,7 @@
wmHelper.currentState.layerState.displays.firstOrNull { !it.isVirtual }?.layerStackSpace
?: error("Display not found")
val dividerBar = device.wait(Until.findObject(dividerBarSelector), TIMEOUT_MS)
- dividerBar.drag(Point(displayBounds.width * 1 / 3, displayBounds.height * 2 / 3), 2000)
+ dividerBar.drag(Point(displayBounds.width * 1 / 3, displayBounds.height * 2 / 3), 200)
wmHelper
.StateSyncBuilder()
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestShellExecutor.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestShellExecutor.java
index da95c77..4998702 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestShellExecutor.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestShellExecutor.java
@@ -48,9 +48,8 @@
}
public void flushAll() {
- for (Runnable r : mRunnables) {
- r.run();
+ while (!mRunnables.isEmpty()) {
+ mRunnables.remove(0).run();
}
- mRunnables.clear();
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
index d95c7a4..3d8bd38 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java
@@ -135,12 +135,15 @@
mShellExecutor.flushAll();
}
- private void createNavigationInfo(int backType, boolean enableAnimation) {
+ private void createNavigationInfo(int backType,
+ boolean enableAnimation,
+ boolean isAnimationCallback) {
BackNavigationInfo.Builder builder = new BackNavigationInfo.Builder()
.setType(backType)
.setOnBackNavigationDone(new RemoteCallback((bundle) -> {}))
.setOnBackInvokedCallback(mAppCallback)
- .setPrepareRemoteAnimation(enableAnimation);
+ .setPrepareRemoteAnimation(enableAnimation)
+ .setAnimationCallback(isAnimationCallback);
createNavigationInfo(builder);
}
@@ -218,7 +221,9 @@
@Test
public void backToHome_dispatchesEvents() throws RemoteException {
registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
- createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME, true);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ false);
doMotionEvent(MotionEvent.ACTION_DOWN, 0);
@@ -240,6 +245,32 @@
}
@Test
+ public void backToHomeWithAnimationCallback_dispatchesEvents() throws RemoteException {
+ registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ true);
+
+ doMotionEvent(MotionEvent.ACTION_DOWN, 0);
+
+ // Check that back start and progress is dispatched when first move.
+ doMotionEvent(MotionEvent.ACTION_MOVE, 100, 3000);
+
+ simulateRemoteAnimationStart(BackNavigationInfo.TYPE_RETURN_TO_HOME);
+
+ verify(mAnimatorCallback).onBackStarted(any(BackMotionEvent.class));
+ verify(mBackAnimationRunner).onAnimationStart(anyInt(), any(), any(), any(), any());
+ ArgumentCaptor<BackMotionEvent> backEventCaptor =
+ ArgumentCaptor.forClass(BackMotionEvent.class);
+ verify(mAnimatorCallback, atLeastOnce()).onBackProgressed(backEventCaptor.capture());
+
+ // Check that back invocation is dispatched.
+ mController.setTriggerBack(true); // Fake trigger back
+ doMotionEvent(MotionEvent.ACTION_UP, 0);
+ verify(mAnimatorCallback).onBackInvoked();
+ }
+
+ @Test
public void animationDisabledFromSettings() throws RemoteException {
// Toggle the setting off
Settings.Global.putString(mContentResolver, Settings.Global.ENABLE_BACK_ANIMATION, "0");
@@ -254,7 +285,9 @@
ArgumentCaptor<BackMotionEvent> backEventCaptor =
ArgumentCaptor.forClass(BackMotionEvent.class);
- createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME, false);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ false,
+ /* isAnimationCallback = */ false);
triggerBackGesture();
releaseBackGesture();
@@ -271,7 +304,9 @@
@Test
public void ignoresGesture_transitionInProgress() throws RemoteException {
registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
- createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME, true);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ false);
triggerBackGesture();
simulateRemoteAnimationStart(BackNavigationInfo.TYPE_RETURN_TO_HOME);
@@ -309,7 +344,9 @@
@Test
public void acceptsGesture_transitionTimeout() throws RemoteException {
registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
- createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME, true);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ false);
// In case it is still running in animation.
doNothing().when(mAnimatorCallback).onBackInvoked();
@@ -334,7 +371,9 @@
public void cancelBackInvokeWhenLostFocus() throws RemoteException {
registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
- createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME, true);
+ createNavigationInfo(BackNavigationInfo.TYPE_RETURN_TO_HOME,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ false);
doMotionEvent(MotionEvent.ACTION_DOWN, 0);
// Check that back start and progress is dispatched when first move.
@@ -454,7 +493,9 @@
mController.registerAnimation(type, animationRunner);
- createNavigationInfo(type, true);
+ createNavigationInfo(type,
+ /* enableAnimation = */ true,
+ /* isAnimationCallback = */ false);
doMotionEvent(MotionEvent.ACTION_DOWN, 0);
@@ -473,11 +514,15 @@
}
private void doMotionEvent(int actionDown, int coordinate) {
+ doMotionEvent(actionDown, coordinate, 0);
+ }
+
+ private void doMotionEvent(int actionDown, int coordinate, float velocity) {
mController.onMotionEvent(
/* touchX */ coordinate,
/* touchY */ coordinate,
- /* velocityX = */ 0,
- /* velocityY = */ 0,
+ /* velocityX = */ velocity,
+ /* velocityY = */ velocity,
/* keyAction */ actionDown,
/* swipeEdge */ BackEvent.EDGE_LEFT);
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java
index 919bf06..4a55429 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleDataTest.java
@@ -16,8 +16,6 @@
package com.android.wm.shell.bubbles;
-import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE;
-
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -185,7 +183,10 @@
Intent appBubbleIntent = new Intent(mContext, BubblesTestActivity.class);
appBubbleIntent.setPackage(mContext.getPackageName());
- mAppBubble = new Bubble(appBubbleIntent, new UserHandle(1), mock(Icon.class),
+ mAppBubble = Bubble.createAppBubble(
+ appBubbleIntent,
+ new UserHandle(1),
+ mock(Icon.class),
mMainExecutor);
mPositioner = new TestableBubblePositioner(mContext,
@@ -1101,14 +1102,15 @@
@Test
public void test_removeAppBubble_skipsOverflow() {
+ String appBubbleKey = mAppBubble.getKey();
mBubbleData.notificationEntryUpdated(mAppBubble, true /* suppressFlyout*/,
false /* showInShade */);
- assertThat(mBubbleData.getBubbleInStackWithKey(KEY_APP_BUBBLE)).isEqualTo(mAppBubble);
+ assertThat(mBubbleData.getBubbleInStackWithKey(appBubbleKey)).isEqualTo(mAppBubble);
- mBubbleData.dismissBubbleWithKey(KEY_APP_BUBBLE, Bubbles.DISMISS_USER_GESTURE);
+ mBubbleData.dismissBubbleWithKey(appBubbleKey, Bubbles.DISMISS_USER_GESTURE);
- assertThat(mBubbleData.getOverflowBubbleWithKey(KEY_APP_BUBBLE)).isNull();
- assertThat(mBubbleData.getBubbleInStackWithKey(KEY_APP_BUBBLE)).isNull();
+ assertThat(mBubbleData.getOverflowBubbleWithKey(appBubbleKey)).isNull();
+ assertThat(mBubbleData.getBubbleInStackWithKey(appBubbleKey)).isNull();
}
private void verifyUpdateReceived() {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
index b6d7ff3..0a515cd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
@@ -471,4 +471,53 @@
assertThat(insetsInfo.touchableRegion.contains(20, 20)).isFalse();
assertThat(insetsInfo.touchableRegion.contains(30, 30)).isFalse();
}
+
+ @Test
+ public void testTaskViewPrepareOpenAnimationSetsBoundsAndVisibility() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ TaskViewBase taskViewBase = mock(TaskViewBase.class);
+ Rect bounds = new Rect(0, 0, 100, 100);
+ when(taskViewBase.getCurrentBoundsOnScreen()).thenReturn(bounds);
+ mTaskViewTaskController.setTaskViewBase(taskViewBase);
+
+ // Surface created, but task not available so bounds / visibility isn't set
+ mTaskView.surfaceCreated(mock(SurfaceHolder.class));
+ verify(mTaskViewTransitions, never()).updateVisibilityState(
+ eq(mTaskViewTaskController), eq(true));
+
+ // Make the task available / start prepareOpen
+ WindowContainerTransaction wct = mock(WindowContainerTransaction.class);
+ mTaskViewTaskController.prepareOpenAnimation(true /* newTask */,
+ new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mTaskInfo,
+ mLeash, wct);
+
+ // Bounds got set
+ verify(wct).setBounds(any(WindowContainerToken.class), eq(bounds));
+ // Visibility & bounds state got set
+ verify(mTaskViewTransitions).updateVisibilityState(eq(mTaskViewTaskController), eq(true));
+ verify(mTaskViewTransitions).updateBoundsState(eq(mTaskViewTaskController), eq(bounds));
+ }
+
+ @Test
+ public void testTaskViewPrepareOpenAnimationSetsVisibilityFalse() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ TaskViewBase taskViewBase = mock(TaskViewBase.class);
+ Rect bounds = new Rect(0, 0, 100, 100);
+ when(taskViewBase.getCurrentBoundsOnScreen()).thenReturn(bounds);
+ mTaskViewTaskController.setTaskViewBase(taskViewBase);
+
+ // Task is available, but the surface was never created
+ WindowContainerTransaction wct = mock(WindowContainerTransaction.class);
+ mTaskViewTaskController.prepareOpenAnimation(true /* newTask */,
+ new SurfaceControl.Transaction(), new SurfaceControl.Transaction(), mTaskInfo,
+ mLeash, wct);
+
+ // Bounds do not get set as there is no surface
+ verify(wct, never()).setBounds(any(WindowContainerToken.class), any());
+ // Visibility is set to false, bounds aren't set
+ verify(mTaskViewTransitions).updateVisibilityState(eq(mTaskViewTaskController), eq(false));
+ verify(mTaskViewTransitions, never()).updateBoundsState(eq(mTaskViewTaskController), any());
+ }
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
new file mode 100644
index 0000000..4559095
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.taskview;
+
+import static android.view.WindowManager.TRANSIT_CHANGE;
+import static android.view.WindowManager.TRANSIT_TO_FRONT;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assume.assumeTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.graphics.Rect;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.SurfaceControl;
+import android.window.TransitionInfo;
+import android.window.WindowContainerToken;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.transition.Transitions;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class TaskViewTransitionsTest extends ShellTestCase {
+
+ @Mock
+ Transitions mTransitions;
+ @Mock
+ TaskViewTaskController mTaskViewTaskController;
+ @Mock
+ ActivityManager.RunningTaskInfo mTaskInfo;
+ @Mock
+ WindowContainerToken mToken;
+
+ TaskViewTransitions mTaskViewTransitions;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+ doReturn(true).when(mTransitions).isRegistered();
+ }
+
+ mTaskInfo = new ActivityManager.RunningTaskInfo();
+ mTaskInfo.token = mToken;
+ mTaskInfo.taskId = 314;
+ mTaskInfo.taskDescription = mock(ActivityManager.TaskDescription.class);
+
+ mTaskViewTransitions = spy(new TaskViewTransitions(mTransitions));
+ mTaskViewTransitions.addTaskView(mTaskViewTaskController);
+ when(mTaskViewTaskController.getTaskInfo()).thenReturn(mTaskInfo);
+ }
+
+ @Test
+ public void testSetTaskBounds_taskNotVisible_noTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, false);
+ mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
+ new Rect(0, 0, 100, 100));
+
+ assertThat(mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE))
+ .isNull();
+ }
+
+ @Test
+ public void testSetTaskBounds_taskVisible_boundsChangeTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
+
+ // Consume the pending transaction from visibility change
+ TaskViewTransitions.PendingTransition pending =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending).isNotNull();
+ mTaskViewTransitions.startAnimation(pending.mClaimed,
+ mock(TransitionInfo.class),
+ new SurfaceControl.Transaction(),
+ new SurfaceControl.Transaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+ // Verify it was consumed
+ TaskViewTransitions.PendingTransition pending2 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending2).isNull();
+
+ // Test that set bounds creates a new transaction
+ mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
+ new Rect(0, 0, 100, 100));
+ assertThat(mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE))
+ .isNotNull();
+ }
+
+ @Test
+ public void testSetTaskBounds_taskVisibleWithPending_noTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
+
+ TaskViewTransitions.PendingTransition pending =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending).isNotNull();
+
+ mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
+ new Rect(0, 0, 100, 100));
+ assertThat(mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE))
+ .isNull();
+ }
+
+ @Test
+ public void testSetTaskBounds_sameBounds_noTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
+
+ // Consume the pending transaction from visibility change
+ TaskViewTransitions.PendingTransition pending =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending).isNotNull();
+ mTaskViewTransitions.startAnimation(pending.mClaimed,
+ mock(TransitionInfo.class),
+ new SurfaceControl.Transaction(),
+ new SurfaceControl.Transaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+ // Verify it was consumed
+ TaskViewTransitions.PendingTransition pending2 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending2).isNull();
+
+ // Test that set bounds creates a new transaction
+ mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
+ new Rect(0, 0, 100, 100));
+ TaskViewTransitions.PendingTransition pendingBounds =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE);
+ assertThat(pendingBounds).isNotNull();
+
+ // Consume the pending bounds transaction
+ mTaskViewTransitions.startAnimation(pendingBounds.mClaimed,
+ mock(TransitionInfo.class),
+ new SurfaceControl.Transaction(),
+ new SurfaceControl.Transaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+ // Verify it was consumed
+ TaskViewTransitions.PendingTransition pendingBounds1 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE);
+ assertThat(pendingBounds1).isNull();
+
+ // Test that setting the same bounds doesn't creates a new transaction
+ mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
+ new Rect(0, 0, 100, 100));
+ TaskViewTransitions.PendingTransition pendingBounds2 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE);
+ assertThat(pendingBounds2).isNull();
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
index 5cd548b..8eb5c6a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/ShellTransitionTests.java
@@ -30,10 +30,12 @@
import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_OPEN;
+import static android.view.WindowManager.TRANSIT_SLEEP;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.window.TransitionInfo.FLAG_DISPLAY_HAS_ALERT_WINDOWS;
import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
+import static android.window.TransitionInfo.FLAG_SYNC;
import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -63,6 +65,7 @@
import android.os.Looper;
import android.os.RemoteException;
import android.util.ArraySet;
+import android.util.Pair;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.WindowManager;
@@ -587,7 +590,8 @@
requestStartTransition(transitions, transitTokenNotReady);
mDefaultHandler.setSimulateMerge(true);
- mDefaultHandler.mFinishes.get(0).onTransitionFinished(null /* wct */, null /* wctCB */);
+ mDefaultHandler.mFinishes.get(0).second.onTransitionFinished(
+ null /* wct */, null /* wctCB */);
// Make sure that the non-ready transition is not merged.
assertEquals(0, mDefaultHandler.mergeCount());
@@ -1059,6 +1063,223 @@
assertEquals(1, mDefaultHandler.activeCount());
}
+ @Test
+ public void testMultipleTracks() {
+ Transitions transitions = createTestTransitions();
+ transitions.replaceDefaultHandlerForTest(mDefaultHandler);
+ TestTransitionHandler alwaysMergeHandler = new TestTransitionHandler();
+ alwaysMergeHandler.setSimulateMerge(true);
+
+ final boolean[] becameIdle = new boolean[]{false};
+
+ final WindowContainerTransaction emptyWCT = new WindowContainerTransaction();
+ final SurfaceControl.Transaction mockSCT = mock(SurfaceControl.Transaction.class);
+
+ // Make this always merge so we can ensure that it does NOT get a merge-attempt for a
+ // different track.
+ IBinder transitA = transitions.startTransition(TRANSIT_OPEN, emptyWCT, alwaysMergeHandler);
+ // start tracking idle
+ transitions.runOnIdle(() -> becameIdle[0] = true);
+
+ IBinder transitB = transitions.startTransition(TRANSIT_OPEN, emptyWCT, mDefaultHandler);
+ IBinder transitC = transitions.startTransition(TRANSIT_CLOSE, emptyWCT, mDefaultHandler);
+
+ TransitionInfo infoA = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoA.setTrack(0);
+ TransitionInfo infoB = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoB.setTrack(1);
+ TransitionInfo infoC = new TransitionInfoBuilder(TRANSIT_CLOSE)
+ .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
+ infoC.setTrack(1);
+
+ transitions.onTransitionReady(transitA, infoA, mockSCT, mockSCT);
+ assertEquals(1, alwaysMergeHandler.activeCount());
+ transitions.onTransitionReady(transitB, infoB, mockSCT, mockSCT);
+ // should now be running in parallel
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, alwaysMergeHandler.activeCount());
+ // make sure we didn't try to merge into a different track.
+ assertEquals(0, alwaysMergeHandler.mergeCount());
+
+ // This should be queued-up since it is on track 1 (same as B)
+ transitions.onTransitionReady(transitC, infoC, mockSCT, mockSCT);
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, alwaysMergeHandler.activeCount());
+
+ // Now finish B and make sure C starts
+ mDefaultHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ // Now C and A running in parallel
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, alwaysMergeHandler.activeCount());
+ assertEquals(0, alwaysMergeHandler.mergeCount());
+
+ // Finish A
+ alwaysMergeHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ // C still running
+ assertEquals(0, alwaysMergeHandler.activeCount());
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertFalse(becameIdle[0]);
+
+ mDefaultHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ assertEquals(0, mDefaultHandler.activeCount());
+ assertTrue(becameIdle[0]);
+ }
+
+ @Test
+ public void testSyncMultipleTracks() {
+ Transitions transitions = createTestTransitions();
+ transitions.replaceDefaultHandlerForTest(mDefaultHandler);
+ TestTransitionHandler secondHandler = new TestTransitionHandler();
+
+ // Disable the forced early-sync-finish so that we can test the ordering mechanics.
+ transitions.setDisableForceSyncForTest(true);
+ mDefaultHandler.mFinishOnSync = false;
+ secondHandler.mFinishOnSync = false;
+
+ final WindowContainerTransaction emptyWCT = new WindowContainerTransaction();
+ final SurfaceControl.Transaction mockSCT = mock(SurfaceControl.Transaction.class);
+
+ // Make this always merge so we can ensure that it does NOT get a merge-attempt for a
+ // different track.
+ IBinder transitA = transitions.startTransition(TRANSIT_OPEN, emptyWCT, mDefaultHandler);
+ IBinder transitB = transitions.startTransition(TRANSIT_OPEN, emptyWCT, secondHandler);
+ IBinder transitC = transitions.startTransition(TRANSIT_CLOSE, emptyWCT, secondHandler);
+ IBinder transitSync = transitions.startTransition(TRANSIT_CLOSE, emptyWCT, mDefaultHandler);
+ IBinder transitD = transitions.startTransition(TRANSIT_OPEN, emptyWCT, secondHandler);
+ IBinder transitE = transitions.startTransition(TRANSIT_OPEN, emptyWCT, mDefaultHandler);
+
+ TransitionInfo infoA = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoA.setTrack(0);
+ TransitionInfo infoB = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoB.setTrack(1);
+ TransitionInfo infoC = new TransitionInfoBuilder(TRANSIT_CLOSE)
+ .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
+ infoC.setTrack(1);
+ TransitionInfo infoSync = new TransitionInfoBuilder(TRANSIT_CLOSE)
+ .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
+ infoSync.setTrack(0);
+ infoSync.setFlags(FLAG_SYNC);
+ TransitionInfo infoD = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoD.setTrack(1);
+ TransitionInfo infoE = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoE.setTrack(0);
+
+ // Start A B and C where A is track 0, B and C are track 1 (C should be queued)
+ transitions.onTransitionReady(transitA, infoA, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitB, infoB, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitC, infoC, mockSCT, mockSCT);
+ // should now be running in parallel (with one queued)
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, secondHandler.activeCount());
+
+ // Make the sync ready and the following (D, E) ready.
+ transitions.onTransitionReady(transitSync, infoSync, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitD, infoD, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitE, infoE, mockSCT, mockSCT);
+
+ // nothing should have happened yet since the sync is queued and blocking everything.
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, secondHandler.activeCount());
+
+ // Finish A (which is track 0 like the sync).
+ mDefaultHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ // Even though the sync is on track 0 and track 0 became idle, it should NOT be started yet
+ // because it must wait for everything. Additionally, D/E shouldn't start yet either.
+ assertEquals(0, mDefaultHandler.activeCount());
+ assertEquals(1, secondHandler.activeCount());
+
+ // Now finish B and C -- this should then allow the sync to start and D to run (in parallel)
+ secondHandler.finishOne();
+ secondHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ // Now the sync and D (on track 1) should be running
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, secondHandler.activeCount());
+
+ // finish the sync. track 0 still has E
+ mDefaultHandler.finishOne();
+ mMainExecutor.flushAll();
+ assertEquals(1, mDefaultHandler.activeCount());
+
+ mDefaultHandler.finishOne();
+ secondHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ assertEquals(0, mDefaultHandler.activeCount());
+ assertEquals(0, secondHandler.activeCount());
+ }
+
+ @Test
+ public void testForceSyncTracks() {
+ Transitions transitions = createTestTransitions();
+ transitions.replaceDefaultHandlerForTest(mDefaultHandler);
+ TestTransitionHandler secondHandler = new TestTransitionHandler();
+
+ final WindowContainerTransaction emptyWCT = new WindowContainerTransaction();
+ final SurfaceControl.Transaction mockSCT = mock(SurfaceControl.Transaction.class);
+
+ // Make this always merge so we can ensure that it does NOT get a merge-attempt for a
+ // different track.
+ IBinder transitA = transitions.startTransition(TRANSIT_OPEN, emptyWCT, mDefaultHandler);
+ IBinder transitB = transitions.startTransition(TRANSIT_OPEN, emptyWCT, mDefaultHandler);
+ IBinder transitC = transitions.startTransition(TRANSIT_CLOSE, emptyWCT, secondHandler);
+ IBinder transitD = transitions.startTransition(TRANSIT_OPEN, emptyWCT, secondHandler);
+ IBinder transitSync = transitions.startTransition(TRANSIT_CLOSE, emptyWCT, mDefaultHandler);
+
+ TransitionInfo infoA = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoA.setTrack(0);
+ TransitionInfo infoB = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoB.setTrack(0);
+ TransitionInfo infoC = new TransitionInfoBuilder(TRANSIT_CLOSE)
+ .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
+ infoC.setTrack(1);
+ TransitionInfo infoD = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN).build();
+ infoD.setTrack(1);
+ TransitionInfo infoSync = new TransitionInfoBuilder(TRANSIT_CLOSE)
+ .addChange(TRANSIT_OPEN).addChange(TRANSIT_CLOSE).build();
+ infoSync.setTrack(0);
+ infoSync.setFlags(FLAG_SYNC);
+
+ transitions.onTransitionReady(transitA, infoA, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitB, infoB, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitC, infoC, mockSCT, mockSCT);
+ transitions.onTransitionReady(transitD, infoD, mockSCT, mockSCT);
+ // should now be running in parallel (with one queued in each)
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(1, secondHandler.activeCount());
+
+ // Make the sync ready.
+ transitions.onTransitionReady(transitSync, infoSync, mockSCT, mockSCT);
+ mMainExecutor.flushAll();
+
+ // Everything should be forced-finish now except the sync
+ assertEquals(1, mDefaultHandler.activeCount());
+ assertEquals(0, secondHandler.activeCount());
+
+ mDefaultHandler.finishOne();
+ mMainExecutor.flushAll();
+
+ assertEquals(0, mDefaultHandler.activeCount());
+ }
+
class ChangeBuilder {
final TransitionInfo.Change mChange;
@@ -1097,9 +1318,11 @@
}
class TestTransitionHandler implements Transitions.TransitionHandler {
- ArrayList<Transitions.TransitionFinishCallback> mFinishes = new ArrayList<>();
+ ArrayList<Pair<IBinder, Transitions.TransitionFinishCallback>> mFinishes =
+ new ArrayList<>();
final ArrayList<IBinder> mMerged = new ArrayList<>();
boolean mSimulateMerge = false;
+ boolean mFinishOnSync = true;
final ArraySet<IBinder> mShouldMerge = new ArraySet<>();
@Override
@@ -1107,7 +1330,7 @@
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction,
@NonNull Transitions.TransitionFinishCallback finishCallback) {
- mFinishes.add(finishCallback);
+ mFinishes.add(new Pair<>(transition, finishCallback));
return true;
}
@@ -1115,6 +1338,13 @@
public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
@NonNull Transitions.TransitionFinishCallback finishCallback) {
+ if (mFinishOnSync && info.getType() == TRANSIT_SLEEP) {
+ for (int i = 0; i < mFinishes.size(); ++i) {
+ if (mFinishes.get(i).first != mergeTarget) continue;
+ mFinishes.remove(i).second.onTransitionFinished(null, null);
+ return;
+ }
+ }
if (!(mSimulateMerge || mShouldMerge.contains(transition))) return;
mMerged.add(transition);
finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
@@ -1136,18 +1366,19 @@
}
void finishAll() {
- final ArrayList<Transitions.TransitionFinishCallback> finishes = mFinishes;
+ final ArrayList<Pair<IBinder, Transitions.TransitionFinishCallback>> finishes =
+ mFinishes;
mFinishes = new ArrayList<>();
for (int i = finishes.size() - 1; i >= 0; --i) {
- finishes.get(i).onTransitionFinished(null /* wct */, null /* wctCB */);
+ finishes.get(i).second.onTransitionFinished(null /* wct */, null /* wctCB */);
}
mShouldMerge.clear();
}
void finishOne() {
- Transitions.TransitionFinishCallback fin = mFinishes.remove(0);
+ Pair<IBinder, Transitions.TransitionFinishCallback> fin = mFinishes.remove(0);
mMerged.clear();
- fin.onTransitionFinished(null /* wct */, null /* wctCB */);
+ fin.second.onTransitionFinished(null /* wct */, null /* wctCB */);
}
int activeCount() {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
index 38a519a..fc4bfd97 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
@@ -33,6 +33,7 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.same;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.content.Context;
@@ -42,6 +43,7 @@
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
import android.util.DisplayMetrics;
+import android.view.AttachedSurfaceControl;
import android.view.Display;
import android.view.SurfaceControl;
import android.view.SurfaceControlViewHost;
@@ -50,7 +52,6 @@
import android.view.WindowInsets;
import android.view.WindowManager.LayoutParams;
import android.window.SurfaceSyncGroup;
-import android.window.TaskConstants;
import android.window.WindowContainerTransaction;
import androidx.test.filters.SmallTest;
@@ -98,6 +99,8 @@
@Mock
private SurfaceControlViewHost mMockSurfaceControlViewHost;
@Mock
+ private AttachedSurfaceControl mMockRootSurfaceControl;
+ @Mock
private TestView mMockView;
@Mock
private WindowContainerTransaction mMockWindowContainerTransaction;
@@ -130,6 +133,8 @@
doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory)
.create(any(), any(), any());
+ when(mMockSurfaceControlViewHost.getRootSurfaceControl())
+ .thenReturn(mMockRootSurfaceControl);
}
@Test
@@ -190,10 +195,6 @@
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -222,16 +223,6 @@
verify(mMockSurfaceControlStartT).setTrustedOverlay(decorContainerSurface, true);
verify(mMockSurfaceControlStartT).setWindowCrop(decorContainerSurface, 300, 100);
- verify(taskBackgroundSurfaceBuilder).setParent(taskSurface);
- verify(taskBackgroundSurfaceBuilder).setEffectLayer();
- verify(mMockSurfaceControlStartT).setWindowCrop(taskBackgroundSurface, 300, 100);
- verify(mMockSurfaceControlStartT)
- .setColor(taskBackgroundSurface, new float[] {1.f, 1.f, 0.f});
- verify(mMockSurfaceControlStartT).setShadowRadius(taskBackgroundSurface, 10);
- verify(mMockSurfaceControlStartT).setLayer(taskBackgroundSurface,
- TaskConstants.TASK_CHILD_LAYER_TASK_BACKGROUND);
- verify(mMockSurfaceControlStartT).show(taskBackgroundSurface);
-
verify(captionContainerSurfaceBuilder).setParent(decorContainerSurface);
verify(captionContainerSurfaceBuilder).setContainerLayer();
verify(mMockSurfaceControlStartT).setWindowCrop(captionContainerSurface, 300, 64);
@@ -260,6 +251,9 @@
.setWindowCrop(taskSurface, 300, 100);
verify(mMockSurfaceControlStartT)
.show(taskSurface);
+ verify(mMockSurfaceControlStartT)
+ .setColor(taskSurface, new float[] {1.f, 1.f, 0.f});
+ verify(mMockSurfaceControlStartT).setShadowRadius(taskSurface, 10);
assertEquals(300, mRelayoutResult.mWidth);
assertEquals(100, mRelayoutResult.mHeight);
@@ -275,10 +269,6 @@
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -318,7 +308,6 @@
releaseOrder.verify(mMockSurfaceControlViewHost).release();
releaseOrder.verify(t).remove(captionContainerSurface);
releaseOrder.verify(t).remove(decorContainerSurface);
- releaseOrder.verify(t).remove(taskBackgroundSurface);
releaseOrder.verify(t).apply();
verify(mMockWindowContainerTransaction)
.removeInsetsSource(eq(taskInfo.token), any(), anyInt(), anyInt());
@@ -379,10 +368,6 @@
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -451,10 +436,6 @@
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -486,6 +467,43 @@
verify(mMockSurfaceControlStartT).show(captionContainerSurface);
}
+ @Test
+ public void testRelayout_applyTransactionInSyncWithDraw() {
+ final Display defaultDisplay = mock(Display.class);
+ doReturn(defaultDisplay).when(mMockDisplayController)
+ .getDisplay(Display.DEFAULT_DISPLAY);
+
+ final SurfaceControl decorContainerSurface = mock(SurfaceControl.class);
+ final SurfaceControl.Builder decorContainerSurfaceBuilder =
+ createMockSurfaceControlBuilder(decorContainerSurface);
+ mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
+ final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
+ final SurfaceControl.Builder captionContainerSurfaceBuilder =
+ createMockSurfaceControlBuilder(captionContainerSurface);
+ mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
+
+ final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
+ mMockSurfaceControlTransactions.add(t);
+ final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
+ new ActivityManager.TaskDescription.Builder()
+ .setBackgroundColor(Color.YELLOW);
+ final ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+ .setDisplayId(Display.DEFAULT_DISPLAY)
+ .setTaskDescriptionBuilder(taskDescriptionBuilder)
+ .setBounds(TASK_BOUNDS)
+ .setPositionInParent(TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y)
+ .setVisible(true)
+ .build();
+ taskInfo.isFocused = true;
+ taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2;
+ final SurfaceControl taskSurface = mock(SurfaceControl.class);
+ final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface);
+
+ windowDecor.relayout(taskInfo, true /* applyStartTransactionOnDraw */);
+
+ verify(mMockRootSurfaceControl).applyTransactionOnDraw(mMockSurfaceControlStartT);
+ }
+
private TestWindowDecoration createWindowDecoration(
ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) {
return new TestWindowDecoration(InstrumentationRegistry.getInstrumentation().getContext(),
@@ -541,6 +559,12 @@
@Override
void relayout(ActivityManager.RunningTaskInfo taskInfo) {
+ relayout(taskInfo, false /* applyStartTransactionOnDraw */);
+ }
+
+ void relayout(ActivityManager.RunningTaskInfo taskInfo,
+ boolean applyStartTransactionOnDraw) {
+ mRelayoutParams.mApplyStartTransactionOnDraw = applyStartTransactionOnDraw;
relayout(mRelayoutParams, mMockSurfaceControlStartT, mMockSurfaceControlFinishT,
mMockWindowContainerTransaction, mMockView, mRelayoutResult);
}
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index 70c36a5..34af1f9 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -399,7 +399,7 @@
"libharfbuzz_ng",
"libimage_io",
"libjpeg",
- "libjpegrecoverymap",
+ "libultrahdr",
"liblog",
"libminikin",
"libz",
diff --git a/libs/hwui/DamageAccumulator.cpp b/libs/hwui/DamageAccumulator.cpp
index 9db47c3..a8d170d 100644
--- a/libs/hwui/DamageAccumulator.cpp
+++ b/libs/hwui/DamageAccumulator.cpp
@@ -207,27 +207,6 @@
}
}
-static void computeTransformImpl(const DirtyStack* frame, const DirtyStack* end,
- Matrix4* outMatrix) {
- while (frame != end) {
- switch (frame->type) {
- case TransformRenderNode:
- frame->renderNode->applyViewPropertyTransforms(*outMatrix);
- break;
- case TransformMatrix4:
- outMatrix->multiply(*frame->matrix4);
- break;
- case TransformNone:
- // nothing to be done
- break;
- default:
- LOG_ALWAYS_FATAL("Tried to compute transform with an invalid type: %d",
- frame->type);
- }
- frame = frame->prev;
- }
-}
-
void DamageAccumulator::applyRenderNodeTransform(DirtyStack* frame) {
if (frame->pendingDirty.isEmpty()) {
return;
@@ -282,9 +261,6 @@
DamageAccumulator::StretchResult DamageAccumulator::findNearestStretchEffect() const {
DirtyStack* frame = mHead;
- const auto& headProperties = mHead->renderNode->properties();
- float startWidth = headProperties.getWidth();
- float startHeight = headProperties.getHeight();
while (frame->prev != frame) {
if (frame->type == TransformRenderNode) {
const auto& renderNode = frame->renderNode;
@@ -295,21 +271,16 @@
const float height = (float) frameRenderNodeProperties.getHeight();
if (!effect.isEmpty()) {
Matrix4 stretchMatrix;
- computeTransformImpl(mHead, frame, &stretchMatrix);
- Rect stretchRect = Rect(0.f, 0.f, startWidth, startHeight);
+ computeTransformImpl(frame, &stretchMatrix);
+ Rect stretchRect = Rect(0.f, 0.f, width, height);
stretchMatrix.mapRect(stretchRect);
return StretchResult{
- .stretchEffect = &effect,
- .childRelativeBounds = SkRect::MakeLTRB(
- stretchRect.left,
- stretchRect.top,
- stretchRect.right,
- stretchRect.bottom
- ),
- .width = width,
- .height = height
- };
+ .stretchEffect = &effect,
+ .parentBounds = SkRect::MakeLTRB(stretchRect.left, stretchRect.top,
+ stretchRect.right, stretchRect.bottom),
+ .width = width,
+ .height = height};
}
}
frame = frame->prev;
diff --git a/libs/hwui/DamageAccumulator.h b/libs/hwui/DamageAccumulator.h
index 90a3517..c4249af 100644
--- a/libs/hwui/DamageAccumulator.h
+++ b/libs/hwui/DamageAccumulator.h
@@ -70,9 +70,9 @@
const StretchEffect* stretchEffect;
/**
- * Bounds of the child relative to the stretch container
+ * Bounds of the stretching container
*/
- const SkRect childRelativeBounds;
+ const SkRect parentBounds;
/**
* Width of the stretch container
diff --git a/libs/hwui/jni/YuvToJpegEncoder.cpp b/libs/hwui/jni/YuvToJpegEncoder.cpp
index 8874ef1..69418b0 100644
--- a/libs/hwui/jni/YuvToJpegEncoder.cpp
+++ b/libs/hwui/jni/YuvToJpegEncoder.cpp
@@ -298,39 +298,39 @@
}
///////////////////////////////////////////////////////////////////////////////
-using namespace android::jpegrecoverymap;
+using namespace android::ultrahdr;
-jpegr_color_gamut P010Yuv420ToJpegREncoder::findColorGamut(JNIEnv* env, int aDataSpace) {
+ultrahdr_color_gamut P010Yuv420ToJpegREncoder::findColorGamut(JNIEnv* env, int aDataSpace) {
switch (aDataSpace & ADataSpace::STANDARD_MASK) {
case ADataSpace::STANDARD_BT709:
- return jpegr_color_gamut::JPEGR_COLORGAMUT_BT709;
+ return ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_BT709;
case ADataSpace::STANDARD_DCI_P3:
- return jpegr_color_gamut::JPEGR_COLORGAMUT_P3;
+ return ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_P3;
case ADataSpace::STANDARD_BT2020:
- return jpegr_color_gamut::JPEGR_COLORGAMUT_BT2100;
+ return ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_BT2100;
default:
jclass IllegalArgumentException = env->FindClass("java/lang/IllegalArgumentException");
env->ThrowNew(IllegalArgumentException,
"The requested color gamut is not supported by JPEG/R.");
}
- return jpegr_color_gamut::JPEGR_COLORGAMUT_UNSPECIFIED;
+ return ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_UNSPECIFIED;
}
-jpegr_transfer_function P010Yuv420ToJpegREncoder::findHdrTransferFunction(JNIEnv* env,
+ultrahdr_transfer_function P010Yuv420ToJpegREncoder::findHdrTransferFunction(JNIEnv* env,
int aDataSpace) {
switch (aDataSpace & ADataSpace::TRANSFER_MASK) {
case ADataSpace::TRANSFER_ST2084:
- return jpegr_transfer_function::JPEGR_TF_PQ;
+ return ultrahdr_transfer_function::ULTRAHDR_TF_PQ;
case ADataSpace::TRANSFER_HLG:
- return jpegr_transfer_function::JPEGR_TF_HLG;
+ return ultrahdr_transfer_function::ULTRAHDR_TF_HLG;
default:
jclass IllegalArgumentException = env->FindClass("java/lang/IllegalArgumentException");
env->ThrowNew(IllegalArgumentException,
"The requested HDR transfer function is not supported by JPEG/R.");
}
- return jpegr_transfer_function::JPEGR_TF_UNSPECIFIED;
+ return ultrahdr_transfer_function::ULTRAHDR_TF_UNSPECIFIED;
}
bool P010Yuv420ToJpegREncoder::encode(JNIEnv* env,
@@ -344,13 +344,13 @@
return false;
}
- jpegr_color_gamut hdrColorGamut = findColorGamut(env, hdrColorSpace);
- jpegr_color_gamut sdrColorGamut = findColorGamut(env, sdrColorSpace);
- jpegr_transfer_function hdrTransferFunction = findHdrTransferFunction(env, hdrColorSpace);
+ ultrahdr_color_gamut hdrColorGamut = findColorGamut(env, hdrColorSpace);
+ ultrahdr_color_gamut sdrColorGamut = findColorGamut(env, sdrColorSpace);
+ ultrahdr_transfer_function hdrTransferFunction = findHdrTransferFunction(env, hdrColorSpace);
- if (hdrColorGamut == jpegr_color_gamut::JPEGR_COLORGAMUT_UNSPECIFIED
- || sdrColorGamut == jpegr_color_gamut::JPEGR_COLORGAMUT_UNSPECIFIED
- || hdrTransferFunction == jpegr_transfer_function::JPEGR_TF_UNSPECIFIED) {
+ if (hdrColorGamut == ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_UNSPECIFIED
+ || sdrColorGamut == ultrahdr_color_gamut::ULTRAHDR_COLORGAMUT_UNSPECIFIED
+ || hdrTransferFunction == ultrahdr_transfer_function::ULTRAHDR_TF_UNSPECIFIED) {
return false;
}
diff --git a/libs/hwui/jni/YuvToJpegEncoder.h b/libs/hwui/jni/YuvToJpegEncoder.h
index d22a26c..8ef7805 100644
--- a/libs/hwui/jni/YuvToJpegEncoder.h
+++ b/libs/hwui/jni/YuvToJpegEncoder.h
@@ -2,7 +2,7 @@
#define _ANDROID_GRAPHICS_YUV_TO_JPEG_ENCODER_H_
#include <android/data_space.h>
-#include <jpegrecoverymap/jpegr.h>
+#include <ultrahdr/jpegr.h>
extern "C" {
#include "jpeglib.h"
@@ -103,7 +103,7 @@
* @param aDataSpace data space defined in data_space.h.
* @return color gamut for JPEG/R.
*/
- static android::jpegrecoverymap::jpegr_color_gamut findColorGamut(JNIEnv* env, int aDataSpace);
+ static android::ultrahdr::ultrahdr_color_gamut findColorGamut(JNIEnv* env, int aDataSpace);
/** Map data space (defined in DataSpace.java and data_space.h) to the transfer function
* used in JPEG/R
@@ -112,7 +112,7 @@
* @param aDataSpace data space defined in data_space.h.
* @return color gamut for JPEG/R.
*/
- static android::jpegrecoverymap::jpegr_transfer_function findHdrTransferFunction(
+ static android::ultrahdr::ultrahdr_transfer_function findHdrTransferFunction(
JNIEnv* env, int aDataSpace);
};
diff --git a/libs/hwui/jni/android_graphics_RenderNode.cpp b/libs/hwui/jni/android_graphics_RenderNode.cpp
index ac1f92de..24a785c 100644
--- a/libs/hwui/jni/android_graphics_RenderNode.cpp
+++ b/libs/hwui/jni/android_graphics_RenderNode.cpp
@@ -584,13 +584,15 @@
uirenderer::Rect bounds(props.getWidth(), props.getHeight());
bool useStretchShader =
Properties::getStretchEffectBehavior() != StretchEffectBehavior::UniformScale;
- if (useStretchShader && info.stretchEffectCount) {
+ // Compute the transform bounds first before calculating the stretch
+ transform.mapRect(bounds);
+
+ bool hasStretch = useStretchShader && info.stretchEffectCount;
+ if (hasStretch) {
handleStretchEffect(info, bounds);
}
- transform.mapRect(bounds);
-
- if (CC_LIKELY(transform.isPureTranslate())) {
+ if (CC_LIKELY(transform.isPureTranslate()) && !hasStretch) {
// snap/round the computed bounds, so they match the rounding behavior
// of the clear done in SurfaceView#draw().
bounds.snapGeometryToPixelBoundaries(false);
@@ -665,45 +667,42 @@
return env;
}
- void stretchTargetBounds(const StretchEffect& stretchEffect,
- float width, float height,
- const SkRect& childRelativeBounds,
- uirenderer::Rect& bounds) {
- float normalizedLeft = childRelativeBounds.left() / width;
- float normalizedTop = childRelativeBounds.top() / height;
- float normalizedRight = childRelativeBounds.right() / width;
- float normalizedBottom = childRelativeBounds.bottom() / height;
- float reverseLeft = width *
- (stretchEffect.computeStretchedPositionX(normalizedLeft) -
- normalizedLeft);
- float reverseTop = height *
- (stretchEffect.computeStretchedPositionY(normalizedTop) -
- normalizedTop);
- float reverseRight = width *
- (stretchEffect.computeStretchedPositionX(normalizedRight) -
- normalizedLeft);
- float reverseBottom = height *
- (stretchEffect.computeStretchedPositionY(normalizedBottom) -
- normalizedTop);
- bounds.left = reverseLeft;
- bounds.top = reverseTop;
- bounds.right = reverseRight;
- bounds.bottom = reverseBottom;
- }
-
void handleStretchEffect(const TreeInfo& info, uirenderer::Rect& targetBounds) {
// Search up to find the nearest stretcheffect parent
const DamageAccumulator::StretchResult result =
info.damageAccumulator->findNearestStretchEffect();
const StretchEffect* effect = result.stretchEffect;
- if (!effect) {
+ if (effect) {
+ // Compute the number of pixels that the stretching container
+ // scales by.
+ // Then compute the scale factor that the child would need
+ // to scale in order to occupy the same pixel bounds.
+ auto& parentBounds = result.parentBounds;
+ auto parentWidth = parentBounds.width();
+ auto parentHeight = parentBounds.height();
+ auto& stretchDirection = effect->getStretchDirection();
+ auto stretchX = stretchDirection.x();
+ auto stretchY = stretchDirection.y();
+ auto stretchXPixels = parentWidth * std::abs(stretchX);
+ auto stretchYPixels = parentHeight * std::abs(stretchY);
+ SkMatrix stretchMatrix;
+
+ auto childScaleX = 1 + (stretchXPixels / targetBounds.getWidth());
+ auto childScaleY = 1 + (stretchYPixels / targetBounds.getHeight());
+ auto pivotX = stretchX > 0 ? targetBounds.left : targetBounds.right;
+ auto pivotY = stretchY > 0 ? targetBounds.top : targetBounds.bottom;
+ stretchMatrix.setScale(childScaleX, childScaleY, pivotX, pivotY);
+ SkRect rect = SkRect::MakeLTRB(targetBounds.left, targetBounds.top,
+ targetBounds.right, targetBounds.bottom);
+ SkRect dst = stretchMatrix.mapRect(rect);
+ targetBounds.left = dst.left();
+ targetBounds.top = dst.top();
+ targetBounds.right = dst.right();
+ targetBounds.bottom = dst.bottom();
+ } else {
return;
}
- const auto& childRelativeBounds = result.childRelativeBounds;
- stretchTargetBounds(*effect, result.width, result.height,
- childRelativeBounds,targetBounds);
-
if (Properties::getStretchEffectBehavior() ==
StretchEffectBehavior::Shader) {
JNIEnv* env = jnienv();
@@ -714,9 +713,8 @@
gPositionListener.clazz, gPositionListener.callApplyStretch, mListener,
info.canvasContext.getFrameNumber(), result.width, result.height,
stretchDirection.fX, stretchDirection.fY, effect->maxStretchAmountX,
- effect->maxStretchAmountY, childRelativeBounds.left(),
- childRelativeBounds.top(), childRelativeBounds.right(),
- childRelativeBounds.bottom());
+ effect->maxStretchAmountY, targetBounds.left, targetBounds.top,
+ targetBounds.right, targetBounds.bottom);
if (!keepListening) {
env->DeleteGlobalRef(mListener);
mListener = nullptr;
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
index 1a47db5..da4f66d 100644
--- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
+++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
@@ -293,8 +293,10 @@
// with the same canvas transformation + clip into the target
// canvas then draw the layer on top
if (renderNode->hasHolePunches()) {
+ canvas->save();
TransformCanvas transformCanvas(canvas, SkBlendMode::kDstOut);
displayList->draw(&transformCanvas);
+ canvas->restore();
}
canvas->drawImageRect(snapshotImage, SkRect::Make(srcBounds),
SkRect::Make(dstBounds), sampling, &paint,
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 3123ee6..e73cf87 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -1237,9 +1237,6 @@
public static final Set<Integer> DEVICE_IN_ALL_SCO_SET;
/** @hide */
public static final Set<Integer> DEVICE_IN_ALL_USB_SET;
- /** @hide */
- public static final Set<Integer> DEVICE_IN_ALL_BLE_SET;
-
static {
DEVICE_IN_ALL_SET = new HashSet<>();
DEVICE_IN_ALL_SET.add(DEVICE_IN_COMMUNICATION);
@@ -1279,66 +1276,6 @@
DEVICE_IN_ALL_USB_SET.add(DEVICE_IN_USB_ACCESSORY);
DEVICE_IN_ALL_USB_SET.add(DEVICE_IN_USB_DEVICE);
DEVICE_IN_ALL_USB_SET.add(DEVICE_IN_USB_HEADSET);
-
- DEVICE_IN_ALL_BLE_SET = new HashSet<>();
- DEVICE_IN_ALL_BLE_SET.add(DEVICE_IN_BLE_HEADSET);
- }
-
- /** @hide */
- public static boolean isBluetoothDevice(int deviceType) {
- return isBluetoothA2dpOutDevice(deviceType)
- || isBluetoothScoDevice(deviceType)
- || isBluetoothLeDevice(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothOutDevice(int deviceType) {
- return isBluetoothA2dpOutDevice(deviceType)
- || isBluetoothScoOutDevice(deviceType)
- || isBluetoothLeOutDevice(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothInDevice(int deviceType) {
- return isBluetoothScoInDevice(deviceType)
- || isBluetoothLeInDevice(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothA2dpOutDevice(int deviceType) {
- return DEVICE_OUT_ALL_A2DP_SET.contains(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothScoOutDevice(int deviceType) {
- return DEVICE_OUT_ALL_SCO_SET.contains(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothScoInDevice(int deviceType) {
- return DEVICE_IN_ALL_SCO_SET.contains(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothScoDevice(int deviceType) {
- return isBluetoothScoOutDevice(deviceType)
- || isBluetoothScoInDevice(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothLeOutDevice(int deviceType) {
- return DEVICE_OUT_ALL_BLE_SET.contains(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothLeInDevice(int deviceType) {
- return DEVICE_IN_ALL_BLE_SET.contains(deviceType);
- }
-
- /** @hide */
- public static boolean isBluetoothLeDevice(int deviceType) {
- return isBluetoothLeOutDevice(deviceType)
- || isBluetoothLeInDevice(deviceType);
}
/** @hide */
diff --git a/media/java/android/media/VolumeProvider.java b/media/java/android/media/VolumeProvider.java
index 7cf63f4..22741f45 100644
--- a/media/java/android/media/VolumeProvider.java
+++ b/media/java/android/media/VolumeProvider.java
@@ -17,6 +17,7 @@
import android.annotation.IntDef;
import android.annotation.Nullable;
+import android.media.MediaRouter2.RoutingController;
import android.media.session.MediaSession;
import java.lang.annotation.Retention;
@@ -66,32 +67,28 @@
private Callback mCallback;
/**
- * Create a new volume provider for handling volume events. You must specify
- * the type of volume control, the maximum volume that can be used, and the
- * current volume on the output.
+ * Creates a new volume provider for handling volume events.
*
- * @param volumeControl The method for controlling volume that is used by
- * this provider.
+ * @param volumeControl See {@link #getVolumeControl()}.
* @param maxVolume The maximum allowed volume.
* @param currentVolume The current volume on the output.
*/
-
public VolumeProvider(@ControlType int volumeControl, int maxVolume, int currentVolume) {
this(volumeControl, maxVolume, currentVolume, null);
}
/**
- * Create a new volume provider for handling volume events. You must specify
- * the type of volume control, the maximum volume that can be used, and the
- * current volume on the output.
+ * Creates a new volume provider for handling volume events.
*
- * @param volumeControl The method for controlling volume that is used by
- * this provider.
+ * @param volumeControl See {@link #getVolumeControl()}.
* @param maxVolume The maximum allowed volume.
* @param currentVolume The current volume on the output.
- * @param volumeControlId The volume control ID of this provider.
+ * @param volumeControlId See {@link #getVolumeControlId()}.
*/
- public VolumeProvider(@ControlType int volumeControl, int maxVolume, int currentVolume,
+ public VolumeProvider(
+ @ControlType int volumeControl,
+ int maxVolume,
+ int currentVolume,
@Nullable String volumeControlId) {
mControlType = volumeControl;
mMaxVolume = maxVolume;
@@ -100,7 +97,10 @@
}
/**
- * Get the volume control type that this volume provider uses.
+ * Gets the volume control type that this volume provider uses.
+ *
+ * <p>One of {@link #VOLUME_CONTROL_FIXED}, {@link #VOLUME_CONTROL_ABSOLUTE}, or {@link
+ * #VOLUME_CONTROL_RELATIVE}.
*
* @return The volume control type for this volume provider
*/
@@ -110,7 +110,7 @@
}
/**
- * Get the maximum volume this provider allows.
+ * Gets the maximum volume this provider allows.
*
* @return The max allowed volume.
*/
@@ -129,8 +129,8 @@
}
/**
- * Notify the system that the current volume has been changed. This must be
- * called every time the volume changes to ensure it is displayed properly.
+ * Notifies the system that the current volume has been changed. This must be called every time
+ * the volume changes to ensure it is displayed properly.
*
* @param currentVolume The current volume on the output.
*/
@@ -142,10 +142,11 @@
}
/**
- * Gets the volume control ID. It can be used to identify which volume provider is
- * used by the session.
+ * Gets the {@link RoutingController#getId() routing controller id} of the {@link
+ * RoutingController} associated with this volume provider, or null if unset.
*
- * @return the volume control ID or {@code null} if it isn't set.
+ * <p>This id allows mapping this volume provider to a routing controller, which provides
+ * information about the media route and allows controlling its volume.
*/
@Nullable
public final String getVolumeControlId() {
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index 5f5e214..094a33f 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -25,6 +25,8 @@
import android.media.AudioSystem;
import android.os.Build;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
@@ -252,10 +254,10 @@
if (o == null || getClass() != o.getClass()) return false;
final AudioMix that = (AudioMix) o;
- return (mRouteFlags == that.mRouteFlags)
- && (mMixType == that.mMixType)
- && Objects.equals(mRule, that.mRule)
- && Objects.equals(mFormat, that.mFormat);
+ return Objects.equals(this.mRouteFlags, that.mRouteFlags)
+ && Objects.equals(this.mRule, that.mRule)
+ && Objects.equals(this.mMixType, that.mMixType)
+ && Objects.equals(this.mFormat, that.mFormat);
}
/** @hide */
@@ -340,7 +342,8 @@
* @param address
* @return the same Builder instance.
*/
- Builder setDevice(int deviceType, String address) {
+ @VisibleForTesting
+ public Builder setDevice(int deviceType, String address) {
mDeviceSystemType = deviceType;
mDeviceAddress = address;
return this;
diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java
index 62c4a51..b43ff63 100644
--- a/media/java/android/media/session/MediaController.java
+++ b/media/java/android/media/session/MediaController.java
@@ -29,7 +29,6 @@
import android.media.AudioManager;
import android.media.MediaMetadata;
import android.media.Rating;
-import android.media.RoutingSessionInfo;
import android.media.VolumeProvider;
import android.media.VolumeProvider.ControlType;
import android.media.session.MediaSession.QueueItem;
@@ -993,26 +992,23 @@
/**
* Creates a new playback info.
*
- * @param playbackType The playback type. Should be {@link #PLAYBACK_TYPE_LOCAL} or
- * {@link #PLAYBACK_TYPE_REMOTE}
- * @param volumeControl The volume control. Should be one of:
- * {@link VolumeProvider#VOLUME_CONTROL_ABSOLUTE},
- * {@link VolumeProvider#VOLUME_CONTROL_RELATIVE}, and
- * {@link VolumeProvider#VOLUME_CONTROL_FIXED}.
+ * @param playbackType The playback type. Should be {@link #PLAYBACK_TYPE_LOCAL} or {@link
+ * #PLAYBACK_TYPE_REMOTE}
+ * @param volumeControl See {@link #getVolumeControl()}.
* @param maxVolume The max volume. Should be equal or greater than zero.
* @param currentVolume The current volume. Should be in the interval [0, maxVolume].
* @param audioAttrs The audio attributes for this playback. Should not be null.
- * @param volumeControlId The {@link RoutingSessionInfo#getId() routing session id} of the
- * {@link RoutingSessionInfo} associated with this controller, or null if not
- * applicable. This id allows mapping this controller to a routing session which, when
- * applicable, provides information about the remote device, and support for volume
- * adjustment.
+ * @param volumeControlId See {@link #getVolumeControlId()}.
* @hide
*/
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
- public PlaybackInfo(@PlaybackType int playbackType, @ControlType int volumeControl,
- @IntRange(from = 0) int maxVolume, @IntRange(from = 0) int currentVolume,
- @NonNull AudioAttributes audioAttrs, @Nullable String volumeControlId) {
+ public PlaybackInfo(
+ @PlaybackType int playbackType,
+ @ControlType int volumeControl,
+ @IntRange(from = 0) int maxVolume,
+ @IntRange(from = 0) int currentVolume,
+ @NonNull AudioAttributes audioAttrs,
+ @Nullable String volumeControlId) {
mPlaybackType = playbackType;
mVolumeControl = volumeControl;
mMaxVolume = maxVolume;
@@ -1044,14 +1040,8 @@
}
/**
- * Get the type of volume control that can be used. One of:
- * <ul>
- * <li>{@link VolumeProvider#VOLUME_CONTROL_ABSOLUTE}</li>
- * <li>{@link VolumeProvider#VOLUME_CONTROL_RELATIVE}</li>
- * <li>{@link VolumeProvider#VOLUME_CONTROL_FIXED}</li>
- * </ul>
- *
- * @return The type of volume control that may be used with this session.
+ * Get the volume control type associated to the session, as indicated by {@link
+ * VolumeProvider#getVolumeControl()}.
*/
public int getVolumeControl() {
return mVolumeControl;
@@ -1076,10 +1066,9 @@
}
/**
- * Get the audio attributes for this session. The attributes will affect
- * volume handling for the session. When the volume type is
- * {@link PlaybackInfo#PLAYBACK_TYPE_REMOTE} these may be ignored by the
- * remote volume handler.
+ * Get the audio attributes for this session. The attributes will affect volume handling for
+ * the session. When the playback type is {@link PlaybackInfo#PLAYBACK_TYPE_REMOTE} these
+ * may be ignored by the remote volume handler.
*
* @return The attributes for this session.
*/
@@ -1088,19 +1077,9 @@
}
/**
- * Gets the volume control ID for this session. It can be used to identify which
- * volume provider is used by the session.
- * <p>
- * When the session starts to use {@link #PLAYBACK_TYPE_REMOTE remote volume handling},
- * a volume provider should be set and it may set the volume control ID of the provider
- * if the session wants to inform which volume provider is used.
- * It can be {@code null} if the session didn't set the volume control ID or it uses
- * {@link #PLAYBACK_TYPE_LOCAL local playback}.
- * </p>
- *
- * @return the volume control ID for this session or {@code null} if it uses local playback
- * or not set.
- * @see VolumeProvider#getVolumeControlId()
+ * Get the routing controller ID for this session, as indicated by {@link
+ * VolumeProvider#getVolumeControlId()}. Returns null if unset, or if {@link
+ * #getPlaybackType()} is {@link #PLAYBACK_TYPE_LOCAL}.
*/
@Nullable
public String getVolumeControlId() {
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index 7e1bbe3..29e8716 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -293,12 +293,16 @@
* Set the component name of the manifest-declared {@link android.content.BroadcastReceiver}
* class that should receive media buttons. This allows restarting playback after the session
* has been stopped. If your app is started in this way an {@link Intent#ACTION_MEDIA_BUTTON}
- * intent will be sent to the broadcast receiver.
- * <p>
- * Note: The given {@link android.content.BroadcastReceiver} should belong to the same package
- * as the context that was given when creating {@link MediaSession}.
+ * intent will be sent to the broadcast receiver. On apps targeting Android U and above, this
+ * will throw an {@link IllegalArgumentException} if the provided {@link ComponentName} does not
+ * resolve to an existing {@link android.content.BroadcastReceiver broadcast receiver}.
+ *
+ * <p>Note: The given {@link android.content.BroadcastReceiver} should belong to the same
+ * package as the context that was given when creating {@link MediaSession}.
*
* @param broadcastReceiver the component name of the BroadcastReceiver class
+ * @throws IllegalArgumentException if {@code broadcastReceiver} does not exist on apps
+ * targeting Android U and above
*/
public void setMediaButtonBroadcastReceiver(@Nullable ComponentName broadcastReceiver) {
try {
diff --git a/media/java/android/media/soundtrigger/SoundTriggerManager.java b/media/java/android/media/soundtrigger/SoundTriggerManager.java
index c41bd1b..b6d70af 100644
--- a/media/java/android/media/soundtrigger/SoundTriggerManager.java
+++ b/media/java/android/media/soundtrigger/SoundTriggerManager.java
@@ -22,6 +22,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
@@ -56,6 +57,7 @@
import com.android.internal.util.Preconditions;
import java.util.HashMap;
+import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.Executor;
@@ -74,6 +76,7 @@
private static final String TAG = "SoundTriggerManager";
private final Context mContext;
+ private final ISoundTriggerService mSoundTriggerService;
private final ISoundTriggerSession mSoundTriggerSession;
private final IBinder mBinderToken = new Binder();
@@ -114,13 +117,97 @@
}
}
} catch (RemoteException e) {
- throw e.rethrowAsRuntimeException();
+ throw e.rethrowFromSystemServer();
}
mContext = context;
+ mSoundTriggerService = soundTriggerService;
mReceiverInstanceMap = new HashMap<UUID, SoundTriggerDetector>();
}
/**
+ * Construct a {@link SoundTriggerManager} which connects to a specified module.
+ *
+ * @param moduleProperties - Properties representing the module to attach to
+ * @return - A new {@link SoundTriggerManager} which interfaces with the test module.
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("ManagerLookup")
+ public @NonNull SoundTriggerManager createManagerForModule(
+ @NonNull ModuleProperties moduleProperties) {
+ return new SoundTriggerManager(mContext, mSoundTriggerService,
+ Objects.requireNonNull(moduleProperties));
+ }
+
+ /**
+ * Construct a {@link SoundTriggerManager} which connects to a ST module
+ * which is available for instrumentation through {@link attachInstrumentation}.
+ *
+ * @return - A new {@link SoundTriggerManager} which interfaces with the test module.
+ * @hide
+ */
+ @TestApi
+ @SuppressLint("ManagerLookup")
+ public @NonNull SoundTriggerManager createManagerForTestModule() {
+ return new SoundTriggerManager(mContext, mSoundTriggerService, getTestModuleProperties());
+ }
+
+ private final @NonNull SoundTrigger.ModuleProperties getTestModuleProperties() {
+ var moduleProps = listModuleProperties()
+ .stream()
+ .filter((SoundTrigger.ModuleProperties prop)
+ -> prop.getSupportedModelArch().equals(SoundTrigger.FAKE_HAL_ARCH))
+ .findFirst()
+ .orElse(null);
+ if (moduleProps == null) {
+ throw new IllegalStateException("Fake ST HAL should always be available");
+ }
+ return moduleProps;
+ }
+
+ // Helper constructor to create a manager object attached to a specific ST module.
+ private SoundTriggerManager(@NonNull Context context,
+ @NonNull ISoundTriggerService soundTriggerService,
+ @NonNull ModuleProperties properties) {
+ try {
+ Identity originatorIdentity = new Identity();
+ originatorIdentity.packageName = ActivityThread.currentOpPackageName();
+ try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
+ mSoundTriggerSession = soundTriggerService.attachAsOriginator(
+ originatorIdentity,
+ Objects.requireNonNull(properties),
+ mBinderToken);
+ }
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ mContext = Objects.requireNonNull(context);
+ mSoundTriggerService = Objects.requireNonNull(soundTriggerService);
+ mReceiverInstanceMap = new HashMap<UUID, SoundTriggerDetector>();
+ }
+
+ /**
+ * Enumerate the available ST modules. Use {@link createManagerForModule(ModuleProperties)} to
+ * receive a {@link SoundTriggerManager} attached to a specified ST module.
+ * @return - List of available ST modules to attach to.
+ * @hide
+ */
+ @TestApi
+ public static @NonNull List<ModuleProperties> listModuleProperties() {
+ try {
+ ISoundTriggerService service = ISoundTriggerService.Stub.asInterface(
+ ServiceManager.getService(Context.SOUND_TRIGGER_SERVICE));
+ Identity originatorIdentity = new Identity();
+ originatorIdentity.packageName = ActivityThread.currentOpPackageName();
+ try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
+ return service.listModuleProperties(originatorIdentity);
+ }
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Updates the given sound trigger model.
* @deprecated replace with {@link #loadSoundModel}
* SoundTriggerService model database will be removed
@@ -317,6 +404,17 @@
SoundTrigger.GenericSoundModel getGenericSoundModel() {
return mGenericSoundModel;
}
+
+ /**
+ * Return a {@link SoundTrigger.SoundModel} view of the model for
+ * test purposes.
+ * @hide
+ */
+ @TestApi
+ public @NonNull SoundTrigger.SoundModel getSoundModel() {
+ return mGenericSoundModel;
+ }
+
}
@@ -369,7 +467,8 @@
*/
@RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER)
@UnsupportedAppUsage
- public int loadSoundModel(SoundModel soundModel) {
+ @TestApi
+ public int loadSoundModel(@NonNull SoundModel soundModel) {
if (soundModel == null || mSoundTriggerSession == null) {
return STATUS_ERROR;
}
diff --git a/native/android/input.cpp b/native/android/input.cpp
index 432e21c..1bff97d 100644
--- a/native/android/input.cpp
+++ b/native/android/input.cpp
@@ -33,6 +33,7 @@
#include <errno.h>
using android::InputEvent;
+using android::InputEventType;
using android::InputQueue;
using android::KeyEvent;
using android::Looper;
@@ -41,7 +42,8 @@
using android::Vector;
int32_t AInputEvent_getType(const AInputEvent* event) {
- return static_cast<const InputEvent*>(event)->getType();
+ const InputEventType eventType = static_cast<const InputEvent*>(event)->getType();
+ return static_cast<int32_t>(eventType);
}
int32_t AInputEvent_getDeviceId(const AInputEvent* event) {
diff --git a/packages/CarrierDefaultApp/res/values-bs/strings.xml b/packages/CarrierDefaultApp/res/values-bs/strings.xml
index 61d8dc8..4fad224 100644
--- a/packages/CarrierDefaultApp/res/values-bs/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-bs/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"Komunikacije putem operatera"</string>
+ <string name="app_name" msgid="2809080280462257271">"Obavještenja operatera"</string>
<string name="android_system_label" msgid="2797790869522345065">"Mobilni operater"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Mobilni internet je potrošen"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Prijenos podataka na mobilnoj mreži je deaktiviran"</string>
diff --git a/packages/CarrierDefaultApp/res/values-eu/strings.xml b/packages/CarrierDefaultApp/res/values-eu/strings.xml
index 86e1291..90346b3 100644
--- a/packages/CarrierDefaultApp/res/values-eu/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-eu/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"Operadorearekiko komunikazioa"</string>
+ <string name="app_name" msgid="2809080280462257271">"Operadorearen jakinarazpenak"</string>
<string name="android_system_label" msgid="2797790869522345065">"Telefonia mugikorreko operadorea"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Agortu egin da datu-konexioa"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Desaktibatu da datu-konexioa"</string>
diff --git a/packages/CarrierDefaultApp/res/values-fa/strings.xml b/packages/CarrierDefaultApp/res/values-fa/strings.xml
index 89c184c..abf47fb 100644
--- a/packages/CarrierDefaultApp/res/values-fa/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-fa/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"ارتباطات شرکت مخابراتی"</string>
+ <string name="app_name" msgid="2809080280462257271">"ارتباطات اپراتور تلفن همراه"</string>
<string name="android_system_label" msgid="2797790869522345065">"شرکت مخابراتی دستگاه همراه"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"داده تلفن همراه تمام شده است"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"داده شبکه تلفن همراه شما غیرفعال شده است"</string>
diff --git a/packages/CarrierDefaultApp/res/values-km/strings.xml b/packages/CarrierDefaultApp/res/values-km/strings.xml
index 1852489..ee9a6ac 100644
--- a/packages/CarrierDefaultApp/res/values-km/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-km/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"ទំនាក់ទំនងរបស់ក្រុមហ៊ុនសេវាទូរសព្ទ"</string>
+ <string name="app_name" msgid="2809080280462257271">"ទំនាក់ទំនងក្រុមហ៊ុនសេវាទូរសព្ទ"</string>
<string name="android_system_label" msgid="2797790869522345065">"ក្រុមហ៊ុនបម្រើសេវាទូរសព្ទចល័ត"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"ទិន្នន័យចល័តបានអស់ហើយ"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"ទិន្នន័យចល័តរបស់អ្នកត្រូវបានបិទដំណើរការហើយ"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ro/strings.xml b/packages/CarrierDefaultApp/res/values-ro/strings.xml
index 78b910e..9692a7f6 100644
--- a/packages/CarrierDefaultApp/res/values-ro/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ro/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"Comunicări de la operator"</string>
+ <string name="app_name" msgid="2809080280462257271">"Notificări de la operator"</string>
<string name="android_system_label" msgid="2797790869522345065">"Operator de telefonie mobilă"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Datele mobile au expirat"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Datele mobile au fost dezactivate"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ru/strings.xml b/packages/CarrierDefaultApp/res/values-ru/strings.xml
index 936a6fa..a3c9f19 100644
--- a/packages/CarrierDefaultApp/res/values-ru/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ru/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"Оператор связи"</string>
+ <string name="app_name" msgid="2809080280462257271">"Уведомления оператора связи"</string>
<string name="android_system_label" msgid="2797790869522345065">"Оператор мобильной связи"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Мобильный трафик израсходован"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Мобильный Интернет отключен"</string>
diff --git a/packages/CarrierDefaultApp/res/values-vi/strings.xml b/packages/CarrierDefaultApp/res/values-vi/strings.xml
index d99aa22..402d425 100644
--- a/packages/CarrierDefaultApp/res/values-vi/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-vi/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"Nhà cung cấp dịch vụ truyền thông"</string>
+ <string name="app_name" msgid="2809080280462257271">"Thông báo của nhà mạng"</string>
<string name="android_system_label" msgid="2797790869522345065">"Nhà cung cấp dịch vụ di động"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"Dữ liệu di động đã hết"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"Dữ liệu di động của bạn đã bị hủy kích hoạt"</string>
diff --git a/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml b/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
index b05835d..63cae2f 100644
--- a/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-zh-rCN/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"运营商通信"</string>
+ <string name="app_name" msgid="2809080280462257271">"运营商通知"</string>
<string name="android_system_label" msgid="2797790869522345065">"移动运营商"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"移动数据流量已用尽"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"您的移动数据网络已停用"</string>
diff --git a/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml b/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
index e8a679c..0578256 100644
--- a/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="2809080280462257271">"流動網絡供應商最新消息"</string>
+ <string name="app_name" msgid="2809080280462257271">"流動網絡供應商通訊"</string>
<string name="android_system_label" msgid="2797790869522345065">"流動網絡供應商"</string>
<string name="portal_notification_id" msgid="5155057562457079297">"流動數據量已用盡"</string>
<string name="no_data_notification_id" msgid="668400731803969521">"您的流動數據已停用"</string>
diff --git a/packages/CompanionDeviceManager/res/layout/list_item_permission.xml b/packages/CompanionDeviceManager/res/layout/list_item_permission.xml
index 6c463e1..6bfcd82 100644
--- a/packages/CompanionDeviceManager/res/layout/list_item_permission.xml
+++ b/packages/CompanionDeviceManager/res/layout/list_item_permission.xml
@@ -22,7 +22,8 @@
android:orientation="horizontal"
android:paddingStart="32dp"
android:paddingEnd="32dp"
- android:paddingTop="12dp">
+ android:paddingTop="6dp"
+ android:paddingBottom="6dp">
<ImageView
android:id="@+id/permission_icon"
diff --git a/packages/CompanionDeviceManager/res/values-af/strings.xml b/packages/CompanionDeviceManager/res/values-af/strings.xml
index b897f7f..7a5b564 100644
--- a/packages/CompanionDeviceManager/res/values-af/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-af/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Metgeseltoestel-bestuurder"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Gee <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang tot <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"horlosie"</string>
<string name="chooser_title" msgid="2262294130493605839">"Kies \'n <xliff:g id="PROFILE_NAME">%1$s</xliff:g> om deur <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> bestuur te word"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Hierdie app is nodig om jou <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te bestuur. <xliff:g id="APP_NAME">%2$s</xliff:g> sal toegelaat word om inligting te sinkroniseer, soos die naam van iemand wat bel, interaksie met jou kennisgewings te hê, en sal toegang tot jou Foon-, SMS-, Kontakte-, Kalender-, Oproeprekords-, en Toestelle in die Omtrek-toestemmings hê."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Hierdie app sal toegelaat word om inligting te sinkroniseer, soos die naam van iemand wat bel, en sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> hê"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Laat <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toe om <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> te bestuur?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"bril"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Hierdie app is nodig om <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te bestuur. <xliff:g id="APP_NAME">%2$s</xliff:g> sal toegelaat word om interaksie met jou kennisgewings te hê en sal toegang tot jou Foon-, SMS-, Kontakte-, Mikrofoon-, en Toestelle in die Omtrek-toestemmings hê."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Hierdie app sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> hê"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Gee <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang tot hierdie inligting op jou foon"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Oorkruistoestel-dienste"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> toestemming om programme tussen jou toestelle te stroom"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toestemming om apps tussen jou toestelle te stroom"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Gee <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang tot hierdie inligting op jou foon"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Dienste"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> toegang tot jou foon se foto\'s, media en kennisgewings"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toegang tot jou foon se foto’s, media en kennisgewings"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Laat <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> toe om hierdie handeling uit te voer?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DEVICE_NAME">%2$s</xliff:g> toestemming om apps en ander stelselkenmerke na toestelle in die omtrek te stroom"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"toestel"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Hierdie app sal inligting kan sinkroniseer, soos die naam van iemand wat bel, tussen jou foon en <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Hierdie app sal inligting kan sinkroniseer, soos die naam van iemand wat bel, tussen jou foon en die gekose toestel"</string>
<string name="consent_yes" msgid="8344487259618762872">"Laat toe"</string>
<string name="consent_no" msgid="2640796915611404382">"Moenie toelaat nie"</string>
<string name="consent_back" msgid="2560683030046918882">"Terug"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stroom jou foon se apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stroom apps en ander stelselkenmerke van jou foon af"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"foon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-am/strings.xml b/packages/CompanionDeviceManager/res/values-am/strings.xml
index 23a6cb0..09a4de1 100644
--- a/packages/CompanionDeviceManager/res/values-am/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-am/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"አጃቢ የመሣሪያ አስተዳዳሪ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>ን እንዲደርስ ይፈቀድለት?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ሰዓት"</string>
<string name="chooser_title" msgid="2262294130493605839">"በ<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> የሚተዳደር <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ይምረጡ"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"የእርስዎን <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ለማስተዳደር ይህ መተግበሪያ ያስፈልጋል። <xliff:g id="APP_NAME">%2$s</xliff:g> እንደ የሚደውል ሰው ስም፣ ከማሳወቂያዎችዎ ጋር መስተጋብር እንዲፈጥር እና የእርስዎን ስልክ፣ ኤስኤምኤስ፣ ዕውቅያዎች፣ የቀን መቁጠሪያ፣ የጥሪ ምዝግብ ማስታወሻዎች እና በአቅራቢያ ያሉ መሣሪያዎችን መድረስ ያሉ መረጃዎችን እንዲያሰምር ይፈቀድለታል።"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን እንዲያሰምር እና እነዚህን ፈቃዶች በእርስዎ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ላይ እንዲደርስ ይፈቀድለታል"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>ን እንዲያስተዳድር ይፈቅዳሉ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"መነጽሮች"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ይህ መተግበሪያ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ን ለማስተዳደር ያስፈልጋል። <xliff:g id="APP_NAME">%2$s</xliff:g> ከማሳወቂያዎችዎ ጋር መስተጋብር እንዲፈጥር እና የእርስዎን ስልክ፣ ኤስኤምኤስ፣ ዕውቂያዎች፣ ማይክሮፎን እና በአቅራቢያ ያሉ መሣሪያዎች ፈቃዶችን እንዲደርስ ይፈቀድለታል።"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ይህ መተግበሪያ በእርስዎ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ላይ እነዚህን ፈቃዶች እንዲደርስ ይፈቀድለታል"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ይህን መረጃ ከስልክዎ እንዲደርስበት ይፍቀዱለት"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"መሣሪያ ተሻጋሪ አገልግሎቶች"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> በእርስዎ መሣሪያዎች መካከል መተግበሪያዎችን በዥረት ለመልቀቅ የእርስዎን <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> በእርስዎ መሣሪያዎች መካከል መተግበሪያዎችን በዥረት ለመልቀቅ የእርስዎን <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ይህን መረጃ ከስልክዎ ላይ እንዲደርስ ይፍቀዱለት"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"የGoogle Play አገልግሎቶች"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> የስልክዎን ፎቶዎች፣ ሚዲያ እና ማሳወቂያዎች ለመድረስ የእርስዎን <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> የስልክዎን ፎቶዎች፣ ሚዲያ እና ማሳወቂያዎች ለመድረስ የእርስዎን <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ይህን እርምጃ እንዲወስድ ፈቃድ ይሰጠው?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> የእርስዎን <xliff:g id="DEVICE_NAME">%2$s</xliff:g> በመወከል በአቅራቢያ ላሉ መሣሪያዎች መተግበሪያዎች እና ሌሎች የስርዓት ባህሪያትን በዥረት ለመልቀቅ ፈቃድ እየጠየቀ ነው"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"መሣሪያ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን በስልክዎ እና <xliff:g id="DEVICE_NAME">%1$s</xliff:g> መካከል ማስመር ይችላል"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን በስልክዎ እና በተመረጠው መሣሪያ መካከል ማስመር ይችላል"</string>
<string name="consent_yes" msgid="8344487259618762872">"ፍቀድ"</string>
<string name="consent_no" msgid="2640796915611404382">"አትፍቀድ"</string>
<string name="consent_back" msgid="2560683030046918882">"ተመለስ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"የስልክዎን መተግበሪያዎች በዥረት ይልቀቁ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ከስልክዎ ሆነው መተግበሪያዎች እና ሌሎች የስርዓት ባህሪያትን በዥረት ይልቀቁ"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ስልክ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ጡባዊ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ar/strings.xml b/packages/CompanionDeviceManager/res/values-ar/strings.xml
index 728767e..5a854e2 100644
--- a/packages/CompanionDeviceManager/res/values-ar/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ar/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"تطبيق \"مدير الجهاز المصاحب\""</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"هل تريد السماح لتطبيق <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> بالوصول إلى <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>؟"</string>
<string name="profile_name_watch" msgid="576290739483672360">"الساعة"</string>
<string name="chooser_title" msgid="2262294130493605839">"اختَر <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ليديرها تطبيق <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"هذا التطبيق مطلوب لإدارة \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". سيتم السماح لتطبيق \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" بمزامنة المعلومات، مثلاً اسم المتصل، والتفاعل مع الإشعارات والوصول إلى هاتفك، والرسائل القصيرة، وجهات الاتصال، والتقويم، وسجلات المكالمات وأذونات الأجهزة المجاورة."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"سيتم السماح لهذا التطبيق بمزامنة المعلومات، مثلاً اسم المتصل، والوصول إلى الأذونات التالية على <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"السماح لتطبيق <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> بإدارة <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"النظارة"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"يجب توفّر هذا التطبيق لإدارة \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". سيتم السماح لتطبيق \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" بالتفاعل مع الإشعارات والوصول إلى أذونات الهاتف والرسائل القصيرة وجهات الاتصال والميكروفون والأجهزة المجاورة."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"سيتم السماح لهذا التطبيق بالوصول إلى الأذونات التالية على <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"السماح لتطبيق <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> بالوصول إلى هذه المعلومات من هاتفك"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"الخدمات التي تعمل بين الأجهزة"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"يطلب تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> الحصول على إذن نيابةً عن <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> لمشاركة التطبيقات بين أجهزتك."</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"يطلب تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" الحصول على إذن نيابةً عن \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" لبثّ محتوى التطبيقات بين أجهزتك."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"السماح لتطبيق <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> بالوصول إلى هذه المعلومات من هاتفك"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"خدمات Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"يطلب تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> الحصول على إذن نيابةً عن <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> للوصول إلى الصور والوسائط والإشعارات في هاتفك."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"يطلب تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" الحصول على إذن نيابةً عن \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" للوصول إلى الصور والوسائط والإشعارات في هاتفك."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"هل تريد السماح للتطبيق <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> باتّخاذ هذا الإجراء؟"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"يطلب \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" الحصول على إذن نيابةً عن \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" لبثّ التطبيقات وميزات النظام الأخرى إلى أجهزتك المجاورة."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"جهاز"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"سيتمكّن هذا التطبيق من مزامنة المعلومات، مثل اسم المتصل، بين هاتفك و\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"سيتمكّن هذا التطبيق من مزامنة المعلومات، مثل اسم المتصل، بين هاتفك والجهاز المحدّد."</string>
<string name="consent_yes" msgid="8344487259618762872">"السماح"</string>
<string name="consent_no" msgid="2640796915611404382">"عدم السماح"</string>
<string name="consent_back" msgid="2560683030046918882">"رجوع"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"بث تطبيقات هاتفك"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"بثّ التطبيقات وميزات النظام الأخرى من هاتفك"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"هاتف"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"جهاز لوحي"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-as/strings.xml b/packages/CompanionDeviceManager/res/values-as/strings.xml
index b651bda..4c08891 100644
--- a/packages/CompanionDeviceManager/res/values-as/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-as/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"কম্পেনিয়ন ডিভাইচ মেনেজাৰ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ক <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> এক্সেছ কৰিবলৈ দিবনে?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ঘড়ী"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>এ পৰিচালনা কৰিব লগা এটা <xliff:g id="PROFILE_NAME">%1$s</xliff:g> বাছনি কৰক"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"আপোনাৰ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> পৰিচালনা কৰিবলৈ এই এপ্টোৰ আৱশ্যক। <xliff:g id="APP_NAME">%2$s</xliff:g>ক কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিবলৈ, আপোনাৰ জাননীৰ সৈতে ভাব-বিনিময় কৰিবলৈ আৰু আপোনাৰ ফ’ন, এছএমএছ, সম্পৰ্ক, কেলেণ্ডাৰ, কল লগ আৰু নিকটৱৰ্তী ডিভাইচৰ অনুমতি এক্সেছ কৰিবলৈ দিয়া হ’ব।"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"এই এপ্টোক ফ’ন কৰা লোকৰ নামৰ দৰে তথ্য ছিংক কৰিবলৈ আৰু আপোনাৰ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ক <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> পৰিচালনা কৰিবলৈ দিবনে?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"চছ্মা"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> পৰিচালনা কৰিবলৈ এই এপ্টোৰ আৱশ্যক। <xliff:g id="APP_NAME">%2$s</xliff:g>ক আপোনাৰ অনুমতিসমূহৰ সৈতে ভাব-বিনিময় কৰিবলৈ আৰু আপোনাৰ ফ’ন, এছএমএছ, সম্পৰ্ক, মাইক্ৰ’ফ’ন আৰু নিকটৱৰ্তী ডিভাইচৰ অনুমতিসমূহ এক্সেছ কৰিবলৈ দিয়া হ’ব।"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"এই এপ্টোক আপোনাৰ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ক আপোনাৰ ফ’নৰ পৰা এই তথ্যখিনি এক্সেছ কৰাৰ অনুমতি দিয়ক"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ক্ৰছ-ডিভাইচ সেৱাসমূহ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>ৰ হৈ আপোনাৰ ডিভাইচসমূহৰ মাজত এপ্ ষ্ট্ৰীম কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>ৰ হৈ আপোনাৰ ডিভাইচসমূহৰ মাজত এপ্ ষ্ট্ৰীম কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ক আপোনাৰ ফ’নৰ পৰা এই তথ্যখিনি এক্সেছ কৰাৰ অনুমতি দিয়ক"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play সেৱা"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>ৰ হৈ আপোনাৰ ফ’নৰ ফট’, মিডিয়া আৰু জাননী এক্সেছ কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>ৰ হৈ আপোনাৰ ফ’নৰ ফট’, মিডিয়া আৰু জাননী এক্সেছ কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>ক এই কাৰ্যটো সম্পাদন কৰিবলৈ দিবনে?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_NAME">%2$s</xliff:g>ৰ হৈ নিকটৱৰ্তী ডিভাইচত এপ্ আৰু ছিষ্টেমৰ অন্য সুবিধাসমূহ ষ্ট্ৰীম কৰাৰ অনুমতি দিবলৈ অনুৰোধ জনাইছে"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইচ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"এই এপ্টোৱে আপোনাৰ ফ’ন আৰু বাছনি কৰা <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ৰ মাজত কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিব পাৰিব"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"এই এপ্টোৱে আপোনাৰ ফ’ন আৰু বাছনি কৰা ডিভাইচটোৰ মাজত কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিব পাৰিব"</string>
<string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিয়ক"</string>
<string name="consent_no" msgid="2640796915611404382">"অনুমতি নিদিব"</string>
<string name="consent_back" msgid="2560683030046918882">"উভতি যাওক"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"আপোনাৰ ফ’নৰ এপ্ ষ্ট্ৰীম কৰক"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"আপোনাৰ ফ’নৰ পৰা এপ্ আৰু ছিষ্টেমৰ অন্য সুবিধাসমূহ ষ্ট্ৰীম কৰক"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ফ’ন"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"টেবলেট"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-az/strings.xml b/packages/CompanionDeviceManager/res/values-az/strings.xml
index 1052c9e..56fad60 100644
--- a/packages/CompanionDeviceManager/res/values-az/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-az/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Kompanyon Cihaz Meneceri"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tətbiqinə <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> cihazına daxil olmaq icazəsi verilsin?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"izləyin"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> tərəfindən idarə ediləcək <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Tətbiq <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazını idarə etmək üçün lazımdır. <xliff:g id="APP_NAME">%2$s</xliff:g> zəng edənin adı kimi məlumatları sinxronlaşdıracaq, bildirişlərə giriş edəcək, habelə Telefon, SMS, Kontaktlar, Təqvim, Zəng qeydləri və Yaxınlıqdakı cihazlar üzrə icazələrə daxil olacaq."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu tətbiq zəng edənin adı kimi məlumatları sinxronlaşdıra, <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tətbiqinə <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> cihazını idarə etmək icazəsi verilsin?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"eynək"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu tətbiq <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazını idarə etmək üçün lazımdır. <xliff:g id="APP_NAME">%2$s</xliff:g> bildirişlərə, Telefon, SMS, Kontaktlar, Mikrofon və Yaxınlıqdakı cihazlar icazələrinə giriş əldə edəcək."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu tətbiq <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tətbiqinə telefonunuzdan bu məlumata giriş icazəsi verin"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cihazlararası xidmətlər"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqi <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> adından cihazlarınız arasında tətbiqləri yayımlamaq üçün icazə istəyir"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> adından cihazlar arasında tətbiqləri yayımlamaq icazəsi istəyir"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tətbiqinə telefonunuzdan bu məlumata giriş icazəsi verin"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play xidmətləri"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqi <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> adından telefonunuzun fotoları, mediası və bildirişlərinə giriş üçün icazə istəyir"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> adından telefonun foto, media və bildirişlərinə giriş icazəsi istəyir"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> cihazına bu əməliyyatı yerinə yetirmək icazəsi verilsin?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_NAME">%2$s</xliff:g> adından tətbiq və digər sistem funksiyalarını yaxınlıqdakı cihazlara yayımlamaq icazəsi sitəyir"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Tətbiq zəng edənin adı kimi məlumatları telefon ilə <xliff:g id="DEVICE_NAME">%1$s</xliff:g> arasında sinxronlaşdıracaq"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Tətbiq zəng edənin adı kimi məlumatları telefon ilə seçilmiş cihaz arasında sinxronlaşdıracaq"</string>
<string name="consent_yes" msgid="8344487259618762872">"İcazə verin"</string>
<string name="consent_no" msgid="2640796915611404382">"İcazə verməyin"</string>
<string name="consent_back" msgid="2560683030046918882">"Geriyə"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefonunuzun tətbiqlərini yayımlayın"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Telefondan tətbiq və digər sistem funksiyalarını yayımlayın"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefonda"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"planşetdə"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
index 2569a83..457abf9 100644
--- a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menadžer pridruženog uređaja"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Dozvolite da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pristupa uređaju <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
<string name="chooser_title" msgid="2262294130493605839">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kojim će upravljati aplikacija <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> će dobiti dozvolu za sinhronizovanje informacija, poput osobe koja upućuje poziv, za interakciju sa obaveštenjima i pristup dozvolama za telefon, SMS, kontakte, kalendar, evidencije poziva i uređaje u blizini."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Ovoj aplikaciji će biti dozvoljeno da sinhronizuje podatke, poput imena osobe koja upućuje poziv, i pristupa tim dozvolama na vašem uređaju (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite li da dozvolite da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> upravlja uređajem <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"naočare"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> će dobiti dozvolu za interakciju sa obaveštenjima i pristup dozvolama za telefon, SMS, kontakte, mikrofon i uređaje u blizini."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ovoj aplikaciji će biti dozvoljeno da pristupa ovim dozvolama na vašem uređaju (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Dozvolite da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pristupa ovim informacijama sa telefona"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluge na više uređaja"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> za strimovanje aplikacija između uređaja"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za strimovanje aplikacija između uređaja"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Dozvolite da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pristupa ovim informacijama sa telefona"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play usluge"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> za pristup slikama, medijskom sadržaju i obaveštenjima sa telefona"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za pristup slikama, medijskom sadržaju i obaveštenjima sa telefona"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Želite li da dozvolite da <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> obavi ovu radnju?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> da strimuje aplikacije i druge sistemske funkcije na uređaje u blizini"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ova aplikacija će moći da sinhronizuje podatke, poput imena osobe koja upućuje poziv, između telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ova aplikacija će moći da sinhronizuje podatke, poput imena osobe koja upućuje poziv, između telefona i odabranog uređaja"</string>
<string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
<string name="consent_no" msgid="2640796915611404382">"Ne dozvoli"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Strimujte aplikacije na telefonu"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Strimujte aplikacije i druge sistemske funkcije sa telefona"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefonu"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletu"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-be/strings.xml b/packages/CompanionDeviceManager/res/values-be/strings.xml
index 5cee5c3..335ec44 100644
--- a/packages/CompanionDeviceManager/res/values-be/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-be/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Менеджар спадарожнай прылады"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Дазволіць праграме <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> доступ да прылады <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"гадзіннік"</string>
<string name="chooser_title" msgid="2262294130493605839">"Выберыце прыладу (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), якой будзе кіраваць праграма <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Гэта праграма неабходная для кіравання прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". <xliff:g id="APP_NAME">%2$s</xliff:g> зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць), узаемадзейнічаць з вашымі апавяшчэннямі, а таксама атрымае доступ да тэлефона, SMS, кантактаў, календара, журналаў выклікаў і прылад паблізу."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) на вашай прыладзе \"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>\" і атрымае наступныя дазволы"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Дазволіць праграме <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> кіраваць прыладай <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"акуляры"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Гэта праграма неабходная для кіравання прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". <xliff:g id="APP_NAME">%2$s</xliff:g> зможа ўзаемадзейнічаць з вашымі апавяшчэннямі і атрымае доступ да тэлефона, SMS, кантактаў, мікрафона і прылад паблізу."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Гэта праграма будзе мець на вашай прыладзе \"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>\" наступныя дазволы"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Дазвольце праграме <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> мець доступ да гэтай інфармацыі з вашага тэлефона"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Сэрвісы для некалькіх прылад"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>\" на трансляцыю праграм паміж вашымі прыладамі"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" на трансляцыю праграм паміж вашымі прыладамі"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Дазвольце праграме <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> мець доступ да гэтай інфармацыі з вашага тэлефона"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Сэрвісы Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>\" на доступ да фота, медыяфайлаў і апавяшчэнняў на вашым тэлефоне"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" на доступ да фота, медыяфайлаў і апавяшчэнняў на вашым тэлефоне"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Дазволіць прыладзе <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> выканаць гэта дзеянне?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" на перадачу плынню змесціва праграм і іншых функцый сістэмы на прылады паблізу"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"прылада"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) паміж тэлефонам і прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\""</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) паміж тэлефонам і выбранай прыладай"</string>
<string name="consent_yes" msgid="8344487259618762872">"Дазволіць"</string>
<string name="consent_no" msgid="2640796915611404382">"Не дазваляць"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Трансляцыя змесціва праграм з вашага тэлефона"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Перадача плынню змесціва праграм і іншых функцый сістэмы з вашага тэлефона"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"тэлефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"планшэт"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-bg/strings.xml b/packages/CompanionDeviceManager/res/values-bg/strings.xml
index 34a88ed..ae26942 100644
--- a/packages/CompanionDeviceManager/res/values-bg/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bg/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Да се разреши ли на <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да осъществява достъп до устройството <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"часовник"</string>
<string name="chooser_title" msgid="2262294130493605839">"Изберете устройство (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), което да се управлява от <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Това приложение е необходимо за управление на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ще получи право да синхронизира различна информация, като например името на обаждащия се, да взаимодейства с известията ви и достъп до разрешенията за телефона, SMS съобщенията, контактите, календара, списъците с обажданията и устройствата в близост."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Това приложение ще получи право да синхронизира различна информация, като например името на обаждащия се, и достъп до следните разрешения за вашия <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Разрешавате ли на <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да управлява устройството <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"очилата"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Това приложение е необходимо за управление на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Приложението <xliff:g id="APP_NAME">%2$s</xliff:g> ще получи право да взаимодейства с известията ви, както и достъп до разрешенията за телефона, SMS съобщенията, контактите, микрофона и устройствата в близост."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Това приложение ще има достъп до следните разрешения за вашия <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Разрешете на <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да осъществява достъп до тази информация от телефона ви"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Услуги за различни устройства"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ иска разрешение от името на <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> да предава поточно приложения между устройствата ви"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> да предава поточно приложения между устройствата ви"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Разрешете на <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да осъществява достъп до тази информация от телефона ви"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Услуги за Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за достъп до снимките, мултимедията и известията на телефона ви"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за достъп до снимките, мултимедията и известията на телефона ви"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Разрешавате ли на <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> да предприема това действие?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DEVICE_NAME">%2$s</xliff:g> да предава поточно приложения и други системни функции към устройства в близост"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Това приложение ще може да синхронизира различна информация, като например името на обаждащия се, между телефона ви и <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Това приложение ще може да синхронизира различна информация, като например името на обаждащия се, между телефона ви и избраното устройство"</string>
<string name="consent_yes" msgid="8344487259618762872">"Разрешаване"</string>
<string name="consent_no" msgid="2640796915611404382">"Забраняване"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Поточно предаване на приложенията на телефона ви"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Поточно предаване на приложения и други системни функции от телефона ви"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"таблет"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-bn/strings.xml b/packages/CompanionDeviceManager/res/values-bn/strings.xml
index 0fc220b..259a860 100644
--- a/packages/CompanionDeviceManager/res/values-bn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bn/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> অ্যাপকে <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> অ্যাক্সেস করার অনুমতি দেবেন?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ঘড়ি"</string>
<string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> বেছে নিন যেটি <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ম্যানেজ করবে"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"আপনার <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ম্যানেজ করতে এই অ্যাপটি প্রয়োজন। <xliff:g id="APP_NAME">%2$s</xliff:g> অ্যাপকে কলারের নাম ও আপনার বিজ্ঞপ্তির সাথে ইন্টার্যাক্ট করা সংক্রান্ত তথ্য সিঙ্কের অনুমতি দেওয়া হবে এবং আপনার ফোন, এসএমএস, পরিচিতি, ক্যালেন্ডার, কল লগ এবং আশেপাশের ডিভাইস ব্যবহার করার অনুমতির মতো তথ্যে অ্যাক্সেস দেওয়া হবে।"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"এই অ্যাপকে, কল করছেন এমন কোনও ব্যক্তির নামের মতো তথ্য সিঙ্ক এবং আপনার <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে দেওয়া হবে"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"আপনি কি <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ম্যানেজ করার জন্য <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>-কে অনুমতি দেবেন?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"চশমা"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ম্যানেজ করতে এই অ্যাপ দরকার। <xliff:g id="APP_NAME">%2$s</xliff:g>-কে আপনার বিজ্ঞপ্তির সাথে ইন্টার্যাক্ট করার এবং ফোন, এসএমএস, পরিচিতি, মাইক্রোফোন ও আশেপাশের ডিভাইসের অনুমতি অ্যাক্সেস করতে দেওয়া হবে।"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"এই অ্যাপ আপনার <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে পারবে"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"আপনার ফোন থেকে <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> অ্যাপকে এই তথ্য অ্যাক্সেস করার অনুমতি দিন"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ক্রস-ডিভাইস পরিষেবা"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"আপনার ডিভাইসগুলির মধ্যে অ্যাপ স্ট্রিম করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"আপনার ডিভাইসগুলির মধ্যে অ্যাপ স্ট্রিম করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"আপনার ফোন থেকে <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>-কে এই তথ্য অ্যাক্সেস করার অনুমতি দিন"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play পরিষেবা"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"আপনার ফোনের ফটো, মিডিয়া এবং তথ্য অ্যাক্সেস করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"আপনার ফোনের ফটো, মিডিয়া এবং তথ্য অ্যাক্সেস করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>কে এই অ্যাকশন করতে দেবেন?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"আশেপাশের ডিভাইসে অ্যাপ ও অন্যান্য সিস্টেম ফিচার স্ট্রিম করার জন্য আপনার <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-এর হয়ে <xliff:g id="APP_NAME">%1$s</xliff:g> অনুমতি চেয়ে অনুরোধ করছে"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইস"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"এই অ্যাপ, আপনার ফোন এবং <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ডিভাইসের মধ্যে তথ্য সিঙ্ক করতে পারবে, যেমন কোনও কলারের নাম"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"এই অ্যাপ, আপনার ফোন এবং বেছে নেওয়া ডিভাইসের মধ্যে তথ্য সিঙ্ক করতে পারবে, যেমন কোনও কলারের নাম"</string>
<string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিন"</string>
<string name="consent_no" msgid="2640796915611404382">"অনুমতি দেবেন না"</string>
<string name="consent_back" msgid="2560683030046918882">"ফিরুন"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"আপনার ফোনের অ্যাপ স্ট্রিম করুন"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"আপনার ফোন থেকে অ্যাপ ও অন্যান্য সিস্টেম ফিচার স্ট্রিম করে"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ফোন"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ট্যাবলেট"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-bs/strings.xml b/packages/CompanionDeviceManager/res/values-bs/strings.xml
index 869e3c6..1b6970d 100644
--- a/packages/CompanionDeviceManager/res/values-bs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bs/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Prateći upravitelj uređaja"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Dozvoliti aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da pristupa uređaju <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
<string name="chooser_title" msgid="2262294130493605839">"Odaberite uređaj \"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>\" kojim će upravljati aplikacija <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> će biti dozvoljeni sinhroniziranje informacija, kao što je ime osobe koja upućuje poziv, interakcija s obavještenjima i pristup odobrenjima za Telefon, SMS, Kontakte, Kalendar, Zapisnike poziva i Uređaje u blizini."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikaciji će biti dozvoljeni sinhroniziranje informacija, kao što je ime osobe koja upućuje poziv i pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Dozvoliti aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da upravlja uređajem <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"naočale"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> će biti dozvoljena interakcija s obavještenjima i pristup odobrenjima za Telefon, SMS, Kontakte, Mikrofon i Uređaje u blizini."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikaciji će biti dozvoljen pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Dozvolite da aplikacija <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pristupa ovim informacijama s telefona"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluga na više uređaja"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> zahtijeva odobrenje da prenosi aplikacije između vaših uređaja"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> zahtijeva odobrenje da prenosi aplikacije između vaših uređaja"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Dozvolite aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da pristupa ovim informacijama s vašeg telefona"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play usluge"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> zahtijeva odobrenje da pristupi fotografijama, medijima i odobrenjima na vašem telefonu"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> zahtijeva odobrenje da pristupi fotografijama, medijima i obavještenjima na telefonu"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Dozvoliti uređaju <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> da poduzme ovu radnju?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> traži odobrenje da prenosi aplikacije i druge funkcije sistema na uređajima u blizini"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ova aplikacija će moći sinhronizirati informacije, kao što je ime osobe koja upućuje poziv, između vašeg telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ova aplikacija će moći sinhronizirati informacije, kao što je ime osobe koja upućuje poziv, između vašeg telefona i odabranog uređaja"</string>
<string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
<string name="consent_no" msgid="2640796915611404382">"Nemoj dozvoliti"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Prenosite aplikacije s telefona"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Prijenos aplikacija i drugih funkcija sistema s vašeg telefona"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ca/strings.xml b/packages/CompanionDeviceManager/res/values-ca/strings.xml
index 4e89780..6b9238f 100644
--- a/packages/CompanionDeviceManager/res/values-ca/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ca/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestor de dispositius complementaris"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Permet que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> accedeixi a <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"rellotge"</string>
<string name="chooser_title" msgid="2262294130493605839">"Tria un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> perquè el gestioni <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Aquesta aplicació es necessita per gestionar el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> tindrà permís per sincronitzar informació, com ara el nom d\'algú que truca, per interaccionar amb les teves notificacions i accedir al telèfon, als SMS, als contactes, al calendari, als registres de trucades i als dispositius propers."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, i accedir a aquests permisos al dispositiu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permet que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> gestioni <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ulleres"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Aquesta aplicació es necessita per gestionar el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> tindrà permís per interaccionar amb les teves notificacions i accedir al telèfon, als SMS, als contactes, al micròfon i als dispositius propers."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aquesta aplicació podrà accedir a aquests permisos del dispositiu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permet que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> accedeixi a aquesta informació del telèfon"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Serveis multidispositiu"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> per reproduir en continu aplicacions entre els dispositius"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu dispositiu (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) per reproduir en continu aplicacions entre els dispositius"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Permet que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> accedeixi a aquesta informació del telèfon"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Serveis de Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> per accedir a les fotos, el contingut multimèdia i les notificacions del telèfon"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu dispositiu (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) per accedir a les fotos, el contingut multimèdia i les notificacions del telèfon"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vols permetre que <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> dugui a terme aquesta acció?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> sol·licita permís en nom del teu dispositiu (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) per reproduir en continu aplicacions i altres funcions del sistema en dispositius propers"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositiu"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, entre el teu telèfon i el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, entre el teu telèfon i el dispositiu triat"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permet"</string>
<string name="consent_no" msgid="2640796915611404382">"No permetis"</string>
<string name="consent_back" msgid="2560683030046918882">"Enrere"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Reprodueix en continu aplicacions del telèfon"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Reprodueix en continu aplicacions i altres funcions del sistema des del telèfon"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telèfon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tauleta"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-cs/strings.xml b/packages/CompanionDeviceManager/res/values-cs/strings.xml
index 0e6bf0e..beb6060 100644
--- a/packages/CompanionDeviceManager/res/values-cs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-cs/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Správce doprovodných zařízení"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Povolit aplikaci <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> přístup k <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"hodinky"</string>
<string name="chooser_title" msgid="2262294130493605839">"Vyberte zařízení <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, které chcete spravovat pomocí aplikace <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Tato aplikace je nutná ke správě zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude moci synchronizovat údaje, jako je jméno volajícího, interagovat s vašimi oznámeními a získat přístup k vašim oprávněním k telefonu, SMS, kontaktům, kalendáři, seznamům hovorů a zařízením v okolí."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, a získat přístup k těmto oprávněním v <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Povolit aplikaci <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> spravovat zařízení <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"brýle"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Tato aplikace je nutná ke správě zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude moci interagovat s vašimi oznámeními a získat přístup k vašim oprávněním k telefonu, SMS, kontaktům, mikrofonu a zařízením v okolí."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Tato aplikace bude mít ve vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> povolený přístup k těmto oprávněním:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Povolte aplikaci <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> přístup k těmto informacím z vašeho telefonu"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Služby pro více zařízení"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> požaduje za vaše zařízení <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> oprávnění ke streamování aplikací mezi zařízeními"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> požaduje za vaše zařízení <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> oprávnění ke streamování aplikací mezi zařízeními"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Povolte aplikaci <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> přístup k těmto informacím z vašeho telefonu"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Služby Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> požaduje za vaše zařízení <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> oprávnění k přístupu k fotkám, médiím a oznámením v telefonu"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> požaduje za vaše zařízení <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> oprávnění k přístupu k fotkám, médiím a oznámením v telefonu"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Povolit zařízení <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> podniknout tuto akci?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> žádá jménem vašeho zařízení <xliff:g id="DEVICE_NAME">%2$s</xliff:g> o oprávnění streamovat aplikace a další systémové funkce do zařízení v okolí"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"zařízení"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, mezi vaším telefonem a zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, mezi vaším telefonem a vybraným zařízením"</string>
<string name="consent_yes" msgid="8344487259618762872">"Povolit"</string>
<string name="consent_no" msgid="2640796915611404382">"Nepovolovat"</string>
<string name="consent_back" msgid="2560683030046918882">"Zpět"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streamujte aplikace v telefonu"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Streamování aplikací a dalších systémových funkcí z telefonu"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefonu"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletu"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml
index b78deee..40c93bd 100644
--- a/packages/CompanionDeviceManager/res/values-da/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-da/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Medfølgende enhedsadministrator"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Vil du give <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> adgang til <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ur"</string>
<string name="chooser_title" msgid="2262294130493605839">"Vælg det <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, som skal administreres af <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Du skal bruge denne app for at administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilladelse til at interagere med dine notifikationer og synkronisere oplysninger som f.eks. navnet på en person, der ringer, og appen får adgang til dine tilladelser for Opkald, Sms, Kalender, Opkaldshistorik og Enheder i nærheden."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Denne app får tilladelse til at synkronisere oplysninger, f.eks. navne på dem, der ringer, og adgang til disse tilladelser på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du tillade, at <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> administrerer <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"briller"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Du skal bruge denne app for at administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilladelse til at interagere med dine notifikationer og tilgå tilladelserne Telefon, Sms, Kontakter, Mikrofon og Enheder i nærheden."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Denne app får adgang til disse tilladelser på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Giv <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> adgang til disse oplysninger fra din telefon"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjenester, som kan tilsluttes en anden enhed"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> til at streame apps mellem dine enheder"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> til at streame apps mellem dine enheder"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Tillad, at <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> får adgang til disse oplysninger fra din telefon"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjenester"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> til at få adgang til din telefons billeder, medier og notifikationer"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> til at få adgang til din telefons billeder, medier og notifikationer"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vil du tillade, at <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> foretager denne handling?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til at streame apps og andre systemfunktioner til enheder i nærheden"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"enhed"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Denne app vil kunne synkronisere oplysninger som f.eks. navnet på en person, der ringer, mellem din telefon og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Denne app vil kunne synkronisere oplysninger som f.eks. navnet på en person, der ringer, mellem din telefon og den valgte enhed"</string>
<string name="consent_yes" msgid="8344487259618762872">"Tillad"</string>
<string name="consent_no" msgid="2640796915611404382">"Tillad ikke"</string>
<string name="consent_back" msgid="2560683030046918882">"Tilbage"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream din telefons apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps og andre systemfunktioner fra din telefon"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml
index 1d20a4d..99cf792 100644
--- a/packages/CompanionDeviceManager/res/values-de/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-de/strings.xml
@@ -17,28 +17,25 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Begleitgerät-Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Zulassen, dass <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> auf das Gerät <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> zugreifen darf?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"Smartwatch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Gerät „<xliff:g id="PROFILE_NAME">%1$s</xliff:g>“ auswählen, das von <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> verwaltet werden soll"</string>
<!-- no translation found for summary_watch (898569637110705523) -->
<skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Diese App darf dann Daten wie den Namen eines Anrufers synchronisieren und auf folgende Berechtigungen auf deinem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> zugreifen"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Zulassen, dass <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> das Gerät <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> verwalten darf"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Glass-Geräte"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Diese App wird zur Verwaltung deines Geräts (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) benötigt. <xliff:g id="APP_NAME">%2$s</xliff:g> darf mit deinen Benachrichtigungen interagieren und auf die Berechtigungen „Telefon“, „SMS“, „Kontakte“, „Mikrofon“ und „Geräte in der Nähe“ zugreifen."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Diese App darf dann auf die folgenden Berechtigungen auf deinem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> zugreifen:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> Zugriff auf diese Informationen von deinem Smartphone gewähren"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Geräteübergreifende Dienste"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet für dein <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> um die Berechtigung zum Streamen von Apps zwischen deinen Geräten"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet für dein <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> um die Berechtigung zum Streamen von Apps zwischen deinen Geräten"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> Zugriff auf diese Informationen von deinem Smartphone gewähren"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-Dienste"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet im Namen deines <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> um die Berechtigung zum Zugriff auf die Fotos, Medien und Benachrichtigungen deines Smartphones"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet im Namen deines <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> um die Berechtigung zum Zugriff auf die Fotos, Medien und Benachrichtigungen deines Smartphones"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Darf das Gerät <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> diese Aktion ausführen?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet für dein Gerät (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) um die Berechtigung, Apps und andere Systemfunktionen auf Geräte in der Nähe zu streamen"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"Gerät"</string>
@@ -75,8 +72,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Smartphone-Apps streamen"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Apps und andere Systemfunktionen von deinem Smartphone streamen"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"Smartphone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"Tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml
index 8cb6e63..137ea73 100644
--- a/packages/CompanionDeviceManager/res/values-el/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-el/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Διαχείριση συνοδευτικής εφαρμογής"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Να επιτρέπεται στην εφαρμογή <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> να έχει πρόσβαση στη συσκευή <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ;"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ρολόι"</string>
<string name="chooser_title" msgid="2262294130493605839">"Επιλέξτε ένα προφίλ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για διαχείριση από την εφαρμογή <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Αυτή η εφαρμογή είναι απαραίτητη για τη διαχείριση της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Η εφαρμογή <xliff:g id="APP_NAME">%2$s</xliff:g> θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, να αλληλεπιδρά με τις ειδοποιήσεις σας και να αποκτά πρόσβαση στις άδειες Τηλέφωνο, SMS, Επαφές, Ημερολόγιο, Αρχεία καταγρ. κλήσ. και Συσκευές σε κοντινή απόσταση."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, και να αποκτά πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Να επιτρέπεται στην εφαρμογή <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> να διαχειρίζεται τη συσκευή <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ;"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"γυαλιά"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Αυτή η εφαρμογή είναι απαραίτητη για τη διαχείριση της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Θα επιτρέπεται στην εφαρμογή <xliff:g id="APP_NAME">%2$s</xliff:g> να αλληλεπιδρά με τις ειδοποιήσεις σας και να αποκτά πρόσβαση στις άδειες για το Τηλέφωνο, τα SMS, τις Επαφές, το Μικρόφωνο και τις Συσκευές σε κοντινή απόσταση."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Αυτή η εφαρμογή θα μπορεί να έχει πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Να επιτρέπεται στο <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> η πρόσβαση σε αυτές τις πληροφορίες από το τηλέφωνό σας."</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Υπηρεσίες πολλών συσκευών"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> άδεια για ροή εφαρμογών μεταξύ των συσκευών σας"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> άδεια για ροή εφαρμογών μεταξύ των συσκευών σας"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Επιτρέψτε στην εφαρμογή <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> να έχει πρόσβαση σε αυτές τις πληροφορίες από το τηλέφωνό σας"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Υπηρεσίες Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> άδεια για πρόσβαση στις φωτογραφίες, τα αρχεία μέσων και τις ειδοποιήσεις του τηλεφώνου σας"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> άδεια για πρόσβαση στις φωτογραφίες, τα αρχεία μέσων και τις ειδοποιήσεις του τηλεφώνου σας"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Να επιτρέπεται στη συσκευή <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> να εκτελεί αυτήν την ενέργεια;"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά άδεια εκ μέρους της συσκευής σας <xliff:g id="DEVICE_NAME">%2$s</xliff:g> για ροή εφαρμογών και άλλων λειτουργιών του συστήματος σε συσκευές σε κοντινή απόσταση"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"συσκευή"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες μεταξύ του τηλεφώνου και της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, όπως το όνομα ενός ατόμου που σας καλεί."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες μεταξύ του τηλεφώνου και της επιλεγμένης συσκευής σας, όπως το όνομα ενός ατόμου που σας καλεί."</string>
<string name="consent_yes" msgid="8344487259618762872">"Να επιτρέπεται"</string>
<string name="consent_no" msgid="2640796915611404382">"Να μην επιτρέπεται"</string>
<string name="consent_back" msgid="2560683030046918882">"Πίσω"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Μεταδώστε σε ροή τις εφαρμογές του τηλεφώνου σας"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Ροή εφαρμογών και άλλων λειτουργιών του συστήματος από το τηλέφωνό σας"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"τηλέφωνο"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
index ff1394d..3a3ef18 100644
--- a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to manage <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to stream apps between your devices"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> to take this action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
<string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream your phone’s apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps and other system features from your phone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"phone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
index 21255751..4afe1a8 100644
--- a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
@@ -17,27 +17,24 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
<string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to manage <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your Phone, SMS, Contacts, Microphone and Nearby devices permissions."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to stream apps between your devices"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to access your phone’s photos, media, and notifications"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to access your phone’s photos, media, and notifications"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> to take this action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
@@ -72,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream your phone’s apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps and other system features from your phone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"phone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
index ff1394d..3a3ef18 100644
--- a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to manage <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to stream apps between your devices"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> to take this action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
<string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream your phone’s apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps and other system features from your phone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"phone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
index ff1394d..3a3ef18 100644
--- a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to manage <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to stream apps between your devices"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to access your phone’s photos, media and notifications"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> to take this action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
<string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
<string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
<string name="consent_back" msgid="2560683030046918882">"Back"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream your phone’s apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps and other system features from your phone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"phone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
index b012b6f..e5d11dc 100644
--- a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
@@ -17,27 +17,24 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
<string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to manage <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your Phone, SMS, Contacts, Microphone and Nearby devices permissions."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to stream apps between your devices"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Allow <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> to access this information from your phone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> to access your phone’s photos, media, and notifications"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to access your phone’s photos, media, and notifications"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> to take this action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
@@ -72,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream your phone’s apps"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Stream apps and other system features from your phone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"phone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
index 578af1d..f4d8d08 100644
--- a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Administrador de dispositivo complementario"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"¿Quieres permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"reloj"</string>
<string name="chooser_title" msgid="2262294130493605839">"Elige un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para que la app <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> lo administre"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Esta app es necesaria para administrar tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá sincronizar información, como el nombre de la persona que llama, interactuar con tus notificaciones y acceder a los permisos de Teléfono, SMS, Contactos, Calendario, Llamadas y Dispositivos cercanos."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta app podrá sincronizar información, como el nombre de alguien cuando te llame, y acceder a los siguientes permisos en tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permite que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> administre <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Gafas"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta app es necesaria para administrar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá interactuar con tus notificaciones y acceder a los permisos de Teléfono, SMS, Contactos, Micrófono y Dispositivos cercanos."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta app podrá acceder a los siguientes permisos en tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permite que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información de tu teléfono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicios multidispositivo"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicita tu permiso en nombre de <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para transmitir apps entre dispositivos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicita tu permiso en nombre de <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para transmitir apps entre dispositivos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Permite que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información de tu teléfono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Servicios de Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicita tu permiso en nombre de <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para acceder a las fotos, el contenido multimedia y las notificaciones de tu teléfono"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicita tu permiso en nombre de <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acceder a las fotos, el contenido multimedia y las notificaciones de tu teléfono"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"¿Permites que <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> realice esta acción?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nombre de tu <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para transmitir apps y otras funciones del sistema a dispositivos cercanos"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta app podrá sincronizar información, como el nombre de la persona que llama, entre el teléfono y <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Esta app podrá sincronizar información, como el nombre de la persona que llama, entre el teléfono y el dispositivo elegido"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Transmitir las apps de tu teléfono"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Transmite apps y otras funciones del sistema desde tu teléfono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"teléfono"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-es/strings.xml b/packages/CompanionDeviceManager/res/values-es/strings.xml
index 19c556f..11e64f3 100644
--- a/packages/CompanionDeviceManager/res/values-es/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestor de dispositivos complementario"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"¿Permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a tu <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"reloj"</string>
<string name="chooser_title" msgid="2262294130493605839">"Elige un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para gestionarlo con <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Se necesita esta aplicación para gestionar tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá sincronizar información (por ejemplo, el nombre de la persona que te llama), interactuar con tus notificaciones y acceder a tus permisos de teléfono, SMS, contactos, calendario, registros de llamadas y dispositivos cercanos."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta aplicación podrá sincronizar información, como el nombre de la persona que llama, y acceder a estos permisos de tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"¿Permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> gestione <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"gafas"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Se necesita esta aplicación para gestionar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá interactuar con tus notificaciones y acceder a tus permisos de teléfono, SMS, contactos, micrófono y dispositivos cercanos."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta aplicación podrá acceder a estos permisos de tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información de tu teléfono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicios multidispositivo"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para emitir aplicaciones en otros dispositivos tuyos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para emitir aplicaciones en otros dispositivos tuyos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información de tu teléfono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Servicios de Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para acceder a las fotos, los archivos multimedia y las notificaciones de tu teléfono"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acceder a las fotos, los archivos multimedia y las notificaciones de tu teléfono"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"¿Permitir que <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> realice esta acción?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para emitir aplicaciones y otras funciones del sistema en dispositivos cercanos"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta aplicación podrá sincronizar información (por ejemplo, el nombre de la persona que te llama) entre tu teléfono y <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación podrá sincronizar información (por ejemplo, el nombre de la persona que te llama) entre tu teléfono y el dispositivo que elijas"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Muestra en streaming las aplicaciones de tu teléfono"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Emite aplicaciones y otras funciones del sistema desde tu teléfono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"teléfono"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-et/strings.xml b/packages/CompanionDeviceManager/res/values-et/strings.xml
index bbd3ae4..696b83f 100644
--- a/packages/CompanionDeviceManager/res/values-et/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-et/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Kaasseadme haldur"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Andke rakendusele <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> juurdepääs seadmele <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"käekell"</string>
<string name="chooser_title" msgid="2262294130493605839">"Valige <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, mida haldab rakendus <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Seda rakendust on vaja teie seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> haldamiseks. Rakendusel <xliff:g id="APP_NAME">%2$s</xliff:g> lubatakse sünkroonida teavet, näiteks helistaja nime, kasutada teie märguandeid ning pääseda juurde teie telefoni, SMS-ide, kontaktide, kalendri, kõnelogide ja läheduses olevate seadmete lubadele."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Sellel rakendusel lubatakse sünkroonida teavet (nt helistaja nime) ja antakse need load teie seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Lubage rakendusel <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> hallata seadet <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"prillid"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Seda rakendust on vaja seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> haldamiseks. Rakendusel <xliff:g id="APP_NAME">%2$s</xliff:g> lubatakse kasutada teie märguandeid ning pääseda juurde teie telefoni, SMS-ide, kontaktide, mikrofoni ja läheduses olevate seadmete lubadele."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Sellele rakendusele antakse need load teie seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Lubage rakendusel <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pääseda teie telefonis juurde sellele teabele"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Seadmeülesed teenused"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nimel luba teie seadmete vahel rakendusi voogesitada"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nimel luba teie seadmete vahel rakendusi voogesitada"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Lubage rakendusel <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pääseda teie telefonis juurde sellele teabele"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play teenused"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nimel luba pääseda juurde telefoni fotodele, meediale ja märguannetele"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nimel luba pääseda juurde telefoni fotodele, meediale ja märguannetele"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Kas lubada seadmel <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> teha seda toimingut?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DEVICE_NAME">%2$s</xliff:g> nimel luba voogesitada rakendusi ja muid süsteemi funktsioone läheduses olevatesse seadmetesse"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"seade"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"See rakendus saab sünkroonida teavet, näiteks helistaja nime, teie telefoni ja seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> vahel"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"See rakendus saab sünkroonida teavet, näiteks helistaja nime, teie telefoni ja valitud seadme vahel"</string>
<string name="consent_yes" msgid="8344487259618762872">"Luba"</string>
<string name="consent_no" msgid="2640796915611404382">"Ära luba"</string>
<string name="consent_back" msgid="2560683030046918882">"Tagasi"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefoni rakenduste voogesitamine"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Rakenduste ja muude süsteemi funktsioonide voogesitamine teie telefonist"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tahvelarvuti"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-eu/strings.xml b/packages/CompanionDeviceManager/res/values-eu/strings.xml
index 1185b2d..6ce4654 100644
--- a/packages/CompanionDeviceManager/res/values-eu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-eu/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gailu osagarriaren kudeatzailea"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> erabiltzeko baimena eman nahi diozu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"erlojua"</string>
<string name="chooser_title" msgid="2262294130493605839">"Aukeratu <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> aplikazioak kudeatu beharreko <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Aplikazioa <xliff:g id="DEVICE_NAME">%1$s</xliff:g> kudeatzeko behar da. Informazioa sinkronizatzeko (esate baterako, deitzaileen izenak), jakinarazpenekin interakzioan aritzeko, eta telefonoa, SMSak, kontaktuak, egutegia, deien erregistroak eta inguruko gailuak erabiltzeko baimena izango du <xliff:g id="APP_NAME">%2$s</xliff:g> aplikazioak."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>n informazioa sinkronizatu (esate baterako, deitzaileen izenak) eta baimen hauek erabili ahalko ditu aplikazioak"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> kudeatzeko baimena eman nahi diozu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"betaurrekoak"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailua kudeatzeko behar da aplikazioa. Jakinarazpenekin interakzioan aritzeko, eta telefonoa, SMSak, kontaktuak, mikrofonoa eta inguruko gailuak erabiltzeko baimena izango du <xliff:g id="APP_NAME">%2$s</xliff:g> aplikazioak."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>n baimen hauek erabili ahalko ditu aplikazioak:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Eman informazioa telefonotik hartzeko baimena <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Gailu baterako baino gehiagotarako zerbitzuak"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Gailu batetik bestera aplikazioak igortzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> gailuaren izenean"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Gailu batetik bestera aplikazioak igortzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> gailuaren izenean"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Eman telefonoko informazio hau erabiltzeko baimena <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aplikazioari"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Telefonoko argazkiak, multimedia-edukia eta jakinarazpenak erabiltzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> gailuaren izenean"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Telefonoko argazkiak, multimedia-edukia eta jakinarazpenak erabiltzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> gailuaren izenean"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ekintza hau gauzatzeko baimena eman nahi diozu <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> aplikazioari?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikazioak eta sistemaren beste eginbide batzuk inguruko gailuetara igortzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_NAME">%2$s</xliff:g> gailuaren izenean"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"gailua"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Telefonoaren eta <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuaren artean informazioa sinkronizatzeko gai izango da aplikazioa (esate baterako, deitzaileen izenak)"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Telefonoaren eta hautatutako gailuaren artean informazioa sinkronizatzeko gai izango da aplikazioa (esate baterako, deitzaileen izenak)"</string>
<string name="consent_yes" msgid="8344487259618762872">"Eman baimena"</string>
<string name="consent_no" msgid="2640796915611404382">"Ez eman baimenik"</string>
<string name="consent_back" msgid="2560683030046918882">"Atzera"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Igorri zuzenean telefonoko aplikazioak"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Igorri aplikazioak eta sistemaren beste eginbide batzuk telefonotik"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"Telefonoa"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"Tableta"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-fa/strings.xml b/packages/CompanionDeviceManager/res/values-fa/strings.xml
index d77c5c9..6a19bd6 100644
--- a/packages/CompanionDeviceManager/res/values-fa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fa/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"مدیر دستگاه مرتبط"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"به <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> اجازه داده شود به <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> دسترسی پیدا کند؟"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ساعت"</string>
<string name="chooser_title" msgid="2262294130493605839">"انتخاب <xliff:g id="PROFILE_NAME">%1$s</xliff:g> برای مدیریت کردن با <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"این برنامه برای مدیریت <xliff:g id="DEVICE_NAME">%1$s</xliff:g> شما لازم است. به <xliff:g id="APP_NAME">%2$s</xliff:g> اجازه داده میشود اطلاعاتی مثل نام شخصی را که تماس میگیرد همگامسازی کند، با اعلانهای شما تعامل داشته باشد، و به اجازههای «تلفن»، «پیامک»، «مخاطبین»، «تقویم»، «گزارشهای تماس»، و «دستگاههای اطراف» دسترسی داشته باشد."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"به این برنامه اجازه داده میشود اطلاعاتی مثل نام تماسگیرنده را همگامسازی کند و به این اجازهها در <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> شما دسترسی داشته باشد"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"به <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> اجازه داده شود <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> را مدیریت کند؟"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"عینک"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"این برنامه برای مدیریت <xliff:g id="DEVICE_NAME">%1$s</xliff:g> لازم است. به <xliff:g id="APP_NAME">%2$s</xliff:g> اجازه داده میشود با اعلانهای شما تعامل داشته باشد و به اجازههای «تلفن»، «پیامک»، «مخاطبین»، «میکروفون»، و «دستگاههای اطراف» دسترسی داشته باشد."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"این برنامه مجاز میشود به این اجازهها در <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> شما دسترسی پیدا کند"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"اجازه دادن به <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> برای دسترسی به اطلاعات تلفن"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"سرویسهای بیندستگاهی"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> اجازه میخواهد ازطرف <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> برنامهها را بین دستگاههای شما جاریسازی کند"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ازطرف <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> اجازه میخواهد برنامهها را بین دستگاههای شما جاریسازی کند"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"به <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> اجازه دسترسی به این اطلاعات در دستگاهتان داده شود"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"خدمات Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> اجازه میخواهد ازطرف <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> به عکسها، رسانهها، و اعلانهای تلفن شما دسترسی پیدا کند"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ازطرف <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> اجازه میخواهد به عکسها، رسانهها، و اعلانهای تلفن شما دسترسی پیدا کند"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"به <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> اجازه داده شود این اقدام را انجام دهد؟"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ازطرف <xliff:g id="DEVICE_NAME">%2$s</xliff:g> اجازه میخواهد تا برنامهها و دیگر ویژگیهای سیستم را در دستگاههای اطراف جاریسازی کند."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"دستگاه"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"این برنامه مجاز میشود اطلاعتی مثل نام شخصی را که تماس میگیرد بین تلفن شما و <xliff:g id="DEVICE_NAME">%1$s</xliff:g> همگامسازی کند"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"این برنامه مجاز میشود اطلاعتی مثل نام شخصی را که تماس میگیرد بین تلفن شما و دستگاه انتخابشده همگامسازی کند"</string>
<string name="consent_yes" msgid="8344487259618762872">"اجازه دادن"</string>
<string name="consent_no" msgid="2640796915611404382">"اجازه ندادن"</string>
<string name="consent_back" msgid="2560683030046918882">"برگشتن"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"جاریسازی برنامههای تلفن"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"برنامهها و دیگر ویژگیهای سیستم را از تلفن شما جاریسازی میکند"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"تلفن"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"رایانه لوحی"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-fi/strings.xml b/packages/CompanionDeviceManager/res/values-fi/strings.xml
index c679f86..b8186bb 100644
--- a/packages/CompanionDeviceManager/res/values-fi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fi/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Sallitaanko, että <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> saa pääsyn laitteeseen: <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"kello"</string>
<string name="chooser_title" msgid="2262294130493605839">"Valitse <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, jota <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> hallinnoi"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ylläpitoon (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) tarvitaan tätä sovellusta. <xliff:g id="APP_NAME">%2$s</xliff:g> saa luvan synkronoida tietoja (esimerkiksi soittajan nimen), hallinnoida ilmoituksiasi sekä pääsyn puhelimeen, tekstiviesteihin, yhteystietoihin, kalenteriin, puhelulokeihin ja lähellä olevat laitteet ‑lupiin."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Sovellus saa luvan synkronoida tietoja (esimerkiksi soittajan nimen) ja pääsyn näihin lupiin laitteella (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Salli, että <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> saa ylläpitää laitetta: <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"lasit"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> edellyttää ylläpitoon tätä sovellusta. <xliff:g id="APP_NAME">%2$s</xliff:g> saa luvan hallinnoida ilmoituksiasi sekä pääsyn puhelimeen, tekstiviesteihin, yhteystietoihin, mikrofoniin ja lähellä olevat laitteet ‑lupiin."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Tämä sovellus saa käyttää näitä lupia laitteella (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Salli, että <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> saa pääsyn näihin puhelimesi tietoihin"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Laitteidenväliset palvelut"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) puolesta lupaa striimata sovelluksia laitteidesi välillä"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) puolesta lupaa striimata sovelluksia laitteidesi välillä"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Salli pääsy tähän tietoon puhelimellasi: <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Palvelut"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) puolesta lupaa päästä puhelimesi kuviin, mediaan ja ilmoituksiin"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) puolesta lupaa päästä puhelimesi kuviin, mediaan ja ilmoituksiin"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Sallitko, että <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> voi suorittaa tämän toiminnon?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) puolesta lupaa striimata sovelluksia ja muita järjestelmän ominaisuuksia lähellä oleviin laitteisiin."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"laite"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Sovellus voi synkronoida tietoja (esimerkiksi soittajan nimen) puhelimesi ja laitteen (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) välillä"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Sovellus voi synkronoida tietoja (esimerkiksi soittajan nimen) puhelimesi ja valitun laitteen välillä"</string>
<string name="consent_yes" msgid="8344487259618762872">"Salli"</string>
<string name="consent_no" msgid="2640796915611404382">"Älä salli"</string>
<string name="consent_back" msgid="2560683030046918882">"Takaisin"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Striimaa puhelimen sovelluksia"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Striimaa sovelluksia ja muita järjestelmän ominaisuuksia puhelimesta"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"puhelin"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletti"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
index f88864d..d0cee6f 100644
--- a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestionnaire d\'appareil compagnon"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"montre"</string>
<string name="chooser_title" msgid="2262294130493605839">"Choisissez un(e) <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qui sera géré(e) par <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Cette application est nécessaire pour gérer votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation de synchroniser des informations, comme le nom de l\'appelant, d\'interagir avec vos notifications et d\'accéder à vos autorisations pour le téléphone, les messages texte, les contacts, l\'agenda, les journaux d\'appels et les appareils à proximité."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Cette application sera autorisée à synchroniser des informations, comme le nom de l\'appelant, et à accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à gérer <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"lunettes"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Cette application est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> sera autorisée à interagir avec vos notifications et à accéder à vos autorisations pour le téléphone, les messages texte, les contacts, le microphone et les appareils à proximité."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Cette application pourra accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Autorisez <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à ces informations à partir de votre téléphone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Services multiappareils"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> pour diffuser des applications entre vos appareils"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour diffuser des applications entre vos appareils"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Autorisez <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à ces informations à partir de votre téléphone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Services Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> pour accéder aux photos, aux fichiers multimédias et aux notifications de votre téléphone"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour accéder aux photos, aux fichiers multimédias et aux notifications de votre téléphone"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Autoriser <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> à effectuer cette action?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation, au nom de votre <xliff:g id="DEVICE_NAME">%2$s</xliff:g>, de diffuser des applications et d\'autres fonctionnalités du système sur des appareils à proximité"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Cette application pourra synchroniser des informations, comme le nom de l\'appelant, entre votre téléphone et <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Cette application pourra synchroniser des informations, comme le nom de l\'appelant, entre votre téléphone et l\'appareil sélectionné"</string>
<string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
<string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
<string name="consent_back" msgid="2560683030046918882">"Retour"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Diffusez les applications de votre téléphone"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Diffusez des applications et d\'autres fonctionnalités du système à partir de votre téléphone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"téléphone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablette"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-fr/strings.xml b/packages/CompanionDeviceManager/res/values-fr/strings.xml
index 94d00af..b51188e 100644
--- a/packages/CompanionDeviceManager/res/values-fr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestionnaire d\'appareils associés"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"montre"</string>
<string name="chooser_title" msgid="2262294130493605839">"Sélectionnez le/la <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qui sera géré(e) par <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Cette appli est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation de synchroniser des infos (comme le nom de l\'appelant), d\'interagir avec vos notifications et d\'accéder à votre téléphone, à votre agenda, ainsi qu\'à vos SMS, contacts, journaux d\'appels et appareils à proximité."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Cette appli sera autorisée à synchroniser des infos (comme le nom de l\'appelant) et disposera de ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à gérer <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"lunettes"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Cette appli est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation d\'interagir avec vos notifications et d\'accéder aux autorisations du téléphone, des SMS, des contacts, du micro et des appareils à proximité."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Cette appli sera autorisée à accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à ces informations depuis votre téléphone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Services inter-appareils"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> pour caster des applis d\'un appareil à l\'autre"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour caster des applis d\'un appareil à l\'autre"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Autoriser <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> à accéder à ces informations depuis votre téléphone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Services Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> pour accéder aux photos, contenus multimédias et notifications de votre téléphone"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour accéder aux photos, contenus multimédias et notifications de votre téléphone"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Autoriser <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> à effectuer cette action ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_NAME">%2$s</xliff:g> de diffuser des applis et d\'autres fonctionnalités système en streaming sur des appareils à proximité"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Cette appli pourra synchroniser des infos, comme le nom de l\'appelant, entre votre téléphone et <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Cette appli pourra synchroniser des infos, comme le nom de l\'appelant, entre votre téléphone et l\'appareil choisi"</string>
<string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
<string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
<string name="consent_back" msgid="2560683030046918882">"Retour"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Diffuser en streaming les applis de votre téléphone"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Diffusez des applis et d\'autres fonctionnalités système en streaming depuis votre téléphone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"Téléphone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"Tablette"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-gl/strings.xml b/packages/CompanionDeviceManager/res/values-gl/strings.xml
index f9b1475..f5017d1 100644
--- a/packages/CompanionDeviceManager/res/values-gl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gl/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Xestor de dispositivos complementarios"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Queres permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda ao dispositivo (<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>)?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"reloxo"</string>
<string name="chooser_title" msgid="2262294130493605839">"Escolle un dispositivo (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) para que o xestione a aplicación <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Esta aplicación é necesaria para xestionar o teu dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> poderá sincronizar información (por exemplo, o nome de quen chama), interactuar coas túas notificacións e acceder aos permisos do teu teléfono, das SMS, dos contactos, do calendario, dos rexistros de chamadas e dos dispositivos próximos."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) e acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Queres permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> xestione o dispositivo (<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>)?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"lentes"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta aplicación é necesaria para xestionar o dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> poderá interactuar coas túas notificacións e acceder aos permisos do teu teléfono, das SMS, dos contactos, do micrófono e dos dispositivos próximos."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta aplicación poderá acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permitir que a aplicación <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información desde o teu teléfono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Servizos multidispositivo"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) para emitir contido de aplicacións entre os teus aparellos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) para emitir contido de aplicacións entre os teus aparellos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Permitir que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acceda a esta información do teu teléfono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Servizos de Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) para acceder ás fotos, ao contido multimedia e ás notificacións do teléfono"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) para acceder ás fotos, ao contido multimedia e ás notificacións do teléfono"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Queres permitir que <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> leve a cabo esta acción?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) para emitir o contido das aplicacións e doutras funcións do sistema en dispositivos próximos"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) entre o teléfono e o dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) entre o teléfono e o dispositivo escollido"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"Non permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Emite as aplicacións do teu teléfono"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Emite o contido das aplicacións e doutras funcións do sistema desde o teléfono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"teléfono"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tableta"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-gu/strings.xml b/packages/CompanionDeviceManager/res/values-gu/strings.xml
index dd32e5d..e717c51 100644
--- a/packages/CompanionDeviceManager/res/values-gu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gu/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"કમ્પેનિયન ડિવાઇસ મેનેજર"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ને <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"સ્માર્ટવૉચ"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> દ્વારા મેનેજ કરવા માટે કોઈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> પસંદ કરો"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"તમારા <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ને મેનેજ કરવા માટે આ ઍપ જરૂરી છે. <xliff:g id="APP_NAME">%2$s</xliff:g>ને કૉલ કરનાર વ્યક્તિનું નામ જેવી માહિતી સિંક કરવાની, તમારા નોટિફિકેશન સાથે ક્રિયાપ્રતિક્રિયા કરવાની અને તમારો ફોન, SMS, સંપર્કો, Calendar, કૉલ લૉગ તથા નજીકના ડિવાઇસની પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"આ ઍપને, કૉલ કરનાર વ્યક્તિનું નામ જેવી માહિતી સિંક કરવાની અને તમારા <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ને <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> મેનેજ કરવા માટે મંજૂરી આપીએ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ચશ્માં"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ને મેનેજ કરવા માટે આ ઍપ જરૂરી છે. <xliff:g id="APP_NAME">%2$s</xliff:g>ને તમારા નોટિફિકેશન સાથે ક્રિયાપ્રતિક્રિયા કરવાની અને તમારો ફોન, SMS, સંપર્કો, માઇક્રોફોન તથા નજીકના ડિવાઇસની પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"આ ઍપને તમારા <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી મળશે"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"તમારા ફોનમાંથી આ માહિતી ઍક્સેસ કરવા માટે, <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ને મંજૂરી આપો"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ક્રોસ-ડિવાઇસ સેવાઓ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> વતી તમારા ડિવાઇસ વચ્ચે ઍપ સ્ટ્રીમ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> વતી તમારા ડિવાઇસ વચ્ચે ઍપ સ્ટ્રીમ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"તમારા ફોનમાંથી આ માહિતી ઍક્સેસ કરવા માટે, <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ને મંજૂરી આપો"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play સેવાઓ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> વતી તમારા ફોનના ફોટા, મીડિયા અને નોટિફિકેશન ઍક્સેસ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> વતી તમારા ફોનના ફોટા, મીડિયા અને નોટિફિકેશન ઍક્સેસ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>ને આ પગલું ભરવાની મંજૂરી આપીએ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> નજીકના ડિવાઇસ પર ઍપ અને સિસ્ટમની અન્ય સુવિધાઓ સ્ટ્રીમ કરવા તમારા <xliff:g id="DEVICE_NAME">%2$s</xliff:g> વતી પરવાનગીની વિનંતી કરી રહી છે"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ડિવાઇસ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"આ ઍપ તમારા ફોન અને <xliff:g id="DEVICE_NAME">%1$s</xliff:g> વચ્ચે, કૉલ કરનાર કોઈ વ્યક્તિનું નામ જેવી માહિતી સિંક કરી શકશે"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"આ ઍપ તમારા ફોન અને પસંદ કરેલા ડિવાઇસ વચ્ચે, કૉલ કરનાર કોઈ વ્યક્તિનું નામ જેવી માહિતી સિંક કરી શકશે"</string>
<string name="consent_yes" msgid="8344487259618762872">"મંજૂરી આપો"</string>
<string name="consent_no" msgid="2640796915611404382">"મંજૂરી આપશો નહીં"</string>
<string name="consent_back" msgid="2560683030046918882">"પાછળ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"તમારા ફોનની ઍપ સ્ટ્રીમ કરો"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"તમારા ફોન પરથી ઍપ અને સિસ્ટમની અન્ય સુવિધાઓ સ્ટ્રીમ કરો"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ફોન"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ટૅબ્લેટ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-hi/strings.xml b/packages/CompanionDeviceManager/res/values-hi/strings.xml
index e5ee703..4f1f711 100644
--- a/packages/CompanionDeviceManager/res/values-hi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hi/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"सहयोगी डिवाइस मैनेजर"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"क्या <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> को ऐक्सेस करने के लिए <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> को अनुमति देनी है?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"स्मार्टवॉच"</string>
<string name="chooser_title" msgid="2262294130493605839">"कोई <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चुनें, ताकि उसे <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> की मदद से मैनेज किया जा सके"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"यह ऐप्लिकेशन, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> को मैनेज करने के लिए ज़रूरी है. <xliff:g id="APP_NAME">%2$s</xliff:g> को डिवाइस की जानकारी सिंक करने की अनुमति होगी. जैसे, कॉल करने वाले व्यक्ति का नाम. इसे आपकी सूचनाओं पर कार्रवाई करने के साथ-साथ आपके फ़ोन, एसएमएस, संपर्कों, कैलेंडर, कॉल लॉग, और आस-पास मौजूद डिवाइसों को ऐक्सेस करने की अनुमति भी होगी."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस करने के साथ-साथ कॉल करने वाले व्यक्ति के नाम जैसी जानकारी सिंक कर पाएगा"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"क्या <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> को <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> मैनेज करने की अनुमति देनी है?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"चश्मा"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"यह ऐप्लिकेशन, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> को मैनेज करने के लिए ज़रूरी है. <xliff:g id="APP_NAME">%2$s</xliff:g> को डिवाइस की सूचनाओं पर कार्रवाई करने की अनुमति होगी. इसे आपके फ़ोन, मैसेज, संपर्कों, माइक्रोफ़ोन, और आस-पास मौजूद डिवाइसों को ऐक्सेस करने की अनुमति भी होगी."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस कर पाएगा"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> को अपने फ़ोन से यह जानकारी ऐक्सेस करने की अनुमति दें"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रॉस-डिवाइस से जुड़ी सेवाएं"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> की ओर से, आपके डिवाइसों के बीच ऐप्लिकेशन को स्ट्रीम करने की अनुमति मांग रहा है"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> की ओर से, आपके डिवाइसों के बीच ऐप्लिकेशन स्ट्रीम करने की अनुमति मांग रहा है"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> को अपने फ़ोन से यह जानकारी ऐक्सेस करने की अनुमति दें"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> की ओर से, फ़ोन में मौजूद फ़ोटो, मीडिया, और सूचनाओं को ऐक्सेस करने की अनुमति मांग रहा है"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> की ओर से, आपने फ़ोन में मौजूद फ़ोटो, मीडिया, और सूचनाओं को ऐक्सेस करने की अनुमति मांग रहा है"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"क्या <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> को यह कार्रवाई करने की अनुमति देनी है?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_NAME">%2$s</xliff:g> की ओर से, ऐप्लिकेशन और दूसरे सिस्टम की सुविधाओं को आस-पास मौजूद डिवाइसों पर स्ट्रीम करने की अनुमति मांग रहा है"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"डिवाइस"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"यह ऐप्लिकेशन, आपके फ़ोन और <xliff:g id="DEVICE_NAME">%1$s</xliff:g> के बीच जानकारी सिंक करेगा. जैसे, कॉल करने वाले व्यक्ति का नाम"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"यह ऐप्लिकेशन, आपके फ़ोन और चुने हुए डिवाइस के बीच जानकारी सिंक करेगा. जैसे, कॉल करने वाले व्यक्ति का नाम"</string>
<string name="consent_yes" msgid="8344487259618762872">"अनुमति दें"</string>
<string name="consent_no" msgid="2640796915611404382">"अनुमति न दें"</string>
<string name="consent_back" msgid="2560683030046918882">"वापस जाएं"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"अपने फ़ोन पर मौजूद ऐप्लिकेशन स्ट्रीम करें"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"अपने फ़ोन से ऐप्लिकेशन और दूसरे सिस्टम की सुविधाओं को स्ट्रीम करें"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"फ़ोन"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"टैबलेट"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-hr/strings.xml b/packages/CompanionDeviceManager/res/values-hr/strings.xml
index 559dfd5..84e8b63 100644
--- a/packages/CompanionDeviceManager/res/values-hr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hr/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Želite li dopustiti aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da pristupa <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"satom"</string>
<string name="chooser_title" msgid="2262294130493605839">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kojim će upravljati aplikacija <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ta je aplikacija potrebna za upravljanje vašim uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacija <xliff:g id="APP_NAME">%2$s</xliff:g> moći će sinkronizirati podatke, primjerice ime pozivatelja, stupati u interakciju s vašim obavijestima i pristupati vašim dopuštenjima za telefon, SMS-ove, kontakte, kalendar, zapisnike poziva i uređaje u blizini."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikacija će moći sinkronizirati podatke kao što je ime pozivatelja i pristupiti tim dopuštenjima na vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Dopustiti aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da upravlja uređajem <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"naočale"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta je aplikacija potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacija <xliff:g id="APP_NAME">%2$s</xliff:g> moći će stupati u interakciju s vašim obavijestima i pristupati vašim dopuštenjima za telefon, SMS-ove, kontakte, mikrofon i uređaje u blizini."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikacija će moći pristupati ovim dopuštenjima na vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Omogućite aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da pristupa informacijama s vašeg telefona"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluge na različitim uređajima"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> za emitiranje aplikacija između vaših uređaja"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za stream aplikacija s jednog uređaja na drugi"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Omogućite aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> da pristupa informacijama s vašeg telefona"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Usluge za Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> za pristup fotografijama, medijskim sadržajima i obavijestima na telefonu"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za pristup fotografijama, medijskim sadržajima i obavijestima na telefonu"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Dopustiti <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> da izvede tu radnju?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> za emitiranje aplikacija i drugih značajki sustava na uređajima u blizini"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta će aplikacija moći sinkronizirati podatke između vašeg telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, primjerice ime pozivatelja"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ta će aplikacija moći sinkronizirati podatke između vašeg telefona i odabranog uređaja, primjerice ime pozivatelja"</string>
<string name="consent_yes" msgid="8344487259618762872">"Dopusti"</string>
<string name="consent_no" msgid="2640796915611404382">"Nemoj dopustiti"</string>
<string name="consent_back" msgid="2560683030046918882">"Natrag"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streaming aplikacija vašeg telefona"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Emitiranje aplikacija i drugih značajki sustava s vašeg telefona"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefonu"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletu"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-hu/strings.xml b/packages/CompanionDeviceManager/res/values-hu/strings.xml
index bc317ee..6057171 100644
--- a/packages/CompanionDeviceManager/res/values-hu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hu/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Társeszközök kezelője"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Engedélyezi a(z) <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> hozzáférését a következőhöz: <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"óra"</string>
<string name="chooser_title" msgid="2262294130493605839">"A(z) <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> alkalmazással kezelni kívánt <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kiválasztása"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Szükség van erre az alkalmazásra a következő kezeléséhez: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A(z) <xliff:g id="APP_NAME">%2$s</xliff:g> képes lesz szinkronizálni információkat (például a hívó fél nevét), műveleteket végezhet majd az értesítésekkel, és hozzáférhet majd a Telefon, az SMS, a Névjegyek, a Naptár, a Hívásnaplók és a Közeli eszközök engedélyekhez."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Ez az alkalmazás képes lesz szinkronizálni információkat (például a hívó fél nevét), és hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> eszközén"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Engedélyezi, hogy a(z) <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> kezelje a következő eszközt: <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"szemüveg"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Erre az alkalmazásra szükség van a következő eszköz kezeléséhez: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A(z) <xliff:g id="APP_NAME">%2$s</xliff:g> műveleteket végezhet majd az értesítésekkel, és hozzáférhet majd a Telefon, az SMS, a Névjegyek, a Mikrofon és a Közeli eszközök engedélyekhez."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Az alkalmazás hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> eszközén"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Engedélyezi a(z) „<xliff:g id="APP_NAME">%1$s</xliff:g>” alkalmazás számára az információhoz való hozzáférést a telefonról"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Többeszközös szolgáltatások"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nevében az alkalmazások eszközök közötti streameléséhez"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nevében az alkalmazások eszközök közötti streameléséhez"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Engedélyezi a(z) „<xliff:g id="APP_NAME">%1$s</xliff:g>” alkalmazás számára az információhoz való hozzáférést a telefonról"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-szolgáltatások"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nevében a telefonon tárolt fotókhoz, médiatartalmakhoz és értesítésekhez való hozzáféréshez"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nevében a telefonon tárolt fotókhoz, médiatartalmakhoz és értesítésekhez való hozzáféréshez"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Engedélyezi a(z) <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> számára ennek a műveletnek a végrehajtását?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DEVICE_NAME">%2$s</xliff:g> nevében az alkalmazások és más rendszerfunkciók közeli eszközökre történő streamelésére"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"eszköz"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ez az alkalmazás képes lesz szinkronizálni az olyan információkat a telefon és a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszköz között, mint például a hívó fél neve."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ez az alkalmazás képes lesz szinkronizálni az olyan információkat a telefon és a kiválasztott eszköz között, mint például a hívó fél neve."</string>
<string name="consent_yes" msgid="8344487259618762872">"Engedélyezés"</string>
<string name="consent_no" msgid="2640796915611404382">"Tiltás"</string>
<string name="consent_back" msgid="2560683030046918882">"Vissza"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"A telefon alkalmazásainak streamelése"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Alkalmazások és más rendszerfunkciók streamelése a telefonról"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefonján"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"táblagépén"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-hy/strings.xml b/packages/CompanionDeviceManager/res/values-hy/strings.xml
index bc7bfc7..7975361 100644
--- a/packages/CompanionDeviceManager/res/values-hy/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hy/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Թույլատրե՞լ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> հավելվածին կառավարել <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> սարքը"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ժամացույց"</string>
<string name="chooser_title" msgid="2262294130493605839">"Ընտրեք <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ը, որը պետք է կառավարվի <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> հավելվածի կողմից"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Այս հավելվածն անհրաժեշտ է ձեր <xliff:g id="DEVICE_NAME">%1$s</xliff:g> պրոֆիլը կառավարելու համար։ <xliff:g id="APP_NAME">%2$s</xliff:g> հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, փոխազդել ձեր ծանուցումների հետ և կստանա «Հեռախոս», «SMS», «Կոնտակտներ», «Օրացույց», «Կանչերի ցուցակ» և «Մոտակա սարքեր» թույլտվությունները։"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Այս հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, և կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ում"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Թույլատրե՞լ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> հավելվածին կառավարել <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> սարքը"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ակնոց"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Այս հավելվածն անհրաժեշտ է <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքը կառավարելու համար։ <xliff:g id="APP_NAME">%2$s</xliff:g> հավելվածը կկարողանա փոխազդել ձեր ծանուցումների հետ և կստանա «Հեռախոս», «SMS», «Կոնտակտներ», «Խոսափող» և «Մոտակա սարքեր» թույլտվությունները։"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Այս հավելվածը կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ում"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Թույլատրեք <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> հավելվածին օգտագործել այս տեղեկությունները ձեր հեռախոսից"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Միջսարքային ծառայություններ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր սարքերի միջև հավելվածներ հեռարձակելու համար"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր սարքերի միջև հավելվածներ հեռարձակելու համար"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Թույլատրեք <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> հավելվածին օգտագործել այս տեղեկությունները ձեր հեռախոսից"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play ծառայություններ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր հեռախոսի լուսանկարները, մեդիաֆայլերն ու ծանուցումները տեսնելու համար"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր հեռախոսի լուսանկարները, մեդիաֆայլերն ու ծանուցումները տեսնելու համար"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Թույլատրե՞լ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> հավելվածին կատարել այս գործողությունը"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_NAME">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ մոտակա սարքերին հավելվածներ և համակարգի այլ գործառույթներ հեռարձակելու համար"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"սարք"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Այս հավելվածը կկարողանա համաժամացնել ձեր հեռախոսի և <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքի տվյալները, օր․՝ զանգողի անունը"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Այս հավելվածը կկարողանա համաժամացնել ձեր հեռախոսի և ընտրված սարքի տվյալները, օր․՝ զանգողի անունը"</string>
<string name="consent_yes" msgid="8344487259618762872">"Թույլատրել"</string>
<string name="consent_no" msgid="2640796915611404382">"Չթույլատրել"</string>
<string name="consent_back" msgid="2560683030046918882">"Հետ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Հեռարձակել հեռախոսի հավելվածները"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Հեռարձակել հավելվածներ և համակարգի այլ գործառույթներ հեռախոսում"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"հեռախոս"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"պլանշետ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-in/strings.xml b/packages/CompanionDeviceManager/res/values-in/strings.xml
index 8ece9de..2876967 100644
--- a/packages/CompanionDeviceManager/res/values-in/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-in/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Pengelola Perangkat Pendamping"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Izinkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> mengakses <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"smartwatch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk dikelola oleh <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Aplikasi ini diperlukan untuk mengelola <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan diizinkan menyinkronkan info, seperti nama penelepon, berinteraksi dengan notifikasi, dan mengakses izin Telepon, SMS, Kontak, Kalender, Log panggilan, dan Perangkat di sekitar."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikasi ini akan diizinkan menyinkronkan info, seperti nama penelepon, dan mengakses izin ini di <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> Anda"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Izinkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> mengelola <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Aplikasi ini diperlukan untuk mengelola <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan diizinkan berinteraksi dengan notifikasi dan mengakses izin Ponsel, SMS, Kontak, Mikrofon, dan Perangkat di sekitar."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikasi ini akan diizinkan mengakses izin ini di <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> Anda"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Izinkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> untuk mengakses informasi ini dari ponsel Anda"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Layanan lintas perangkat"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> untuk menstreaming aplikasi di antara perangkat Anda"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> untuk menstreaming aplikasi di antara perangkat Anda"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Izinkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> mengakses informasi ini dari ponsel Anda"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Layanan Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> untuk mengakses foto, media, dan notifikasi ponsel Anda"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> untuk mengakses foto, media, dan notifikasi ponsel Anda"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Izinkan <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> melakukan tindakan ini?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DEVICE_NAME">%2$s</xliff:g> untuk menstreaming aplikasi dan fitur sistem lainnya ke perangkat di sekitar"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"perangkat"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Aplikasi ini akan dapat menyinkronkan info, seperti nama penelepon, antara ponsel dan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Aplikasi ini akan dapat menyinkronkan info, seperti nama penelepon, antara ponsel dan perangkat yang dipilih"</string>
<string name="consent_yes" msgid="8344487259618762872">"Izinkan"</string>
<string name="consent_no" msgid="2640796915611404382">"Jangan izinkan"</string>
<string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streaming aplikasi ponsel"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Menstreaming aplikasi dan fitur sistem lainnya dari ponsel Anda"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ponsel"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-is/strings.xml b/packages/CompanionDeviceManager/res/values-is/strings.xml
index 49b06f0..bca9921 100644
--- a/packages/CompanionDeviceManager/res/values-is/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-is/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Stjórnun fylgdartækja"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Veita <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aðgang að <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"úr"</string>
<string name="chooser_title" msgid="2262294130493605839">"Velja <xliff:g id="PROFILE_NAME">%1$s</xliff:g> sem <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> á að stjórna"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Þetta forrit er nauðsynlegt til að stjórna <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> fær heimild til að samstilla upplýsingar, t.d. nafn þess sem hringir, og bregðast við tilkynningum og fær aðgang að heimildum fyrir síma, SMS, tengiliði, dagatal, símtalaskrár og nálæg tæki."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Þetta forrit fær heimild til að samstilla upplýsingar, t.d. nafn þess sem hringir, og fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Leyfa <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> að stjórna <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"gleraugu"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Þetta forrit er nauðsynlegt til að stjórna <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> fær heimild til að bregðast við tilkynningum og fær aðgang að heimildum fyrir síma, SMS, tengiliði, hljóðnema og nálæg tæki."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Þetta forrit fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Veita <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aðgang að þessum upplýsingum úr símanum þínum"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Þjónustur á milli tækja"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> sendir beiðni um heimild til straumspilunar forrita á milli tækjanna þinna fyrir hönd <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> biður um heimild fyrir <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> til að streyma forritum á milli tækjanna þinna"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Veita <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aðgang að þessum upplýsingum úr símanum þínum"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Þjónusta Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> sendir beiðni um aðgang að myndum, margmiðlunarefni og tilkynningum símans þíns fyrir hönd <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> sendir beiðni um aðgang að myndum, margmiðlunarefni og tilkynningum símans þíns fyrir hönd <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Leyfa <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> að framkvæma þessa aðgerð?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> biður um heimild fyrir <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til að streyma forritum og öðrum kerfiseiginleikum í nálægum tækjum"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"tæki"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Þetta forrit mun geta samstillt upplýsingar, t.d. nafn þess sem hringir, á milli símans og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Þetta forrit mun geta samstillt upplýsingar, t.d. nafn þess sem hringir, á milli símans og valins tækis"</string>
<string name="consent_yes" msgid="8344487259618762872">"Leyfa"</string>
<string name="consent_no" msgid="2640796915611404382">"Ekki leyfa"</string>
<string name="consent_back" msgid="2560683030046918882">"Til baka"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streymdu forritum símans"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Streymdu forritum og öðrum kerfiseiginleikum úr símanum"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"símanum"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"spjaldtölvunni"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-it/strings.xml b/packages/CompanionDeviceManager/res/values-it/strings.xml
index 0dc78ba..5f5497ab5 100644
--- a/packages/CompanionDeviceManager/res/values-it/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-it/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestione dispositivi companion"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Vuoi consentire all\'app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> di accedere a <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"orologio"</string>
<string name="chooser_title" msgid="2262294130493605839">"Scegli un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da gestire con <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Questa app è necessaria per gestire <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> potrà sincronizzare informazioni, ad esempio il nome di un chiamante, interagire con le tue notifiche e accedere alle autorizzazioni Telefono, SMS, Contatti, Calendario, Registri chiamate e Dispositivi nelle vicinanze."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, e accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vuoi consentire all\'app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> di gestire <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"occhiali"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Questa app è necessaria per gestire <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> potrà interagire con le tue notifiche e accedere alle autorizzazioni Telefono, SMS, Contatti, Microfono e Dispositivi nelle vicinanze."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Questa app potrà accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Consenti a <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> di accedere a queste informazioni dal tuo telefono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Servizi cross-device"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto del tuo <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> l\'autorizzazione a trasmettere app in streaming tra i dispositivi"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto del tuo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> l\'autorizzazione a trasmettere app in streaming tra i dispositivi"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Consenti a <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> di accedere a questa informazione dal tuo telefono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto del tuo <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> l\'autorizzazione ad accedere a foto, contenuti multimediali e notifiche del telefono"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto del tuo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> l\'autorizzazione ad accedere a foto, contenuti multimediali e notifiche del telefono"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vuoi consentire a <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> di compiere questa azione?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto di <xliff:g id="DEVICE_NAME">%2$s</xliff:g> l\'autorizzazione a trasmettere in streaming app e altre funzionalità di sistema ai dispositivi nelle vicinanze"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra il telefono e <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra il telefono e il dispositivo scelto"</string>
<string name="consent_yes" msgid="8344487259618762872">"Consenti"</string>
<string name="consent_no" msgid="2640796915611404382">"Non consentire"</string>
<string name="consent_back" msgid="2560683030046918882">"Indietro"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Trasmetti in streaming le app del tuo telefono"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Consente di trasmettere in streaming app e altre funzionalità di sistema dal telefono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefono"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-iw/strings.xml b/packages/CompanionDeviceManager/res/values-iw/strings.xml
index 8ef04eb..7dde216 100644
--- a/packages/CompanionDeviceManager/res/values-iw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-iw/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ניהול מכשיר מותאם"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"לאשר לאפליקציה <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong&g; לגשת אל <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"שעון"</string>
<string name="chooser_title" msgid="2262294130493605839">"בחירת <xliff:g id="PROFILE_NAME">%1$s</xliff:g> לניהול באמצעות <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"האפליקציה הזו נחוצה כדי לנהל את <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. האפליקציה <xliff:g id="APP_NAME">%2$s</xliff:g> תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, לבצע פעולות בהתראות ולקבל הרשאות גישה לטלפון, ל-SMS, לאנשי הקשר, ליומן, ליומני השיחות ולמכשירים בקרבת מקום."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, ולגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"מתן הרשאה לאפליקציה <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong&g; לנהל את <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"משקפיים"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"האפליקציה הזו נחוצה כדי לנהל את <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. האפליקציה <xliff:g id="APP_NAME">%2$s</xliff:g> תוכל לבצע פעולות בהתראות ותקבל הרשאות גישה לטלפון, ל-SMS לאנשי הקשר, למיקרופון ולמכשירים בקרבת מקום."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"האפליקציה הזו תוכל לגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"מתן אישור לאפליקציה <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> לגשת למידע הזה מהטלפון שלך"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"שירותים למספר מכשירים"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור מכשיר <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> כדי לשדר אפליקציות בין המכשירים שלך"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור המכשיר <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> כדי לשדר אפליקציות בין המכשירים שלך"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"מתן אישור לאפליקציה <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> לגשת למידע הזה מהטלפון שלך"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור מכשיר <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> כדי לגשת לתמונות, למדיה ולהתראות בטלפון שלך"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור המכשיר <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> כדי לגשת לתמונות, למדיה ולהתראות בטלפון שלך"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"לתת הרשאה למכשיר <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> לבצע את הפעולה הזו?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור <xliff:g id="DEVICE_NAME">%2$s</xliff:g> כדי להעביר אפליקציות ותכונות מערכת אחרות בסטרימינג למכשירים בקרבת מקום"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"מכשיר"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, מהטלפון שלך למכשיר <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, מהטלפון שלך למכשיר שבחרת"</string>
<string name="consent_yes" msgid="8344487259618762872">"יש אישור"</string>
<string name="consent_no" msgid="2640796915611404382">"אין אישור"</string>
<string name="consent_back" msgid="2560683030046918882">"חזרה"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"שידור אפליקציות מהטלפון"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"העברה של אפליקציות ותכונות מערכת אחרות בסטרימינג מהטלפון"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"טלפון"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"טאבלט"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ja/strings.xml b/packages/CompanionDeviceManager/res/values-ja/strings.xml
index 862ec94..8301654 100644
--- a/packages/CompanionDeviceManager/res/values-ja/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ja/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"コンパニオン デバイス マネージャー"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> に <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> へのアクセスを許可しますか?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ウォッチ"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> の管理対象となる<xliff:g id="PROFILE_NAME">%1$s</xliff:g>の選択"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"このアプリは<xliff:g id="DEVICE_NAME">%1$s</xliff:g>の管理に必要です。<xliff:g id="APP_NAME">%2$s</xliff:g> は通話相手の名前などの情報を同期したり、デバイスの通知を使用したり、電話、SMS、連絡先、カレンダー、通話履歴、付近のデバイスの権限にアクセスしたりできるようになります。"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"このアプリは、通話相手の名前などの情報を同期したり、<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>の以下の権限にアクセスしたりできるようになります"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> に <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> の管理を許可しますか?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"このアプリは <xliff:g id="DEVICE_NAME">%1$s</xliff:g> の管理に必要です。<xliff:g id="APP_NAME">%2$s</xliff:g> はデバイスの通知を使用したり、電話、SMS、連絡先、マイク、付近のデバイスの権限にアクセスしたりできるようになります。"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"このアプリは、<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>の以下の権限にアクセスできるようになります"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"スマートフォンのこの情報へのアクセスを <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> に許可"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"クロスデバイス サービス"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> に代わってデバイス間でアプリをストリーミングする権限をリクエストしています"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> に代わってデバイス間でアプリをストリーミングする権限をリクエストしています"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"スマートフォンのこの情報へのアクセスを <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> に許可"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play 開発者サービス"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> に代わってスマートフォンの写真、メディア、通知にアクセスする権限をリクエストしています"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> に代わってスマートフォンの写真、メディア、通知にアクセスする権限をリクエストしています"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> にこの操作の実行を許可しますか?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_NAME">%2$s</xliff:g> に代わって、アプリやその他のシステム機能を付近のデバイスにストリーミングする権限をリクエストしています"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"デバイス"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"このアプリは、あなたのスマートフォンと <xliff:g id="DEVICE_NAME">%1$s</xliff:g> との間で、通話相手の名前などの情報を同期できるようになります"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"このアプリは、あなたのスマートフォンと選択したデバイスとの間で、通話相手の名前などの情報を同期できるようになります"</string>
<string name="consent_yes" msgid="8344487259618762872">"許可"</string>
<string name="consent_no" msgid="2640796915611404382">"許可しない"</string>
<string name="consent_back" msgid="2560683030046918882">"戻る"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"スマートフォンのアプリをストリーミングします"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"アプリやその他のシステム機能をスマートフォンからストリーミングする"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"スマートフォン"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"タブレット"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ka/strings.xml b/packages/CompanionDeviceManager/res/values-ka/strings.xml
index f80515b..88c03c6 100644
--- a/packages/CompanionDeviceManager/res/values-ka/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ka/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"კომპანიონი მოწყობილობების მენეჯერი"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"მიანიჭებთ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> აპს <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> მოწყობილობაზე წვდომას?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"საათი"</string>
<string name="chooser_title" msgid="2262294130493605839">"აირჩიეთ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, რომელიც უნდა მართოს <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>-მა"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ეს აპი საჭიროა თქვენი <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს სამართავად. <xliff:g id="APP_NAME">%2$s</xliff:g>-ს ექნება ისეთი ინფორმაციის სინქრონიზაციის უფლება, როგორიც იმ ადამიანის სახელია, რომელიც გირეკავთ; ასევე, თქვენს შეტყობინებებთან ინტერაქციისა და თქვენს ტელეფონზე, SMS-ებზე, კონტაქტებზე, კალენდარზე, ზარების ჟურნალებსა და ახლომახლო მოწყობილობების ნებართვებზე წვდომის უფლება."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას (მაგალითად, იმ ადამიანის სახელი, რომელიც გირეკავთ) და ამ წვდომებზე უფლების მოპოვებას თქვენს <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-ში"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"ნება დართეთ <strong><xliff:g id="APP_NAME">%1$s</xliff:g>-ს</strong> მართოს <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"სათვალე"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ეს აპი საჭიროა თქვენი <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ის სამართავად. <xliff:g id="APP_NAME">%2$s</xliff:g> შეძლებს თქვენს შეტყობინებებთან ინტერაქციას და თქვენს ტელეფონზე, SMS-ებზე, კონტაქტებზე, მიკროფონსა და ახლომახლო მოწყობილობების ნებართვებზე წვდომას."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ეს აპი შეძლებს ამ ნებართვებზე წვდომას თქვენს <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-ში"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"ნება დართეთ, რომ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> აპს ჰქონდეს ამ ინფორმაციაზე წვდომა თქვენი ტელეფონიდან"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"მოწყობილობათშორისი სერვისები"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-ის სახელით, რომ მოწყობილობებს შორის აპების სტრიმინგი შეძლოს"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-ის სახელით, რომ მოწყობილობებს შორის სტრიმინგი შეძლოს"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"ნება დართეთ, რომ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> აპს ჰქონდეს ამ ინფორმაციაზე წვდომა თქვენი ტელეფონიდან"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-ის სახელით, რომ წვდომა ჰქონდეს თქვენი ტელეფონის ფოტოებზე, მედიასა და შეტყობინებებზე"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-ის სახელით, რომ წვდომა ჰქონდეს თქვენი ტელეფონის ფოტოებზე, მედიასა და შეტყობინებებზე"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"გსურთ ნება მისცეთ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს</strong> ამ მოქმედების შესასრულებლად?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს თქვენი <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-ის სახელით აპების და სისტემის სხვა ფუნქციების ახლომახლო მოწყობილობებზე სტრიმინგის ნებართვას"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"მოწყობილობა"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას თქვენს ტელეფონსა და თქვენ მიერ არჩეულ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს შორის, მაგალითად, იმ ადამიანის სახელის, რომელიც გირეკავთ"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას თქვენს ტელეფონსა და თქვენ მიერ არჩეულ მოწყობილობას შორის, მაგალითად, იმ ადამიანის სახელის, რომელიც გირეკავთ"</string>
<string name="consent_yes" msgid="8344487259618762872">"დაშვება"</string>
<string name="consent_no" msgid="2640796915611404382">"არ დაიშვას"</string>
<string name="consent_back" msgid="2560683030046918882">"უკან"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"თქვენი ტელეფონის აპების სტრიმინგი"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"აწარმოეთ აპების და სისტემის სხვა ფუნქციების სტრიმინგი თქვენი ტელეფონიდან"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ტელეფონი"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ტაბლეტი"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-kk/strings.xml b/packages/CompanionDeviceManager/res/values-kk/strings.xml
index 67d1ab8..fe3afa1 100644
--- a/packages/CompanionDeviceManager/res/values-kk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kk/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> қолданбасына <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> құрылғысын пайдалануға рұқсат беру керек пе?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"сағат"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> арқылы басқарылатын <xliff:g id="PROFILE_NAME">%1$s</xliff:g> құрылғысын таңдаңыз"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Бұл қолданба <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысын басқару үшін қажет. <xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасы қоңырау шалушының аты сияқты деректі синхрондау, хабарландыруларды оқу және телефон, SMS, контактілер, күнтізбе, қоңырау журналдары мен маңайдағы құрылғылар рұқсаттарын пайдалана алады."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Бұл қолданба қоңырау шалушының аты сияқты деректі синхрондай алады және <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> құрылғысындағы мына рұқсаттарды пайдалана алады."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> қолданбасына <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> құрылғысын басқаруға рұқсат беру керек пе?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"көзілдірік"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Бұл қолданба <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысын басқару үшін қажет. <xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасына хабарландыруларды оқуға, телефонды, хабарларды, контактілерді, микрофон мен маңайдағы құрылғыларды пайдалануға рұқсат беріледі."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Бұл қолданба <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> құрылғысында осы рұқсаттарды пайдалана алады."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> қолданбасына телефоныңыздағы осы ақпаратты пайдалануға рұқсат беріңіз."</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Аралық құрылғы қызметтері"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> атынан құрылғылар арасында қолданбалар трансляциялау үшін рұқсат сұрайды."</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> атынан құрылғылар арасында қолданбалар трансляциялау үшін рұқсат сұрайды."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> қолданбасына телефоныңыздағы осы ақпаратты пайдалануға рұқсат беріңіз."</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play қызметтері"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> атынан телефондағы фотосуреттерді, медиафайлдар мен хабарландыруларды пайдалану үшін рұқсат сұрайды."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> атынан телефондағы фотосуреттерді, медиафайлдар мен хабарландыруларды пайдалану үшін рұқсат сұрайды."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> құрылғысына бұл әрекетті орындауға рұқсат беру керек пе?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_NAME">%2$s</xliff:g> атынан қолданбалар мен басқа да жүйе функцияларын маңайдағы құрылғыларға трансляциялау рұқсатын сұрап тұр."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"құрылғы"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Бұл қолданба телефон мен <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысы арасында деректі (мысалы, қоңырау шалушының атын) синхрондай алады."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Бұл қолданба телефон мен таңдалған құрылғы арасында деректі (мысалы, қоңырау шалушының атын) синхрондай алады."</string>
<string name="consent_yes" msgid="8344487259618762872">"Рұқсат беру"</string>
<string name="consent_no" msgid="2640796915611404382">"Рұқсат бермеу"</string>
<string name="consent_back" msgid="2560683030046918882">"Артқа"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Телефон қолданбаларын трансляциялайды."</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Қолданбалар мен басқа да жүйе функцияларын телефоннан трансляциялау"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"планшет"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-km/strings.xml b/packages/CompanionDeviceManager/res/values-km/strings.xml
index 83cea12..62ad055 100644
--- a/packages/CompanionDeviceManager/res/values-km/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-km/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"កម្មវិធីគ្រប់គ្រងឧបករណ៍ដៃគូ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"អនុញ្ញាតឱ្យ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ចូលប្រើ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ឬ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"នាឡិកា"</string>
<string name="chooser_title" msgid="2262294130493605839">"ជ្រើសរើស <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ដើម្បីឱ្យស្ថិតក្រោមការគ្រប់គ្រងរបស់ <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ត្រូវការកម្មវិធីនេះ ដើម្បីគ្រប់គ្រង <xliff:g id="DEVICE_NAME">%1$s</xliff:g> របស់អ្នក។ <xliff:g id="APP_NAME">%2$s</xliff:g> នឹងត្រូវបានអនុញ្ញាតឱ្យធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម ធ្វើអន្តរកម្មជាមួយការជូនដំណឹងរបស់អ្នក និងចូលប្រើការអនុញ្ញាតទូរសព្ទ, SMS, ទំនាក់ទំនង, ប្រតិទិន, កំណត់ហេតុហៅទូរសព្ទ និងឧបករណ៍នៅជិតរបស់អ្នក។"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"កម្មវិធីនេះនឹងត្រូវបានអនុញ្ញាតឱ្យធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម និងចូលប្រើការអនុញ្ញាតទាំងនេះនៅលើ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> របស់អ្នក"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"អនុញ្ញាតឱ្យ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> គ្រប់គ្រង <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ឬ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"វ៉ែនតា"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ត្រូវការកម្មវិធីនេះ ដើម្បីគ្រប់គ្រង <xliff:g id="DEVICE_NAME">%1$s</xliff:g>។ <xliff:g id="APP_NAME">%2$s</xliff:g> នឹងត្រូវបានអនុញ្ញាតឱ្យធ្វើអន្តរកម្មជាមួយការជូនដំណឹងរបស់អ្នក និងចូលប្រើការអនុញ្ញាតរបស់ទូរសព្ទ, SMS, ទំនាក់ទំនង, មីក្រូហ្វូន និងឧបករណ៍នៅជិតរបស់អ្នក។"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"កម្មវិធីនេះនឹងត្រូវបានអនុញ្ញាតឱ្យចូលប្រើការអនុញ្ញាតទាំងនេះនៅលើ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> របស់អ្នក"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"អនុញ្ញាតឱ្យ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ចូលប្រើព័ត៌មាននេះពីទូរសព្ទរបស់អ្នក"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"សេវាកម្មឆ្លងកាត់ឧបករណ៍"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> របស់អ្នក ដើម្បីបញ្ចាំងកម្មវិធីរវាងឧបករណ៍របស់អ្នក"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> របស់អ្នក ដើម្បីបញ្ចាំងកម្មវិធីរវាងឧបករណ៍របស់អ្នក"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"អនុញ្ញាតឱ្យ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ចូលមើលព័ត៌មាននេះពីទូរសព្ទរបស់អ្នក"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"សេវាកម្ម Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> របស់អ្នក ដើម្បីចូលប្រើរូបថត មេឌៀ និងការជូនដំណឹងរបស់ទូរសព្ទអ្នក"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> របស់អ្នក ដើម្បីចូលប្រើរូបថត មេឌៀ និងការជូនដំណឹងរបស់ទូរសព្ទអ្នក"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"អនុញ្ញាតឱ្យ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ធ្វើសកម្មភាពនេះឬ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> របស់អ្នក ដើម្បីចាក់ផ្សាយកម្មវិធី និងមុខងារប្រព័ន្ធផ្សេងទៀតទៅកាន់ឧបករណ៍នៅជិត"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ឧបករណ៍"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"កម្មវិធីនេះនឹងអាចធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម រវាង <xliff:g id="DEVICE_NAME">%1$s</xliff:g> និងទូរសព្ទរបស់អ្នក"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"កម្មវិធីនេះនឹងអាចធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម រវាងឧបករណ៍ដែលបានជ្រើសរើស និងទូរសព្ទរបស់អ្នក"</string>
<string name="consent_yes" msgid="8344487259618762872">"អនុញ្ញាត"</string>
<string name="consent_no" msgid="2640796915611404382">"មិនអនុញ្ញាត"</string>
<string name="consent_back" msgid="2560683030046918882">"ថយក្រោយ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ផ្សាយកម្មវិធីរបស់ទូរសព្ទអ្នក"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ចាក់ផ្សាយកម្មវិធី និងមុខងារប្រព័ន្ធផ្សេងទៀតពីទូរសព្ទរបស់អ្នក"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ទូរសព្ទ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ថេប្លេត"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-kn/strings.xml b/packages/CompanionDeviceManager/res/values-kn/strings.xml
index 91131a7..940c8f9 100644
--- a/packages/CompanionDeviceManager/res/values-kn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kn/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ಕಂಪ್ಯಾನಿಯನ್ ಸಾಧನ ನಿರ್ವಾಹಕರು"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ಅನ್ನು ಪ್ರವೇಶಿಸಲು <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ವೀಕ್ಷಿಸಿ"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ಮೂಲಕ ನಿರ್ವಹಿಸಬೇಕಾದ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ವಹಿಸಲು ಈ ಆ್ಯಪ್ನ ಅಗತ್ಯವಿದೆ. ಕರೆ ಮಾಡುವವರ ಹೆಸರು, ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಮತ್ತು ಫೋನ್, SMS, ಸಂಪರ್ಕಗಳು, ಕ್ಯಾಲೆಂಡರ್, ಕರೆಯ ಲಾಗ್ಗಳು ಮತ್ತು ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳ ದೃಢೀಕರಣಗಳಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು <xliff:g id="APP_NAME">%2$s</xliff:g> ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಮತ್ತು ಈ ಅನುಮತಿಗಳನ್ನು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ನಲ್ಲಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>? ನಿರ್ವಹಿಸಲು <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ಗ್ಲಾಸ್ಗಳು"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ವಹಿಸಲು ಈ ಆ್ಯಪ್ನ ಅಗತ್ಯವಿದೆ. <xliff:g id="APP_NAME">%2$s</xliff:g> ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಮತ್ತು ನಿಮ್ಮ ಫೋನ್, SMS, ಸಂಪರ್ಕಗಳು, ಮೈಕ್ರೊಫೋನ್ ಮತ್ತು ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳ ಅನುಮತಿಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಅನುಮತಿಸಲಾಗುತ್ತದೆ."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ನಲ್ಲಿ ಈ ಅನುಮತಿಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ಈ ಮಾಹಿತಿಯನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ಗೆ ಅನುಮತಿಸಿ"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ಕ್ರಾಸ್-ಡಿವೈಸ್ ಸೇವೆಗಳು"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ಆ್ಯಪ್ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ಆ್ಯಪ್ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ಈ ಮಾಹಿತಿಯನ್ನು ಪ್ರವೇಶಿಸಲು <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ಗೆ ಅನುಮತಿಸಿ"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play ಸೇವೆಗಳು"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"ನಿಮ್ಮ ಫೋನ್ನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"ನಿಮ್ಮ ಫೋನ್ನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ಈ ಆ್ಯಕ್ಷನ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ಅನುಮತಿಸಬೇಕೇ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳಿಗೆ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಇತರ ಸಿಸ್ಟಂ ಫೀಚರ್ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ರ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸುತ್ತಿದೆ"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ಸಾಧನ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ಮೊಬೈಲ್ ಫೋನ್ ಮತ್ತು <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನದ ನಡುವೆ, ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಈ ಆ್ಯಪ್ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ಮೊಬೈಲ್ ಫೋನ್ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿದ ಸಾಧನದ ನಡುವೆ, ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಈ ಆ್ಯಪ್ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ"</string>
<string name="consent_yes" msgid="8344487259618762872">"ಅನುಮತಿಸಿ"</string>
<string name="consent_no" msgid="2640796915611404382">"ಅನುಮತಿಸಬೇಡಿ"</string>
<string name="consent_back" msgid="2560683030046918882">"ಹಿಂದೆ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ನಿಮ್ಮ ಫೋನ್ನ ಆ್ಯಪ್ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಿ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ನಿಮ್ಮ ಫೋನ್ನಿಂದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಇತರ ಸಿಸ್ಟಂ ಫೀಚರ್ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಿ"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ಫೋನ್"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ಟ್ಯಾಬ್ಲೆಟ್"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ko/strings.xml b/packages/CompanionDeviceManager/res/values-ko/strings.xml
index 5b9c429..5c225c2 100644
--- a/packages/CompanionDeviceManager/res/values-ko/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ko/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"부속 기기 관리자"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>에서 <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>에 액세스하도록 허용하시겠습니까?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"시계"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>에서 관리할 <xliff:g id="PROFILE_NAME">%1$s</xliff:g>을(를) 선택"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"이 앱은 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기를 관리하는 데 필요합니다. <xliff:g id="APP_NAME">%2$s</xliff:g>에서 정보(예: 발신자 이름)를 동기화하고, 알림과 상호작용하고, 전화, SMS, 연락처, 캘린더, 통화 기록 및 근처 기기에 액세스할 수 있게 됩니다."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"이 앱이 정보(예: 발신자 이름)를 동기화하고 <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>에서 <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>? 기기를 관리하도록 허용"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"안경"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"이 앱은 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기를 관리하는 데 필요합니다. <xliff:g id="APP_NAME">%2$s</xliff:g>에서 알림과 상호작용하고 내 전화, SMS, 연락처, 마이크, 근처 기기에 대한 권한을 갖게 됩니다."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"앱이 <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>이 휴대전화의 이 정보에 액세스하도록 허용합니다."</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"교차 기기 서비스"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 대신 기기 간에 앱을 스트리밍할 수 있는 권한을 요청하고 있습니다."</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 대신 기기 간에 앱을 스트리밍할 수 있는 권한을 요청하고 있습니다."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> 앱이 휴대전화에서 이 정보에 액세스하도록 허용"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play 서비스"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 대신 휴대전화의 사진, 미디어, 알림에 액세스할 수 있는 권한을 요청하고 있습니다."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 대신 휴대전화의 사진, 미디어, 알림에 액세스할 수 있는 권한을 요청하고 있습니다."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> 기기가 이 작업을 수행하도록 허용하시겠습니까?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_NAME">%2$s</xliff:g> 대신 근처 기기로 앱 및 기타 시스템 기능을 스트리밍할 권한을 요청하고 있습니다."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"기기"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"이 앱에서 휴대전화와 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 간에 정보(예: 발신자 이름)를 동기화할 수 있게 됩니다."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"이 앱에서 휴대전화와 선택한 기기 간에 정보(예: 발신자 이름)를 동기화할 수 있게 됩니다."</string>
<string name="consent_yes" msgid="8344487259618762872">"허용"</string>
<string name="consent_no" msgid="2640796915611404382">"허용 안함"</string>
<string name="consent_back" msgid="2560683030046918882">"뒤로"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"휴대전화의 앱을 스트리밍합니다."</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"내 휴대전화의 앱 및 기타 시스템 기능 스트리밍"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"스마트폰"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"태블릿"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ky/strings.xml b/packages/CompanionDeviceManager/res/values-ky/strings.xml
index 2f99577..ed750a8 100644
--- a/packages/CompanionDeviceManager/res/values-ky/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ky/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> колдонмосуна <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> түзмөгүнө кирүүгө уруксат бересизби?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"саат"</string>
<string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> тарабынан башкарылсын"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Бул колдонмо <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүңүздү башкаруу үчүн керек. <xliff:g id="APP_NAME">%2$s</xliff:g> маалыматты шайкештирип, мисалы, билдирмелериңизди көрүп, телефонуңуз, SMS билдирүүлөр, байланыштар, жылнаама, чалуулар тизмеси жана жакын жердеги түзмөктөргө болгон уруксаттарды пайдалана алат."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Бул колдонмого маалыматты, мисалы, чалып жаткан адамдын аты-жөнүн шайкештирүүгө жана <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> колдонмосуна <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> түзмөгүн тескөөгө уруксат бересизби?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"көз айнектер"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Бул колдонмо <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүн башкаруу үчүн керек. <xliff:g id="APP_NAME">%2$s</xliff:g> билдирмелериңизди көрүп, телефонуңуз, SMS билдирүүлөр, Байланыштар, Микрофон жана Жакын жердеги түзмөктөргө болгон уруксаттарды пайдалана алат."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Бул колдонмого <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> колдонмосуна телефонуңуздагы ушул маалыматты көрүүгө уруксат бериңиз"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Түзмөктөр аралык кызматтар"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> түзмөгүңүздүн атынан түзмөктөрүңүздүн ортосунда колдонмолорду өткөрүүгө уруксат сурап жатат"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан түзмөктөрүңүздүн ортосунда колдонмолорду алып ойнотууга уруксат сурап жатат"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> колдонмосуна телефонуңуздагы ушул маалыматты көрүүгө уруксат бериңиз"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play кызматтары"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> түзмөгүңүздүн атынан телефондогу сүрөттөрдү, медиа файлдарды жана билдирмелерди колдонууга уруксат сурап жатат"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан телефондогу сүрөттөрдү, медиа файлдарды жана билдирмелерди колдонууга уруксат сурап жатат"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> түзмөгүнө бул аракетти аткарууга уруксат бересизби?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан жакын жердеги түзмөктөрдө колдонмолорду жана тутумдун башка функцияларын алып ойнотууга уруксат сурап жатат"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"түзмөк"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Бул колдонмо маалыматты шайкештире алат, мисалы, чалып жаткан кишинин атын телефон жана <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгү менен шайкештирет"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Бул колдонмо маалыматты шайкештире алат, мисалы, чалып жаткан кишинин атын телефон жана тандалган түзмөк менен шайкештирет"</string>
<string name="consent_yes" msgid="8344487259618762872">"Ооба"</string>
<string name="consent_no" msgid="2640796915611404382">"Уруксат берилбесин"</string>
<string name="consent_back" msgid="2560683030046918882">"Артка"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Телефондогу колдонмолорду алып ойнотуу"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Телефонуңуздагы колдонмолорду жана тутумдун башка функцияларын алып ойнотуу"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"планшет"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-lo/strings.xml b/packages/CompanionDeviceManager/res/values-lo/strings.xml
index 53995be2..9058820 100644
--- a/packages/CompanionDeviceManager/res/values-lo/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lo/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ຕົວຈັດການອຸປະກອນປະກອບ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"ອະນຸຍາດ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ໃຫ້ເຂົ້າເຖິງ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ບໍ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ໂມງ"</string>
<string name="chooser_title" msgid="2262294130493605839">"ເລືອກ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ເພື່ອໃຫ້ຖືກຈັດການໂດຍ <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ຕ້ອງໃຊ້ແອັບນີ້ເພື່ອຈັດການ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ຂອງທ່ານ. <xliff:g id="APP_NAME">%2$s</xliff:g> ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ການໂຕ້ຕອບກັບການແຈ້ງເຕືອນຂອງທ່ານ ແລະ ສິດເຂົ້າເຖິງໂທລະສັບ, SMS, ລາຍຊື່ຜູ້ຕິດຕໍ່, ປະຕິທິນ, ບັນທຶກການໂທ ແລະ ອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງຂອງທ່ານ."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ແອັບນີ້ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ຊິ້ງຂໍ້ມູນ, ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ ແລະ ສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ຂອງທ່ານ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"ອະນຸຍາດ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ຈັດການ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ບໍ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ແວ່ນຕາ"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ຕ້ອງໃຊ້ແອັບນີ້ເພື່ອຈັດການ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ໂຕ້ຕອບກັບການແຈ້ງເຕືອນຂອງທ່ານ ແລະ ການອະນຸຍາດສິດເຂົ້າເຖິງໂທລະສັບ, SMS, ລາຍຊື່ຜູ້ຕິດຕໍ່, ໄມໂຄຣໂຟນ ແລະ ອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງຂອງທ່ານ."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ແອັບນີ້ຈະໄດ້ຮັບສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ຂອງທ່ານ"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"ອະນຸຍາດ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ໃຫ້ເຂົ້າເຖິງຂໍ້ມູນນີ້ຈາກໂທລະສັບຂອງທ່ານໄດ້"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ບໍລິການຂ້າມອຸປະກອນ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ເພື່ອສະຕຣີມແອັບລະຫວ່າງອຸປະກອນຂອງທ່ານ"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ເພື່ອສະຕຣີມແອັບລະຫວ່າງອຸປະກອນຕ່າງໆຂອງທ່ານ"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"ອະນຸຍາດ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ໃຫ້ເຂົ້າເຖິງຂໍ້ມູນນີ້ຈາກໂທລະສັບຂອງທ່ານໄດ້"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"ບໍລິການ Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ເພື່ອເຂົ້າເຖິງຮູບພາບ, ມີເດຍ ແລະ ການແຈ້ງເຕືອນຂອງໂທລະສັບທ່ານ"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ເພື່ອເຂົ້າເຖິງຮູບພາບ, ສື່ ແລະ ການແຈ້ງເຕືອນໃນໂທລະສັບຂອງທ່ານ"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ອະນຸຍາດ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ເພື່ອດຳເນີນຄຳສັ່ງນີ້ບໍ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກໍາລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ຂອງທ່ານເພື່ອສະຕຣີມແອັບ ແລະ ຄຸນສົມບັດລະບົບອື່ນໆໄປຫາອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງ"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ອຸປະກອນ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ແອັບນີ້ຈະສາມາດຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ລະຫວ່າງໂທລະສັບຂອງທ່ານ ແລະ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ແອັບນີ້ຈະສາມາດຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ລະຫວ່າງໂທລະສັບຂອງທ່ານ ແລະ ອຸປະກອນທີ່ເລືອກໄວ້ໄດ້"</string>
<string name="consent_yes" msgid="8344487259618762872">"ອະນຸຍາດ"</string>
<string name="consent_no" msgid="2640796915611404382">"ບໍ່ອະນຸຍາດ"</string>
<string name="consent_back" msgid="2560683030046918882">"ກັບຄືນ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ສະຕຣີມແອັບຂອງໂທລະສັບທ່ານ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ສະຕຣີມແອັບ ແລະ ຄຸນສົມບັດລະບົບອື່ນໆຈາກໂທລະສັບຂອງທ່ານ"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ໂທລະສັບ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ແທັບເລັດ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-lt/strings.xml b/packages/CompanionDeviceManager/res/values-lt/strings.xml
index 56cfcb8..7af2476 100644
--- a/packages/CompanionDeviceManager/res/values-lt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lt/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Leisti <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pasiekti <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"laikrodį"</string>
<string name="chooser_title" msgid="2262294130493605839">"Jūsų <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, kurį valdys <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> (pasirinkite)"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ši programa reikalinga norint tvarkyti jūsų įrenginį „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“. Programai „<xliff:g id="APP_NAME">%2$s</xliff:g>“ bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, sąveikauti su jūsų pranešimais ir pasiekti jūsų leidimus „Telefonas“, „SMS“, „Kontaktai“, „Kalendorius“, „Skambučių žurnalai“ ir „Įrenginiai netoliese."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Šiai programai bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, ir pasiekti toliau nurodytus leidimus jūsų <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Leisti <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> valdyti <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"akiniai"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ši programa reikalinga norint tvarkyti įrenginį „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“. Programai „<xliff:g id="APP_NAME">%2$s</xliff:g>“ bus leidžiama sąveikauti su jūsų pranešimais ir pasiekti jūsų leidimus „Telefonas“, „SMS“, „Kontaktai“, „Mikrofonas“ ir „Įrenginiai netoliese“."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Šiai programai bus leidžiama pasiekti toliau nurodytus leidimus jūsų <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Leisti <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pasiekti šią informaciją iš jūsų telefono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Pasl. keliuose įrenginiuose"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>“ vardu, kad galėtų srautu perduoti programas iš vieno įrenginio į kitą"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>“ vardu, kad galėtų srautu perduoti programas iš vieno įrenginio į kitą"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Leisti <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> pasiekti šią informaciją iš jūsų telefono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"„Google Play“ paslaugos"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>“ vardu, kad galėtų pasiekti telefono nuotraukas, mediją ir pranešimus"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>“ vardu, kad galėtų pasiekti telefono nuotraukas, mediją ir pranešimus"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Leisti <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> atlikti šį veiksmą?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DEVICE_NAME">%2$s</xliff:g>“ vardu, kad galėtų srautu perduoti programas ir kitas sistemos funkcijas įrenginiams netoliese"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"įrenginys"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ši programa galės sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, su jūsų telefonu ir įrenginiu „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ši programa galės sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, su jūsų telefonu ir pasirinktu įrenginiu"</string>
<string name="consent_yes" msgid="8344487259618762872">"Leisti"</string>
<string name="consent_no" msgid="2640796915611404382">"Neleisti"</string>
<string name="consent_back" msgid="2560683030046918882">"Atgal"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefono programų perdavimas srautu"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Srautu perduokite programas ir kitas sistemos funkcijas iš telefono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"planšetiniame kompiuteryje"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-lv/strings.xml b/packages/CompanionDeviceManager/res/values-lv/strings.xml
index b6dcd2d..b74834b 100644
--- a/packages/CompanionDeviceManager/res/values-lv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lv/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Palīgierīču pārzinis"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Vai atļaut lietotnei <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> piekļūt ierīcei <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"pulkstenis"</string>
<string name="chooser_title" msgid="2262294130493605839">"Profila (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) izvēle, ko pārvaldīt lietotnē <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Šī lietotne ir nepieciešama jūsu ierīces (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) pārvaldībai. <xliff:g id="APP_NAME">%2$s</xliff:g> drīkstēs sinhronizēt informāciju (piemēram, zvanītāja vārdu), mijiedarboties ar jūsu paziņojumiem un piekļūt atļaujām Tālrunis, Īsziņas, Kontaktpersonas, Kalendārs, Zvanu žurnāli un Tuvumā esošas ierīces."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Šī lietotne drīkstēs sinhronizēt informāciju, piemēram, zvanītāja vārdu, un piekļūt norādītajām atļaujām jūsu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vai atļaut lietotnei <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> piekļūt ierīcei <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"brilles"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Šī lietotne ir nepieciešama šādas ierīces pārvaldībai: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> drīkstēs mijiedarboties ar jūsu paziņojumiem un piekļūt atļaujām Tālrunis, Īsziņas, Kontaktpersonas, Mikrofons un Tuvumā esošas ierīces."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Šai lietotnei tiks sniegta piekļuve norādītajām atļaujām jūsu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Atļaut lietotnei <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> piekļūt šai informācijai no jūsu tālruņa"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Vairāku ierīču pakalpojumi"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju straumēt lietotnes starp jūsu ierīcēm šīs ierīces vārdā: <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju straumēt lietotnes starp jūsu ierīcēm šīs ierīces vārdā: <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Atļaut lietotnei <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> piekļūt šai informācijai no jūsu tālruņa"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play pakalpojumi"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju piekļūt jūsu tālruņa fotoattēliem, multivides saturam un paziņojumiem šīs ierīces vārdā: <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju piekļūt jūsu tālruņa fotoattēliem, multivides saturam un paziņojumiem šīs ierīces vārdā: <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vai atļaut ierīcei <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> veikt šo darbību?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju tuvumā esošās ierīcēs straumēt lietotnes un citas sistēmas funkcijas šīs ierīces vārdā: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ierīce"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Šī lietotne varēs sinhronizēt informāciju (piemēram, zvanītāja vārdu) starp jūsu tālruni un šo ierīci: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Šī lietotne varēs sinhronizēt informāciju (piemēram, zvanītāja vārdu) starp jūsu tālruni un izvēlēto ierīci"</string>
<string name="consent_yes" msgid="8344487259618762872">"Atļaut"</string>
<string name="consent_no" msgid="2640796915611404382">"Neatļaut"</string>
<string name="consent_back" msgid="2560683030046918882">"Atpakaļ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Straumēt jūsu tālruņa lietotnes"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"No sava tālruņa straumējiet lietotnes un citas sistēmas funkcijas"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"tālrunī"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"planšetdatorā"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-mk/strings.xml b/packages/CompanionDeviceManager/res/values-mk/strings.xml
index 8b4c9e1..f420766 100644
--- a/packages/CompanionDeviceManager/res/values-mk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mk/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Ќе дозволите <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да пристапува до <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"часовник"</string>
<string name="chooser_title" msgid="2262294130493605839">"Изберете <xliff:g id="PROFILE_NAME">%1$s</xliff:g> со којшто ќе управува <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Апликацијава е потребна за управување со вашиот <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ќе може да ги синхронизира податоците како што се имињата на јавувачите, да остварува интеракција со известувањата и да пристапува до дозволите за „Телефон“, SMS, „Контакти“, „Календар“, „Евиденција на повици“ и „Уреди во близина“."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Оваа апликација ќе има дозвола да ги синхронизира податоците како што се имињата на јавувачите и да пристапува до следниве дозволи на вашиот <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Ќе дозволите <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да управува со <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"очила"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Апликацијава е потребна за управување со <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ќе може да остварува интеракција со известувањата и да пристапува до дозволите за „Телефон“, SMS, „Контакти“, „Микрофон“ и „Уреди во близина“."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Апликацијава ќе може да пристапува до овие дозволи на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Овозможете <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да пристапува до овие податоци на телефонот"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Повеќенаменски услуги"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за да стримува апликации помеѓу вашите уреди"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за да стримува апликации помеѓу вашите уреди"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Дозволете <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> да пристапува до овие податоци на телефонот"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Услуги на Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за да пристапува до фотографиите, аудиовизуелните содржини и известувањата на телефонот"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за да пристапува до фотографиите, аудиовизуелните содржини и известувањата на телефонот"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ќе дозволите <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> да го преземе ова дејство?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_NAME">%2$s</xliff:g> за да стримува апликации и други системски карактеристики на уредите во близина"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"уред"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Оваа апликација ќе може да ги синхронизира податоците како што се имињата на јавувачите помеѓу вашиот телефон и <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Оваа апликација ќе може да ги синхронизира податоците како што се имињата на јавувачите помеѓу вашиот телефон и избраниот уред"</string>
<string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
<string name="consent_no" msgid="2640796915611404382">"Не дозволувај"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Стримувајте ги апликациите на телефонот"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Апликации за стриминг и други системски карактеристики од вашиот телефон"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"таблет"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ml/strings.xml b/packages/CompanionDeviceManager/res/values-ml/strings.xml
index f86897c..0a9adb6 100644
--- a/packages/CompanionDeviceManager/res/values-ml/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ml/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"കമ്പാനിയൻ ഉപകരണ മാനേജർ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ആക്സസ് ചെയ്യാൻ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> എന്നതിനെ അനുവദിക്കണോ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"വാച്ച്"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ഉപയോഗിച്ച് മാനേജ് ചെയ്യുന്നതിന് ഒരു <xliff:g id="PROFILE_NAME">%1$s</xliff:g> തിരഞ്ഞെടുക്കുക"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> മാനേജ് ചെയ്യാൻ ഈ ആപ്പ് ആവശ്യമാണ്. വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ സമന്വയിപ്പിക്കുന്നതിനും നിങ്ങളുടെ അറിയിപ്പുകളുമായി സംവദിക്കാനും നിങ്ങളുടെ ഫോൺ, SMS, Contacts, Calendar, കോൾ ചരിത്രം, സമീപമുള്ള ഉപകരണങ്ങളുടെ അനുമതികൾ എന്നിവ ആക്സസ് ചെയ്യാനും <xliff:g id="APP_NAME">%2$s</xliff:g> ആപ്പിനെ അനുവദിക്കും."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ സമന്വയിപ്പിക്കാനും നിങ്ങളുടെ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> എന്നതിൽ ഈ അനുമതികൾ ആക്സസ് ചെയ്യാനും ഈ ആപ്പിനെ അനുവദിക്കും"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>? മാനേജ് ചെയ്യാൻ, <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> എന്നതിനെ അനുവദിക്കുക"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ഗ്ലാസുകൾ"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> മാനേജ് ചെയ്യാൻ ഈ ആപ്പ് ആവശ്യമാണ്. നിങ്ങളുടെ അറിയിപ്പുകളുമായി ഇടപഴകാനും ഫോൺ, SMS, കോൺടാക്റ്റുകൾ, മൈക്രോഫോൺ, സമീപമുള്ള ഉപകരണങ്ങളുടെ അനുമതികൾ എന്നിവ ആക്സസ് ചെയ്യാനും <xliff:g id="APP_NAME">%2$s</xliff:g> എന്നതിനെ അനുവദിക്കും."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"നിങ്ങളുടെ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> എന്നതിൽ ഇനിപ്പറയുന്ന അനുമതികൾ ആക്സസ് ചെയ്യാൻ ഈ ആപ്പിനെ അനുവദിക്കും"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"നിങ്ങളുടെ ഫോണിൽ നിന്ന് ഈ വിവരങ്ങൾ ആക്സസ് ചെയ്യാൻ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ആപ്പിനെ അനുവദിക്കുക"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ക്രോസ്-ഉപകരണ സേവനങ്ങൾ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"നിങ്ങളുടെ ഉപകരണങ്ങളിൽ ഒന്നിൽ നിന്ന് അടുത്തതിലേക്ക് ആപ്പുകൾ സ്ട്രീം ചെയ്യാൻ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"നിങ്ങളുടെ ഉപകരണങ്ങളിൽ ഒന്നിൽ നിന്ന് അടുത്തതിലേക്ക് ആപ്പുകൾ സ്ട്രീം ചെയ്യാൻ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> എന്ന ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> എന്നത് അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"നിങ്ങളുടെ ഫോണിൽ നിന്ന് ഈ വിവരങ്ങൾ ആക്സസ് ചെയ്യാൻ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ആപ്പിനെ അനുവദിക്കുക"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play സേവനങ്ങൾ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"നിങ്ങളുടെ ഫോണിലെ ഫോട്ടോകൾ, മീഡിയ, അറിയിപ്പുകൾ എന്നിവ ആക്സസ് ചെയ്യാൻ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"നിങ്ങളുടെ ഫോണിലെ ഫോട്ടോകൾ, മീഡിയ, അറിയിപ്പുകൾ എന്നിവ ആക്സസ് ചെയ്യാൻ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> എന്ന ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ഈ പ്രവർത്തനം നടത്താൻ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> എന്നതിനെ അനുവദിക്കണോ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"സമീപമുള്ള ഉപകരണങ്ങളിൽ ആപ്പുകളും മറ്റ് സിസ്റ്റം ഫീച്ചറുകളും സ്ട്രീം ചെയ്യാൻ നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> എന്നതിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ഉപകരണം"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ നിങ്ങളുടെ ഫോണിനും <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതിനും ഇടയിൽ സമന്വയിപ്പിക്കുന്നതിന് ഈ ആപ്പിന് കഴിയും"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ നിങ്ങളുടെ ഫോണിനും തിരഞ്ഞെടുത്ത ഉപകരണത്തിനും ഇടയിൽ സമന്വയിപ്പിക്കുന്നതിന് ഈ ആപ്പിന് കഴിയും"</string>
<string name="consent_yes" msgid="8344487259618762872">"അനുവദിക്കുക"</string>
<string name="consent_no" msgid="2640796915611404382">"അനുവദിക്കരുത്"</string>
<string name="consent_back" msgid="2560683030046918882">"മടങ്ങുക"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"നിങ്ങളുടെ ഫോണിലെ ആപ്പുകൾ സ്ട്രീം ചെയ്യുക"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"നിങ്ങളുടെ ഫോണിൽ നിന്ന് ആപ്പുകളും മറ്റ് സിസ്റ്റം ഫീച്ചറുകളും സ്ട്രീം ചെയ്യാം"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ഫോൺ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ടാബ്ലെറ്റ്"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-mn/strings.xml b/packages/CompanionDeviceManager/res/values-mn/strings.xml
index 1d29cde..7eb2e8d 100644
--- a/packages/CompanionDeviceManager/res/values-mn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mn/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>-д <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>-д хандахыг зөвшөөрөх үү?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"цаг"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>-н удирдах<xliff:g id="PROFILE_NAME">%1$s</xliff:g>-г сонгоно уу"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Энэ апп таны <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-г удирдахад шаардлагатай. <xliff:g id="APP_NAME">%2$s</xliff:g>-д залгаж буй хүний нэр зэрэг мэдээллийг синк хийх, таны мэдэгдэлтэй харилцан үйлдэл хийх, Утас, SMS, Харилцагчид, Календарь, Дуудлагын жагсаалт болон Ойролцоох төхөөрөмжүүдийн зөвшөөрөлд хандахыг зөвшөөрнө."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Энэ аппад залгаж буй хүний нэр зэрэг мэдээллийг синк хийх болон таны <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандахыг зөвшөөрнө"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>-д <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>-г удирдахыг зөвшөөрөх үү?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"нүдний шил"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Энэ апп <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-г удирдахад шаардлагатай. <xliff:g id="APP_NAME">%2$s</xliff:g>-д таны мэдэгдэлтэй харилцан үйлдэл хийх, Утас, SMS, Харилцагчид, Микрофон болон Ойролцоох төхөөрөмжүүдийн зөвшөөрөлд хандахыг зөвшөөрнө."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Энэ апп таны <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандах эрхтэй байх болно"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>-д таны утаснаас энэ мэдээлэлд хандахыг зөвшөөрнө үү"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Төхөөрөмж хоорондын үйлчилгээ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Таны төхөөрөмжүүд хооронд апп дамжуулахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Таны төхөөрөмжүүд хооронд апп дамжуулахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>-д таны утаснаас энэ мэдээлэлд хандахыг зөвшөөрнө үү"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play үйлчилгээ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Таны утасны зураг, медиа болон мэдэгдэлд хандахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Таны утасны зураг, медиа болон мэдэгдэлд хандахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>-д энэ үйлдлийг хийхийг зөвшөөрөх үү?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-н өмнөөс аппууд болон системийн бусад онцлогийг ойролцоох төхөөрөмжүүд рүү дамжуулах зөвшөөрөл хүсэж байна"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"төхөөрөмж"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Энэ апп залгаж буй хүний нэр зэрэг мэдээллийг таны утас болон <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н хооронд синк хийх боломжтой болно"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Энэ апп залгаж буй хүний нэр зэрэг мэдээллийг таны утас болон сонгосон төхөөрөмжийн хооронд синк хийх боломжтой болно"</string>
<string name="consent_yes" msgid="8344487259618762872">"Зөвшөөрөх"</string>
<string name="consent_no" msgid="2640796915611404382">"Бүү зөвшөөр"</string>
<string name="consent_back" msgid="2560683030046918882">"Буцах"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Утасныхаа аппуудыг дамжуулаарай"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Утаснаасаа аппууд болон системийн бусад онцлогийг дамжуулаарай"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"утас"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"таблет"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml
index 9c082a4..b999641 100644
--- a/packages/CompanionDeviceManager/res/values-mr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"सहयोगी डिव्हाइस व्यवस्थापक"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ला <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> अॅक्सेस करण्याची अनुमती द्यायची आहे का?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"वॉच"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> द्वारे व्यवस्थापित करण्यासाठी <xliff:g id="PROFILE_NAME">%1$s</xliff:g> निवडा"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"तुमचे <xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापित करण्यासाठी हे ॲप आवश्यक आहे. <xliff:g id="APP_NAME">%2$s</xliff:g> ला कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करण्याची, तुमच्या सूचनांसोबत संवाद साधण्याची आणि तुमचा फोन, एसएमएस, संपर्क, कॅलेंडर, कॉल लॉग व जवळपासच्या डिव्हाइसच्या परवानग्या अॅक्सेस करण्याची अनुमती मिळेल."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"या अॅपला कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करण्याची आणि तुमच्या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> वर पुढील परवानग्या अॅक्सेस करण्याची अनुमती दिली जाईल"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ला <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> व्यवस्थापित करण्याची अनुमती द्यायची आहे?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापित करण्यासाठी हे ॲप आवश्यक आहे. <xliff:g id="APP_NAME">%2$s</xliff:g> ला तुमच्या सूचनांसोबत संवाद साधण्याची आणि तुमचा फोन, एसएमएस, संपर्क, मायक्रोफोन व जवळपासच्या डिव्हाइसच्या परवानग्या अॅक्सेस करण्याची अनुमती मिळेल."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"या अॅपला तुमच्या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> वर या परवानग्या अॅक्सेस करण्याची अनुमती दिली जाईल"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ला ही माहिती तुमच्या फोनवरून अॅक्सेस करण्यासाठी अनुमती द्या"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रॉस-डिव्हाइस सेवा"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"तुमच्या डिव्हाइसदरम्यान ॲप्स स्ट्रीम करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"तुमच्या डिव्हाइसदरम्यान ॲप्स स्ट्रीम करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ला ही माहिती तुमच्या फोनवरून अॅक्सेस करण्यासाठी अनुमती द्या"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play सेवा"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"तुमच्या फोनमधील फोटो, मीडिया आणि सूचना ॲक्सेस करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"तुमच्या फोनमधील फोटो, मीडिया आणि सूचना ॲक्सेस करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ला ही कृती करण्याची अनुमती द्यायची आहे का?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे जवळपासच्या डिव्हाइसवर अॅप्स आणि इतर सिस्टीम वैशिष्ट्ये स्ट्रीम करण्यासाठी तुमच्या <xliff:g id="DEVICE_NAME">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करा"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"डिव्हाइस"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"हे ॲप तुमचा फोन आणि <xliff:g id="DEVICE_NAME">%1$s</xliff:g> दरम्यान कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करू शकेल"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"हे ॲप तुमचा फोन आणि निवडलेल्या डिव्हाइसदरम्यान कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करू शकेल"</string>
<string name="consent_yes" msgid="8344487259618762872">"अनुमती द्या"</string>
<string name="consent_no" msgid="2640796915611404382">"अनुमती देऊ नका"</string>
<string name="consent_back" msgid="2560683030046918882">"मागे जा"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"तुमच्या फोनवरील ॲप्स स्ट्रीम करा"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"तुमच्या फोनवरून अॅप्स आणि इतर सिस्टीम वैशिष्ट्ये स्ट्रीम करा"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"फोन"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"टॅबलेट"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ms/strings.xml b/packages/CompanionDeviceManager/res/values-ms/strings.xml
index 69f3c85..626b3cf 100644
--- a/packages/CompanionDeviceManager/res/values-ms/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ms/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Pengurus Peranti Rakan"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Benarkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> untuk mengakses <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"jam tangan"</string>
<string name="chooser_title" msgid="2262294130493605839">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk diurus oleh <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Apl ini diperlukan untuk mengurus <xliff:g id="DEVICE_NAME">%1$s</xliff:g> anda. <xliff:g id="APP_NAME">%2$s</xliff:g> akan dibenarkan untuk menyegerakkan maklumat seperti nama individu yang memanggil, berinteraksi dengan pemberitahuan anda dan mengakses kebenaran Telefon, SMS, Kenalan, Kalendar, Log panggilan dan Peranti berdekatan anda."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Apl ini akan dibenarkan untuk menyegerakkan maklumat seperti nama seseorang yang membuat panggilan dan mengakses kebenaran ini pada <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> anda"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Benarkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> mengurus <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"cermin mata"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Apl ini diperlukan untuk mengurus <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan dibenarkan untuk berinteraksi dengan pemberitahuan anda dan mengakses kebenaran Telefon, SMS, Kenalan, Mikrofon dan Peranti berdekatan anda."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Apl ini akan dibenarkan untuk mengakses kebenaran yang berikut pada <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> anda"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Benarkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> mengakses maklumat ini daripada telefon anda"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Perkhidmatan silang peranti"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> anda untuk menstrim apl antara peranti anda"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> anda untuk menstrim apl antara peranti anda"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Benarkan <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> untuk mengakses maklumat ini daripada telefon anda"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Perkhidmatan Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> anda untuk mengakses foto, media dan pemberitahuan telefon anda"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> anda untuk mengakses foto, media dan pemberitahuan telefon anda"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Benarkan <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> mengambil tindakan ini?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DEVICE_NAME">%2$s</xliff:g> anda untuk menstrim apl dan ciri sistem yang lain pada peranti berdekatan"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"peranti"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Apl ini akan dapat menyegerakkan maklumat seperti nama individu yang memanggil, antara telefon anda dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Apl ini akan dapat menyegerakkan maklumat seperti nama individu yang memanggil, antara telefon anda dengan peranti yang dipilih"</string>
<string name="consent_yes" msgid="8344487259618762872">"Benarkan"</string>
<string name="consent_no" msgid="2640796915611404382">"Jangan benarkan"</string>
<string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Strim apl telefon anda"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Strim apl dan ciri sistem yang lain daripada telefon anda"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-my/strings.xml b/packages/CompanionDeviceManager/res/values-my/strings.xml
index ebd63574..bf9b422 100644
--- a/packages/CompanionDeviceManager/res/values-my/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-my/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"တွဲဖက်ကိရိယာ မန်နေဂျာ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> အား <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>? သုံးခွင့်ပြုခြင်း"</string>
<string name="profile_name_watch" msgid="576290739483672360">"နာရီ"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> က စီမံခန့်ခွဲရန် <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ကို ရွေးချယ်ပါ"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"သင်၏ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ကို စီမံခန့်ခွဲရန် ဤအက်ပ်လိုအပ်သည်။ ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်ရန်၊ သင်၏ဖုန်း၊ SMS စာတိုစနစ်၊ အဆက်အသွယ်များ၊ ပြက္ခဒိန်၊ ခေါ်ဆိုမှတ်တမ်းနှင့် အနီးတစ်ဝိုက်ရှိ စက်များဆိုင်ရာ ခွင့်ပြုချက်များသုံးရန်၊ အကြောင်းကြားချက်များနှင့် ပြန်လှန်တုံ့ပြန်ရန် <xliff:g id="APP_NAME">%2$s</xliff:g> ကို ခွင့်ပြုမည်။"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်ရန်နှင့် သင့် <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ကို <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> အား စီမံခွင့်ပြုမလား။"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"မျက်မှန်"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ကို စီမံခန့်ခွဲရန် ဤအက်ပ်လိုအပ်သည်။ သင်၏ဖုန်း၊ SMS စာတိုစနစ်၊ အဆက်အသွယ်များ၊ မိုက်ခရိုဖုန်းနှင့် အနီးတစ်ဝိုက်ရှိ စက်များဆိုင်ရာ ခွင့်ပြုချက်များသုံးရန်၊ အကြောင်းကြားချက်များနှင့် ပြန်လှန်တုံ့ပြန်ရန် <xliff:g id="APP_NAME">%2$s</xliff:g> ကို ခွင့်ပြုမည်။"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"သင့် <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ကို သင့်ဖုန်းမှ ဤအချက်အလက် သုံးခွင့်ပြုမည်"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"စက်များကြားသုံး ဝန်ဆောင်မှုများ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင်၏စက်များအကြား အက်ပ်များတိုက်ရိုက်လွှင့်ရန် <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင်၏စက်များအကြား အက်ပ်များတိုက်ရိုက်လွှင့်ရန် <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> အား သင့်ဖုန်းမှ ဤအချက်အလက် သုံးခွင့်ပြုခြင်း"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play ဝန်ဆောင်မှုများ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင့်ဖုန်း၏ ဓာတ်ပုံ၊ မီဒီယာနှင့် အကြောင်းကြားချက်များသုံးရန် <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင့်ဖုန်း၏ ဓာတ်ပုံ၊ မီဒီယာနှင့် အကြောင်းကြားချက်များသုံးရန် <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ကို ဤသို့လုပ်ဆောင်ခွင့်ပြုမလား။"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အနီးတစ်ဝိုက်ရှိ အက်ပ်များနှင့် အခြားစနစ်အင်္ဂါရပ်များကို တိုက်ရိုက်ဖွင့်ရန် သင့် <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"စက်"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ဤအက်ပ်သည် သင့်ဖုန်းနှင့် <xliff:g id="DEVICE_NAME">%1$s</xliff:g> အကြား ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်နိုင်ပါမည်"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ဤအက်ပ်သည် သင့်ဖုန်းနှင့် ရွေးထားသောစက်အကြား ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်နိုင်ပါမည်"</string>
<string name="consent_yes" msgid="8344487259618762872">"ခွင့်ပြုရန်"</string>
<string name="consent_no" msgid="2640796915611404382">"ခွင့်မပြုပါ"</string>
<string name="consent_back" msgid="2560683030046918882">"နောက်သို့"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"သင့်ဖုန်းရှိအက်ပ်များကို တိုက်ရိုက်ဖွင့်နိုင်သည်"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"သင့်ဖုန်းမှ အက်ပ်များနှင့် အခြားစနစ်အင်္ဂါရပ်များကို တိုက်ရိုက်ဖွင့်သည်"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ဖုန်း"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"တက်ဘလက်"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-nb/strings.xml b/packages/CompanionDeviceManager/res/values-nb/strings.xml
index 4801c8c..3863d1d 100644
--- a/packages/CompanionDeviceManager/res/values-nb/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nb/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Gi <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tilgang til <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"klokke"</string>
<string name="chooser_title" msgid="2262294130493605839">"Velg <xliff:g id="PROFILE_NAME">%1$s</xliff:g> som skal administreres av <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Denne appen kreves for å administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillatelse til å synkronisere informasjon som navnet til noen som ringer, og samhandle med varslene dine, og får tilgang til tillatelsene for telefon, SMS, kontakter, kalender, samtalelogger og enheter i nærheten."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Denne appen får tillatelse til å synkronisere informasjon som navnet til noen som ringer, og har disse tillatelsene på din/ditt <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du la <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> administrere <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"briller"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Denne appen kreves for å administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilgang til varslene dine og får tillatelsene for telefon, SMS, kontakter, mikrofon og enheter i nærheten."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Denne appen får disse tillatelsene på din/ditt <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Gi <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tilgang til denne informasjonen fra telefonen din"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjenester på flere enheter"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse til å strømme apper mellom enhetene dine, på vegne av <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse til å strømme apper mellom enhetene dine, på vegne av <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Gi <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> tilgang til denne informasjonen fra telefonen din"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjenester"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse til å få tilgang til bilder, medier og varsler på telefonen din, på vegne av <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse til å få tilgang til bilder, medier og varsler på telefonen din, på vegne av <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vil du la <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> gjøre dette?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse på vegne av <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til å strømme apper og andre systemfunksjoner til enheter i nærheten"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Denne appen kan synkronisere informasjon som navnet til noen som ringer, mellom telefonen og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Denne appen kan synkronisere informasjon som navnet til noen som ringer, mellom telefonen og den valgte enheten"</string>
<string name="consent_yes" msgid="8344487259618762872">"Tillat"</string>
<string name="consent_no" msgid="2640796915611404382">"Ikke tillat"</string>
<string name="consent_back" msgid="2560683030046918882">"Tilbake"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Strøm appene på telefonen"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Strøm apper og andre systemfunksjoner fra telefonen"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"nettbrett"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ne/strings.xml b/packages/CompanionDeviceManager/res/values-ne/strings.xml
index 71b7695..60888e5 100644
--- a/packages/CompanionDeviceManager/res/values-ne/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ne/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"सहयोगी डिभाइसको प्रबन्धक"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> लाई <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> प्रयोग गर्ने अनुमति दिने हो?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"घडी"</string>
<string name="chooser_title" msgid="2262294130493605839">"आफूले <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> प्रयोग गरी व्यवस्थापन गर्न चाहेको <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चयन गर्नुहोस्"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"तपाईंको <xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापन गर्न यो एप चाहिन्छ। <xliff:g id="APP_NAME">%2$s</xliff:g> लाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने, तपाईंका सूचना हेर्ने र फोन, SMS, कन्ट्याक्ट, पात्रो, कल लग तथा नजिकैका डिभाइससम्बन्धी अनुमतिहरू हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ।"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने र यी कुराहरू गर्ने अनुमति दिइने छ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> लाई <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> व्यवस्थापन गर्ने अनुमति दिने हो?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"चस्मा"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापन गर्न यो एप चाहिन्छ। <xliff:g id="APP_NAME">%2$s</xliff:g> लाई तपाईंका सूचना हेर्ने र फोन, SMS, कन्ट्याक्ट, माइक्रोफोन तथा नजिकैका डिभाइससम्बन्धी अनुमतिहरू हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ।"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई निम्न अनुमति दिइने छ:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> लाई तपाईंको फोनमा भएको यो जानकारी हेर्ने तथा प्रयोग गर्ने अनुमति दिनुहोस्"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रस-डिभाइस सेवाहरू"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> को तर्फबाट तपाईंका कुनै एउटा डिभाइसबाट अर्को डिभाइसमा एप स्ट्रिम गर्ने अनुमति माग्दै छ"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> को तर्फबाट तपाईंका कुनै एउटा डिभाइसबाट अर्को डिभाइसमा एप स्ट्रिम गर्ने अनुमति माग्दै छ"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> लाई तपाईंको फोनमा भएको यो जानकारी हेर्ने तथा प्रयोग गर्ने अनुमति दिनुहोस्"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> को तर्फबाट तपाईंको फोनमा भएका फोटो, मिडिया र सूचनाहरू हेर्ने तथा प्रयोग गर्ने अनुमति माग्दै छ"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> को तर्फबाट तपाईंको फोनमा भएका फोटो, मिडिया र सूचनाहरू हेर्ने तथा प्रयोग गर्ने अनुमति माग्दै छ"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> लाई यो कार्य गर्ने अनुमति दिने हो?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_NAME">%2$s</xliff:g> को तर्फबाट नजिकैका डिभाइसहरूमा एप र सिस्टमका अन्य सुविधाहरू स्ट्रिम गर्ने अनुमति माग्दै छ"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"यन्त्र"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"यो एपले तपाईंको फोन र तपाईंले छनौट गर्ने <xliff:g id="DEVICE_NAME">%1$s</xliff:g> का बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ।"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"यो एपले तपाईंको फोन र तपाईंले छनौट गर्ने डिभाइसका बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ।"</string>
<string name="consent_yes" msgid="8344487259618762872">"अनुमति दिनुहोस्"</string>
<string name="consent_no" msgid="2640796915611404382">"अनुमति नदिनुहोस्"</string>
<string name="consent_back" msgid="2560683030046918882">"पछाडि"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"आफ्नो फोनका एपहरू प्रयोग गर्नुहोस्"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"आफ्नो फोनबाट एप र सिस्टमका अन्य सुविधाहरू स्ट्रिम गर्नुहोस्"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"फोन"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ट्याब्लेट"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-nl/strings.xml b/packages/CompanionDeviceManager/res/values-nl/strings.xml
index d953a95..2b78bb1 100644
--- a/packages/CompanionDeviceManager/res/values-nl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nl/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang geven tot <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"smartwatch"</string>
<string name="chooser_title" msgid="2262294130493605839">"Een <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kiezen om te beheren met <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Deze app is vereist om je <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te beheren. <xliff:g id="APP_NAME">%2$s</xliff:g> mag informatie (zoals de naam van iemand die belt) synchroniseren, mag interactie hebben met je meldingen en krijgt toegang tot de rechten Telefoon, Sms, Contacten, Agenda, Gesprekslijsten en Apparaten in de buurt."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Deze app kan informatie synchroniseren (zoals de naam van iemand die belt) en krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toestaan <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> te beheren?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"brillen"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Deze app is nodig om <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te beheren. <xliff:g id="APP_NAME">%2$s</xliff:g> mag interactie hebben met je meldingen en krijgt toegang tot de rechten Telefoon, Sms, Contacten, Microfoon en Apparaten in de buurt."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Deze app krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang geven tot deze informatie op je telefoon"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device-services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens jouw <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> toestemming om apps te streamen tussen je apparaten"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens jouw <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toestemming om apps te streamen tussen je apparaten"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> toegang geven tot deze informatie op je telefoon"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens jouw <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> toegang tot de foto\'s, media en meldingen van je telefoon"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens jouw <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toegang tot de foto\'s, media en meldingen van je telefoon"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Toestaan dat <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> deze actie uitvoert?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens je <xliff:g id="DEVICE_NAME">%2$s</xliff:g> toestemming om apps en andere systeemfuncties naar apparaten in de buurt te streamen"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"apparaat"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Deze app kan informatie, zoals de naam van iemand die belt, synchroniseren tussen je telefoon en <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Deze app kan informatie, zoals de naam van iemand die belt, synchroniseren tussen je telefoon en het gekozen apparaat"</string>
<string name="consent_yes" msgid="8344487259618762872">"Toestaan"</string>
<string name="consent_no" msgid="2640796915611404382">"Niet toestaan"</string>
<string name="consent_back" msgid="2560683030046918882">"Terug"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Stream de apps van je telefoon"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Apps en andere systeemfuncties streamen vanaf je telefoon"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefoon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-or/strings.xml b/packages/CompanionDeviceManager/res/values-or/strings.xml
index f9a5c30..9b5116dc 100644
--- a/packages/CompanionDeviceManager/res/values-or/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-or/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ସହଯୋଗୀ ଡିଭାଇସ୍ ପରିଚାଳକ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>କୁ ଆକ୍ସେସ କରିବା ପାଇଁ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>କୁ ଅନୁମତି ଦେବେ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ୱାଚ୍"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ଦ୍ୱାରା ପରିଚାଳିତ ହେବା ପାଇଁ ଏକ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>କୁ ବାଛନ୍ତୁ"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ପରିଚାଳନା କରିବା ପାଇଁ ଏହି ଆପ ଆବଶ୍ୟକ। କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବା, ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସହ ଇଣ୍ଟରାକ୍ଟ କରିବା ଏବଂ ଆପଣଙ୍କର ଫୋନ, SMS, କଣ୍ଟାକ୍ଟ, କେଲେଣ୍ଡର, କଲ ଲଗ ଓ ଆଖପାଖର ଡିଭାଇସ ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%2$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯିବ।"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏବଂ ଆପଣଙ୍କ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>କୁ ପରିଚାଳନା କରିବା ପାଇଁ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>କୁ ଅନୁମତି ଦେବେ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ଚଷମା"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ପରିଚାଳନା କରିବା ପାଇଁ ଏହି ଆପ ଆବଶ୍ୟକ। ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସହ ଇଣ୍ଟରାକ୍ଟ କରିବା ଏବଂ ଆପଣଙ୍କର ଫୋନ, SMS, କଣ୍ଟାକ୍ଟ, ମାଇକ୍ରୋଫୋନ ଓ ଆଖପାଖର ଡିଭାଇସ ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%2$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯିବ।"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ଆପଣଙ୍କ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"ଆପଣଙ୍କ ଫୋନରୁ ଏହି ସୂଚନାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"କ୍ରସ-ଡିଭାଇସ ସେବାଗୁଡ଼ିକ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"ଆପଣଙ୍କ ଫୋନରୁ ଏହି ସୂଚନାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play ସେବାଗୁଡ଼ିକ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"ଆପଣଙ୍କ ଫୋନର ଫଟୋ, ମିଡିଆ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"ଆପଣଙ୍କ ଫୋନର ଫଟୋ, ମିଡିଆ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ଏହି ପଦକ୍ଷେପ ନେବା ପାଇଁ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>କୁ ଅନୁମତି ଦେବେ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"ଆଖପାଖର ଡିଭାଇସଗୁଡ଼ିକରେ ଆପ୍ସ ଏବଂ ଅନ୍ୟ ସିଷ୍ଟମ ଫିଚରଗୁଡ଼ିକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ଡିଭାଇସ୍"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ଆପଣଙ୍କ ଫୋନ ଏବଂ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ମଧ୍ୟରେ, କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏହି ଆପ ସକ୍ଷମ ହେବ"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ଆପଣଙ୍କ ଫୋନ ଏବଂ ବଛାଯାଇଥିବା ଡିଭାଇସ ମଧ୍ୟରେ, କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏହି ଆପ ସକ୍ଷମ ହେବ"</string>
<string name="consent_yes" msgid="8344487259618762872">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="consent_no" msgid="2640796915611404382">"ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ"</string>
<string name="consent_back" msgid="2560683030046918882">"ପଛକୁ ଫେରନ୍ତୁ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ଆପଣଙ୍କ ଫୋନର ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରନ୍ତୁ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ଆପଣଙ୍କ ଫୋନରୁ ଆପ୍ସ ଏବଂ ଅନ୍ୟ ସିଷ୍ଟମ ଫିଚରଗୁଡ଼ିକୁ ଷ୍ଟ୍ରିମ କରନ୍ତୁ"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ଫୋନ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ଟାବଲେଟ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-pa/strings.xml b/packages/CompanionDeviceManager/res/values-pa/strings.xml
index b6b8b29..c6bbf37 100644
--- a/packages/CompanionDeviceManager/res/values-pa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pa/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ਸੰਬੰਧੀ ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਕ"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"ਕੀ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ਨੂੰ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ਸਮਾਰਟ-ਵਾਚ"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਣ ਲਈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ਚੁਣੋ"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ਇਹ ਐਪ ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਹੈ। <xliff:g id="APP_NAME">%2$s</xliff:g> ਨੂੰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰਨ, ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਅਤੇ ਤੁਹਾਡੇ ਫ਼ੋਨ, SMS, ਸੰਪਰਕਾਂ, ਕੈਲੰਡਰ, ਕਾਲ ਲੌਗਾਂ ਅਤੇ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ।"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> \'ਤੇ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰਨ ਅਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"ਕੀ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ਨੂੰ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ਐਨਕਾਂ"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ਇਹ ਐਪ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਹੈ। <xliff:g id="APP_NAME">%2$s</xliff:g> ਨੂੰ ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਅਤੇ ਤੁਹਾਡੇ ਫ਼ੋਨ, SMS, ਸੰਪਰਕਾਂ, ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਅਤੇ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ।"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> \'ਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਤੋਂ ਇਸ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"ਕ੍ਰਾਸ-ਡੀਵਾਈਸ ਸੇਵਾਵਾਂ"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸਾਂ ਵਿਚਕਾਰ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸਾਂ ਵਿਚਕਾਰ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਤੋਂ ਇਸ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play ਸੇਵਾਵਾਂ"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੀਆਂ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਸੂਚਨਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੀਆਂ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਸੂਚਨਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ਕੀ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ਨੂੰ ਇਹ ਕਾਰਵਾਈ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ \'ਤੇ ਐਪਾਂ ਅਤੇ ਹੋਰ ਸਿਸਟਮ ਸੰਬੰਧੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"ਡੀਵਾਈਸ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫ਼ੋਨ ਅਤੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਵਿਚਕਾਰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰ ਸਕੇਗੀ"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫ਼ੋਨ ਅਤੇ ਚੁਣੇ ਗਏ ਡੀਵਾਈਸ ਵਿਚਕਾਰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰ ਸਕੇਗੀ"</string>
<string name="consent_yes" msgid="8344487259618762872">"ਆਗਿਆ ਦਿਓ"</string>
<string name="consent_no" msgid="2640796915611404382">"ਆਗਿਆ ਨਾ ਦਿਓ"</string>
<string name="consent_back" msgid="2560683030046918882">"ਪਿੱਛੇ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ਆਪਣੇ ਫ਼ੋਨ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰੋ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ਆਪਣੇ ਫ਼ੋਨ ਤੋਂ ਐਪਾਂ ਅਤੇ ਹੋਰ ਸਿਸਟਮ ਸੰਬੰਧੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰੋ"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ਫ਼ੋਨ"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ਟੈਬਲੈੱਟ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-pl/strings.xml b/packages/CompanionDeviceManager/res/values-pl/strings.xml
index dafdb63..87db327 100644
--- a/packages/CompanionDeviceManager/res/values-pl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pl/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menedżer urządzeń towarzyszących"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Zezwolić na dostęp aplikacji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> do tego urządzenia (<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>)?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"zegarek"</string>
<string name="chooser_title" msgid="2262294130493605839">"Wybierz profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, którym ma zarządzać aplikacja <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ta aplikacja jest niezbędna do zarządzania urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacja <xliff:g id="APP_NAME">%2$s</xliff:g> będzie mogła synchronizować informacje takie jak nazwa osoby dzwoniącej, korzystać z powiadomień oraz uprawnień dotyczących telefonu, SMS-ów, kontaktów, kalendarza, rejestrów połączeń i Urządzeń w pobliżu."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikacja będzie mogła synchronizować informacje takie jak nazwa dzwoniącego oraz korzystać z tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Zezwolić na dostęp aplikacji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> do urządzenia <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Okulary"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta aplikacja jest niezbędna do zarządzania urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacja <xliff:g id="APP_NAME">%2$s</xliff:g> będzie mogła wchodzić w interakcję z powiadomieniami i korzystać z uprawnień dotyczących telefonu, SMS-ów, kontaktów, mikrofonu oraz urządzeń w pobliżu."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikacja będzie miała dostęp do tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Zezwól urządzeniu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na dostęp do tych informacji na Twoim telefonie"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Usługi na innym urządzeniu"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> o uprawnienia dotyczące strumieniowego odtwarzania treści z aplikacji na innym urządzeniu"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> o uprawnienia dotyczące strumieniowego odtwarzania treści z aplikacji na innym urządzeniu"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Zezwól aplikacji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na dostęp do tych informacji na Twoim telefonie"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Usługi Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> o uprawnienia dotyczące dostępu do zdjęć, multimediów i powiadomień na telefonie"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> o uprawnienia dotyczące dostępu do zdjęć, multimediów i powiadomień na telefonie"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Zezwolić urządzeniu <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> na wykonanie tego działania?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DEVICE_NAME">%2$s</xliff:g> o uprawnienia do strumieniowego odtwarzania treści i innych funkcji systemowych na urządzeniach w pobliżu"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"urządzenie"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta aplikacja może synchronizować informacje takie jak nazwa osoby dzwoniącej między Twoim telefonem i urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ta aplikacja może synchronizować informacje takie jak nazwa osoby dzwoniącej między Twoim telefonem i wybranym urządzeniem"</string>
<string name="consent_yes" msgid="8344487259618762872">"Zezwól"</string>
<string name="consent_no" msgid="2640796915611404382">"Nie zezwalaj"</string>
<string name="consent_back" msgid="2560683030046918882">"Wstecz"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Odtwarzaj strumieniowo aplikacje z telefonu"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Aplikacje do odtwarzania strumieniowego i inne funkcje systemowe na Twoim telefonie"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
index 2214567..c630fce 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse o dispositivo <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
<string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerenciado pelo app <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá sincronizar informações, como o nome de quem está ligando, interagir com suas notificações e acessar as permissões do Telefone, SMS, contatos, agenda, registro de chamadas e dispositivos por perto."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> gerencie o dispositivo <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá interagir com suas notificações e acessar suas permissões de telefone, SMS, contatos, microfone e dispositivos por perto."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse estas informações do smartphone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Autorizar que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse estas informações do smartphone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> realize essa ação?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer streaming de apps e de outros recursos do sistema para dispositivos por perto"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo escolhido"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Fazer transmissão dos apps no seu smartphone"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Faça streaming de apps e outros recursos do sistema pelo smartphone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"smartphone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
index 738fe4a..59d4423 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestor de dispositivos associados"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Permitir que a app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aceda ao <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
<string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerido pela app <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Esta app é necessária para gerir o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A app <xliff:g id="APP_NAME">%2$s</xliff:g> vai poder sincronizar informações, como o nome do autor de uma chamada, interagir com as suas notificações e aceder às autorizações do Telemóvel, SMS, Contactos, Calendário, Registos de chamadas e Dispositivos próximos."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, e aceder a estas autorizações no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permita que a app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> faça a gestão do dispositivo <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta app é necessária para gerir o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A app <xliff:g id="APP_NAME">%2$s</xliff:g> vai poder interagir com as suas notificações e aceder às autorizações do Telemóvel, SMS, Contactos, Microfone e Dispositivos próximos."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta app vai poder aceder a estas autorizações no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permita que a app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aceda a estas informações do seu telemóvel"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para fazer stream de apps entre os seus dispositivos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer stream de apps entre os seus dispositivos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Permita que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> aceda a estas informações do seu telemóvel"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Serviços do Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para aceder às fotos, ao conteúdo multimédia e às notificações do seu telemóvel"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para aceder às fotos, ao conteúdo multimédia e às notificações do seu telemóvel"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> realize esta ação?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer stream de apps e outras funcionalidades do sistema para dispositivos próximos"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, entre o telemóvel e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, entre o telemóvel e o dispositivo escolhido"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Faça stream das apps do telemóvel"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Faça stream de apps e outras funcionalidades do sistema a partir do telemóvel"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telemóvel"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-pt/strings.xml b/packages/CompanionDeviceManager/res/values-pt/strings.xml
index 2214567..c630fce 100644
--- a/packages/CompanionDeviceManager/res/values-pt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse o dispositivo <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
<string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerenciado pelo app <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá sincronizar informações, como o nome de quem está ligando, interagir com suas notificações e acessar as permissões do Telefone, SMS, contatos, agenda, registro de chamadas e dispositivos por perto."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> gerencie o dispositivo <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá interagir com suas notificações e acessar suas permissões de telefone, SMS, contatos, microfone e dispositivos por perto."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Permitir que o app <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse estas informações do smartphone"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Autorizar que <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> acesse estas informações do smartphone"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> realize essa ação?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer streaming de apps e de outros recursos do sistema para dispositivos por perto"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo escolhido"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
<string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Fazer transmissão dos apps no seu smartphone"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Faça streaming de apps e outros recursos do sistema pelo smartphone"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"smartphone"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ro/strings.xml b/packages/CompanionDeviceManager/res/values-ro/strings.xml
index cf42753..785ad86 100644
--- a/packages/CompanionDeviceManager/res/values-ro/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ro/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Manager de dispozitiv Companion"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Permiți ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să 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 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>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"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ă sincronizeze informații, cum ar fi numele unui apelant, să interacționeze cu notificările tale și să îți acceseze permisiunile pentru Telefon, SMS, Agendă, Calendar, Jurnale de apeluri și Dispozitive din apropiere."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, și să acceseze aceste permisiuni pe <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Permiți ca <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> să gestioneze <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"ochelari"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"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 tale și să-ți acceseze permisiunile pentru Telefon, SMS, Agendă, Microfon și Dispozitive din apropiere."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplicația va putea să acceseze următoarele permisiuni pe <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</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 tale"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> de a reda în stream aplicații între dispozitivele tale"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></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="helper_title_computer" msgid="4671071173916176037">"Servicii Google Play"</string>
- <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="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> de a accesa fotografiile, conținutul media și notificările de pe telefon"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permiți ca <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> să realizeze această acțiune?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_NAME">%2$s</xliff:g> de a reda în stream conținut din aplicații și alte funcții de sistem pe dispozitivele din apropiere"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispozitiv"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, între telefonul tău și <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, între telefonul tău și dispozitivul ales"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permite"</string>
<string name="consent_no" msgid="2640796915611404382">"Nu permite"</string>
<string name="consent_back" msgid="2560683030046918882">"Înapoi"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Să redea în stream aplicațiile telefonului"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Redă în stream conținut din aplicații și alte funcții de sistem de pe telefon"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletă"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ru/strings.xml b/packages/CompanionDeviceManager/res/values-ru/strings.xml
index 6b1172d..6b03b43 100644
--- a/packages/CompanionDeviceManager/res/values-ru/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ru/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Управление подключенными устройствами"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Предоставить приложению <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> доступ к устройству <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"часы"</string>
<string name="chooser_title" msgid="2262294130493605839">"Выберите устройство (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), которым будет управлять приложение <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Это приложение необходимо для управления устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Приложение \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" сможет синхронизировать данные, например из журнала звонков, а также получит доступ к уведомлениям и разрешениям \"Телефон\", \"Контакты\", \"Календарь\", \"Список вызовов\", \"Устройства поблизости\" и SMS."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Это приложение сможет синхронизировать данные, например имена вызывающих абонентов, а также получит указанные разрешения на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Разрешить приложению <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> управлять устройством <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Очки"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Это приложение необходимо для управления устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Приложение \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" сможет взаимодействовать с уведомлениями, а также получит разрешения \"Телефон\", SMS, \"Контакты\", \"Микрофон\" и \"Устройства поблизости\"."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Это приложение получит указанные разрешения на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Разрешите приложению <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> получать эту информацию с вашего телефона"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Сервисы стриминга приложений"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>, чтобы транслировать приложения между вашими устройствами."</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>, чтобы транслировать приложения между устройствами."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Разрешите приложению <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> получать эту информацию с вашего телефона"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Сервисы Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>, чтобы получить доступ к фотографиям, медиаконтенту и уведомлениям на телефоне."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>, чтобы получить доступ к фотографиям, медиаконтенту и уведомлениям на телефоне."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Разрешить приложению <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> выполнять это действие?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" от имени вашего устройства \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" запрашивает разрешение транслировать приложения и системные функции на устройства поблизости."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Приложение сможет синхронизировать информацию между телефоном и устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\", например данные из журнала звонков."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Приложение сможет синхронизировать информацию между телефоном и выбранным устройством, например данные из журнала звонков."</string>
<string name="consent_yes" msgid="8344487259618762872">"Разрешить"</string>
<string name="consent_no" msgid="2640796915611404382">"Запретить"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Трансляция приложений с телефона."</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Трансляция приложений и системных функций с телефона"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефоне"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"планшете"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-si/strings.xml b/packages/CompanionDeviceManager/res/values-si/strings.xml
index b86b0c4..c6821c3 100644
--- a/packages/CompanionDeviceManager/res/values-si/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-si/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"සහායක උපාංග කළමනාකරු"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> හට <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> වෙත ප්රවේශ වීමට ඉඩ දෙන්න ද?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ඔරලෝසුව"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> මගින් කළමනාකරණය කරනු ලැබීමට <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ක් තෝරන්න"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"මෙම යෙදුමට ඔබේ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> කළමනාකරණය කිරීමට අවශ්යයි. <xliff:g id="APP_NAME">%2$s</xliff:g> හට අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට, ඔබේ දැනුම්දීම් සමග අන්තර්ක්රියා කිරීමට සහ ඔබේ දුරකථනය, SMS, සම්බන්ධතා, දින දර්ශනය, ඇමතුම් ලොග සහ අවට උපාංග අවසර වෙත ප්රවේශ වීමට ඉඩ දෙනු ඇත."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"මෙම යෙදුමට අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට, සහ ඔබේ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> මත මෙම අවසර වෙත ප්රවේශ වීමට ඉඩ දෙනු ඇත"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> හට <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> කළමනා කිරීමට ඉඩ දෙන්න ද?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"කණ්ණාඩි"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> කළමනා කිරීමට මෙම යෙදුම අවශ්යයි. <xliff:g id="APP_NAME">%2$s</xliff:g> හට ඔබේ දැනුම්දීම් සමග අන්තර්ක්රියා කිරීමට සහ ඔබේ දුරකථනය, කෙටි පණිවුඩය, සම්බන්ධතා, මයික්රොෆෝනය සහ අවට උපාංග අවසර වෙත ප්රවේශ වීමට ඉඩ දෙයි."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"මෙම යෙදුමට ඔබේ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> මත මෙම අවසර වෙත ප්රවේශ වීමට ඉඩ දෙනු ඇත"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> හට ඔබගේ දුරකථනයෙන් මෙම තොරතුරුවලට ප්රවේශ වීමට ඉඩ දෙන්න"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"හරස්-උපාංග සේවා"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබගේ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> වෙනුවෙන් ඔබගේ උපාංග අතර යෙදුම් ප්රවාහ කිරීමට අවසරය ඉල්ලමින් සිටියි"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබේ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> වෙනුවෙන් ඔබේ උපාංග අතර යෙදුම් ප්රවාහ කිරීමට අවසරය ඉල්ලමින් සිටියි"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> හට ඔබගේ දුරකථනයෙන් මෙම තොරතුරුවලට ප්රවේශ වීමට ඉඩ දෙන්න"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play සේවා"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබගේ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> වෙනුවෙන් ඔබගේ දුරකථනයෙහි ඡායාරූප, මාධ්ය සහ දැනුම්දීම් වෙත ප්රවේශ වීමට අවසරය ඉල්ලමින් සිටියි"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබේ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> වෙනුවෙන් ඔබේ දුරකථනයේ ඡායාරූප, මාධ්ය, සහ දැනුම්දීම් වෙත ප්රවේශ වීමට අවසරය ඉල්ලමින් සිටියි"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"මෙම ක්රියාව කිරීමට <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> හට ඉඩ දෙන්න ද?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබේ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> වෙනුවෙන් යෙදුම් සහ අනෙකුත් පද්ධති විශේෂාංග අවට උපාංග වෙත ප්රවාහ කිරීමට අවසර ඉල්ලයි"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"උපාංගය"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"මෙම යෙදුමට ඔබේ දුරකථනය සහ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> අතර, අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට හැකි වනු ඇත"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"මෙම යෙදුමට ඔබේ දුරකථනය සහ තෝරා ගත් උපාංගය අතර, අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට හැකි වනු ඇත"</string>
<string name="consent_yes" msgid="8344487259618762872">"ඉඩ දෙන්න"</string>
<string name="consent_no" msgid="2640796915611404382">"ඉඩ නොදෙන්න"</string>
<string name="consent_back" msgid="2560683030046918882">"ආපසු"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"ඔබේ දුරකථනයේ යෙදුම් ප්රවාහ කරන්න"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"ඔබේ දුරකථනයෙන් යෙදුම් සහ අනෙකුත් පද්ධති විශේෂාංග ප්රවාහ කරන්න"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"දුරකථනය"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ටැබ්ලටය"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sk/strings.xml b/packages/CompanionDeviceManager/res/values-sk/strings.xml
index 77cfe8d..24a0f19 100644
--- a/packages/CompanionDeviceManager/res/values-sk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sk/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Správca sprievodných zariadení"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Chcete povoliť aplikácii <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> prístup k zariadeniu <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"hodinky"</string>
<string name="chooser_title" msgid="2262294130493605839">"Vyberte profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, ktorý bude spravovať aplikácia <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Táto aplikácia sa vyžaduje na správu zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude môcť synchronizovať informácie, napríklad meno volajúceho, interagovať s vašimi upozorneniami a získavať prístup k povoleniam telefónu, SMS, kontaktov, kalendára, zoznamu hovorov a zariadení v okolí."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, a získavať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Chcete povoliť aplikácii <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> spravovať zariadenie <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"okuliare"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Táto aplikácia sa vyžaduje na správu zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude môcť interagovať s vašimi upozorneniami a získa prístup k povoleniam pre telefón, SMS, kontakty, mikrofón a zariadenia v okolí."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Táto aplikácia bude mať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Povoľte aplikácii <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> prístup k týmto informáciám z vášho telefónu"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Služby pre viacero zariadení"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje povolenie na streamovanie aplikácií medzi vašimi zariadeniami v mene tohto zariadenia (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>)"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje pre zariadenie <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> povolenie streamovať aplikácie medzi vašimi zariadeniami."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Povoľte aplikácii <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> prístup k týmto informáciám z vášho telefónu"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Služby Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje povolenie na prístup k fotkám, médiám a upozorneniam vášho telefónu v mene tohto zariadenia (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>)"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje pre zariadenie <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> povolenie na prístup k fotkám, médiám a upozorneniam vášho telefónu"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Chcete povoliť zariadeniu <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> vykonať túto akciu?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje pre zariadenie <xliff:g id="DEVICE_NAME">%2$s</xliff:g> povolenie streamovať aplikácie a ďalšie systémové funkcie do zariadení v okolí"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"zariadenie"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, medzi telefónom a zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, medzi telefónom a vybraným zariadením"</string>
<string name="consent_yes" msgid="8344487259618762872">"Povoliť"</string>
<string name="consent_no" msgid="2640796915611404382">"Nepovoliť"</string>
<string name="consent_back" msgid="2560683030046918882">"Späť"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streamovať aplikácie telefónu"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Steaming aplikácii a ďalších systémov funkcií zo zariadenia"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefón"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sl/strings.xml b/packages/CompanionDeviceManager/res/values-sl/strings.xml
index 976289a..6058ae1 100644
--- a/packages/CompanionDeviceManager/res/values-sl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sl/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Upravitelj spremljevalnih naprav"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Želite aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dovoliti dostop do naprave <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ura"</string>
<string name="chooser_title" msgid="2262294130493605839">"Izbira naprave »<xliff:g id="PROFILE_NAME">%1$s</xliff:g>«, ki jo bo upravljala aplikacija <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ta aplikacija je potrebna za upravljanje naprave »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> bodo omogočene sinhronizacija podatkov, na primer imena klicatelja, interakcija z obvestili in uporaba dovoljenj Telefon, SMS, Stiki, Koledar, Dnevniki klicev in Naprave v bližini."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, in dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite aplikaciji <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dovoliti upravljanje naprave <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"očala"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta aplikacija je potrebna za upravljanje naprave »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> bosta omogočeni interakcija z obvestili in uporaba dovoljenj Telefon, SMS, Stiki, Mikrofon in Naprave v bližini."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ta aplikacija bo lahko dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Dovolite, da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dostopa do teh podatkov v vašem telefonu"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Storitve za zunanje naprave"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>« zahteva dovoljenje za pretočno predvajanje aplikacij v vaših napravah."</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>« zahteva dovoljenje za pretočno predvajanje aplikacij v vaših napravah."</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Dovolite, da <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> dostopa do teh podatkov v vašem telefonu"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Storitve Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>« zahteva dovoljenje za dostop do fotografij, predstavnosti in obvestil v telefonu."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>« zahteva dovoljenje za dostop do fotografij, predstavnosti in obvestil v telefonu."</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ali napravi <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> dovolite izvedbo tega dejanja?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DEVICE_NAME">%2$s</xliff:g>« zahteva dovoljenje za pretočno predvajanje aplikacij in drugih sistemskih funkcij v napravah v bližini."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"naprava"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, v telefonu in napravi »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, v telefonu in izbrani napravi."</string>
<string name="consent_yes" msgid="8344487259618762872">"Dovoli"</string>
<string name="consent_no" msgid="2640796915611404382">"Ne dovoli"</string>
<string name="consent_back" msgid="2560683030046918882">"Nazaj"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Pretočno predvajanje aplikacij telefona"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Pretočno predvajanje aplikacij in drugih sistemskih funkcij iz telefona"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablični računalnik"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sq/strings.xml b/packages/CompanionDeviceManager/res/values-sq/strings.xml
index 97fdcbb..aeab5bf 100644
--- a/packages/CompanionDeviceManager/res/values-sq/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sq/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menaxheri i pajisjes shoqëruese"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"T\'i lejohet <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> qasja te <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ora inteligjente"</string>
<string name="chooser_title" msgid="2262294130493605839">"Zgjidh \"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>\" që do të menaxhohet nga <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ky aplikacion nevojitet për të menaxhuar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> do të lejohet të sinkronizojë informacione, si p.sh. emrin e dikujt që po telefonon, të ndërveprojë me njoftimet e tua dhe të ketë qasje te lejet e \"Telefonit\", \"SMS-ve\", \"Kontakteve\", \"Kalendarit\", \"Evidencave të telefonatave\" dhe \"Pajisjeve në afërsi\"."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Këtij aplikacioni do t\'i lejohet të sinkronizojë informacione, si p.sh. emrin e dikujt që po telefonon, si dhe të ketë qasje në këto leje në <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Të lejohet që <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> të menaxhojë <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"syzet"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ky aplikacion nevojitet për të menaxhuar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> do të lejohet të ndërveprojë me njoftimet e tua dhe të ketë qasje te lejet e \"Telefonit\", \"SMS-ve\", \"Kontakteve\", \"Mikrofonit\" dhe të \"Pajisjeve në afërsi\"."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Këtij aplikacioni do t\'i lejohet qasja te këto leje në <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Lejo që <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> të ketë qasje në këtë informacion nga telefoni yt"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Shërbimet mes pajisjeve"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> për të transmetuar aplikacione ndërmjet pajisjeve të tua"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> për të transmetuar aplikacione ndërmjet pajisjeve të tua"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Lejo që <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> të ketë qasje në këtë informacion nga telefoni yt"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Shërbimet e Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> për të marrë qasje te fotografitë, media dhe njoftimet e telefonit tënd"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> për të marrë qasje te fotografitë, media dhe njoftimet e telefonit tënd"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Të lejohet që <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> të ndërmarrë këtë veprim?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) tënde për të transmetuar aplikacione dhe veçori të tjera të sistemit te pajisjet në afërsi"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"pajisja"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ky aplikacion do të mund të sinkronizojë informacione, si p.sh emrin i dikujt që po telefonon, mes telefonit tënd dhe <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ky aplikacion do të mund të sinkronizojë informacione, si p.sh emrin e dikujt që po telefonon, mes telefonit tënd dhe pajisjes së zgjedhur."</string>
<string name="consent_yes" msgid="8344487259618762872">"Lejo"</string>
<string name="consent_no" msgid="2640796915611404382">"Mos lejo"</string>
<string name="consent_back" msgid="2560683030046918882">"Pas"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Transmeto aplikacionet e telefonit tënd"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Transmeto aplikacionet dhe veçoritë e tjera të sistemit nga telefoni yt"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sr/strings.xml b/packages/CompanionDeviceManager/res/values-sr/strings.xml
index b205061..cdcddf1 100644
--- a/packages/CompanionDeviceManager/res/values-sr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sr/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Менаџер придруженог уређаја"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Дозволите да <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> приступа уређају <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"сат"</string>
<string name="chooser_title" msgid="2262294130493605839">"Одаберите <xliff:g id="PROFILE_NAME">%1$s</xliff:g> којим ће управљати апликација <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Ова апликација је потребна за управљање уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ће добити дозволу за синхронизовање информација, попут особе која упућује позив, за интеракцију са обавештењима и приступ дозволама за телефон, SMS, контакте, календар, евиденције позива и уређаје у близини."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Овој апликацији ће бити дозвољено да синхронизује податке, попут имена особе која упућује позив, и приступа тим дозволама на вашем уређају (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Желите ли да дозволите да <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> управља уређајем <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"наочаре"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Ова апликација је потребна за управљање уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ће добити дозволу за интеракцију са обавештењима и приступ дозволама за телефон, SMS, контакте, микрофон и уређаје у близини."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Овој апликацији ће бити дозвољено да приступа овим дозволама на вашем уређају (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Дозволите да <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> приступа овим информацијама са телефона"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Услуге на више уређаја"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за стримовање апликација између уређаја"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за стримовање апликација између уређаја"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Дозволите да <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> приступа овим информацијама са телефона"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play услуге"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за приступ сликама, медијском садржају и обавештењима са телефона"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за приступ сликама, медијском садржају и обавештењима са телефона"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Желите ли да дозволите да <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> обави ову радњу?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_NAME">%2$s</xliff:g> да стримује апликације и друге системске функције на уређаје у близини"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"уређај"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ова апликација ће моћи да синхронизује податке, попут имена особе која упућује позив, између телефона и уређаја <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ова апликација ће моћи да синхронизује податке, попут имена особе која упућује позив, између телефона и одабраног уређаја"</string>
<string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
<string name="consent_no" msgid="2640796915611404382">"Не дозволи"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Стримујте апликације на телефону"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Стримујте апликације и друге системске функције са телефона"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефону"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"таблету"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sv/strings.xml b/packages/CompanionDeviceManager/res/values-sv/strings.xml
index 45089f0..f43f973 100644
--- a/packages/CompanionDeviceManager/res/values-sv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sv/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Vill du tillåta att <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> får åtkomst till <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"klocka"</string>
<string name="chooser_title" msgid="2262294130493605839">"Välj en <xliff:g id="PROFILE_NAME">%1$s</xliff:g> för hantering av <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Appen behövs för att hantera <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillåtelse att synkronisera information, till exempel namnet på någon som ringer, interagera med dina aviseringar och får åtkomst till behörigheterna Telefon, Sms, Kontakter, Kalender, Samtalsloggar och Enheter i närheten."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Appen får tillåtelse att synkronisera information, till exempel namnet på någon som ringer, och få tillgång till dessa behörigheter på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Tillåt att <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> hanterar <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasögon"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Appen behövs för att hantera <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillåtelse att interagera med dina aviseringar och får åtkomst till behörigheterna Telefon, Sms, Kontakter, Mikrofon och Enheter i närheten."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Appen får tillåtelse att använda dessa behörigheter på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Ge <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> åtkomstbehörighet till denna information på telefonen"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjänster för flera enheter"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att låta <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> streama appar mellan enheter"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att låta <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> streama appar mellan enheter"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Ge <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> åtkomstbehörighet till denna information på telefonen"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjänster"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att ge <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> åtkomst till foton, mediefiler och aviseringar på telefonen"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att ge <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> åtkomst till foton, mediefiler och aviseringar på telefonen"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vill du tillåta att <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> utför denna åtgärd?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att streama appar och andra systemfunktioner till enheter i närheten för din <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Den här appen kommer att kunna synkronisera information mellan telefonen och <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, till exempel namnet på någon som ringer"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Den här appen kommer att kunna synkronisera information mellan telefonen och den valda enheten, till exempel namnet på någon som ringer"</string>
<string name="consent_yes" msgid="8344487259618762872">"Tillåt"</string>
<string name="consent_no" msgid="2640796915611404382">"Tillåt inte"</string>
<string name="consent_back" msgid="2560683030046918882">"Tillbaka"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Streama telefonens appar"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Streama appar och andra systemfunktioner från din telefon"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"surfplatta"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-sw/strings.xml b/packages/CompanionDeviceManager/res/values-sw/strings.xml
index a12f3c2..e784373 100644
--- a/packages/CompanionDeviceManager/res/values-sw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sw/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Kidhibiti cha Vifaa Visaidizi"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Ungependa kuruhusu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ifikie <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"saa"</string>
<string name="chooser_title" msgid="2262294130493605839">"Chagua <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ili idhibitiwe na <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Programu hii inahitajika ili udhibiti <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako. <xliff:g id="APP_NAME">%2$s</xliff:g> itaruhusiwa kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kutumia arifa zako na ruhusa zako za Simu, SMS, Anwani, Maikrofoni na vifaa vilivyo Karibu."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Programu hii itaruhusiwa kusawazisha maelezo, kama vile jina la mtu anayepiga simu na kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yako"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Ungependa kuruhusu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> idhibiti <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"miwani"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Programu hii inahitajika ili udhibiti <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> itaruhusiwa kutumia arifa zako na kufikia ruhusa zako za Simu, SMS, Anwani, Maikrofoni na Vifaa vilivyo Karibu."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Programu hii itaruhusiwa kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yako"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Ruhusu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ifikie maelezo haya kutoka kwenye simu yako"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Huduma za kifaa kilichounganishwa kwingine"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Programu ya <xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> yako ili itiririshe programu kati ya vifaa vyako"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Programu ya <xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yako ili itiririshe programu kati ya vifaa vyako"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Ruhusu <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ifikie maelezo haya kutoka kwenye simu yako"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Huduma za Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Programu ya <xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> yako ili ifikie picha, maudhui na arifa za simu yako"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Programu ya <xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yako ili ifikie picha, maudhui na arifa za simu yako"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ungependa kuruhusu <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> itekeleze kitendo hiki?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DEVICE_NAME">%2$s</xliff:g> chako ili itiririshe programu na vipengele vingine vya mfumo kwenye vifaa vilivyo karibu"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"kifaa"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Programu hii itaweza kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kati ya simu na <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Programu hii itaweza kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kati ya simu yako na kifaa ulichochagua"</string>
<string name="consent_yes" msgid="8344487259618762872">"Ruhusu"</string>
<string name="consent_no" msgid="2640796915611404382">"Usiruhusu"</string>
<string name="consent_back" msgid="2560683030046918882">"Nyuma"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Tiririsha programu za simu yako"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Kutiririsha programu na vipengele vya mfumo kwenye simu yako"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"simu"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"kompyuta kibao"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ta/strings.xml b/packages/CompanionDeviceManager/res/values-ta/strings.xml
index 98981b2..e5fe2b2 100644
--- a/packages/CompanionDeviceManager/res/values-ta/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ta/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"கம்பேனியன் சாதன நிர்வாகி"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> சாதனத்தை அணுக <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ஆப்ஸை அனுமதிக்கவா?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"வாட்ச்"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ஆப்ஸ் நிர்வகிக்கக்கூடிய <xliff:g id="PROFILE_NAME">%1$s</xliff:g> தேர்ந்தெடுக்கப்பட வேண்டும்"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"உங்கள் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தை நிர்வகிக்க இந்த ஆப்ஸ் தேவை. அழைப்பவரின் பெயர் போன்ற தகவலை ஒத்திசைத்தல், உங்கள் அறிவிப்புகளைப் பார்த்தல், உங்கள் மொபைல், மெசேஜ், தொடர்புகள், கேலெண்டர், அழைப்புப் பதிவுகள், அருகிலுள்ள சாதனங்களை அணுகுதல் ஆகியவற்றுக்கு <xliff:g id="APP_NAME">%2$s</xliff:g> அனுமதிக்கப்படும்."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"அழைப்பவரின் பெயர் போன்ற தகவல்களை ஒத்திசைக்கவும் உங்கள் <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுகவும் இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong&gt சாதனத்தை நிர்வகிக்க <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ஆப்ஸை அனுமதிக்கவா?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"கிளாஸஸ்"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தை நிர்வகிக்க இந்த ஆப்ஸ் தேவை. உங்கள் மொபைல், மெசேஜ், தொடர்புகள், மைக்ரோஃபோன், அருகிலுள்ள சாதனங்கள் ஆகியவற்றுக்கான அணுகலையும் உங்கள் அறிவிப்புகளைப் பார்ப்பதற்கான அனுமதியையும் <xliff:g id="APP_NAME">%2$s</xliff:g> பெறும்."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"உங்கள் <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுக இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"மொபைலில் உள்ள இந்தத் தகவல்களை அணுக, <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ஆப்ஸை அனுமதிக்கவும்"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"பன்முக சாதன சேவைகள்"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"உங்கள் சாதனங்களுக்கு இடையே ஆப்ஸை ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"உங்கள் சாதனங்களுக்கு இடையே ஆப்ஸை ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"உங்கள் மொபைலிலிருந்து இந்தத் தகவலை அணுக <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ஆப்ஸை அனுமதியுங்கள்"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play சேவைகள்"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"உங்கள் மொபைலில் உள்ள படங்கள், மீடியா, அறிவிப்புகள் ஆகியவற்றை அணுக உங்கள் <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"உங்கள் மொபைலில் உள்ள படங்கள், மீடியா, அறிவிப்புகள் ஆகியவற்றை அணுக உங்கள் <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"இந்தச் செயலைச் செய்ய <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong&gt சாதனத்தை அனுமதிக்கவா?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"அருகிலுள்ள சாதனங்களுக்கு ஆப்ஸையும் பிற சிஸ்டம் அம்சங்களையும் ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DEVICE_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> அனுமதி கோருகிறது"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"சாதனம்"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"அழைப்பவரின் பெயர் போன்ற தகவலை உங்கள் மொபைல் மற்றும் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்திற்கு இடையில் இந்த ஆப்ஸால் ஒத்திசைக்க முடியும்"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"அழைப்பவரின் பெயர் போன்ற தகவலை உங்கள் மொபைல் மற்றும் தேர்வுசெய்த சாதனத்திற்கு இடையில் இந்த ஆப்ஸால் ஒத்திசைக்க முடியும்"</string>
<string name="consent_yes" msgid="8344487259618762872">"அனுமதி"</string>
<string name="consent_no" msgid="2640796915611404382">"அனுமதிக்க வேண்டாம்"</string>
<string name="consent_back" msgid="2560683030046918882">"பின்செல்"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"உங்கள் மொபைல் ஆப்ஸை ஸ்ட்ரீம் செய்யலாம்"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"உங்கள் மொபைலில் இருந்து ஆப்ஸையும் பிற சிஸ்டம் அம்சங்களையும் ஸ்ட்ரீம் செய்யலாம்"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"மொபைல்"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"டேப்லெட்"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml
index d7ffce7..ee20fbc 100644
--- a/packages/CompanionDeviceManager/res/values-te/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-te/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"సహచర పరికర మేనేజర్"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>ను యాక్సెస్ చేయడానికి <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ను అనుమతించాలా?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"వాచ్"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> ద్వారా మేనేజ్ చేయబడటానికి ఒక <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ను ఎంచుకోండి"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"మీ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ను మేనేజ్ చేయడానికి ఈ యాప్ అవసరం. కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ నోటిఫికేషన్లతో ఇంటరాక్ట్ అవ్వడానికి, అలాగే మీ ఫోన్, SMS, కాంటాక్ట్లు, క్యాలెండర్, కాల్ లాగ్లు, సమీపంలోని పరికరాల అనుమతులను యాక్సెస్ చేయడానికి <xliff:g id="APP_NAME">%2$s</xliff:g> అనుమతించబడుతుంది."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>ను మేనేజ్ చేయడానికి <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>ను అనుమతించాలా?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"గ్లాసెస్"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ను మేనేజ్ చేయడానికి ఈ యాప్ అవసరం. మీ నోటిఫికేషన్లతో ఇంటరాక్ట్ అవ్వడానికి, అలాగే మీ ఫోన్, SMS, కాంటాక్ట్లు, మైక్రోఫోన్, సమీపంలోని పరికరాల అనుమతులను యాక్సెస్ చేయడానికి <xliff:g id="APP_NAME">%2$s</xliff:g> అనుమతించబడుతుంది."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"మీ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"మీ ఫోన్ నుండి ఈ సమాచారాన్ని యాక్సెస్ చేయడానికి <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> యాప్ను అనుమతించండి"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"మీ పరికరాల మధ్య యాప్లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"మీ పరికరాల మధ్య యాప్లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"మీ ఫోన్ నుండి ఈ సమాచారాన్ని యాక్సెస్ చేయడానికి <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> యాప్ను అనుమతించండి"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play సర్వీసులు"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> మీ ఫోన్లోని ఫోటోలను, మీడియాను, ఇంకా నోటిఫికేషన్లను యాక్సెస్ చేయడానికి మీ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> మీ ఫోన్లోని ఫోటోలను, మీడియాను, ఇంకా నోటిఫికేషన్లను యాక్సెస్ చేయడానికి మీ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"ఈ చర్యను అమలు చేయడానికి <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>ను అనుమతించాలా?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"సమీపంలోని పరికరాలకు యాప్లను, ఇతర సిస్టమ్ ఫీచర్లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"పరికరం"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని ఈ యాప్ మీ ఫోన్కి, <xliff:g id="DEVICE_NAME">%1$s</xliff:g>కి మధ్య సింక్ చేయగలుగుతుంది"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని ఈ యాప్ మీ ఫోన్ కు, ఎంచుకున్న పరికరానికీ మధ్య సింక్ చేయగలుగుతుంది"</string>
<string name="consent_yes" msgid="8344487259618762872">"అనుమతించండి"</string>
<string name="consent_no" msgid="2640796915611404382">"అనుమతించవద్దు"</string>
<string name="consent_back" msgid="2560683030046918882">"వెనుకకు"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"మీ ఫోన్లోని యాప్లను స్ట్రీమ్ చేయండి"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"మీ ఫోన్ నుండి యాప్లను, ఇతర సిస్టమ్ ఫీచర్లను స్ట్రీమ్ చేస్తుంది"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ఫోన్"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"టాబ్లెట్"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-th/strings.xml b/packages/CompanionDeviceManager/res/values-th/strings.xml
index ff17b69..fc55930 100644
--- a/packages/CompanionDeviceManager/res/values-th/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-th/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"อนุญาตให้ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> เข้าถึง <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_watch" msgid="576290739483672360">"นาฬิกา"</string>
<string name="chooser_title" msgid="2262294130493605839">"เลือก<xliff:g id="PROFILE_NAME">%1$s</xliff:g>ที่จะให้มีการจัดการโดย <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"ต้องใช้แอปนี้ในการจัดการ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> <xliff:g id="APP_NAME">%2$s</xliff:g> จะได้รับอนุญาตให้ซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา โต้ตอบกับการแจ้งเตือน รวมถึงมีสิทธิ์เข้าถึงโทรศัพท์, SMS, รายชื่อติดต่อ, ปฏิทิน, บันทึกการโทร และอุปกรณ์ที่อยู่ใกล้เคียง"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"แอปนี้จะได้รับอนุญาตให้ซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา และมีสิทธิ์เข้าถึงข้อมูลเหล่านี้ใน<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ของคุณ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"อนุญาตให้ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> จัดการ <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> ไหม"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"แว่นตา"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"ต้องใช้แอปนี้ในการจัดการ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> <xliff:g id="APP_NAME">%2$s</xliff:g> จะได้รับอนุญาตให้โต้ตอบกับการแจ้งเตือนและมีสิทธิ์เข้าถึงโทรศัพท์, SMS, รายชื่อติดต่อ, ไมโครโฟน และอุปกรณ์ที่อยู่ใกล้เคียง"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"แอปนี้จะได้รับสิทธิ์ดังต่อไปนี้ใน<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ของคุณ"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"อนุญาตให้ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> เข้าถึงข้อมูลนี้จากโทรศัพท์ของคุณ"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"บริการหลายอุปกรณ์"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> เพื่อสตรีมแอประหว่างอุปกรณ์ต่างๆ ของคุณ"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> เพื่อสตรีมแอประหว่างอุปกรณ์ต่างๆ ของคุณ"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"อนุญาตให้ <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> เข้าถึงข้อมูลนี้จากโทรศัพท์ของคุณ"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"บริการ Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> เพื่อเข้าถึงรูปภาพ สื่อ และการแจ้งเตือนในโทรศัพท์ของคุณ"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> เพื่อเข้าถึงรูปภาพ สื่อ และการแจ้งเตือนในโทรศัพท์ของคุณ"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"อนุญาตให้ <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ทำงานนี้ไหม"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> เพื่อสตรีมแอปและฟีเจอร์อื่นๆ ของระบบไปยังอุปกรณ์ที่อยู่ใกล้เคียง"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"อุปกรณ์"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"แอปนี้จะสามารถซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา ระหว่างโทรศัพท์ของคุณและ<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ได้"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"แอปนี้จะสามารถซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา ระหว่างโทรศัพท์ของคุณและอุปกรณ์ที่เลือกไว้ได้"</string>
<string name="consent_yes" msgid="8344487259618762872">"อนุญาต"</string>
<string name="consent_no" msgid="2640796915611404382">"ไม่อนุญาต"</string>
<string name="consent_back" msgid="2560683030046918882">"กลับ"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"สตรีมแอปของโทรศัพท์คุณ"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"สตรีมแอปและฟีเจอร์อื่นๆ ของระบบจากโทรศัพท์"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"โทรศัพท์"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"แท็บเล็ต"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-tl/strings.xml b/packages/CompanionDeviceManager/res/values-tl/strings.xml
index afb6adb..6e4ce39 100644
--- a/packages/CompanionDeviceManager/res/values-tl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tl/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Kasamang Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Payagan ang <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na i-access ang <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"relo"</string>
<string name="chooser_title" msgid="2262294130493605839">"Pumili ng <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para pamahalaan ng <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Kailangan ang app na ito para mapamahalaan ang iyong <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Papayagan ang <xliff:g id="APP_NAME">%2$s</xliff:g> na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, makipag-ugnayan sa mga notification mo, at ma-access ang iyong mga pahintulot sa Telepono, SMS, Mga Contact, Kalendaryo, Mga log ng tawag, at Mga kalapit na device."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Papayagan ang app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, at i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Payagan ang <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na pamahalaan ang <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"salamin"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Kailangan ang app na ito para mapamahalaan ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Papayagan ang <xliff:g id="APP_NAME">%2$s</xliff:g> na makipag-ugnayan sa mga notification mo at i-access ang iyong mga pahintulot sa Telepono, SMS, Mga Contact, Mikropono, at Mga kalapit na device."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Papayagan ang app na ito na i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Payagan ang <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na i-access ang impormasyong ito sa iyong telepono"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Mga cross-device na serbisyo"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay humihiling ng pahintulot sa ngalan ng iyong <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para mag-stream ng mga app sa pagitan ng mga device mo"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay humihiling ng pahintulot sa ngalan ng iyong <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para mag-stream ng mga app sa pagitan ng mga device mo"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Payagan ang <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> na i-access ang impormasyon sa iyong telepono"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Mga serbisyo ng Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay humihiling ng pahintulot sa ngalan ng iyong <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> para i-access ang mga larawan, media, at notification ng telepono mo"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay humihiling ng pahintulot sa ngalan ng iyong <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para i-access ang mga larawan, media, at notification ng telepono mo"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Payagan ang <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> na gawin ang pagkilos na ito?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Humihiling ang <xliff:g id="APP_NAME">%1$s</xliff:g> ng pahintulot sa ngalan ng iyong <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para mag-stream ng mga app at iba pang feature ng system sa mga kalapit na device"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, sa pagitan ng iyong telepono at ng <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, sa pagitan ng iyong telepono at ng napiling device"</string>
<string name="consent_yes" msgid="8344487259618762872">"Payagan"</string>
<string name="consent_no" msgid="2640796915611404382">"Huwag payagan"</string>
<string name="consent_back" msgid="2560683030046918882">"Bumalik"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"I-stream ang mga app ng iyong telepono"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Mag-stream ng mga app at iba pang feature ng system mula sa iyong telepono"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telepono"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-tr/strings.xml b/packages/CompanionDeviceManager/res/values-tr/strings.xml
index 69d08b7..f9466db 100644
--- a/packages/CompanionDeviceManager/res/values-tr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tr/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> cihazına erişmesi için <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> uygulamasına izin verin"</string>
<string name="profile_name_watch" msgid="576290739483672360">"saat"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> tarafından yönetilecek bir <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Bu uygulama, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazınızın yönetilmesi için gereklidir. <xliff:g id="APP_NAME">%2$s</xliff:g> adlı uygulamanın arayan kişinin adı gibi bilgileri senkronize etmesine, bildirimlerinizle etkileşimde bulunup Telefon, SMS, Kişiler, Takvim, Arama kayıtları ve Yakındaki cihazlar izinlerine erişmesine izin verilir."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu uygulamanın arayan kişinin adı gibi bilgileri senkronize etmesine ve <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> cihazınızda aşağıdaki izinlere erişmesine izin verilir"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> uygulamasına <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> cihazını yönetmesi için izin verilsin mi?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu uygulama, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazının yönetilmesi için gereklidir. <xliff:g id="APP_NAME">%2$s</xliff:g> adlı uygulamanın bildirimlerinizle etkileşimde bulunup Telefon, SMS, Kişiler, Mikrofon ve Yakındaki cihazlar izinlerine erişmesine izin verilir."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu uygulamanın <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> cihazınızda şu izinlere erişmesine izin verilecek:"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> uygulamasının, telefonunuzdaki bu bilgilere erişmesine izin verin"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Cihazlar arası hizmetler"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g>, cihazlarınız arasında uygulama akışı gerçekleştirmek için <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>, cihazlarınız arasında uygulama akışı gerçekleştirmek için <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> uygulamasının, telefonunuzdaki bu bilgilere erişmesine izin verin"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play hizmetleri"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g>, telefonunuzdaki fotoğraf, medya ve bildirimlere erişmek için <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g>, telefonunuzdaki fotoğraf, medya ve bildirimlere erişmek için <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> cihazının bu işlem yapmasına izin verilsin mi?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması <xliff:g id="DEVICE_NAME">%2$s</xliff:g> cihazınız adına uygulamaları ve diğer sistem özelliklerini yakındaki cihazlara aktarmak için izin istiyor"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Bu uygulama, arayan kişinin adı gibi bilgileri telefonunuz ve <xliff:g id="DEVICE_NAME">%1$s</xliff:g> adlı cihaz arasında senkronize edebilir"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Bu uygulama, arayan kişinin adı gibi bilgileri telefonunuz ve seçili cihaz arasında senkronize edebilir"</string>
<string name="consent_yes" msgid="8344487259618762872">"İzin ver"</string>
<string name="consent_no" msgid="2640796915611404382">"İzin verme"</string>
<string name="consent_back" msgid="2560683030046918882">"Geri"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefonunuzun uygulamalarını yayınlama"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Telefonunuzdan uygulamaları ve diğer sistem özelliklerini yayınlayın"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-uk/strings.xml b/packages/CompanionDeviceManager/res/values-uk/strings.xml
index 0733997..5b192a8 100644
--- a/packages/CompanionDeviceManager/res/values-uk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uk/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Диспетчер супутніх пристроїв"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Надати додатку <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> доступ до інформації на <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"годинник"</string>
<string name="chooser_title" msgid="2262294130493605839">"Виберіть <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, яким керуватиме додаток <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Цей додаток потрібен, щоб керувати пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Додаток <xliff:g id="APP_NAME">%2$s</xliff:g> зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає), взаємодіяти з вашими сповіщеннями й отримає дозволи \"Телефон\", \"SMS\", \"Контакти\", \"Календар\", \"Журнали викликів\" і \"Пристрої поблизу\"."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) і отримає доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Дозволити додатку <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> керувати пристроєм <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"окуляри"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Цей додаток потрібен, щоб керувати пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Додаток <xliff:g id="APP_NAME">%2$s</xliff:g> зможе взаємодіяти з вашими сповіщеннями й отримає дозволи \"Телефон\", \"SMS\", \"Контакти\", \"Мікрофон\" і \"Пристрої поблизу\"."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Цей додаток матиме доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Надайте додатку <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> доступ до цієї інформації з телефона"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Сервіси для кількох пристроїв"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> запитує дозвіл на трансляцію додатків між вашими пристроями"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" запитує дозвіл на трансляцію додатків між вашими пристроями"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Надайте пристрою <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> доступ до цієї інформації з телефона"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Сервіси Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> запитує дозвіл на доступ до фотографій, медіафайлів і сповіщень вашого телефона"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" запитує дозвіл на доступ до фотографій, медіафайлів і сповіщень вашого телефона"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Дозволити додатку <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> виконувати цю дію?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) запитує дозвіл на трансляцію додатків та інших системних функцій на пристрої поблизу"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"пристрій"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) між телефоном і пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\""</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) між телефоном і вибраним пристроєм"</string>
<string name="consent_yes" msgid="8344487259618762872">"Дозволити"</string>
<string name="consent_no" msgid="2640796915611404382">"Не дозволяти"</string>
<string name="consent_back" msgid="2560683030046918882">"Назад"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Транслювати додатки телефона"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Транслюйте додатки й інші системні функції зі свого телефона"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефоні"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"планшеті"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-ur/strings.xml b/packages/CompanionDeviceManager/res/values-ur/strings.xml
index fee4da2..beeaef3 100644
--- a/packages/CompanionDeviceManager/res/values-ur/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ur/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ساتھی آلہ مینیجر"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> کو <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> تک رسائی کی اجازت دیں؟"</string>
<string name="profile_name_watch" msgid="576290739483672360">"دیکھیں"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> کے ذریعے نظم کئے جانے کیلئے <xliff:g id="PROFILE_NAME">%1$s</xliff:g> کو منتخب کریں"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"آپ کے <xliff:g id="DEVICE_NAME">%1$s</xliff:g> کا نظم کرنے کے لیے اس ایپ کی ضرورت ہے۔ <xliff:g id="APP_NAME">%2$s</xliff:g> کو کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے، آپ کی اطلاعات کے ساتھ تعامل کرنے، آپ کے فون، SMS، رابطے، کیلنڈر، کال لاگز اور قریبی آلات کی اجازتوں تک رسائی حاصل کرنے کی اجازت ہوگی۔"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"اس ایپ کو آپ کے <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> پر کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے اور ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> کو <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> کا نظم کرنے کی اجازت دیں؟"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"گلاسز"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کا نظم کرنے کے لیے، اس ایپ کی ضرورت ہے۔ <xliff:g id="APP_NAME">%2$s</xliff:g> کو آپ کی اطلاعات کے ساتھ تعامل کرنے اور آپ کے فون، SMS، رابطوں، مائیکروفون اور قریبی آلات کی اجازتوں تک رسائی کی اجازت ہوگی۔"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"اس ایپ کو آپ کے <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> پر ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"اپنے فون سے ان معلومات تک رسائی حاصل کرنے کی <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> کو اجازت دیں"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"کراس ڈیوائس سروسز"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> کی جانب سے آپ کے آلات کے درمیان ایپس کی سلسلہ بندی کرنے کی اجازت کی درخواست کر رہی ہے"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> کی جانب سے آپ کے آلات کے درمیان ایپس کی سلسلہ بندی کرنے کی اجازت کی درخواست کر رہی ہے"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"اپنے فون سے اس معلومات تک رسائی حاصل کرنے کی <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> کو اجازت دیں"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play سروسز"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> کی جانب سے آپ کے فون کی تصاویر، میڈیا اور اطلاعات تک رسائی کی اجازت طلب کر رہی ہے"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> کی جانب سے آپ کے فون کی تصاویر، میڈیا اور اطلاعات تک رسائی کی اجازت کی درخواست کر رہی ہے"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> کو یہ کارروائی انجام دینے کی اجازت دیں؟"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> آپ کے <xliff:g id="DEVICE_NAME">%2$s</xliff:g> کی جانب سے ایپس اور سسٹم کی دیگر خصوصیات کی سلسلہ بندی قریبی آلات پر کرنے کی اجازت طلب کر رہی ہے"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"آلہ"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"یہ ایپ آپ کے فون اور <xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے درمیان معلومات، جیسے کسی کال کرنے والے کے نام، کی مطابقت پذیری کر سکے گی"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"یہ ایپ آپ کے فون اور منتخب کردہ آلے کے درمیان معلومات، جیسے کسی کال کرنے والے کے نام، کی مطابقت پذیری کر سکے گی"</string>
<string name="consent_yes" msgid="8344487259618762872">"اجازت دیں"</string>
<string name="consent_no" msgid="2640796915611404382">"اجازت نہ دیں"</string>
<string name="consent_back" msgid="2560683030046918882">"پیچھے"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"اپنے فون کی ایپس کی سلسلہ بندی کریں"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"اپنے فون سے ایپس اور سسٹم کی دیگر خصوصیات کی سلسلہ بندی کریں"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"فون"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ٹیبلیٹ"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-uz/strings.xml b/packages/CompanionDeviceManager/res/values-uz/strings.xml
index 27f6054..567539a 100644
--- a/packages/CompanionDeviceManager/res/values-uz/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uz/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ilovasiga <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> qurilmasidan foydalanishga ruxsat berilsinmi?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"soat"</string>
<string name="chooser_title" msgid="2262294130493605839">"<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> boshqaradigan <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qurilmasini tanlang"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Bu ilova <xliff:g id="DEVICE_NAME">%1$s</xliff:g> profilini boshqarish uchun kerak. <xliff:g id="APP_NAME">%2$s</xliff:g> ilovasiga chaqiruvchining ismi, bildirishnomalar bilan ishlash va telefon, SMS, kontaktlar, taqvim, chaqiruvlar jurnali va yaqin-atrofdagi qurilmalarni aniqlash kabi maʼlumotlarni sinxronlashga ruxsat beriladi."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu ilovaga chaqiruvchining ismi kabi maʼlumotlarni sinxronlash va <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> qurilmasida quyidagi amallarni bajarishga ruxsat beriladi"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ilovasiga <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong> qurilmasini boshqarish uchun ruxsat berilsinmi?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"koʻzoynak"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu ilova <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasini boshqarish uchun kerak. <xliff:g id="APP_NAME">%2$s</xliff:g> ilovasiga bildirishnomalar bilan ishlash va telefon, SMS, kontaktlar, mikrofon va yaqin-atrofdagi qurilmalarga kirishga ruxsat beriladi."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu ilova <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> qurilmasida quyidagi ruxsatlarni oladi"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ilovasiga telefondagi ushbu maʼlumot uchun ruxsat bering"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Qurilmalararo xizmatlar"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"Qurilamalararo ilovalar strimingi uchun <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nomidan ruxsat soʻramoqda"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Qurilamalararo ilovalar strimingi uchun <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nomidan ruxsat soʻramoqda"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ilovasiga telefondagi ushbu maʼlumot uchun ruxsat bering"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play xizmatlari"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"Telefoningizdagi rasm, media va bildirishnomalarga kirish uchun <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> nomidan ruxsat soʻramoqda"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"Telefoningizdagi rasm, media va bildirishnomalarga kirish uchun <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nomidan ruxsat soʻramoqda"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> ilovasiga bu amalni bajarish uchun ruxsat berilsinmi?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DEVICE_NAME">%2$s</xliff:g> qurilmangizdan nomidan atrofdagi qurilmalarga ilova va boshqa tizim funksiyalarini uzatish uchun ruxsat olmoqchi"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"qurilma"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Bu ilova telefoningiz va <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasida chaqiruvchining ismi kabi maʼlumotlarni sinxronlay oladi"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Bu ilova telefoningiz va tanlangan qurilmada chaqiruvchining ismi kabi maʼlumotlarni sinxronlay oladi"</string>
<string name="consent_yes" msgid="8344487259618762872">"Ruxsat"</string>
<string name="consent_no" msgid="2640796915611404382">"Ruxsat berilmasin"</string>
<string name="consent_back" msgid="2560683030046918882">"Orqaga"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefondagi ilovalarni translatsiya qilish"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Telefoningizdan ilovalar va tizim funksiyalarini translatsiya qilish"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"planshet"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-vi/strings.xml b/packages/CompanionDeviceManager/res/values-vi/strings.xml
index fb18b00..d4eefeb 100644
--- a/packages/CompanionDeviceManager/res/values-vi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-vi/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Trình quản lý thiết bị đồng hành"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Cho phép <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> truy cập vào <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"đồng hồ"</string>
<string name="chooser_title" msgid="2262294130493605839">"Chọn một <xliff:g id="PROFILE_NAME">%1$s</xliff:g> sẽ do <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> quản lý"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Cần ứng dụng này để quản lý <xliff:g id="DEVICE_NAME">%1$s</xliff:g> của bạn. <xliff:g id="APP_NAME">%2$s</xliff:g> được phép đồng bộ hoá thông tin (ví dụ: tên người gọi), tương tác với thông báo cũng như có các quyền truy cập Điện thoại, Tin nhắn SMS, Danh bạ, Lịch, Nhật ký cuộc gọi và Thiết bị ở gần."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Ứng dụng này sẽ được phép đồng bộ hoá thông tin (chẳng hạn như tên của người đang gọi điện) và dùng những quyền sau trên <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> của bạn"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Cho phép <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> quản lý <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"kính"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Bạn cần có ứng dụng này để quản lý <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> sẽ được phép tương tác với thông báo của bạn, cũng như sử dụng các quyền đối với Điện thoại, SMS, Danh bạ, Micrô và Thiết bị ở gần."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ứng dụng này sẽ được phép dùng những quyền sau trên <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> của bạn"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Cho phép <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> truy cập vào thông tin này trên điện thoại của bạn"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Dịch vụ trên nhiều thiết bị"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang yêu cầu quyền thay cho <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> để truyền trực tuyến ứng dụng giữa các thiết bị của bạn"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang yêu cầu quyền thay cho <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> để truyền trực tuyến ứng dụng giữa các thiết bị của bạn"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Cho phép <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> truy cập vào thông tin này trên điện thoại của bạn"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Dịch vụ Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang yêu cầu quyền thay cho <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> để truy cập vào ảnh, nội dung nghe nhìn và thông báo trên điện thoại của bạn."</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang yêu cầu quyền thay cho <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> để truy cập vào ảnh, nội dung nghe nhìn và thông báo trên điện thoại của bạn"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Cho phép <strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong> thực hiện hành động này?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang thay <xliff:g id="DEVICE_NAME">%2$s</xliff:g> yêu cầu quyền truyền trực tuyến ứng dụng và các tính năng khác của hệ thống đến các thiết bị ở gần"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"thiết bị"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Ứng dụng này sẽ đồng bộ hoá thông tin (ví dụ: tên người gọi) giữa điện thoại của bạn và <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Ứng dụng này sẽ đồng bộ hoá thông tin (ví dụ: tên người gọi) giữa điện thoại của bạn và thiết bị bạn chọn"</string>
<string name="consent_yes" msgid="8344487259618762872">"Cho phép"</string>
<string name="consent_no" msgid="2640796915611404382">"Không cho phép"</string>
<string name="consent_back" msgid="2560683030046918882">"Quay lại"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Truyền các ứng dụng trên điện thoại của bạn"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Truyền trực tuyến ứng dụng và các tính năng khác của hệ thống từ điện thoại của bạn"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"điện thoại"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"máy tính bảng"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
index 25df727..ea07086 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"配套设备管理器"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"允许<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>访问<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"手表"</string>
<string name="chooser_title" msgid="2262294130493605839">"选择要由<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"需要使用此应用才能管理您的设备“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>”。<xliff:g id="APP_NAME">%2$s</xliff:g>将能同步信息(例如来电者的姓名)、与通知交互,并能获得对电话、短信、通讯录、日历、通话记录和附近设备的访问权限。"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"该应用将可以同步信息(例如来电者的姓名),并可以获得您<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的以下权限"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"允许<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong>管理<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"眼镜"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"需要使用此应用才能管理<xliff:g id="DEVICE_NAME">%1$s</xliff:g>。“<xliff:g id="APP_NAME">%2$s</xliff:g>”将能与通知交互,并可获得电话、短信、通讯录、麦克风和附近设备的访问权限。"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"该应用将可以获得您<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的以下权限"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"允许“<xliff:g id="APP_NAME">%1$s</xliff:g>”<strong></strong>访问您手机中的这项信息"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"跨设备服务"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>请求在您的设备之间流式传输应用内容"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>请求在您的设备之间流式传输应用内容"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"允许 <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> 访问您手机中的这项信息"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服务"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>请求访问您手机上的照片、媒体内容和通知"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>请求访问您手机上的照片、媒体内容和通知"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"允许<strong><xliff:g id="DEVICE_NAME">%1$s</xliff:g></strong>进行此操作?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_NAME">%2$s</xliff:g>请求将应用和其他系统功能流式传输到附近的设备"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"设备"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"此应用将能在您的手机和“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>”之间同步信息,例如来电者的姓名"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"此应用将能在您的手机和所选设备之间同步信息,例如来电者的姓名"</string>
<string name="consent_yes" msgid="8344487259618762872">"允许"</string>
<string name="consent_no" msgid="2640796915611404382">"不允许"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"流式传输手机上的应用"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"从您的手机流式传输应用和其他系统功能"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"手机"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"平板电脑"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
index fe58ddd..3c2dcea 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"隨附裝置管理工具"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」<strong></strong>嗎?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
<string name="chooser_title" msgid="2262294130493605839">"選擇由 <strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong> 管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"必須使用此應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可同步資訊 (例如來電者的名稱)、透過通知與你互動,並存取電話、短訊、通訊錄、日曆、通話記錄和附近的裝置權限。"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"此應用程式將可同步資訊 (例如來電者的名稱),並可在<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上取得以下權限"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>管理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」<strong></strong>嗎?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"必須使用此應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可透過通知與您互動,並存取電話、短訊、通訊錄、麥克風和附近的裝置權限。"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"此應用程式將可在<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上取得以下權限"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取您手機中的這項資料"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"跨裝置服務"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在為 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 要求權限,以在裝置之間串流應用程式內容"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求權限,以便在裝置間串流應用程式的內容"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取您手機中的這項資料"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服務"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 要求權限,以便存取手機上的相片、媒體和通知"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求權限,以便存取手機上的相片、媒體和通知"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"要允許「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」<strong></strong>執行此操作嗎?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」要求權限,才能在附近的裝置上串流播放應用程式和其他系統功能"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"此應用程式將可同步手機和「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」的資訊,例如來電者的名稱"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"此應用程式將可同步手機和所選裝置的資訊,例如來電者的名稱"</string>
<string name="consent_yes" msgid="8344487259618762872">"允許"</string>
<string name="consent_no" msgid="2640796915611404382">"不允許"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"串流播放手機應用程式內容"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"串流播放手機中的應用程式和其他系統功能"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"手機"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"平板電腦"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
index 33c1f2a..f22fcba 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"隨附裝置管理工具"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」<strong></strong>嗎?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
<string name="chooser_title" msgid="2262294130493605839">"選擇要讓「<xliff:g id="APP_NAME">%2$s</xliff:g>」<strong></strong>管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"你必須使用這個應用程式,才能管理<xliff:g id="DEVICE_NAME">%1$s</xliff:g>。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可同步資訊 (例如來電者名稱)、存取通知及在通知上執行操作,並取得電話、簡訊、聯絡人、日曆、通話記錄、麥克風和鄰近裝置權限。"</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"這個應用程式將可同步處理資訊 (例如來電者名稱)、取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>管理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」<strong></strong>嗎?"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"你必須使用這個應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可存取通知及在通知上執行操作,並取得電話、簡訊、聯絡人、麥克風和鄰近裝置權限。"</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"這個應用程式將可取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取手機中的這項資訊"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"跨裝置服務"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表你的「<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>」要求必要權限,以便在裝置之間串流傳輸應用程式內容"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"為了在裝置間串流傳輸應用程式內容,「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求相關權限"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」<strong></strong>存取你手機中的這項資訊"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服務"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表你的「<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>」要求必要權限,以便存取手機上的相片、媒體和通知"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"為了存取手機上的相片、媒體和通知,「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求相關權限"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"要允許「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」<strong></strong>執行這項操作嗎?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」要求必要權限,才能在鄰近裝置上串流播放應用程式和其他系統功能"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"這個應用程式將可在手機和「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」之間同步資訊,例如來電者名稱"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"這個應用程式將可在手機和指定裝置間同步資訊,例如來電者名稱"</string>
<string name="consent_yes" msgid="8344487259618762872">"允許"</string>
<string name="consent_no" msgid="2640796915611404382">"不允許"</string>
<string name="consent_back" msgid="2560683030046918882">"返回"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"串流傳輸手機應用程式內容"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"串流播放手機中的應用程式和其他系統功能"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"手機"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"平板電腦"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-zu/strings.xml b/packages/CompanionDeviceManager/res/values-zu/strings.xml
index 5a3de1c..1de5713 100644
--- a/packages/CompanionDeviceManager/res/values-zu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zu/strings.xml
@@ -17,35 +17,29 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Isiphathi sedivayisi esihambisanayo"</string>
- <!-- no translation found for confirmation_title (4593465730772390351) -->
- <skip />
+ <string name="confirmation_title" msgid="4593465730772390351">"Vumela <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ukufinyelela <strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>?"</string>
<string name="profile_name_watch" msgid="576290739483672360">"buka"</string>
<string name="chooser_title" msgid="2262294130493605839">"Khetha i-<xliff:g id="PROFILE_NAME">%1$s</xliff:g> ezophathwa yi-<strong><xliff:g id="APP_NAME">%2$s</xliff:g></strong>"</string>
- <!-- no translation found for summary_watch (898569637110705523) -->
- <skip />
- <!-- no translation found for summary_watch_single_device (3001383718181475756) -->
- <skip />
+ <string name="summary_watch" msgid="898569637110705523">"Le app iyadingeka ukuphatha i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> yakho. I-<xliff:g id="APP_NAME">%2$s</xliff:g> izovunyelwa ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, ukusebenzisana nezaziso zakho futhi ufinyelele Ifoni yakho, i-SMS, Oxhumana Nabo, Ikhalenda, Amarekhodi Amakholi nezimvume zamadivayisi aseduze."</string>
+ <string name="summary_watch_single_device" msgid="3173948915947011333">"Le-app izovunyelwa ukuvumelanisa ulwazi, olufana negama lomuntu ofonayo, iphinde ifinyelele lezi zimvume ku-<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yakho"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vumela i-<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ukuthi ifinyelele i-<strong><xliff:g id="DEVICE_NAME">%2$s</xliff:g></strong>"</string>
<string name="profile_name_glasses" msgid="8488394059007275998">"Izingilazi"</string>
<string name="summary_glasses_multi_device" msgid="615259525961937348">"Le app iyadingeka ukuphatha i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>. I-<xliff:g id="APP_NAME">%2$s</xliff:g> izovunyelwa ukuthi ihlanganyele nezaziso zakho futhi ifinyelele kufoni yakho, i-SMS, Oxhumana nabo, Imakrofoni Nezimvume zamadivayisi aseduze."</string>
- <!-- no translation found for summary_glasses_single_device (403955999347676820) -->
- <skip />
+ <string name="summary_glasses_single_device" msgid="3000909894067413398">"Le-app izovunyelwa ukufinyelela lezi zimvume ku-<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yakho"</string>
<string name="title_app_streaming" msgid="2270331024626446950">"Vumela i-<strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ifinyelele lolu lwazi kusukela efonini yakho"</string>
<string name="helper_title_app_streaming" msgid="4151687003439969765">"Amasevisi amadivayisi amaningi"</string>
- <string name="helper_summary_app_streaming" msgid="5977509499890099">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DEVICE_TYPE">%2$s</xliff:g> yakho ukuze isakaze-bukhoma ama-app phakathi kwamadivayisi akho"</string>
+ <string name="helper_summary_app_streaming" msgid="2396773196949578425">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yakho ukuze isakaze-bukhoma ama-app phakathi kwamadivayisi akho"</string>
<string name="title_automotive_projection" msgid="3296005598978412847"></string>
<string name="summary_automotive_projection" msgid="8683801274662496164"></string>
<string name="title_computer" msgid="4693714143506569253">"Vumela <strong><xliff:g id="APP_NAME">%1$s</xliff:g></strong> ukufinyelela lolu lwazi kusuka efonini yakho"</string>
<string name="summary_computer" msgid="3798467601598297062"></string>
<string name="helper_title_computer" msgid="4671071173916176037">"Amasevisi we-Google Play"</string>
- <string name="helper_summary_computer" msgid="9050724687678157852">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DEVICE_TYPE">%2$s</xliff:g> yakho ukuze ifinyelele izithombe zefoni yakho, imidiya nezaziso"</string>
+ <string name="helper_summary_computer" msgid="8774832742608187072">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yakho ukuze ifinyelele izithombe zefoni yakho, imidiya nezaziso"</string>
<string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vumela i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ukwenza lesi senzo?"</string>
<string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DEVICE_NAME">%2$s</xliff:g> ukusakaza ama-app nezinye izakhi zesistimu kumadivayisi aseduze"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"idivayisi"</string>
- <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
- <skip />
- <!-- no translation found for summary_generic (1761976003668044801) -->
- <skip />
+ <string name="summary_generic_single_device" msgid="4181180669689590417">"Le app izokwazi ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, phakathi kwefoni yakho ne-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Le app izokwazi ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, phakathi kwefoni yakho nedivayisi ekhethiwe"</string>
<string name="consent_yes" msgid="8344487259618762872">"Vumela"</string>
<string name="consent_no" msgid="2640796915611404382">"Ungavumeli"</string>
<string name="consent_back" msgid="2560683030046918882">"Emuva"</string>
@@ -75,8 +69,6 @@
<string name="permission_app_streaming_summary" msgid="606923325679670624">"Sakaza ama-app wefoni yakho"</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Sakaza ama-app nezinye izakhi zesistimu kusuka kufoni yakho"</string>
- <!-- no translation found for device_type (8268703872070046263) -->
- <skip />
- <!-- no translation found for device_type (5038791954983067774) -->
- <skip />
+ <string name="device_type" product="default" msgid="8268703872070046263">"ifoni"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"ithebulethi"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
index 556a05c..d2fd780 100644
--- a/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
+++ b/packages/CompanionDeviceManager/src/com/android/companiondevicemanager/PermissionListAdapter.java
@@ -121,16 +121,15 @@
if (viewHolder.mExpandButton.getTag() == null) {
viewHolder.mExpandButton.setTag(R.drawable.btn_expand_more);
}
- // Add expand buttons if the permissions are more than PERMISSION_SIZE in this list.
+ // Add expand buttons if the permissions are more than PERMISSION_SIZE in this list also
+ // make the summary invisible by default.
if (mPermissions.size() > PERMISSION_SIZE) {
+
+ viewHolder.mPermissionSummary.setVisibility(View.GONE);
+
view.setOnClickListener(v -> {
if ((Integer) viewHolder.mExpandButton.getTag() == R.drawable.btn_expand_more) {
viewHolder.mExpandButton.setImageResource(R.drawable.btn_expand_less);
-
- if (viewHolder.mSummary != null) {
- viewHolder.mPermissionSummary.setText(viewHolder.mSummary);
- }
-
viewHolder.mPermissionSummary.setVisibility(View.VISIBLE);
viewHolder.mExpandButton.setTag(R.drawable.btn_expand_less);
} else {
@@ -139,6 +138,11 @@
viewHolder.mExpandButton.setTag(R.drawable.btn_expand_more);
}
});
+ } else {
+ // Remove expand buttons if the permissions are less than PERMISSION_SIZE in this list
+ // also show the summary by default.
+ viewHolder.mPermissionSummary.setVisibility(View.VISIBLE);
+ viewHolder.mExpandButton.setVisibility(View.GONE);
}
return viewHolder;
@@ -150,15 +154,8 @@
final Spanned title = getHtmlFromResources(mContext, sTitleMap.get(type));
final Spanned summary = getHtmlFromResources(mContext, sSummaryMap.get(type));
- holder.mSummary = summary;
+ holder.mPermissionSummary.setText(summary);
holder.mPermissionName.setText(title);
-
- if (mPermissions.size() <= PERMISSION_SIZE) {
- holder.mPermissionSummary.setText(summary);
- holder.mExpandButton.setVisibility(View.GONE);
- } else {
- holder.mPermissionSummary.setVisibility(View.GONE);
- }
}
@Override
@@ -181,7 +178,6 @@
private final TextView mPermissionSummary;
private final ImageView mPermissionIcon;
private final ImageButton mExpandButton;
- private Spanned mSummary = null;
ViewHolder(View itemView) {
super(itemView);
mPermissionName = itemView.findViewById(R.id.permission_name);
diff --git a/packages/CredentialManager/res/values-af/strings.xml b/packages/CredentialManager/res/values-af/strings.xml
index 9def248..05f04cf 100644
--- a/packages/CredentialManager/res/values-af/strings.xml
+++ b/packages/CredentialManager/res/values-af/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gebruik jou gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kies ’n opsie vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gebruik hierdie inligting op <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Meld op ’n ander manier aan"</string>
<string name="snackbar_action" msgid="37373514216505085">"Bekyk opsies"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Gaan voort"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Aanmeldopsies"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Bekyk meer"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Vir <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Geslote wagwoordbestuurders"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tik om te ontsluit"</string>
diff --git a/packages/CredentialManager/res/values-am/strings.xml b/packages/CredentialManager/res/values-am/strings.xml
index ca7584f..b093ced 100644
--- a/packages/CredentialManager/res/values-am/strings.xml
+++ b/packages/CredentialManager/res/values-am/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"የተቀመጠ የይለፍ ቁልፍዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"የተቀመጠ መግቢያዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ መግቢያ ይጠቀሙ"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> አማራጭ ይመረጥ?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ይህን መረጃ በ<xliff:g id="APP_NAME">%1$s</xliff:g> ላይ ይጠቀማሉ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"በሌላ መንገድ ይግቡ"</string>
<string name="snackbar_action" msgid="37373514216505085">"አማራጮችን አሳይ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ቀጥል"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"የመግቢያ አማራጮች"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ተጨማሪ አሳይ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"ለ<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"የተቆለፉ የሚስጥር ቁልፍ አስተዳዳሪዎች"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ለመክፈት መታ ያድርጉ"</string>
diff --git a/packages/CredentialManager/res/values-ar/strings.xml b/packages/CredentialManager/res/values-ar/strings.xml
index ef8c6f0..13a4de9 100644
--- a/packages/CredentialManager/res/values-ar/strings.xml
+++ b/packages/CredentialManager/res/values-ar/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"هل تريد استخدام مفتاح المرور المحفوظ لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"هل تريد استخدام بيانات اعتماد تسجيل الدخول المحفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"اختيار بيانات اعتماد تسجيل دخول محفوظة لـ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"هل تريد اختيار بيانات الاعتماد لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"هل تريد استخدام بيانات الاعتماد هذه في \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"تسجيل الدخول بطريقة أخرى"</string>
<string name="snackbar_action" msgid="37373514216505085">"عرض الخيارات"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"متابعة"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"خيارات تسجيل الدخول"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"عرض المزيد"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"معلومات تسجيل دخول \"<xliff:g id="USERNAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"خدمات إدارة كلمات المرور المقفولة"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"انقر لفتح القفل."</string>
diff --git a/packages/CredentialManager/res/values-as/strings.xml b/packages/CredentialManager/res/values-as/strings.xml
index 0a6d5d0..be72bbe 100644
--- a/packages/CredentialManager/res/values-as/strings.xml
+++ b/packages/CredentialManager/res/values-as/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ হৈ থকা ছাইন ইন তথ্য ব্যৱহাৰ কৰিবনে?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা ছাইন ইন বাছনি কৰক"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে এটা বিকল্প বাছনি কৰিবনে?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ত এই তথ্য ব্যৱহাৰ কৰিবনে?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্য উপায়েৰে ছাইন ইন কৰক"</string>
<string name="snackbar_action" msgid="37373514216505085">"বিকল্পসমূহ চাওক"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"অব্যাহত ৰাখক"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ছাইন ইনৰ বিকল্প"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"অধিক চাওক"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>ৰ বাবে"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"লক হৈ থকা পাছৱৰ্ড পৰিচালক"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"আনলক কৰিবলৈ টিপক"</string>
diff --git a/packages/CredentialManager/res/values-az/strings.xml b/packages/CredentialManager/res/values-az/strings.xml
index 97ffd43..c35f849 100644
--- a/packages/CredentialManager/res/values-az/strings.xml
+++ b/packages/CredentialManager/res/values-az/strings.xml
@@ -26,13 +26,13 @@
<string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g> üçün giriş açarı yaradılsın?"</string>
<string name="choose_create_option_password_title" msgid="7097275038523578687">"<xliff:g id="APPNAME">%1$s</xliff:g> üçün parol yadda saxlanılsın?"</string>
<string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g> üçün giriş məlumatları yadda saxlansın?"</string>
- <string name="passkey" msgid="632353688396759522">"giriş açarı"</string>
+ <string name="passkey" msgid="632353688396759522">"açar"</string>
<string name="password" msgid="6738570945182936667">"parol"</string>
<string name="passkeys" msgid="5733880786866559847">"giriş açarları"</string>
<string name="passwords" msgid="5419394230391253816">"parollar"</string>
<string name="sign_ins" msgid="4710739369149469208">"girişlər"</string>
<string name="sign_in_info" msgid="2627704710674232328">"Giriş məlumatları"</string>
- <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> burada yadda saxlansın:"</string>
+ <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> harada saxlanılsın?"</string>
<string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Başqa cihazda giriş açarı yaradılsın?"</string>
<string name="use_provider_for_all_title" msgid="4201020195058980757">"Bütün girişlər üçün <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> istifadə edilsin?"</string>
<string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> üçün bu parol meneceri asanlıqla daxil olmağınız məqsədilə parol və giriş açarlarını saxlayacaq"</string>
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş açarı istifadə edilsin?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış girişdən istifadə edilsin?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış girişi seçin"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün seçim edilsin?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Məlumat <xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqində istifadə edilsin?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başqa üsulla daxil olun"</string>
<string name="snackbar_action" msgid="37373514216505085">"Seçimlərə baxın"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Davam edin"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Giriş seçimləri"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Davamına baxın"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> üçün"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Kilidli parol menecerləri"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Kiliddən çıxarmaq üçün toxunun"</string>
diff --git a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
index fb23ee1..94eff9d 100644
--- a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite da koristite sačuvane podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite sačuvano prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite da odaberete opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite da koristite te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string>
<string name="snackbar_action" msgid="37373514216505085">"Prikaži opcije"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Nastavi"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcije za prijavljivanje"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Prikaži još"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Za: <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Menadžeri zaključanih lozinki"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Dodirnite da biste otključali"</string>
diff --git a/packages/CredentialManager/res/values-be/strings.xml b/packages/CredentialManager/res/values-be/strings.xml
index 12b90ee..4972d7f 100644
--- a/packages/CredentialManager/res/values-be/strings.xml
+++ b/packages/CredentialManager/res/values-be/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Скарыстаць захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Скарыстаць захаваныя спосабы ўваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Выберыце захаваны спосаб уваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберыце ўліковыя даныя для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Выкарыстоўваць гэтую інфармацыю на прыладзе <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увайсці іншым спосабам"</string>
<string name="snackbar_action" msgid="37373514216505085">"Праглядзець варыянты"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Далей"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Спосабы ўваходу"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Паказаць больш"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Для карыстальніка <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Заблакіраваныя спосабы ўваходу"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Націсніце, каб разблакіраваць"</string>
diff --git a/packages/CredentialManager/res/values-bg/strings.xml b/packages/CredentialManager/res/values-bg/strings.xml
index f22c83e..ba515c0 100644
--- a/packages/CredentialManager/res/values-bg/strings.xml
+++ b/packages/CredentialManager/res/values-bg/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се използва ли запазеният ви код за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Да се използват ли запазените ви данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Изберете запазени данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Искате ли да изберете опция за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се използва ли тази информация за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Влизане в профила по друг начин"</string>
<string name="snackbar_action" msgid="37373514216505085">"Преглед на опциите"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Напред"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Опции за влизане в профила"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Преглед на още"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"За <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Заключени мениджъри на пароли"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Докоснете, за да отключите"</string>
diff --git a/packages/CredentialManager/res/values-bn/strings.xml b/packages/CredentialManager/res/values-bn/strings.xml
index c1a74fc..f2862f8 100644
--- a/packages/CredentialManager/res/values-bn/strings.xml
+++ b/packages/CredentialManager/res/values-bn/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা পাসকী ব্যবহার করবেন?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা সাইন-ইন সম্পর্কিত ক্রেডেনশিয়াল ব্যবহার করবেন?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন করা সম্পর্কিত ক্রেডেনশিয়াল বেছে নিন"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য বিকল্প বেছে নেবেন?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এ সাইন-ইন করতে এই তথ্য ব্যবহার করবেন?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্যভাবে সাইন-ইন করুন"</string>
<string name="snackbar_action" msgid="37373514216505085">"বিকল্প দেখুন"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"চালিয়ে যান"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"সাইন-ইন করার বিকল্প"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"আরও দেখুন"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>-এর জন্য"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"লক করা Password Manager"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"আনলক করতে ট্যাপ করুন"</string>
diff --git a/packages/CredentialManager/res/values-bs/strings.xml b/packages/CredentialManager/res/values-bs/strings.xml
index 7884e9f..165c1ce 100644
--- a/packages/CredentialManager/res/values-bs/strings.xml
+++ b/packages/CredentialManager/res/values-bs/strings.xml
@@ -52,13 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Koristiti sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Koristiti sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite li odabrati opciju za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Odabrati opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Koristiti ove informacije u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string>
<string name="snackbar_action" msgid="37373514216505085">"Prikaži opcije"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Nastavi"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcije prijave"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Pregledajte više"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Za osobu <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Zaključani upravitelji lozinki"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Dodirnite da otključate"</string>
diff --git a/packages/CredentialManager/res/values-ca/strings.xml b/packages/CredentialManager/res/values-ca/strings.xml
index 5e956a0..295e916 100644
--- a/packages/CredentialManager/res/values-ca/strings.xml
+++ b/packages/CredentialManager/res/values-ca/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vols utilitzar la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vols utilitzar l\'inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Tria un inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vols triar una opció per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vols utilitzar aquesta informació a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Inicia la sessió d\'una altra manera"</string>
<string name="snackbar_action" msgid="37373514216505085">"Mostra les opcions"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continua"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcions d\'inici de sessió"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Mostra\'n més"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Per a <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestors de contrasenyes bloquejats"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Toca per desbloquejar"</string>
diff --git a/packages/CredentialManager/res/values-cs/strings.xml b/packages/CredentialManager/res/values-cs/strings.xml
index 4a7b643..dbad4a5 100644
--- a/packages/CredentialManager/res/values-cs/strings.xml
+++ b/packages/CredentialManager/res/values-cs/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Použít uložený přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Použít uložené přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vyberte uložené přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vybrat možnost pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Použít tyto informace na <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Přihlásit se jinak"</string>
<string name="snackbar_action" msgid="37373514216505085">"Zobrazit možnosti"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Pokračovat"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Možnosti přihlašování"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Zobrazit více"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Pro uživatele <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Uzamčení správci hesel"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Klepnutím odemknete"</string>
diff --git a/packages/CredentialManager/res/values-da/strings.xml b/packages/CredentialManager/res/values-da/strings.xml
index fe728dd..40761e0c 100644
--- a/packages/CredentialManager/res/values-da/strings.xml
+++ b/packages/CredentialManager/res/values-da/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruge din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vil du bruge din gemte loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vælg en gemt loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du vælge en mulighed for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruge disse oplysninger i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log ind på en anden måde"</string>
<string name="snackbar_action" msgid="37373514216505085">"Se valgmuligheder"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Fortsæt"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Valgmuligheder for login"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Se mere"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Låste adgangskodeadministratorer"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tryk for at låse op"</string>
diff --git a/packages/CredentialManager/res/values-de/strings.xml b/packages/CredentialManager/res/values-de/strings.xml
index d48b548..07edca5 100644
--- a/packages/CredentialManager/res/values-de/strings.xml
+++ b/packages/CredentialManager/res/values-de/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Option für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Diese Infos für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Andere Anmeldeoption auswählen"</string>
<string name="snackbar_action" msgid="37373514216505085">"Optionen ansehen"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Weiter"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Anmeldeoptionen"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Mehr ansehen"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Für <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gesperrte Passwortmanager"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Zum Entsperren tippen"</string>
diff --git a/packages/CredentialManager/res/values-el/strings.xml b/packages/CredentialManager/res/values-el/strings.xml
index a163954..d7b3f98 100644
--- a/packages/CredentialManager/res/values-el/strings.xml
+++ b/packages/CredentialManager/res/values-el/strings.xml
@@ -52,13 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Να χρησιμοποιηθεί το αποθηκευμένο κλειδί πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Να χρησιμοποιηθούν τα αποθηκευμένα στοιχεία σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Επιλογή αποθηκευμένων στοιχείων σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Επιλογή ενέργειας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Να χρησιμοποιηθούν αυτές οι πληροφορίες στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Σύνδεση με άλλον τρόπο"</string>
<string name="snackbar_action" msgid="37373514216505085">"Προβολή επιλογών"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Συνέχεια"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Επιλογές σύνδεσης"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Προβολή περισσότερων"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Για τον χρήστη <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Κλειδωμένοι διαχειριστές κωδικών πρόσβασης"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Πατήστε για ξεκλείδωμα"</string>
diff --git a/packages/CredentialManager/res/values-en-rAU/strings.xml b/packages/CredentialManager/res/values-en-rAU/strings.xml
index 4419366..deb7822 100644
--- a/packages/CredentialManager/res/values-en-rAU/strings.xml
+++ b/packages/CredentialManager/res/values-en-rAU/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
<string name="snackbar_action" msgid="37373514216505085">"View options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continue"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sign-in options"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"View more"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Locked password managers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tap to unlock"</string>
diff --git a/packages/CredentialManager/res/values-en-rCA/strings.xml b/packages/CredentialManager/res/values-en-rCA/strings.xml
index b08425c..6b226bc 100644
--- a/packages/CredentialManager/res/values-en-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-en-rCA/strings.xml
@@ -58,6 +58,7 @@
<string name="snackbar_action" msgid="37373514216505085">"View options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continue"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sign-in options"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"View more"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Locked password managers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tap to unlock"</string>
diff --git a/packages/CredentialManager/res/values-en-rGB/strings.xml b/packages/CredentialManager/res/values-en-rGB/strings.xml
index 4419366..deb7822 100644
--- a/packages/CredentialManager/res/values-en-rGB/strings.xml
+++ b/packages/CredentialManager/res/values-en-rGB/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
<string name="snackbar_action" msgid="37373514216505085">"View options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continue"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sign-in options"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"View more"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Locked password managers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tap to unlock"</string>
diff --git a/packages/CredentialManager/res/values-en-rIN/strings.xml b/packages/CredentialManager/res/values-en-rIN/strings.xml
index 4419366..deb7822 100644
--- a/packages/CredentialManager/res/values-en-rIN/strings.xml
+++ b/packages/CredentialManager/res/values-en-rIN/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
<string name="snackbar_action" msgid="37373514216505085">"View options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continue"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sign-in options"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"View more"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Locked password managers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tap to unlock"</string>
diff --git a/packages/CredentialManager/res/values-en-rXC/strings.xml b/packages/CredentialManager/res/values-en-rXC/strings.xml
index e2f2dc3..18d298b 100644
--- a/packages/CredentialManager/res/values-en-rXC/strings.xml
+++ b/packages/CredentialManager/res/values-en-rXC/strings.xml
@@ -58,6 +58,7 @@
<string name="snackbar_action" msgid="37373514216505085">"View options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continue"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sign-in options"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"View more"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Locked password managers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tap to unlock"</string>
diff --git a/packages/CredentialManager/res/values-es-rUS/strings.xml b/packages/CredentialManager/res/values-es-rUS/strings.xml
index d8dd5ed..93880c0 100644
--- a/packages/CredentialManager/res/values-es-rUS/strings.xml
+++ b/packages/CredentialManager/res/values-es-rUS/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Quieres usar tu llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"¿Quieres usar tu acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Elige un acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Quieres una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Quieres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Acceder de otra forma"</string>
<string name="snackbar_action" msgid="37373514216505085">"Ver opciones"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opciones de acceso"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ver más"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Administradores de contraseñas bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Presiona para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-es/strings.xml b/packages/CredentialManager/res/values-es/strings.xml
index 73c3b0d..ae89976 100644
--- a/packages/CredentialManager/res/values-es/strings.xml
+++ b/packages/CredentialManager/res/values-es/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"¿Usar el inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Elige un inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Elegir una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión de otra manera"</string>
<string name="snackbar_action" msgid="37373514216505085">"Ver opciones"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opciones de inicio de sesión"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ver más"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestores de contraseñas bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tocar para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-et/strings.xml b/packages/CredentialManager/res/values-et/strings.xml
index 6f70941..653a0ee 100644
--- a/packages/CredentialManager/res/values-et/strings.xml
+++ b/packages/CredentialManager/res/values-et/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmeid?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmed"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kas teha valik rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Kas soovite kasutada seda teavet rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logige sisse muul viisil"</string>
<string name="snackbar_action" msgid="37373514216505085">"Kuva valikud"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Jätka"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Sisselogimise valikud"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Kuva rohkem"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Kasutajale <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Lukustatud paroolihaldurid"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Avamiseks puudutage"</string>
diff --git a/packages/CredentialManager/res/values-eu/strings.xml b/packages/CredentialManager/res/values-eu/strings.xml
index 3f08b61..6e54c1d 100644
--- a/packages/CredentialManager/res/values-eu/strings.xml
+++ b/packages/CredentialManager/res/values-eu/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde duzun sarbide-gakoa erabili nahi duzu?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde dituzun kredentzialak erabili nahi dituzu?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde dituzun kredentzialak"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako aukera bat hautatu nahi duzu?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzu informazio hori?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Hasi saioa beste modu batean"</string>
<string name="snackbar_action" msgid="37373514216505085">"Ikusi aukerak"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Egin aurrera"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Saioa hasteko aukerak"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ikusi gehiago"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearenak"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Blokeatutako pasahitz-kudeatzaileak"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Desblokeatzeko, sakatu hau"</string>
diff --git a/packages/CredentialManager/res/values-fa/strings.xml b/packages/CredentialManager/res/values-fa/strings.xml
index a1d2446..fa25fa89 100644
--- a/packages/CredentialManager/res/values-fa/strings.xml
+++ b/packages/CredentialManager/res/values-fa/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"از گذرکلید ذخیرهشده برای «<xliff:g id="APP_NAME">%1$s</xliff:g>» استفاده شود؟"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ورود به سیستم ذخیرهشده برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"انتخاب ورود به سیستم ذخیرهشده برای <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"گزینهای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید؟"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"از این اطلاعات در <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ورود به سیستم به روشی دیگر"</string>
<string name="snackbar_action" msgid="37373514216505085">"مشاهده گزینهها"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ادامه"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"گزینههای ورود به سیستم"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"مشاهده موارد بیشتر"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"برای <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"مدیران گذرواژه قفلشده"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"برای باز کردن قفل ضربه بزنید"</string>
diff --git a/packages/CredentialManager/res/values-fi/strings.xml b/packages/CredentialManager/res/values-fi/strings.xml
index 562741e..384ad56 100644
--- a/packages/CredentialManager/res/values-fi/strings.xml
+++ b/packages/CredentialManager/res/values-fi/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Käytetäänkö tallennettua avainkoodiasi täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Käytetäänkö tallennettuja kirjautumistietoja täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Valitse tallennetut kirjautumistiedot (<xliff:g id="APP_NAME">%1$s</xliff:g>)"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Valitaanko vaihtoehto, jota <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää näitä tietoja?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Kirjaudu sisään toisella tavalla"</string>
<string name="snackbar_action" msgid="37373514216505085">"Katseluasetukset"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Jatka"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Kirjautumisvaihtoehdot"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Näytä lisää"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Käyttäjä: <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Lukitut salasanojen ylläpitotyökalut"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Avaa napauttamalla"</string>
diff --git a/packages/CredentialManager/res/values-fr-rCA/strings.xml b/packages/CredentialManager/res/values-fr-rCA/strings.xml
index af60765..7a7fd52 100644
--- a/packages/CredentialManager/res/values-fr-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-fr-rCA/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Utiliser votre connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choisir une connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces renseignements dans <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
<string name="snackbar_action" msgid="37373514216505085">"Afficher les options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuer"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Options de connexion"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Afficher plus"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Pour <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestionnaires de mots de passe verrouillés"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Touchez pour déverrouiller"</string>
diff --git a/packages/CredentialManager/res/values-fr/strings.xml b/packages/CredentialManager/res/values-fr/strings.xml
index 293738d..f890e73 100644
--- a/packages/CredentialManager/res/values-fr/strings.xml
+++ b/packages/CredentialManager/res/values-fr/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Utiliser vos informations de connexion enregistrées pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choisir des informations de connexion enregistrées pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces informations dans <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
<string name="snackbar_action" msgid="37373514216505085">"Voir les options"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuer"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Options de connexion"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Afficher plus"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Pour <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestionnaires de mots de passe verrouillés"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Appuyer pour déverrouiller"</string>
diff --git a/packages/CredentialManager/res/values-gl/strings.xml b/packages/CredentialManager/res/values-gl/strings.xml
index f5d5a54..0e54a27 100644
--- a/packages/CredentialManager/res/values-gl/strings.xml
+++ b/packages/CredentialManager/res/values-gl/strings.xml
@@ -10,7 +10,7 @@
<string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar contrasinal"</string>
<string name="passkey_creation_intro_title" msgid="4251037543787718844">"Máis protección coas claves de acceso"</string>
<string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Cunha clave de acceso non é necesario que crees ou lembres contrasinais complexos"</string>
- <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As claves de acceso son claves dixitais encriptadas que creas usando a túa impresión dixital, a túa cara ou o teu bloqueo de pantalla"</string>
+ <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As claves de acceso son claves dixitais encriptadas que creas usando a impresión dixital, o recoñecemento facial ou un bloqueo de pantalla"</string>
<string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"As claves de acceso gárdanse nun xestor de contrasinais para que poidas iniciar sesión noutros dispositivos"</string>
<string name="more_about_passkeys_title" msgid="7797903098728837795">"Máis información sobre as claves de acceso"</string>
<string name="passwordless_technology_title" msgid="2497513482056606668">"Tecnoloxía sen contrasinais"</string>
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Queres usar a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Queres usar o método de inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolle un método de inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Queres escoller unha opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Queres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión doutra forma"</string>
<string name="snackbar_action" msgid="37373514216505085">"Ver opcións"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcións de inicio de sesión"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ver máis"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Xestores de contrasinais bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Toca para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-gu/strings.xml b/packages/CredentialManager/res/values-gu/strings.xml
index ea78097..b90d7a0 100644
--- a/packages/CredentialManager/res/values-gu/strings.xml
+++ b/packages/CredentialManager/res/values-gu/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે શું તમારા સાચવેલા સાઇન-ઇનનો ઉપયોગ કરીએ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલું સાઇન-ઇન પસંદ કરો"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>નો વિકલ્પ પસંદ કરીએ?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> પર આ માહિતીનો ઉપયોગ કરીએ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"કોઈ અન્ય રીતે સાઇન ઇન કરો"</string>
<string name="snackbar_action" msgid="37373514216505085">"વ્યૂના વિકલ્પો"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ચાલુ રાખો"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"સાઇન-ઇનના વિકલ્પો"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"વધુ જુઓ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> માટે"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"લૉક કરેલા પાસવર્ડ મેનેજર"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"અનલૉક કરવા માટે ટૅપ કરો"</string>
diff --git a/packages/CredentialManager/res/values-hi/strings.xml b/packages/CredentialManager/res/values-hi/strings.xml
index 5b07bda..8a6eab3 100644
--- a/packages/CredentialManager/res/values-hi/strings.xml
+++ b/packages/CredentialManager/res/values-hi/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई जानकारी का इस्तेमाल करना है?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई जानकारी में से चुनें"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए सेव किए गए विकल्पों में से किसी को चुनना है?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए, क्या इस जानकारी का इस्तेमाल करना है?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"किसी दूसरे तरीके से साइन इन करें"</string>
<string name="snackbar_action" msgid="37373514216505085">"विकल्प देखें"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"जारी रखें"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"साइन इन करने के विकल्प"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ज़्यादा देखें"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> के लिए"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"लॉक किए गए पासवर्ड मैनेजर"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"अनलॉक करने के लिए टैप करें"</string>
diff --git a/packages/CredentialManager/res/values-hr/strings.xml b/packages/CredentialManager/res/values-hr/strings.xml
index d9ac249..140a099 100644
--- a/packages/CredentialManager/res/values-hr/strings.xml
+++ b/packages/CredentialManager/res/values-hr/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite li upotrijebiti spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite li odabrati opciju za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite li koristiti te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na neki drugi način"</string>
<string name="snackbar_action" msgid="37373514216505085">"Prikaži opcije"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Nastavi"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcije prijave"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Prikaži više"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Za korisnika <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Upravitelji zaključanih zaporki"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Dodirnite za otključavanje"</string>
diff --git a/packages/CredentialManager/res/values-hu/strings.xml b/packages/CredentialManager/res/values-hu/strings.xml
index 92fa388..f07252a 100644
--- a/packages/CredentialManager/res/values-hu/strings.xml
+++ b/packages/CredentialManager/res/values-hu/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett azonosítókulcsot használni?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett bejelentkezési adatait használni?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Mentett bejelentkezési adatok választása a következő számára: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kiválaszt egy lehetőséget a következőbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Használni szeretná ezt az információt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásban?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bejelentkezés más módon"</string>
<string name="snackbar_action" msgid="37373514216505085">"Lehetőségek megtekintése"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Folytatás"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Bejelentkezési beállítások"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Továbbiak megjelenítése"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Zárolt jelszókezelők"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Koppintson a feloldáshoz"</string>
diff --git a/packages/CredentialManager/res/values-hy/strings.xml b/packages/CredentialManager/res/values-hy/strings.xml
index 80947cc..2b666c4 100644
--- a/packages/CredentialManager/res/values-hy/strings.xml
+++ b/packages/CredentialManager/res/values-hy/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Օգտագործե՞լ պահված անցաբառը <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Օգտագործե՞լ մուտքի պահված տվյալները <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Ընտրեք մուտքի պահված տվյալներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ընտրե՞լ տարբերակ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Օգտագործե՞լ այս տեղեկությունները <xliff:g id="APP_NAME">%1$s</xliff:g> մտնելու համար"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Մուտք գործել այլ եղանակով"</string>
<string name="snackbar_action" msgid="37373514216505085">"Դիտել տարբերակները"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Շարունակել"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Մուտքի տարբերակներ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Դիտել ավելին"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>-ի համար"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Գաղտնաբառերի կողպված կառավարիչներ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Հպեք ապակողպելու համար"</string>
diff --git a/packages/CredentialManager/res/values-in/strings.xml b/packages/CredentialManager/res/values-in/strings.xml
index f72c36d..608c1ac 100644
--- a/packages/CredentialManager/res/values-in/strings.xml
+++ b/packages/CredentialManager/res/values-in/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gunakan info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pilih info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih opsi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan info ini di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Login dengan cara lain"</string>
<string name="snackbar_action" msgid="37373514216505085">"Lihat opsi"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Lanjutkan"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opsi login"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Tampilkan lainnya"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Untuk <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Pengelola sandi terkunci"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Ketuk untuk membuka kunci"</string>
diff --git a/packages/CredentialManager/res/values-is/strings.xml b/packages/CredentialManager/res/values-is/strings.xml
index fa2d0b5..4f7fa4a 100644
--- a/packages/CredentialManager/res/values-is/strings.xml
+++ b/packages/CredentialManager/res/values-is/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Nota vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Veldu vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Velja valkost fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Nota þessar upplýsingar í <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Skrá inn með öðrum hætti"</string>
<string name="snackbar_action" msgid="37373514216505085">"Skoða valkosti"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Áfram"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Innskráningarkostir"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Nánar"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Fyrir: <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Læst aðgangsorðastjórnun"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Ýttu til að opna"</string>
diff --git a/packages/CredentialManager/res/values-it/strings.xml b/packages/CredentialManager/res/values-it/strings.xml
index a45f39a..b971b7b 100644
--- a/packages/CredentialManager/res/values-it/strings.xml
+++ b/packages/CredentialManager/res/values-it/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vuoi usare l\'accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Scegli un accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vuoi scegliere un\'opzione per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vuoi usare questi dati su <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Accedi in un altro modo"</string>
<string name="snackbar_action" msgid="37373514216505085">"Visualizza opzioni"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continua"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opzioni di accesso"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Mostra altro"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Per <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestori delle password bloccati"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tocca per sbloccare"</string>
diff --git a/packages/CredentialManager/res/values-iw/strings.xml b/packages/CredentialManager/res/values-iw/strings.xml
index b187533..ad7e712 100644
--- a/packages/CredentialManager/res/values-iw/strings.xml
+++ b/packages/CredentialManager/res/values-iw/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"להשתמש במפתח גישה שנשמר עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"להשתמש בפרטי הכניסה שנשמרו עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"בחירת פרטי כניסה שמורים עבור <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"רוצה לבחור אפשרות עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"להשתמש במידע הזה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"כניסה בדרך אחרת"</string>
<string name="snackbar_action" msgid="37373514216505085">"הצגת האפשרויות"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"המשך"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"אפשרויות כניסה לחשבון"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"עוד מידע"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"עבור <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"מנהלי סיסמאות נעולים"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"יש להקיש כדי לבטל את הנעילה"</string>
diff --git a/packages/CredentialManager/res/values-ja/strings.xml b/packages/CredentialManager/res/values-ja/strings.xml
index f930d2a..4adabd4 100644
--- a/packages/CredentialManager/res/values-ja/strings.xml
+++ b/packages/CredentialManager/res/values-ja/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したログイン情報を使用しますか?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したログイン情報の選択"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> のオプションを選択しますか?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> でこの情報を使用しますか?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"別の方法でログイン"</string>
<string name="snackbar_action" msgid="37373514216505085">"オプションを表示"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"続行"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ログイン オプション"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"さらに表示"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> 用"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"パスワード マネージャー ロック中"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"タップしてロック解除"</string>
diff --git a/packages/CredentialManager/res/values-ka/strings.xml b/packages/CredentialManager/res/values-ka/strings.xml
index a53bb50..adba0c0 100644
--- a/packages/CredentialManager/res/values-ka/strings.xml
+++ b/packages/CredentialManager/res/values-ka/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"გსურთ თქვენი დამახსოვრებული წვდომის გასაღების გამოყენება აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"გსურთ თქვენი დამახსოვრებული სისტემაში შესვლის მონაცემების გამოყენება აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"აირჩიეთ სისტემაში შესვლის ინფორმაცია აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"გსურთ აირჩიოთ ვარიანტი <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"გსურთ ამ ინფორმაციის გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ში?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"სხვა ხერხით შესვლა"</string>
<string name="snackbar_action" msgid="37373514216505085">"პარამეტრების ნახვა"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"გაგრძელება"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"სისტემაში შესვლის ვარიანტები"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"მეტის ნახვა"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>-ისთვის"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ჩაკეტილი პაროლის მმართველები"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"შეეხეთ განსაბლოკად"</string>
diff --git a/packages/CredentialManager/res/values-kk/strings.xml b/packages/CredentialManager/res/values-kk/strings.xml
index 9635d8a..09f7b3d 100644
--- a/packages/CredentialManager/res/values-kk/strings.xml
+++ b/packages/CredentialManager/res/values-kk/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілті пайдаланылсын ба?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған тіркелу деректері пайдаланылсын ба?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған тіркелу деректерін таңдаңыз"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін опция таңдайсыз ба?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бұл ақпарат <xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасында сақталсын ба?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Басқаша кіру"</string>
<string name="snackbar_action" msgid="37373514216505085">"Опцияларды көру"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Жалғастыру"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Кіру опциялары"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Тағы көру"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> үшін"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Құлыпталған құпия сөз менеджерлері"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Құлыпты ашу үшін түртіңіз."</string>
diff --git a/packages/CredentialManager/res/values-km/strings.xml b/packages/CredentialManager/res/values-km/strings.xml
index b1c3f5e..b5b1e17 100644
--- a/packages/CredentialManager/res/values-km/strings.xml
+++ b/packages/CredentialManager/res/values-km/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ប្រើការចូលគណនីដែលបានរក្សាទុករបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"ជ្រើសរើសការចូលគណនីដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ជ្រើសរើសជម្រើសសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ប្រើព័ត៌មាននេះនៅលើ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ចូលគណនីដោយប្រើវិធីផ្សេងទៀត"</string>
<string name="snackbar_action" msgid="37373514216505085">"មើលជម្រើស"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"បន្ត"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ជម្រើសចូលគណនី"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"មើលច្រើនទៀត"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"សម្រាប់ <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ដែលបានចាក់សោ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ចុចដើម្បីដោះសោ"</string>
diff --git a/packages/CredentialManager/res/values-kn/strings.xml b/packages/CredentialManager/res/values-kn/strings.xml
index 327535f..9fb614e 100644
--- a/packages/CredentialManager/res/values-kn/strings.xml
+++ b/packages/CredentialManager/res/values-kn/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ನಿಮ್ಮ ಪಾಸ್ಕೀ ಅನ್ನು ಬಳಸಬೇಕೆ?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ನಿಮ್ಮ ಸೈನ್-ಇನ್ ಅನ್ನು ಬಳಸಬೇಕೆ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಬೇಕೆ?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ಈ ಮಾಹಿತಿಯನ್ನು <xliff:g id="APP_NAME">%1$s</xliff:g> ನಲ್ಲಿ ಬಳಸಬೇಕೆ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ಬೇರೆ ವಿಧಾನದಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
<string name="snackbar_action" msgid="37373514216505085">"ಆಯ್ಕೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ಮುಂದುವರಿಸಿ"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ಸೈನ್ ಇನ್ ಆಯ್ಕೆಗಳು"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ಇನ್ನಷ್ಟು ವೀಕ್ಷಿಸಿ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> ಗಾಗಿ"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕರನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ಅನ್ಲಾಕ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
diff --git a/packages/CredentialManager/res/values-ko/strings.xml b/packages/CredentialManager/res/values-ko/strings.xml
index 3ce0245..092bf89 100644
--- a/packages/CredentialManager/res/values-ko/strings.xml
+++ b/packages/CredentialManager/res/values-ko/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용으로 저장된 패스키를 사용하시겠습니까?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용 저장된 로그인 정보를 사용하시겠습니까?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용 저장된 로그인 정보 선택"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱의 옵션을 선택하시겠습니까?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 이 정보를 사용하시나요?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"다른 방법으로 로그인"</string>
<string name="snackbar_action" msgid="37373514216505085">"옵션 보기"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"계속"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"로그인 옵션"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"더보기"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>님의 로그인 정보"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"잠긴 비밀번호 관리자"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"탭하여 잠금 해제"</string>
diff --git a/packages/CredentialManager/res/values-ky/strings.xml b/packages/CredentialManager/res/values-ky/strings.xml
index 7d82899..e055ea3 100644
--- a/packages/CredentialManager/res/values-ky/strings.xml
+++ b/packages/CredentialManager/res/values-ky/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган кирүү параметрин колдоносузбу?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү маалыматын тандаңыз"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн параметр тандайсызбы?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бул маалыматты <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда пайдаланасызбы?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Башка жол менен кирүү"</string>
<string name="snackbar_action" msgid="37373514216505085">"Параметрлерди көрүү"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Улантуу"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Аккаунтка кирүү параметрлери"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Дагы көрүү"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> үчүн"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Кулпуланган сырсөздөрдү башкаргычтар"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Кулпусун ачуу үчүн таптаңыз"</string>
diff --git a/packages/CredentialManager/res/values-lo/strings.xml b/packages/CredentialManager/res/values-lo/strings.xml
index 75726ea..28e80fa 100644
--- a/packages/CredentialManager/res/values-lo/strings.xml
+++ b/packages/CredentialManager/res/values-lo/strings.xml
@@ -58,6 +58,7 @@
<string name="snackbar_action" msgid="37373514216505085">"ເບິ່ງຕົວເລືອກ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ສືບຕໍ່"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ຕົວເລືອກການເຂົ້າສູ່ລະບົບ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ເບິ່ງເພີ່ມເຕີມ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"ສຳລັບ <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ຕົວຈັດການລະຫັດຜ່ານທີ່ລັອກໄວ້"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ແຕະເພື່ອປົດລັອກ"</string>
diff --git a/packages/CredentialManager/res/values-lt/strings.xml b/packages/CredentialManager/res/values-lt/strings.xml
index ed2db46..ce06610 100644
--- a/packages/CredentialManager/res/values-lt/strings.xml
+++ b/packages/CredentialManager/res/values-lt/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Naudoti išsaugotą „passkey“ programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Naudoti išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pasirinkite išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pasirinkti parinktį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Naudoti šią informaciją programoje „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prisijungti kitu būdu"</string>
<string name="snackbar_action" msgid="37373514216505085">"Peržiūrėti parinktis"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Tęsti"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Prisijungimo parinktys"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Peržiūrėti daugiau"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Skirta <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Užrakintos slaptažodžių tvarkyklės"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Palieskite, kad atrakintumėte"</string>
diff --git a/packages/CredentialManager/res/values-lv/strings.xml b/packages/CredentialManager/res/values-lv/strings.xml
index c1ae230..a2dd6f5 100644
--- a/packages/CredentialManager/res/values-lv/strings.xml
+++ b/packages/CredentialManager/res/values-lv/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vai izmantot saglabāto piekļuves atslēgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vai izmantot saglabāto pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Saglabātas pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vai izvēlēties opciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vai izmantot šo informāciju lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Pierakstīties citā veidā"</string>
<string name="snackbar_action" msgid="37373514216505085">"Skatīt opcijas"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Turpināt"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Pierakstīšanās opcijas"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Skatīt vairāk"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Lietotājam <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Paroļu pārvaldnieki, kuros nepieciešams autentificēties"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Pieskarieties, lai atbloķētu"</string>
diff --git a/packages/CredentialManager/res/values-mk/strings.xml b/packages/CredentialManager/res/values-mk/strings.xml
index 969912b..0f40d49 100644
--- a/packages/CredentialManager/res/values-mk/strings.xml
+++ b/packages/CredentialManager/res/values-mk/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се користи вашиот зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Да се користи вашето зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Изберете зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Избери опција за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се користат овие информации на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Најавете се на друг начин"</string>
<string name="snackbar_action" msgid="37373514216505085">"Прикажи ги опциите"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Продолжи"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Опции за најавување"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Прегледајте повеќе"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"За <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Заклучени управници со лозинки"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Допрете за да отклучите"</string>
diff --git a/packages/CredentialManager/res/values-ml/strings.xml b/packages/CredentialManager/res/values-ml/strings.xml
index 498c9b0..d5e33ab 100644
--- a/packages/CredentialManager/res/values-ml/strings.xml
+++ b/packages/CredentialManager/res/values-ml/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങൾ സംരക്ഷിച്ച സൈൻ ഇൻ ഉപയോഗിക്കണോ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച സൈൻ ഇൻ തിരഞ്ഞെടുക്കുക"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്ന ആപ്പിനായി ഒരു ഓപ്ഷൻ തിരഞ്ഞെടുക്കണോ?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിൽ ഈ വിവരങ്ങൾ ഉപയോഗിക്കണോ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"മറ്റൊരു രീതിയിൽ സൈൻ ഇൻ ചെയ്യുക"</string>
<string name="snackbar_action" msgid="37373514216505085">"ഓപ്ഷനുകൾ കാണുക"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"തുടരുക"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"സൈൻ ഇൻ ഓപ്ഷനുകൾ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"കൂടുതൽ കാണുക"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> എന്നയാൾക്ക്"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ലോക്ക് ചെയ്ത പാസ്വേഡ് സൈൻ ഇൻ മാനേജർമാർ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"അൺലോക്ക് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
diff --git a/packages/CredentialManager/res/values-mn/strings.xml b/packages/CredentialManager/res/values-mn/strings.xml
index f8bd358..4491821 100644
--- a/packages/CredentialManager/res/values-mn/strings.xml
+++ b/packages/CredentialManager/res/values-mn/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх мэдээллээ ашиглах уу?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д зориулж хадгалсан нэвтрэх мэдээллийг сонгоно уу"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д сонголт хийх үү?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Энэ мэдээллийг <xliff:g id="APP_NAME">%1$s</xliff:g>-д ашиглах уу?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Өөр аргаар нэвтрэх"</string>
<string name="snackbar_action" msgid="37373514216505085">"Сонголт харах"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Үргэлжлүүлэх"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Нэвтрэх сонголт"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Дэлгэрэнгүй үзэх"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>-д"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Түгжээтэй нууц үгний менежерүүд"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Түгжээг тайлахын тулд товшино уу"</string>
diff --git a/packages/CredentialManager/res/values-mr/strings.xml b/packages/CredentialManager/res/values-mr/strings.xml
index 4e3c46e..6f4f5de 100644
--- a/packages/CredentialManager/res/values-mr/strings.xml
+++ b/packages/CredentialManager/res/values-mr/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचे सेव्ह केलेले साइन-इन वापरायचे का?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेले साइन-इन निवडा"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी पर्याय निवडा?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ही माहिती <xliff:g id="APP_NAME">%1$s</xliff:g> वर वापरायची का?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"दुसऱ्या मार्गाने साइन इन करा"</string>
<string name="snackbar_action" msgid="37373514216505085">"पर्याय पहा"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"पुढे सुरू ठेवा"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"साइन इन पर्याय"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"आणखी पहा"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> साठी"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"लॉक केलेले पासवर्ड व्यवस्थापक"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"अनलॉक करण्यासाठी टॅप करा"</string>
diff --git a/packages/CredentialManager/res/values-ms/strings.xml b/packages/CredentialManager/res/values-ms/strings.xml
index f7cd421..79390ba 100644
--- a/packages/CredentialManager/res/values-ms/strings.xml
+++ b/packages/CredentialManager/res/values-ms/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gunakan maklumat log masuk anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pilih log masuk yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih satu pilihan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan maklumat ini pada <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log masuk menggunakan cara lain"</string>
<string name="snackbar_action" msgid="37373514216505085">"Lihat pilihan"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Teruskan"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Pilihan log masuk"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Lihat lagi"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Untuk <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Password Manager dikunci"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Ketik untuk membuka kunci"</string>
diff --git a/packages/CredentialManager/res/values-my/strings.xml b/packages/CredentialManager/res/values-my/strings.xml
index 85ce79e..321b7e9 100644
--- a/packages/CredentialManager/res/values-my/strings.xml
+++ b/packages/CredentialManager/res/values-my/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"သိမ်းထားသောလျှို့ဝှက်ကီးကို <xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သုံးမလား။"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသောလက်မှတ်ထိုးဝင်မှု သုံးမလား။"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လက်မှတ်ထိုးဝင်မှုကို ရွေးပါ"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် တစ်ခုကိုရွေးမလား။"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> တွင် ဤအချက်အလက်ကို သုံးမလား။"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"နောက်တစ်နည်းဖြင့် လက်မှတ်ထိုးဝင်ရန်"</string>
<string name="snackbar_action" msgid="37373514216505085">"ရွေးစရာများကို ကြည့်ရန်"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ရှေ့ဆက်ရန်"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"လက်မှတ်ထိုးဝင်ရန် နည်းလမ်းများ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ပိုကြည့်ရန်"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> အတွက်"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"လော့ခ်ချထားသည့် စကားဝှက်မန်နေဂျာများ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ဖွင့်ရန် တို့ပါ"</string>
diff --git a/packages/CredentialManager/res/values-nb/strings.xml b/packages/CredentialManager/res/values-nb/strings.xml
index b7f4aa5..4d558d8 100644
--- a/packages/CredentialManager/res/values-nb/strings.xml
+++ b/packages/CredentialManager/res/values-nb/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruke den lagrede tilgangsnøkkelen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vil du bruke den lagrede påloggingen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Velg en lagret pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du velge et alternativ for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruke denne informasjonen i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bruk en annen påloggingsmetode"</string>
<string name="snackbar_action" msgid="37373514216505085">"Se alternativene"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Fortsett"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Påloggingsalternativer"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Se mer"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"For <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Låste løsninger for passordlagring"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Trykk for å låse opp"</string>
diff --git a/packages/CredentialManager/res/values-ne/strings.xml b/packages/CredentialManager/res/values-ne/strings.xml
index d181aa3..3213e5d 100644
--- a/packages/CredentialManager/res/values-ne/strings.xml
+++ b/packages/CredentialManager/res/values-ne/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"आफूले सेभ गरेको पासकी प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्ने हो?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"आफूले सेभ गरेको साइन इनसम्बन्धी जानकारी प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्ने हो?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्नका लागि सेभ गरिएका साइन इनसम्बन्धी जानकारी छनौट गर्नुहोस्"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न प्रयोग गरिने क्रिडेन्सियल छनौट गर्ने हो?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न गर्नका निम्ति यो जानकारी प्रयोग गर्ने हो?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"अर्कै विधि प्रयोग गरी साइन इन गर्नुहोस्"</string>
<string name="snackbar_action" msgid="37373514216505085">"विकल्पहरू हेर्नुहोस्"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"जारी राख्नुहोस्"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"साइन इनसम्बन्धी विकल्पहरू"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"थप हेर्नुहोस्"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> का लागि"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"लक गरिएका पासवर्ड म्यानेजरहरू"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"अनलक गर्न ट्याप गर्नुहोस्"</string>
diff --git a/packages/CredentialManager/res/values-nl/strings.xml b/packages/CredentialManager/res/values-nl/strings.xml
index c26a8e5..d0963d7 100644
--- a/packages/CredentialManager/res/values-nl/strings.xml
+++ b/packages/CredentialManager/res/values-nl/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Je opgeslagen toegangssleutel gebruiken voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Je opgeslagen inloggegevens voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Opgeslagen inloggegevens kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Een optie kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Deze informatie gebruiken in <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Op een andere manier inloggen"</string>
<string name="snackbar_action" msgid="37373514216505085">"Opties bekijken"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Doorgaan"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opties voor inloggen"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Meer bekijken"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Voor <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Vergrendelde wachtwoordmanagers"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tik om te ontgrendelen"</string>
diff --git a/packages/CredentialManager/res/values-or/strings.xml b/packages/CredentialManager/res/values-or/strings.xml
index 75cc974..cdd229f 100644
--- a/packages/CredentialManager/res/values-or/strings.xml
+++ b/packages/CredentialManager/res/values-or/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଆପଣଙ୍କ ପାସକୀ ବ୍ୟବହାର କରିବେ?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଆପଣଙ୍କ ସାଇନ-ଇନ ବ୍ୟବହାର କରିବେ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ବିକଳ୍ପ ବାଛିବେ?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ଏହି ସୂଚନାକୁ ବ୍ୟବହାର କରିବେ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ଅନ୍ୟ ଏକ ଉପାୟରେ ସାଇନ ଇନ କରନ୍ତୁ"</string>
<string name="snackbar_action" msgid="37373514216505085">"ବିକଳ୍ପଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ଜାରି ରଖନ୍ତୁ"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ସାଇନ ଇନ ବିକଳ୍ପଗୁଡ଼ିକ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ଅଧିକ ଦେଖନ୍ତୁ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>ରେ"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ଲକ ଥିବା Password Manager"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ଅନଲକ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
diff --git a/packages/CredentialManager/res/values-pa/strings.xml b/packages/CredentialManager/res/values-pa/strings.xml
index b7797da..ed2c40c 100644
--- a/packages/CredentialManager/res/values-pa/strings.xml
+++ b/packages/CredentialManager/res/values-pa/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਚੁਣੋ"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕਿਸੇ ਵਿਕਲਪ ਦੀ ਚੋਣ ਕਰਨੀ ਹੈ?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> \'ਤੇ ਇਸ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ਕਿਸੇ ਹੋਰ ਤਰੀਕੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
<string name="snackbar_action" msgid="37373514216505085">"ਵਿਕਲਪ ਦੇਖੋ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ਸਾਈਨ-ਇਨ ਕਰਨ ਦੇ ਵਿਕਲਪ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ਹੋਰ ਦੇਖੋ"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> ਲਈ"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"ਲਾਕ ਕੀਤੇ ਪਾਸਵਰਡ ਪ੍ਰਬੰਧਕ"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
diff --git a/packages/CredentialManager/res/values-pl/strings.xml b/packages/CredentialManager/res/values-pl/strings.xml
index 03a547f..68c8500 100644
--- a/packages/CredentialManager/res/values-pl/strings.xml
+++ b/packages/CredentialManager/res/values-pl/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Użyć zapisanego klucza dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Użyć zapisanych danych logowania dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Wybierz zapisane dane logowania dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Wybrać opcję dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Użyć tych informacji w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Zaloguj się w inny sposób"</string>
<string name="snackbar_action" msgid="37373514216505085">"Wyświetl opcje"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Dalej"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opcje logowania"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Wyświetl więcej"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Zablokowane menedżery haseł"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Kliknij, aby odblokować"</string>
diff --git a/packages/CredentialManager/res/values-pt-rBR/strings.xml b/packages/CredentialManager/res/values-pt-rBR/strings.xml
index a7f1de1..67955fe 100644
--- a/packages/CredentialManager/res/values-pt-rBR/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rBR/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Usar suas informações de login salvas para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolher um login salvo para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
<string name="snackbar_action" msgid="37373514216505085">"Conferir opções"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opções de login"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Mostrar mais"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gerenciadores de senha bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Toque para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-pt-rPT/strings.xml b/packages/CredentialManager/res/values-pt-rPT/strings.xml
index 8ca0baf1..163134c 100644
--- a/packages/CredentialManager/res/values-pt-rPT/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rPT/strings.xml
@@ -58,6 +58,7 @@
<string name="snackbar_action" msgid="37373514216505085">"Ver opções"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opções de início de sessão"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ver mais"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gestores de palavras-passe bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tocar para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-pt/strings.xml b/packages/CredentialManager/res/values-pt/strings.xml
index a7f1de1..67955fe 100644
--- a/packages/CredentialManager/res/values-pt/strings.xml
+++ b/packages/CredentialManager/res/values-pt/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Usar suas informações de login salvas para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolher um login salvo para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
<string name="snackbar_action" msgid="37373514216505085">"Conferir opções"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuar"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opções de login"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Mostrar mais"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Gerenciadores de senha bloqueados"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Toque para desbloquear"</string>
diff --git a/packages/CredentialManager/res/values-ro/strings.xml b/packages/CredentialManager/res/values-ro/strings.xml
index a9e76de..d9aa106 100644
--- a/packages/CredentialManager/res/values-ro/strings.xml
+++ b/packages/CredentialManager/res/values-ro/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Folosești cheia de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Folosești datele de conectare salvate pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Alege o conectare salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Alegi o opțiune pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Folosești aceste informații în <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Conectează-te altfel"</string>
<string name="snackbar_action" msgid="37373514216505085">"Afișează opțiunile"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Continuă"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opțiuni de conectare"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Afișează mai multe"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Pentru <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Manageri de parole blocate"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Atinge pentru a debloca"</string>
diff --git a/packages/CredentialManager/res/values-ru/strings.xml b/packages/CredentialManager/res/values-ru/strings.xml
index 2694fa5..008cecf 100644
--- a/packages/CredentialManager/res/values-ru/strings.xml
+++ b/packages/CredentialManager/res/values-ru/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Использовать сохраненные учетные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Выберите сохраненные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберите данные для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Использовать эту информацию для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Войти другим способом"</string>
<string name="snackbar_action" msgid="37373514216505085">"Показать варианты"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Продолжить"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Варианты входа"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Ещё"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Для пользователя <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Заблокированные менеджеры паролей"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Нажмите для разблокировки"</string>
diff --git a/packages/CredentialManager/res/values-si/strings.xml b/packages/CredentialManager/res/values-si/strings.xml
index fc0391e..203d0f6 100644
--- a/packages/CredentialManager/res/values-si/strings.xml
+++ b/packages/CredentialManager/res/values-si/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි පුරනය භාවිතා කරන්න ද?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරැකි පුරනයක් තෝරා ගන්න"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා විකල්පයක් තෝරන්නද?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> මත මෙම තතු භාවිතා කරන්න ද?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"වෙනත් ආකාරයකින් පුරන්න"</string>
<string name="snackbar_action" msgid="37373514216505085">"විකල්ප බලන්න"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ඉදිරියට යන්න"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"පුරනය වීමේ විකල්ප"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"වැඩියෙන් දකින්න"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> සඳහා"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"අගුළු දැමූ මුරපද කළමනාකරුවන්"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"අගුළු හැරීමට තට්ටු කරන්න"</string>
diff --git a/packages/CredentialManager/res/values-sk/strings.xml b/packages/CredentialManager/res/values-sk/strings.xml
index fd20696..ef3b958 100644
--- a/packages/CredentialManager/res/values-sk/strings.xml
+++ b/packages/CredentialManager/res/values-sk/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> použiť uložené prihlasovacie údaje?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vyberte uložené prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> vybrať možnosť?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Chcete použiť tieto informácie v aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prihlásiť sa inak"</string>
<string name="snackbar_action" msgid="37373514216505085">"Zobraziť možnosti"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Pokračovať"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Možnosti prihlásenia"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Zobraziť viac"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Pre používateľa <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Správcovia uzamknutých hesiel"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Odomknúť klepnutím"</string>
diff --git a/packages/CredentialManager/res/values-sl/strings.xml b/packages/CredentialManager/res/values-sl/strings.xml
index 36dbf6e..8582dab 100644
--- a/packages/CredentialManager/res/values-sl/strings.xml
+++ b/packages/CredentialManager/res/values-sl/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite uporabiti shranjeni ključ za dostop do aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite uporabiti shranjene podatke za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Izberite shranjene podatke za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Izberite možnost za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite te podatke uporabiti v aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijava na drug način"</string>
<string name="snackbar_action" msgid="37373514216505085">"Prikaz možnosti"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Naprej"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Možnosti prijave"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Prikaži več"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Za uporabnika <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Zaklenjeni upravitelji gesel"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Dotaknite se, da odklenete"</string>
diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml
index a3b29ee..a3e2c0d 100644
--- a/packages/CredentialManager/res/values-sq/strings.xml
+++ b/packages/CredentialManager/res/values-sq/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Të përdoret identifikimi yt i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Zgjidh një identifikim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Të zgjidhet një opsion për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Të përdoren këto informacione në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Identifikohu me një mënyrë tjetër"</string>
<string name="snackbar_action" msgid="37373514216505085">"Shiko opsionet"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Vazhdo"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Opsionet e identifikimit"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Shiko më shumë"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Për <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Menaxherët e fjalëkalimeve të kyçura"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Trokit për të shkyçur"</string>
diff --git a/packages/CredentialManager/res/values-sr/strings.xml b/packages/CredentialManager/res/values-sr/strings.xml
index 698b367..fabf1fd 100644
--- a/packages/CredentialManager/res/values-sr/strings.xml
+++ b/packages/CredentialManager/res/values-sr/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Желите да користите сачуване податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Одаберите сачувано пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Желите да одаберете опцију за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Желите да користите те податке у апликацији <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Пријавите се на други начин"</string>
<string name="snackbar_action" msgid="37373514216505085">"Прикажи опције"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Настави"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Опције за пријављивање"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Прикажи још"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"За: <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Менаџери закључаних лозинки"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Додирните да бисте откључали"</string>
diff --git a/packages/CredentialManager/res/values-sv/strings.xml b/packages/CredentialManager/res/values-sv/strings.xml
index 5512701..80c6014 100644
--- a/packages/CredentialManager/res/values-sv/strings.xml
+++ b/packages/CredentialManager/res/values-sv/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vill du använda din sparade nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vill du använda dina sparade inloggningsuppgifter för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Välj en sparad inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vill du välja ett alternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vill du använda den här informationen på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logga in på ett annat sätt"</string>
<string name="snackbar_action" msgid="37373514216505085">"Visa alternativ"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Fortsätt"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Inloggningsalternativ"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Visa fler"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"För <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Låsta lösenordshanterare"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Tryck för att låsa upp"</string>
diff --git a/packages/CredentialManager/res/values-sw/strings.xml b/packages/CredentialManager/res/values-sw/strings.xml
index 065765d..39f7ad9 100644
--- a/packages/CredentialManager/res/values-sw/strings.xml
+++ b/packages/CredentialManager/res/values-sw/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Ungependa kutumia kitambulisho kilichohifadhiwa cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Chagua vitambulisho vilivyohifadhiwa kwa ajili ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ungependa kuteua chaguo la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ungependa kutumia maelezo haya kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ingia katika akaunti kwa kutumia njia nyingine"</string>
<string name="snackbar_action" msgid="37373514216505085">"Angalia chaguo"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Endelea"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Chaguo za kuingia katika akaunti"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Angalia zaidi"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Kwa ajili ya <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Vidhibiti vya manenosiri vilivyofungwa"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Gusa ili ufungue"</string>
diff --git a/packages/CredentialManager/res/values-ta/strings.xml b/packages/CredentialManager/res/values-ta/strings.xml
index 9c99f48..02d2e08 100644
--- a/packages/CredentialManager/res/values-ta/strings.xml
+++ b/packages/CredentialManager/res/values-ta/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட கடவுக்குறியீட்டைப் பயன்படுத்தவா?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட உள்நுழைவுத் தகவலைப் பயன்படுத்தவா?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட உள்நுழைவுத் தகவலைத் தேர்வுசெய்யவும்"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான விருப்பத்தைத் தேர்வுசெய்யவா?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் இந்தத் தகவல்களைப் பயன்படுத்தவா?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"வேறு முறையில் உள்நுழைக"</string>
<string name="snackbar_action" msgid="37373514216505085">"விருப்பங்களைக் காட்டு"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"தொடர்க"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"உள்நுழைவு விருப்பங்கள்"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"மேலும் காட்டு"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g>க்கு"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"பூட்டப்பட்ட கடவுச்சொல் நிர்வாகிகள்"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"அன்லாக் செய்ய தட்டவும்"</string>
diff --git a/packages/CredentialManager/res/values-te/strings.xml b/packages/CredentialManager/res/values-te/strings.xml
index 9a9eafd..75dd429 100644
--- a/packages/CredentialManager/res/values-te/strings.xml
+++ b/packages/CredentialManager/res/values-te/strings.xml
@@ -47,19 +47,18 @@
<string name="other_password_manager" msgid="565790221427004141">"ఇతర పాస్వర్డ్ మేనేజర్లు"</string>
<string name="close_sheet" msgid="1393792015338908262">"షీట్ను మూసివేయండి"</string>
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"మునుపటి పేజీకి తిరిగి వెళ్లండి"</string>
- <string name="accessibility_close_button" msgid="1163435587545377687">"మూసివేస్తుంది"</string>
+ <string name="accessibility_close_button" msgid="1163435587545377687">"మూసివేయండి"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"విస్మరించండి"</string>
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్-కీని ఉపయోగించాలా?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీరు సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఉపయోగించాలా?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం ఏదైనా ఆప్షన్ను ఎంచుకోవాలనుకుంటున్నారా?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ఈ సమాచారాన్ని <xliff:g id="APP_NAME">%1$s</xliff:g>లో ఉపయోగించాలా?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"మరొక పద్ధతిలో సైన్ ఇన్ చేయండి"</string>
<string name="snackbar_action" msgid="37373514216505085">"ఆప్షన్లను చూడండి"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"కొనసాగించండి"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"సైన్ ఇన్ ఆప్షన్లు"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"మరిన్ని చూడండి"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> కోసం"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"లాక్ చేయబడిన పాస్వర్డ్ మేనేజర్లు"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"అన్లాక్ చేయడానికి ట్యాప్ చేయండి"</string>
diff --git a/packages/CredentialManager/res/values-th/strings.xml b/packages/CredentialManager/res/values-th/strings.xml
index 0f6ab5a..b9857ac 100644
--- a/packages/CredentialManager/res/values-th/strings.xml
+++ b/packages/CredentialManager/res/values-th/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ใช้พาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ใช้การลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ใช่ไหม"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"เลือกการลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ต้องการเลือกตัวเลือกสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ใช้ข้อมูลนี้กับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ลงชื่อเข้าใช้ด้วยวิธีอื่น"</string>
<string name="snackbar_action" msgid="37373514216505085">"ดูตัวเลือก"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"ต่อไป"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"ตัวเลือกการลงชื่อเข้าใช้"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"ดูเพิ่มเติม"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"สำหรับ <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"เครื่องมือจัดการรหัสผ่านที่ล็อกไว้"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"แตะเพื่อปลดล็อก"</string>
diff --git a/packages/CredentialManager/res/values-tl/strings.xml b/packages/CredentialManager/res/values-tl/strings.xml
index 269d479..a69cc28 100644
--- a/packages/CredentialManager/res/values-tl/strings.xml
+++ b/packages/CredentialManager/res/values-tl/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gamitin ang iyong naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pumili ng naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pumili ng opsyon para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gamitin ang impormasyong ito sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Mag-sign in sa ibang paraan"</string>
<string name="snackbar_action" msgid="37373514216505085">"Mga opsyon sa view"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Magpatuloy"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Mga opsyon sa pag-sign in"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Tumingin pa"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Para kay <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Mga naka-lock na password manager"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"I-tap para i-unlock"</string>
diff --git a/packages/CredentialManager/res/values-tr/strings.xml b/packages/CredentialManager/res/values-tr/strings.xml
index 857516c..082dc5e 100644
--- a/packages/CredentialManager/res/values-tr/strings.xml
+++ b/packages/CredentialManager/res/values-tr/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı şifre anahtarınız kullanılsın mı?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgileriniz kullanılsın mı?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgilerini kullanın"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bir seçim yapmak ister misiniz?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu bilgiler <xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında kullanılsın mı?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başka bir yöntemle oturum aç"</string>
<string name="snackbar_action" msgid="37373514216505085">"Seçenekleri göster"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Devam"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Oturum açma seçenekleri"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Daha fazla"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> için"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Kilitli şifre yöneticileri"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Kilidi açmak için dokunun"</string>
diff --git a/packages/CredentialManager/res/values-uk/strings.xml b/packages/CredentialManager/res/values-uk/strings.xml
index 6684c43..22d7789 100644
--- a/packages/CredentialManager/res/values-uk/strings.xml
+++ b/packages/CredentialManager/res/values-uk/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Використати збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Використати збережені дані для входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Виберіть збережені дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Вибрати варіант для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Використовувати ці дані в додатку <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увійти іншим способом"</string>
<string name="snackbar_action" msgid="37373514216505085">"Переглянути варіанти"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Продовжити"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Опції входу"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Переглянути більше"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Для користувача <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Заблоковані менеджери паролів"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Торкніться, щоб розблокувати"</string>
diff --git a/packages/CredentialManager/res/values-ur/strings.xml b/packages/CredentialManager/res/values-ur/strings.xml
index 0600a8d..12126ba 100644
--- a/packages/CredentialManager/res/values-ur/strings.xml
+++ b/packages/CredentialManager/res/values-ur/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنے محفوظ کردہ سائن ان کو استعمال کریں؟"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے محفوظ کردہ سائن انز منتخب کریں"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک اختیار منتخب کریں؟"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> پر اس معلومات کا استعمال کریں؟"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"دوسرے طریقے سے سائن ان کریں"</string>
<string name="snackbar_action" msgid="37373514216505085">"اختیارات دیکھیں"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"جاری رکھیں"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"سائن ان کے اختیارات"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"مزید دیکھیں"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> کے لیے"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"مقفل کردہ پاس ورڈ مینیجرز"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"غیر مقفل کرنے کیلئے تھپتھپائیں"</string>
diff --git a/packages/CredentialManager/res/values-uz/strings.xml b/packages/CredentialManager/res/values-uz/strings.xml
index 4a77350..f9ee936 100644
--- a/packages/CredentialManager/res/values-uz/strings.xml
+++ b/packages/CredentialManager/res/values-uz/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalit ishlatilsinmi?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan maʼlumotlar ishlatilsinmi?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> hisob maʼlumotlarini tanlang"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun maʼlumotlar tanlansinmi?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu axborotdan <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun foydalanilsinmi?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Boshqa usul orqali kirish"</string>
<string name="snackbar_action" msgid="37373514216505085">"Variantlarni ochish"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Davom etish"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Kirish parametrlari"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Yana"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> uchun"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Qulfli parol menejerlari"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Qulfni ochish uchun bosing"</string>
diff --git a/packages/CredentialManager/res/values-vi/strings.xml b/packages/CredentialManager/res/values-vi/strings.xml
index da3ce4c..d4acb94 100644
--- a/packages/CredentialManager/res/values-vi/strings.xml
+++ b/packages/CredentialManager/res/values-vi/strings.xml
@@ -8,39 +8,39 @@
<string name="string_learn_more" msgid="4541600451688392447">"Tìm hiểu thêm"</string>
<string name="content_description_show_password" msgid="3283502010388521607">"Hiện mật khẩu"</string>
<string name="content_description_hide_password" msgid="6841375971631767996">"Ẩn mật khẩu"</string>
- <string name="passkey_creation_intro_title" msgid="4251037543787718844">"An toàn hơn nhờ mã xác thực"</string>
+ <string name="passkey_creation_intro_title" msgid="4251037543787718844">"An toàn hơn nhờ khoá đăng nhập"</string>
<string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Mã xác thực giúp bạn tránh được việc phải tạo và ghi nhớ mật khẩu phức tạp"</string>
<string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Mã xác thực là các khoá kỹ thuật số được mã hoá mà bạn tạo bằng cách dùng vân tay, khuôn mặt hoặc phương thức khoá màn hình của mình"</string>
<string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Thông tin này được lưu vào trình quản lý mật khẩu nên bạn có thể đăng nhập trên các thiết bị khác"</string>
- <string name="more_about_passkeys_title" msgid="7797903098728837795">"Xem thêm thông tin về mã xác thực"</string>
+ <string name="more_about_passkeys_title" msgid="7797903098728837795">"Xem thêm thông tin về khoá đăng nhập"</string>
<string name="passwordless_technology_title" msgid="2497513482056606668">"Công nghệ không dùng mật khẩu"</string>
- <string name="passwordless_technology_detail" msgid="6853928846532955882">"Mã xác thực cho phép bạn đăng nhập mà không cần dựa vào mật khẩu. Bạn chỉ cần dùng vân tay, tính năng nhận dạng khuôn mặt, mã PIN hoặc hình mở khoá để xác minh danh tính và tạo mã xác thực."</string>
+ <string name="passwordless_technology_detail" msgid="6853928846532955882">"Khoá đăng nhập cho phép bạn đăng nhập mà không cần dựa vào mật khẩu. Bạn chỉ cần dùng vân tay, tính năng nhận dạng khuôn mặt, mã PIN hoặc hình mở khoá để xác minh danh tính và tạo khoá đăng nhập."</string>
<string name="public_key_cryptography_title" msgid="6751970819265298039">"Mã hoá khoá công khai"</string>
- <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Dựa trên Liên minh FIDO (bao gồm Google, Apple, Microsoft, v.v.) và tiêu chuẩn W3C, mã xác thực sử dụng cặp khoá mã hoá. Khác với tên người dùng và chuỗi ký tự chúng tôi dùng cho mật khẩu, một cặp khoá riêng tư – công khai được tạo cho một ứng dụng hoặc trang web. Khoá riêng tư được lưu trữ an toàn trên thiết bị hoặc trình quản lý mật khẩu và xác nhận danh tính của bạn. Khoá công khai được chia sẻ với máy chủ ứng dụng hoặc trang web. Với khoá tương ứng, bạn có thể đăng ký và đăng nhập tức thì."</string>
+ <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Dựa trên Liên minh FIDO (bao gồm Google, Apple, Microsoft, v.v.) và tiêu chuẩn W3C, khoá đăng nhập sử dụng cặp khoá mã hoá. Khác với tên người dùng và chuỗi ký tự chúng tôi dùng cho mật khẩu, một cặp khoá riêng tư – công khai được tạo cho một ứng dụng hoặc trang web. Khoá riêng tư được lưu trữ an toàn trên thiết bị hoặc trình quản lý mật khẩu và xác nhận danh tính của bạn. Khoá công khai được chia sẻ với máy chủ ứng dụng hoặc trang web. Với khoá tương ứng, bạn có thể đăng ký và đăng nhập tức thì."</string>
<string name="improved_account_security_title" msgid="1069841917893513424">"Cải thiện tính bảo mật của tài khoản"</string>
<string name="improved_account_security_detail" msgid="9123750251551844860">"Mỗi khoá được liên kết riêng với ứng dụng hoặc trang web mà khoá đó được tạo. Vì vậy, bạn sẽ không bao giờ đăng nhập nhầm vào một ứng dụng hoặc trang web lừa đảo. Ngoài ra, với các máy chủ chỉ lưu giữ khoá công khai, việc xâm nhập càng khó hơn nhiều."</string>
<string name="seamless_transition_title" msgid="5335622196351371961">"Chuyển đổi liền mạch"</string>
- <string name="seamless_transition_detail" msgid="4475509237171739843">"Trong quá trình chúng tôi hướng đến tương lai không dùng mật khẩu, bạn vẫn sẽ dùng được mật khẩu cùng với mã xác thực."</string>
+ <string name="seamless_transition_detail" msgid="4475509237171739843">"Trong quá trình chúng tôi hướng đến tương lai không dùng mật khẩu, bạn vẫn sẽ dùng được mật khẩu cùng với khoá đăng nhập."</string>
<string name="choose_provider_title" msgid="8870795677024868108">"Chọn vị trí lưu <xliff:g id="CREATETYPES">%1$s</xliff:g> của bạn"</string>
- <string name="choose_provider_body" msgid="4967074531845147434">"Hãy chọn một trình quản lý mật khẩu để lưu thông tin của bạn và đăng nhập nhanh hơn trong lần tới"</string>
- <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Tạo mã xác thực cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
+ <string name="choose_provider_body" msgid="4967074531845147434">"Hãy chọn một trình quản lý mật khẩu để lưu thông tin của bạn và đăng nhập nhanh hơn vào lần tới"</string>
+ <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Tạo khoá đăng nhập cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="7097275038523578687">"Lưu mật khẩu cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Lưu thông tin đăng nhập cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
- <string name="passkey" msgid="632353688396759522">"mã xác thực"</string>
+ <string name="passkey" msgid="632353688396759522">"khoá đăng nhập"</string>
<string name="password" msgid="6738570945182936667">"mật khẩu"</string>
- <string name="passkeys" msgid="5733880786866559847">"mã xác thực"</string>
+ <string name="passkeys" msgid="5733880786866559847">"khoá đăng nhập"</string>
<string name="passwords" msgid="5419394230391253816">"mật khẩu"</string>
<string name="sign_ins" msgid="4710739369149469208">"thông tin đăng nhập"</string>
<string name="sign_in_info" msgid="2627704710674232328">"thông tin đăng nhập"</string>
<string name="save_credential_to_title" msgid="3172811692275634301">"Lưu <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> vào"</string>
<string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Tạo mã xác thực trên thiết bị khác?"</string>
<string name="use_provider_for_all_title" msgid="4201020195058980757">"Dùng <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> cho mọi thông tin đăng nhập của bạn?"</string>
- <string name="use_provider_for_all_description" msgid="1998772715863958997">"Trình quản lý mật khẩu này cho <xliff:g id="USERNAME">%1$s</xliff:g> sẽ lưu trữ mật khẩu và mã xác thực để bạn dễ dàng đăng nhập"</string>
+ <string name="use_provider_for_all_description" msgid="1998772715863958997">"Trình quản lý mật khẩu này cho <xliff:g id="USERNAME">%1$s</xliff:g> sẽ lưu trữ mật khẩu và khoá đăng nhập để bạn dễ dàng đăng nhập"</string>
<string name="set_as_default" msgid="4415328591568654603">"Đặt làm mặc định"</string>
<string name="use_once" msgid="9027366575315399714">"Dùng một lần"</string>
- <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> mã xác thực"</string>
+ <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> khoá đăng nhập"</string>
<string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu"</string>
- <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> mã xác thực"</string>
+ <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> khoá đăng nhập"</string>
<string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> thông tin xác thực"</string>
<string name="passkey_before_subtitle" msgid="2448119456208647444">"Mã xác thực"</string>
<string name="another_device" msgid="5147276802037801217">"Thiết bị khác"</string>
@@ -49,17 +49,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Quay lại trang trước"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Đóng"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Đóng"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Dùng mã xác thực bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Dùng khoá đăng nhập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Dùng thông tin đăng nhập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Chọn thông tin đăng nhập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chọn một lựa chọn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sử dụng thông tin này trên <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Đăng nhập bằng cách khác"</string>
<string name="snackbar_action" msgid="37373514216505085">"Xem các lựa chọn"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Tiếp tục"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Tuỳ chọn đăng nhập"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Xem thêm"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Cho <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Trình quản lý mật khẩu đã khoá"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Nhấn để mở khoá"</string>
diff --git a/packages/CredentialManager/res/values-zh-rCN/strings.xml b/packages/CredentialManager/res/values-zh-rCN/strings.xml
index b6338dc..a6f2890 100644
--- a/packages/CredentialManager/res/values-zh-rCN/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rCN/strings.xml
@@ -52,14 +52,13 @@
<string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用您已保存的\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"通行密钥吗?"</string>
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"将您已保存的登录信息用于<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"为<xliff:g id="APP_NAME">%1$s</xliff:g>选择已保存的登录信息"</string>
- <!-- no translation found for get_dialog_title_choose_option_for (4976380044745029107) -->
- <skip />
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要为“<xliff:g id="APP_NAME">%1$s</xliff:g>”选择一个选项吗?"</string>
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要将此信息用于“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他登录方式"</string>
<string name="snackbar_action" msgid="37373514216505085">"查看选项"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"继续"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"登录选项"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"查看更多"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"用户:<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"已锁定的密码管理工具"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"点按即可解锁"</string>
diff --git a/packages/CredentialManager/res/values-zh-rHK/strings.xml b/packages/CredentialManager/res/values-zh-rHK/strings.xml
index b4ae8f3..44484a5 100644
--- a/packages/CredentialManager/res/values-zh-rHK/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rHK/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料嗎?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這些資料嗎?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string>
<string name="snackbar_action" msgid="37373514216505085">"查看選項"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"繼續"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"登入選項"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"查看更多"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> 專用"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"已鎖定的密碼管理工具"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"輕按即可解鎖"</string>
diff --git a/packages/CredentialManager/res/values-zh-rTW/strings.xml b/packages/CredentialManager/res/values-zh-rTW/strings.xml
index a79f7cf..758f2a4d 100644
--- a/packages/CredentialManager/res/values-zh-rTW/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rTW/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊嗎?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這項資訊嗎?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string>
<string name="snackbar_action" msgid="37373514216505085">"查看選項"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"繼續"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"登入選項"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"顯示更多"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"<xliff:g id="USERNAME">%1$s</xliff:g> 專用"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"已鎖定的密碼管理工具"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"輕觸即可解鎖"</string>
diff --git a/packages/CredentialManager/res/values-zu/strings.xml b/packages/CredentialManager/res/values-zu/strings.xml
index 2a41982..94bd6c7 100644
--- a/packages/CredentialManager/res/values-zu/strings.xml
+++ b/packages/CredentialManager/res/values-zu/strings.xml
@@ -53,12 +53,12 @@
<string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Sebenzisa ukungena kwakho ngemvume okulondoloziwe <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Khetha ukungena ngemvume okulondoloziwe kwakho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Khetha ongakhetha kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <!-- no translation found for get_dialog_title_use_info_on (8863708099535435146) -->
- <skip />
+ <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sebenzisa lolu lwazi ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ngena ngemvume ngenye indlela"</string>
<string name="snackbar_action" msgid="37373514216505085">"Buka okungakhethwa kukho"</string>
<string name="get_dialog_button_label_continue" msgid="6446201694794283870">"Qhubeka"</string>
<string name="get_dialog_title_sign_in_options" msgid="2092876443114893618">"Okungakhethwa kukho kokungena ngemvume"</string>
+ <string name="button_label_view_more" msgid="3429098227286495651">"Buka okwengeziwe"</string>
<string name="get_dialog_heading_for_username" msgid="3456868514554204776">"Okuka-<xliff:g id="USERNAME">%1$s</xliff:g>"</string>
<string name="get_dialog_heading_locked_password_managers" msgid="8911514851762862180">"Abaphathi bephasiwedi abakhiyiwe"</string>
<string name="locked_credential_entry_label_subtext_tap_to_unlock" msgid="6390367581393605009">"Thepha ukuze uvule"</string>
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
index 7581b5c..8b9c8b9 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
@@ -40,9 +40,7 @@
import com.android.credentialmanager.createflow.CreateCredentialScreen
import com.android.credentialmanager.createflow.hasContentToDisplay
import com.android.credentialmanager.getflow.GetCredentialScreen
-import com.android.credentialmanager.getflow.GetGenericCredentialScreen
import com.android.credentialmanager.getflow.hasContentToDisplay
-import com.android.credentialmanager.getflow.isFallbackScreen
import com.android.credentialmanager.ui.theme.PlatformTheme
@ExperimentalMaterialApi
@@ -161,19 +159,11 @@
providerActivityLauncher = launcher
)
} else if (getCredentialUiState != null && hasContentToDisplay(getCredentialUiState)) {
- if (isFallbackScreen(getCredentialUiState)) {
- GetGenericCredentialScreen(
- viewModel = viewModel,
- getCredentialUiState = getCredentialUiState,
- providerActivityLauncher = launcher
- )
- } else {
- GetCredentialScreen(
- viewModel = viewModel,
- getCredentialUiState = getCredentialUiState,
- providerActivityLauncher = launcher
- )
- }
+ GetCredentialScreen(
+ viewModel = viewModel,
+ getCredentialUiState = getCredentialUiState,
+ providerActivityLauncher = launcher
+ )
} else {
Log.d(Constants.LOG_TAG, "UI wasn't able to render neither get nor create flow")
reportInstantiationErrorAndFinishActivity(credManRepo)
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 4d2bb4c..8b74d76 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
@@ -18,6 +18,7 @@
import android.app.Activity
import android.os.IBinder
+import android.text.TextUtils
import android.util.Log
import androidx.activity.compose.ManagedActivityResultLauncher
import androidx.activity.result.ActivityResult
@@ -67,9 +68,9 @@
var uiMetrics: UIMetrics = UIMetrics()
- init{
+ init {
uiMetrics.logNormal(LifecycleEvent.CREDMAN_ACTIVITY_INIT,
- credManRepo.requestInfo?.appPackageName)
+ credManRepo.requestInfo?.appPackageName)
}
/**************************************************************************/
@@ -100,7 +101,7 @@
if (this.credManRepo.requestInfo?.token != credManRepo.requestInfo?.token) {
this.uiMetrics.resetInstanceId()
this.uiMetrics.logNormal(LifecycleEvent.CREDMAN_ACTIVITY_NEW_REQUEST,
- credManRepo.requestInfo?.appPackageName)
+ credManRepo.requestInfo?.appPackageName)
}
}
@@ -174,7 +175,7 @@
private fun onInternalError() {
Log.w(Constants.LOG_TAG, "UI closed due to illegal internal state")
this.uiMetrics.logNormal(LifecycleEvent.CREDMAN_ACTIVITY_INTERNAL_ERROR,
- credManRepo.requestInfo?.appPackageName)
+ credManRepo.requestInfo?.appPackageName)
credManRepo.onParsingFailureCancel()
uiState = uiState.copy(dialogState = DialogState.COMPLETE)
}
@@ -314,10 +315,11 @@
uiState = uiState.copy(
createCredentialUiState = uiState.createCredentialUiState?.copy(
currentScreenState =
- if (activeEntry.activeProvider.id ==
- userConfigRepo.getDefaultProviderId())
+ if (activeEntry.activeProvider.id == userConfigRepo.getDefaultProviderId() ||
+ !TextUtils.isEmpty(uiState.createCredentialUiState?.requestDisplayInfo
+ ?.appPreferredDefaultProviderId))
CreateScreenState.CREATION_OPTION_SELECTION
- else CreateScreenState.MORE_OPTIONS_ROW_INTRO,
+ else CreateScreenState.DEFAULT_PROVIDER_CONFIRMATION,
activeEntry = activeEntry
)
)
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
index 108f494..57035d4 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
@@ -46,12 +46,11 @@
import com.android.credentialmanager.getflow.CredentialEntryInfo
import com.android.credentialmanager.getflow.ProviderInfo
import com.android.credentialmanager.getflow.RemoteEntryInfo
+import com.android.credentialmanager.getflow.TopBrandingContent
import androidx.credentials.CreateCredentialRequest
import androidx.credentials.CreateCustomCredentialRequest
import androidx.credentials.CreatePasswordRequest
-import androidx.credentials.CredentialOption
import androidx.credentials.CreatePublicKeyCredentialRequest
-import androidx.credentials.GetPublicKeyCredentialOption
import androidx.credentials.PublicKeyCredential.Companion.TYPE_PUBLIC_KEY_CREDENTIAL
import androidx.credentials.provider.Action
import androidx.credentials.provider.AuthenticationAction
@@ -193,20 +192,25 @@
originName: String?,
): com.android.credentialmanager.getflow.RequestDisplayInfo? {
val getCredentialRequest = requestInfo?.getCredentialRequest ?: return null
- val preferImmediatelyAvailableCredentials = getCredentialRequest.credentialOptions.any {
- val credentialOptionJetpack = CredentialOption.createFrom(
- it.type,
- it.credentialRetrievalData,
- it.credentialRetrievalData,
- it.isSystemProviderRequired,
- it.allowedProviders,
+ val preferImmediatelyAvailableCredentials = getCredentialRequest.data.getBoolean(
+ "androidx.credentials.BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS")
+ val preferUiBrandingComponentName =
+ getCredentialRequest.data.getParcelable(
+ "androidx.credentials.BUNDLE_KEY_PREFER_UI_BRANDING_COMPONENT_NAME",
+ ComponentName::class.java
)
- if (credentialOptionJetpack is GetPublicKeyCredentialOption) {
- credentialOptionJetpack.preferImmediatelyAvailableCredentials
- } else {
- false
+ val preferTopBrandingContent: TopBrandingContent? =
+ if (preferUiBrandingComponentName == null) null
+ else {
+ val (displayName, icon) = getServiceLabelAndIcon(
+ context.packageManager, preferUiBrandingComponentName.flattenToString())
+ ?: Pair(null, null)
+ if (displayName != null && icon != null) {
+ TopBrandingContent(icon, displayName)
+ } else {
+ null
+ }
}
- }
return com.android.credentialmanager.getflow.RequestDisplayInfo(
appName = originName
?: getAppLabel(context.packageManager, requestInfo.appPackageName)
@@ -216,6 +220,7 @@
// TODO(b/276777444): replace with direct library constant reference once
// exposed.
"androidx.credentials.BUNDLE_KEY_PREFER_IDENTITY_DOC_UI"),
+ preferTopBrandingContent = preferTopBrandingContent,
)
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
index 96010cc..9d871ed 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
@@ -139,12 +139,12 @@
onRemoteEntrySelected = viewModel::createFlowOnEntrySelected,
onLog = { viewModel.logUiEvent(it) },
)
- CreateScreenState.MORE_OPTIONS_ROW_INTRO -> {
+ CreateScreenState.DEFAULT_PROVIDER_CONFIRMATION -> {
if (createCredentialUiState.activeEntry == null) {
viewModel.onIllegalUiState("Expect active entry to be non-null" +
" upon default provider dialog.")
} else {
- MoreOptionsRowIntroCard(
+ DefaultProviderConfirmationCard(
selectedEntry = createCredentialUiState.activeEntry,
onIllegalScreenState = viewModel::onIllegalUiState,
onChangeDefaultSelected =
@@ -420,7 +420,7 @@
}
@Composable
-fun MoreOptionsRowIntroCard(
+fun DefaultProviderConfirmationCard(
selectedEntry: ActiveEntry,
onIllegalScreenState: (String) -> Unit,
onChangeDefaultSelected: () -> Unit,
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
index 12bb629..225dbf2 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
@@ -126,6 +126,6 @@
PROVIDER_SELECTION,
CREATION_OPTION_SELECTION,
MORE_OPTIONS_SELECTION,
- MORE_OPTIONS_ROW_INTRO,
+ DEFAULT_PROVIDER_CONFIRMATION,
EXTERNAL_ONLY_SELECTION,
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
index 98bd020..74933c9 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
package com.android.credentialmanager.getflow
+import android.graphics.drawable.Drawable
import android.text.TextUtils
import androidx.activity.compose.ManagedActivityResultLauncher
import androidx.activity.result.ActivityResult
@@ -34,7 +35,6 @@
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
@@ -168,26 +168,30 @@
providerDisplayInfo.sortedUserNameToCredentialEntryList
val authenticationEntryList = providerDisplayInfo.authenticationEntryList
SheetContainerCard {
- // When only one provider (not counting the remote-only provider) exists, display that
- // provider's icon + name up top.
- if (providerInfoList.size <= 2) { // It's only possible to be the single provider case
- // if we are started with no more than 2 providers.
- val nonRemoteProviderList = providerInfoList.filter(
- { it.credentialEntryList.isNotEmpty() || it.authenticationEntryList.isNotEmpty() }
- )
- if (nonRemoteProviderList.size == 1) {
- val providerInfo = nonRemoteProviderList.firstOrNull() // First should always work
- // but just to be safe.
+ val preferTopBrandingContent = requestDisplayInfo.preferTopBrandingContent
+ if (preferTopBrandingContent != null) {
+ item {
+ HeadlineProviderIconAndName(
+ preferTopBrandingContent.icon,
+ preferTopBrandingContent.displayName
+ )
+ }
+ } else {
+ // When only one provider (not counting the remote-only provider) exists, display that
+ // provider's icon + name up top.
+ val providersWithActualEntries = providerInfoList.filter {
+ it.credentialEntryList.isNotEmpty() || it.authenticationEntryList.isNotEmpty()
+ }
+ if (providersWithActualEntries.size == 1) {
+ // First should always work but just to be safe.
+ val providerInfo = providersWithActualEntries.firstOrNull()
if (providerInfo != null) {
item {
- HeadlineIcon(
- bitmap = providerInfo.icon.toBitmap().asImageBitmap(),
- tint = Color.Unspecified,
+ HeadlineProviderIconAndName(
+ providerInfo.icon,
+ providerInfo.displayName
)
}
- item { Divider(thickness = 4.dp, color = Color.Transparent) }
- item { LargeLabelTextOnSurfaceVariant(text = providerInfo.displayName) }
- item { Divider(thickness = 16.dp, color = Color.Transparent) }
}
}
}
@@ -196,18 +200,31 @@
authenticationEntryList.isEmpty()) || (sortedUserNameToCredentialEntryList.isEmpty() &&
authenticationEntryList.size == 1)
item {
- HeadlineText(
- text = stringResource(
- if (hasSingleEntry) {
- if (sortedUserNameToCredentialEntryList.firstOrNull()
- ?.sortedCredentialEntryList?.first()?.credentialType
- == CredentialType.PASSKEY
- ) R.string.get_dialog_title_use_passkey_for
- else R.string.get_dialog_title_use_sign_in_for
- } else R.string.get_dialog_title_choose_sign_in_for,
- requestDisplayInfo.appName
- ),
- )
+ if (requestDisplayInfo.preferIdentityDocUi) {
+ HeadlineText(
+ text = stringResource(
+ if (hasSingleEntry) {
+ R.string.get_dialog_title_use_info_on
+ } else {
+ R.string.get_dialog_title_choose_option_for
+ },
+ requestDisplayInfo.appName
+ ),
+ )
+ } else {
+ HeadlineText(
+ text = stringResource(
+ if (hasSingleEntry) {
+ if (sortedUserNameToCredentialEntryList.firstOrNull()
+ ?.sortedCredentialEntryList?.first()?.credentialType
+ == CredentialType.PASSKEY
+ ) R.string.get_dialog_title_use_passkey_for
+ else R.string.get_dialog_title_use_sign_in_for
+ } else R.string.get_dialog_title_choose_sign_in_for,
+ requestDisplayInfo.appName
+ ),
+ )
+ }
}
item { Divider(thickness = 24.dp, color = Color.Transparent) }
item {
@@ -369,8 +386,19 @@
onLog(GetCredentialEvent.CREDMAN_GET_CRED_ALL_SIGN_IN_OPTION_CARD)
}
-// TODO: create separate rows for primary and secondary pages.
-// TODO: reuse rows and columns across types.
+@Composable
+fun HeadlineProviderIconAndName(
+ icon: Drawable,
+ name: String,
+) {
+ HeadlineIcon(
+ bitmap = icon.toBitmap().asImageBitmap(),
+ tint = Color.Unspecified,
+ )
+ Divider(thickness = 4.dp, color = Color.Transparent)
+ LargeLabelTextOnSurfaceVariant(text = name)
+ Divider(thickness = 16.dp, color = Color.Transparent)
+}
@Composable
fun ActionChips(
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetGenericCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetGenericCredentialComponents.kt
deleted file mode 100644
index 57fefbe..0000000
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetGenericCredentialComponents.kt
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.credentialmanager.getflow
-
-import androidx.activity.compose.ManagedActivityResultLauncher
-import androidx.activity.result.ActivityResult
-import androidx.activity.result.IntentSenderRequest
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.material3.Divider
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.asImageBitmap
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
-import androidx.core.graphics.drawable.toBitmap
-import com.android.compose.rememberSystemUiController
-import com.android.credentialmanager.CredentialSelectorViewModel
-import com.android.credentialmanager.R
-import com.android.credentialmanager.common.BaseEntry
-import com.android.credentialmanager.common.ProviderActivityState
-import com.android.credentialmanager.common.ui.ConfirmButton
-import com.android.credentialmanager.common.ui.CredentialContainerCard
-import com.android.credentialmanager.common.ui.CtaButtonRow
-import com.android.credentialmanager.common.ui.HeadlineIcon
-import com.android.credentialmanager.common.ui.HeadlineText
-import com.android.credentialmanager.common.ui.LargeLabelTextOnSurfaceVariant
-import com.android.credentialmanager.common.ui.ModalBottomSheet
-import com.android.credentialmanager.common.ui.SheetContainerCard
-import com.android.credentialmanager.common.ui.setBottomSheetSystemBarsColor
-import com.android.credentialmanager.logging.GetCredentialEvent
-import com.android.internal.logging.UiEventLogger
-
-
-@Composable
-fun GetGenericCredentialScreen(
- viewModel: CredentialSelectorViewModel,
- getCredentialUiState: GetCredentialUiState,
- providerActivityLauncher: ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>
-) {
- val sysUiController = rememberSystemUiController()
- setBottomSheetSystemBarsColor(sysUiController)
- ModalBottomSheet(
- sheetContent = {
- when (viewModel.uiState.providerActivityState) {
- ProviderActivityState.NOT_APPLICABLE -> {
- PrimarySelectionCardGeneric(
- requestDisplayInfo = getCredentialUiState.requestDisplayInfo,
- providerDisplayInfo = getCredentialUiState.providerDisplayInfo,
- providerInfoList = getCredentialUiState.providerInfoList,
- onEntrySelected = viewModel::getFlowOnEntrySelected,
- onConfirm = viewModel::getFlowOnConfirmEntrySelected,
- onLog = { viewModel.logUiEvent(it) },
- )
- viewModel.uiMetrics.log(GetCredentialEvent
- .CREDMAN_GET_CRED_SCREEN_PRIMARY_SELECTION)
- }
- ProviderActivityState.READY_TO_LAUNCH -> {
- // Launch only once per providerActivityState change so that the provider
- // UI will not be accidentally launched twice.
- LaunchedEffect(viewModel.uiState.providerActivityState) {
- viewModel.launchProviderUi(providerActivityLauncher)
- }
- viewModel.uiMetrics.log(GetCredentialEvent
- .CREDMAN_GET_CRED_PROVIDER_ACTIVITY_READY_TO_LAUNCH)
- }
- ProviderActivityState.PENDING -> {
- // Hide our content when the provider activity is active.
- viewModel.uiMetrics.log(GetCredentialEvent
- .CREDMAN_GET_CRED_PROVIDER_ACTIVITY_PENDING)
- }
- }
- },
- onDismiss = viewModel::onUserCancel,
- )
-}
-
-@Composable
-fun PrimarySelectionCardGeneric(
- requestDisplayInfo: RequestDisplayInfo,
- providerDisplayInfo: ProviderDisplayInfo,
- providerInfoList: List<ProviderInfo>,
- onEntrySelected: (BaseEntry) -> Unit,
- onConfirm: () -> Unit,
- onLog: @Composable (UiEventLogger.UiEventEnum) -> Unit,
-) {
- val sortedUserNameToCredentialEntryList =
- providerDisplayInfo.sortedUserNameToCredentialEntryList
- val totalEntriesCount = sortedUserNameToCredentialEntryList
- .flatMap { it.sortedCredentialEntryList }.size
- SheetContainerCard {
- // When only one provider (not counting the remote-only provider) exists, display that
- // provider's icon + name up top.
- if (providerInfoList.size <= 2) { // It's only possible to be the single provider case
- // if we are started with no more than 2 providers.
- val nonRemoteProviderList = providerInfoList.filter(
- { it.credentialEntryList.isNotEmpty() || it.authenticationEntryList.isNotEmpty() }
- )
- if (nonRemoteProviderList.size == 1) {
- val providerInfo = nonRemoteProviderList.firstOrNull() // First should always work
- // but just to be safe.
- if (providerInfo != null) {
- item {
- HeadlineIcon(
- bitmap = providerInfo.icon.toBitmap().asImageBitmap(),
- tint = Color.Unspecified,
- )
- }
- item { Divider(thickness = 4.dp, color = Color.Transparent) }
- item { LargeLabelTextOnSurfaceVariant(text = providerInfo.displayName) }
- item { Divider(thickness = 16.dp, color = Color.Transparent) }
- }
- }
- }
-
- item {
- HeadlineText(
- text = stringResource(
- if (totalEntriesCount == 1) {
- R.string.get_dialog_title_use_info_on
- } else {
- R.string.get_dialog_title_choose_option_for
- },
- requestDisplayInfo.appName
- ),
- )
- }
- item { Divider(thickness = 24.dp, color = Color.Transparent) }
- item {
- CredentialContainerCard {
- Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
- sortedUserNameToCredentialEntryList.forEach {
- // TODO(b/275375861): fallback UI merges entries by account names.
- // Need a strategy to be able to show all entries.
- CredentialEntryRow(
- credentialEntryInfo = it.sortedCredentialEntryList.first(),
- onEntrySelected = onEntrySelected,
- enforceOneLine = true,
- )
- }
- }
- }
- }
- item { Divider(thickness = 24.dp, color = Color.Transparent) }
- item {
- if (totalEntriesCount == 1) {
- CtaButtonRow(
- rightButton = {
- ConfirmButton(
- stringResource(R.string.get_dialog_button_label_continue),
- onClick = onConfirm
- )
- }
- )
- }
- }
- }
- onLog(GetCredentialEvent.CREDMAN_GET_CRED_PRIMARY_SELECTION_CARD)
-}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetModel.kt
index c9c62a4..716f474 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetModel.kt
@@ -41,10 +41,6 @@
!state.requestDisplayInfo.preferImmediatelyAvailableCredentials)
}
-internal fun isFallbackScreen(state: GetCredentialUiState): Boolean {
- return state.requestDisplayInfo.preferIdentityDocUi
-}
-
internal fun findAutoSelectEntry(providerDisplayInfo: ProviderDisplayInfo): CredentialEntryInfo? {
if (providerDisplayInfo.authenticationEntryList.isNotEmpty()) {
return null
@@ -173,6 +169,13 @@
val appName: String,
val preferImmediatelyAvailableCredentials: Boolean,
val preferIdentityDocUi: Boolean,
+ // A top level branding icon + display name preferred by the app.
+ val preferTopBrandingContent: TopBrandingContent?,
+)
+
+data class TopBrandingContent(
+ val icon: Drawable,
+ val displayName: String,
)
/**
diff --git a/packages/PackageInstaller/res/values-af/strings.xml b/packages/PackageInstaller/res/values-af/strings.xml
index 267d634..3545179 100644
--- a/packages/PackageInstaller/res/values-af/strings.xml
+++ b/packages/PackageInstaller/res/values-af/strings.xml
@@ -79,7 +79,7 @@
<string name="uninstall_all_blocked_profile_owner" msgid="2009393666026751501">"Dié program word vir sommige gebruikers of profiele vereis en is vir ander gedeïnstalleer"</string>
<string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"Hierdie program is nodig vir jou profiel en kan nie gedeïnstalleer word nie."</string>
<string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"Jou toesteladministrateur vereis die program; kan nie gedeïnstalleer word nie."</string>
- <string name="manage_device_administrators" msgid="3092696419363842816">"Bestuur toesteladministrasieprogramme"</string>
+ <string name="manage_device_administrators" msgid="3092696419363842816">"Bestuur toesteladministrasie-apps"</string>
<string name="manage_users" msgid="1243995386982560813">"Bestuur gebruikers"</string>
<string name="uninstall_failed_msg" msgid="2176744834786696012">"<xliff:g id="APP_NAME">%1$s</xliff:g> kon nie gedeïnstalleer word nie."</string>
<string name="Parse_error_dlg_text" msgid="1661404001063076789">"Kon nie die pakket ontleed nie."</string>
diff --git a/packages/PackageInstaller/res/values-as/strings.xml b/packages/PackageInstaller/res/values-as/strings.xml
index c37ed70..37f6c13 100644
--- a/packages/PackageInstaller/res/values-as/strings.xml
+++ b/packages/PackageInstaller/res/values-as/strings.xml
@@ -39,7 +39,7 @@
<string name="install_failed_msg" product="default" msgid="6484461562647915707">"আপোনাৰ ফ\'নত <xliff:g id="APP_NAME">%1$s</xliff:g> ইনষ্টল কৰিব পৰা নগ\'ল৷"</string>
<string name="launch" msgid="3952550563999890101">"খোলক"</string>
<string name="unknown_apps_admin_dlg_text" msgid="4456572224020176095">"আপোনাৰ প্ৰশাসকে অজ্ঞাত উৎসৰ পৰা পোৱা এপ্ ইনষ্টল কৰাৰ অনুমতি দিয়া নাই"</string>
- <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"এই ব্যৱহাৰকাৰীয়ে অজ্ঞাত উৎসৰপৰা পোৱা এপসমূহ ইনষ্টল কৰিব নোৱাৰে"</string>
+ <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"এই ব্যৱহাৰকাৰীয়ে অজ্ঞাত উৎসৰপৰা পোৱা এপ্সমূহ ইনষ্টল কৰিব নোৱাৰে"</string>
<string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"এই ব্যৱহাৰকাৰীজনৰ এপ্ ইনষ্টল কৰাৰ অনুমতি নাই"</string>
<string name="ok" msgid="7871959885003339302">"ঠিক আছে"</string>
<string name="update_anyway" msgid="8792432341346261969">"যিকোনো প্ৰকাৰে আপডে’ট কৰক"</string>
@@ -79,7 +79,7 @@
<string name="uninstall_all_blocked_profile_owner" msgid="2009393666026751501">"এই এপ্টো কিছুসংখ্যক ব্যৱহাৰকাৰী বা প্ৰ\'ফাইলৰ বাবে প্ৰয়োজনীয় আৰু বাকীসকলৰ বাবে ইয়াক আনইনষ্টল কৰা হৈছে"</string>
<string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"আপোনাৰ প্ৰ\'ফাইলৰ বাবে এই এপ্টোৰ প্ৰয়োজন আছে গতিকে আনইনষ্টল কৰিব পৰা নাযায়।"</string>
<string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"এই এপ্টো আনইনষ্টল কৰিব পৰা নাযায় কাৰণ আপোনাৰ ডিভাইচৰ প্ৰশাসকে এই এপ্ ৰখাটো বাধ্যতামূলক কৰি ৰাখিছে।"</string>
- <string name="manage_device_administrators" msgid="3092696419363842816">"ডিভাইচৰ প্ৰশাসক এপসমূহ পৰিচালনা কৰক"</string>
+ <string name="manage_device_administrators" msgid="3092696419363842816">"ডিভাইচৰ প্ৰশাসক এপ্সমূহ পৰিচালনা কৰক"</string>
<string name="manage_users" msgid="1243995386982560813">"ব্যৱহাৰকাৰী পৰিচালনা কৰক"</string>
<string name="uninstall_failed_msg" msgid="2176744834786696012">"<xliff:g id="APP_NAME">%1$s</xliff:g> আনইনষ্টল কৰিব নোৱাৰি।"</string>
<string name="Parse_error_dlg_text" msgid="1661404001063076789">"পেকেজটো পাৰ্ছ কৰোঁতে এটা সমস্যাই দেখা দিছিল।"</string>
@@ -97,7 +97,7 @@
<string name="cloned_app_label" msgid="7503612829833756160">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ৰ ক্ল’ন"</string>
<string name="anonymous_source_continue" msgid="4375745439457209366">"অব্যাহত ৰাখক"</string>
<string name="external_sources_settings" msgid="4046964413071713807">"ছেটিং"</string>
- <string name="wear_app_channel" msgid="1960809674709107850">"ৱেৰ এপসমূহ ইনষ্টল/আনইনষ্টল কৰি থকা হৈছে"</string>
+ <string name="wear_app_channel" msgid="1960809674709107850">"ৱেৰ এপ্সমূহ ইনষ্টল/আনইনষ্টল কৰি থকা হৈছে"</string>
<string name="app_installed_notification_channel_description" msgid="2695385797601574123">"এপ্ ইনষ্টল কৰাৰ জাননী"</string>
<string name="notification_installation_success_message" msgid="6450467996056038442">"সফলতাৰে ইনষ্টল কৰা হ’ল"</string>
<string name="notification_installation_success_status" msgid="3172502643504323321">"“<xliff:g id="APPNAME">%1$s</xliff:g>” সফলতাৰে ইনষ্টল কৰা হ’ল"</string>
diff --git a/packages/PackageInstaller/res/values-sk/strings.xml b/packages/PackageInstaller/res/values-sk/strings.xml
index 0afce1b..f6602b1 100644
--- a/packages/PackageInstaller/res/values-sk/strings.xml
+++ b/packages/PackageInstaller/res/values-sk/strings.xml
@@ -91,7 +91,7 @@
<string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"Váš televízor momentálne nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja. Môžete to zmeniť v Nastaveniach."</string>
<string name="untrusted_external_source_warning" product="watch" msgid="7195163388090818636">"Z bezpečnostných dôvodov momentálne nemôžete v hodnikách inštalovať neznáme aplikácie z tohto zdroja. Môžete to zmeniť v Nastaveniach."</string>
<string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"Váš telefón momentálne nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja. Môžete to zmeniť v nastaveniach."</string>
- <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Váš telefón a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie telefónu alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
+ <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Váš telefón a osobné údaje sú zraniteľnejšie voči útoku z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie telefónu alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Váš tablet a osobné dáta sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie tabletu alebo stratu dát, ktoré by mohli nastať pri jej používaní."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Váš televízor a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie televízora alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
<string name="cloned_app_label" msgid="7503612829833756160">"Klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
index b60aba8..e6710ff 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
@@ -83,7 +83,7 @@
}
UserManager customUserManager = UninstallUninstalling.this
- .createContextAsUser(UserHandle.of(user.getIdentifier()), 0)
+ .createContextAsUser(user, 0)
.getSystemService(UserManager.class);
if (customUserManager.isUserOfType(UserManager.USER_TYPE_PROFILE_CLONE)) {
isCloneUser = true;
@@ -117,7 +117,7 @@
int flags = allUsers ? PackageManager.DELETE_ALL_USERS : 0;
flags |= keepData ? PackageManager.DELETE_KEEP_DATA : 0;
- getPackageManager().getPackageInstaller().uninstall(
+ createContextAsUser(user, 0).getPackageManager().getPackageInstaller().uninstall(
new VersionedPackage(mAppInfo.packageName,
PackageManager.VERSION_CODE_HIGHEST),
flags, pendingIntent.getIntentSender());
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
old mode 100755
new mode 100644
index 7250bdd..9c67817
--- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallerActivity.java
@@ -367,10 +367,10 @@
int flags = mDialogInfo.allUsers ? PackageManager.DELETE_ALL_USERS : 0;
flags |= keepData ? PackageManager.DELETE_KEEP_DATA : 0;
- getPackageManager().getPackageInstaller().uninstall(
- new VersionedPackage(mDialogInfo.appInfo.packageName,
- PackageManager.VERSION_CODE_HIGHEST),
- flags, pendingIntent.getIntentSender());
+ createContextAsUser(mDialogInfo.user, 0).getPackageManager().getPackageInstaller()
+ .uninstall(new VersionedPackage(mDialogInfo.appInfo.packageName,
+ PackageManager.VERSION_CODE_HIGHEST), flags,
+ pendingIntent.getIntentSender());
} catch (Exception e) {
notificationManager.cancel(uninstallId);
diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml
index dd29700..a29f320ca 100644
--- a/packages/PrintSpooler/res/values-or/strings.xml
+++ b/packages/PrintSpooler/res/values-or/strings.xml
@@ -65,7 +65,7 @@
<string name="notification_channel_failure" msgid="9042250774797916414">"ବିଫଳ ହୋଇଥିବା ପ୍ରିଣ୍ଟ ଜବ୍"</string>
<string name="could_not_create_file" msgid="3425025039427448443">"ଫାଇଲ୍ ତିଆରି କରିହେଲା ନାହିଁ"</string>
<string name="print_services_disabled_toast" msgid="9089060734685174685">"କିଛି ପ୍ରିଣ୍ଟ ସର୍ଭିସ୍କୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
- <string name="print_searching_for_printers" msgid="6550424555079932867">"ପ୍ରିଣ୍ଟରକୁ ସନ୍ଧାନ କରାଯାଉଛି"</string>
+ <string name="print_searching_for_printers" msgid="6550424555079932867">"ପ୍ରିଣ୍ଟରକୁ ସର୍ଚ୍ଚ କରାଯାଉଛି"</string>
<string name="print_no_print_services" msgid="8561247706423327966">"କୌଣସି ପ୍ରିଣ୍ଟ ସେବା ସକ୍ଷମ କରାଯାଇନାହିଁ"</string>
<string name="print_no_printers" msgid="4869403323900054866">"କୌଣସି ପ୍ରିଣ୍ଟର୍ ମିଳିଲା ନାହିଁ"</string>
<string name="cannot_add_printer" msgid="7840348733668023106">"ପ୍ରିଣ୍ଟର ଯୋଡ଼ିହେବ ନାହିଁ"</string>
diff --git a/packages/SettingsLib/AppPreference/res/values-af/strings.xml b/packages/SettingsLib/AppPreference/res/values-af/strings.xml
new file mode 100644
index 0000000..442059c
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Kitsprogram"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-am/strings.xml b/packages/SettingsLib/AppPreference/res/values-am/strings.xml
new file mode 100644
index 0000000..f5786b3
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-am/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"በቅጽበት መተግበሪያ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ar/strings.xml b/packages/SettingsLib/AppPreference/res/values-ar/strings.xml
new file mode 100644
index 0000000..024c0a6
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ar/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"تطبيق فوري"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-as/strings.xml b/packages/SettingsLib/AppPreference/res/values-as/strings.xml
new file mode 100644
index 0000000..a7a666e
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"তাৎক্ষণিক এপ্"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-az/strings.xml b/packages/SettingsLib/AppPreference/res/values-az/strings.xml
new file mode 100644
index 0000000..8af282b
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Ani tətbiq"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/AppPreference/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..009cf22
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant aplikacija"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-be/strings.xml b/packages/SettingsLib/AppPreference/res/values-be/strings.xml
new file mode 100644
index 0000000..39babed
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Імгненная праграма"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-bg/strings.xml b/packages/SettingsLib/AppPreference/res/values-bg/strings.xml
new file mode 100644
index 0000000..6df6483
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Мигновено приложение"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-bn/strings.xml b/packages/SettingsLib/AppPreference/res/values-bn/strings.xml
new file mode 100644
index 0000000..be1785e
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ইনস্ট্যান্ট অ্যাপ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-bs/strings.xml b/packages/SettingsLib/AppPreference/res/values-bs/strings.xml
new file mode 100644
index 0000000..009cf22
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant aplikacija"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ca/strings.xml b/packages/SettingsLib/AppPreference/res/values-ca/strings.xml
new file mode 100644
index 0000000..68b17cd
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplicació instantània"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-cs/strings.xml b/packages/SettingsLib/AppPreference/res/values-cs/strings.xml
new file mode 100644
index 0000000..a423b22
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-cs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Okamžitá aplikace"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-da/strings.xml b/packages/SettingsLib/AppPreference/res/values-da/strings.xml
new file mode 100644
index 0000000..c648449
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant-app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-el/strings.xml b/packages/SettingsLib/AppPreference/res/values-el/strings.xml
new file mode 100644
index 0000000..ad834b1
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant Εφαρμογή"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-en-rAU/strings.xml b/packages/SettingsLib/AppPreference/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..595fea3
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-en-rAU/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-en-rGB/strings.xml b/packages/SettingsLib/AppPreference/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..595fea3
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-en-rIN/strings.xml b/packages/SettingsLib/AppPreference/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..595fea3
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-es-rUS/strings.xml b/packages/SettingsLib/AppPreference/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..0d95fd9
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"App instantánea"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-es/strings.xml b/packages/SettingsLib/AppPreference/res/values-es/strings.xml
new file mode 100644
index 0000000..97fc538
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplicación instantánea"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-et/strings.xml b/packages/SettingsLib/AppPreference/res/values-et/strings.xml
new file mode 100644
index 0000000..73fd742
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Installimata avatav rakendus"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-eu/strings.xml b/packages/SettingsLib/AppPreference/res/values-eu/strings.xml
new file mode 100644
index 0000000..e35e113
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-eu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Zuzeneko aplikazioa"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-fa/strings.xml b/packages/SettingsLib/AppPreference/res/values-fa/strings.xml
new file mode 100644
index 0000000..d525e85
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-fa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"برنامه فوری"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-fi/strings.xml b/packages/SettingsLib/AppPreference/res/values-fi/strings.xml
new file mode 100644
index 0000000..b3d564d
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Pikasovellus"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-fr-rCA/strings.xml b/packages/SettingsLib/AppPreference/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..7be1e97
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-fr-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Application instantanée"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-fr/strings.xml b/packages/SettingsLib/AppPreference/res/values-fr/strings.xml
new file mode 100644
index 0000000..4771382
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Appli instantanée"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-gl/strings.xml b/packages/SettingsLib/AppPreference/res/values-gl/strings.xml
new file mode 100644
index 0000000..97fc538
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplicación instantánea"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-gu/strings.xml b/packages/SettingsLib/AppPreference/res/values-gu/strings.xml
new file mode 100644
index 0000000..b58791c
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ઝટપટ ઍપ્લિકેશન"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-hi/strings.xml b/packages/SettingsLib/AppPreference/res/values-hi/strings.xml
new file mode 100644
index 0000000..8e890108
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"इंस्टैंट ऐप्लिकेशन"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-hr/strings.xml b/packages/SettingsLib/AppPreference/res/values-hr/strings.xml
new file mode 100644
index 0000000..009cf22
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant aplikacija"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-hu/strings.xml b/packages/SettingsLib/AppPreference/res/values-hu/strings.xml
new file mode 100644
index 0000000..0aa7154
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Azonnali alkalmazás"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-hy/strings.xml b/packages/SettingsLib/AppPreference/res/values-hy/strings.xml
new file mode 100644
index 0000000..4ed6de553
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-hy/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Ակնթարթային հավելված"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-in/strings.xml b/packages/SettingsLib/AppPreference/res/values-in/strings.xml
new file mode 100644
index 0000000..ccb16e7
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplikasi instan"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-is/strings.xml b/packages/SettingsLib/AppPreference/res/values-is/strings.xml
new file mode 100644
index 0000000..0bdbbbc
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-is/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Skyndiforrit"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-it/strings.xml b/packages/SettingsLib/AppPreference/res/values-it/strings.xml
new file mode 100644
index 0000000..5d200c4
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"App istantanea"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-iw/strings.xml b/packages/SettingsLib/AppPreference/res/values-iw/strings.xml
new file mode 100644
index 0000000..9048f51
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"אפליקציה ללא התקנה"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ja/strings.xml b/packages/SettingsLib/AppPreference/res/values-ja/strings.xml
new file mode 100644
index 0000000..d48a9fa
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant App"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ka/strings.xml b/packages/SettingsLib/AppPreference/res/values-ka/strings.xml
new file mode 100644
index 0000000..bf94b4b
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"მყისიერი აპი"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-kk/strings.xml b/packages/SettingsLib/AppPreference/res/values-kk/strings.xml
new file mode 100644
index 0000000..78ffbfe
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-kk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Лездік қолданба"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-km/strings.xml b/packages/SettingsLib/AppPreference/res/values-km/strings.xml
new file mode 100644
index 0000000..b60696d
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"កម្មវិធីប្រើភ្លាមៗ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-kn/strings.xml b/packages/SettingsLib/AppPreference/res/values-kn/strings.xml
new file mode 100644
index 0000000..f1224e4
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ತತ್ಕ್ಷಣ ಆ್ಯಪ್"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ko/strings.xml b/packages/SettingsLib/AppPreference/res/values-ko/strings.xml
new file mode 100644
index 0000000..0b592d7
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"인스턴트 앱"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ky/strings.xml b/packages/SettingsLib/AppPreference/res/values-ky/strings.xml
new file mode 100644
index 0000000..9a5bf8f
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ky/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Ыкчам ачылуучу колдонмо"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-lo/strings.xml b/packages/SettingsLib/AppPreference/res/values-lo/strings.xml
new file mode 100644
index 0000000..8d4c2fa
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ອິນສະແຕນແອັບ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-lt/strings.xml b/packages/SettingsLib/AppPreference/res/values-lt/strings.xml
new file mode 100644
index 0000000..b7702ab
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-lt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Akimirksniu įkeliama programėlė"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-lv/strings.xml b/packages/SettingsLib/AppPreference/res/values-lv/strings.xml
new file mode 100644
index 0000000..5716188
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-lv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Tūlītējā lietotne"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-mk/strings.xml b/packages/SettingsLib/AppPreference/res/values-mk/strings.xml
new file mode 100644
index 0000000..9dacef2
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Инстант апликација"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ml/strings.xml b/packages/SettingsLib/AppPreference/res/values-ml/strings.xml
new file mode 100644
index 0000000..e3b258e
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ഇൻസ്റ്റന്റ് ആപ്പ്"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-mn/strings.xml b/packages/SettingsLib/AppPreference/res/values-mn/strings.xml
new file mode 100644
index 0000000..b545ed6
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Шуурхай апп"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-mr/strings.xml b/packages/SettingsLib/AppPreference/res/values-mr/strings.xml
new file mode 100644
index 0000000..027b050
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"इंस्टंट अॅप"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ms/strings.xml b/packages/SettingsLib/AppPreference/res/values-ms/strings.xml
new file mode 100644
index 0000000..65742a0
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Apl segera"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-my/strings.xml b/packages/SettingsLib/AppPreference/res/values-my/strings.xml
new file mode 100644
index 0000000..2933fd7
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-my/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"အသင့်သုံးအက်ပ်"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-nb/strings.xml b/packages/SettingsLib/AppPreference/res/values-nb/strings.xml
new file mode 100644
index 0000000..c648449
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant-app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ne/strings.xml b/packages/SettingsLib/AppPreference/res/values-ne/strings.xml
new file mode 100644
index 0000000..9152882
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"इन्स्टेन्ट एप"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-nl/strings.xml b/packages/SettingsLib/AppPreference/res/values-nl/strings.xml
new file mode 100644
index 0000000..c648449
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant-app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-or/strings.xml b/packages/SettingsLib/AppPreference/res/values-or/strings.xml
new file mode 100644
index 0000000..a64fa89
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ଇନଷ୍ଟାଣ୍ଟ ଆପ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-pa/strings.xml b/packages/SettingsLib/AppPreference/res/values-pa/strings.xml
new file mode 100644
index 0000000..9d5b655
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ਤਤਕਾਲ ਐਪ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-pl/strings.xml b/packages/SettingsLib/AppPreference/res/values-pl/strings.xml
new file mode 100644
index 0000000..a4b4046
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplikacja błyskawiczna"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-pt-rBR/strings.xml b/packages/SettingsLib/AppPreference/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..6b0e049
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-pt-rBR/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"App instantâneo"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-pt-rPT/strings.xml b/packages/SettingsLib/AppPreference/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..8fb9473
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"App instantânea"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-pt/strings.xml b/packages/SettingsLib/AppPreference/res/values-pt/strings.xml
new file mode 100644
index 0000000..6b0e049
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"App instantâneo"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ro/strings.xml b/packages/SettingsLib/AppPreference/res/values-ro/strings.xml
new file mode 100644
index 0000000..820b45c5
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplicație instantanee"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ru/strings.xml b/packages/SettingsLib/AppPreference/res/values-ru/strings.xml
new file mode 100644
index 0000000..64fbfa2
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ru/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Приложение с мгновенным запуском"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-si/strings.xml b/packages/SettingsLib/AppPreference/res/values-si/strings.xml
new file mode 100644
index 0000000..3307b4e
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ක්ෂණික යෙදුම"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sk/strings.xml b/packages/SettingsLib/AppPreference/res/values-sk/strings.xml
new file mode 100644
index 0000000..fc00b9f
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Okamžitá aplikácia"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sl/strings.xml b/packages/SettingsLib/AppPreference/res/values-sl/strings.xml
new file mode 100644
index 0000000..4c4fddd
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Nenamestljiva aplikacija"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sq/strings.xml b/packages/SettingsLib/AppPreference/res/values-sq/strings.xml
new file mode 100644
index 0000000..d6e9dd1
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Aplikacioni i çastit"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sr/strings.xml b/packages/SettingsLib/AppPreference/res/values-sr/strings.xml
new file mode 100644
index 0000000..9dacef2
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Инстант апликација"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sv/strings.xml b/packages/SettingsLib/AppPreference/res/values-sv/strings.xml
new file mode 100644
index 0000000..5ef5d7f
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Snabbapp"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-sw/strings.xml b/packages/SettingsLib/AppPreference/res/values-sw/strings.xml
new file mode 100644
index 0000000..2f045b0
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Programu inayofunguka papo hapo"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ta/strings.xml b/packages/SettingsLib/AppPreference/res/values-ta/strings.xml
new file mode 100644
index 0000000..4760a07
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"இன்ஸ்டண்ட் ஆப்ஸ்"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-te/strings.xml b/packages/SettingsLib/AppPreference/res/values-te/strings.xml
new file mode 100644
index 0000000..2f93c2a
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"ఇన్స్టంట్ యాప్"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-th/strings.xml b/packages/SettingsLib/AppPreference/res/values-th/strings.xml
new file mode 100644
index 0000000..d48a9fa
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant App"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-tl/strings.xml b/packages/SettingsLib/AppPreference/res/values-tl/strings.xml
new file mode 100644
index 0000000..595fea3
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-tl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Instant app"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-tr/strings.xml b/packages/SettingsLib/AppPreference/res/values-tr/strings.xml
new file mode 100644
index 0000000..d90ce9c
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Hazır uygulama"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-uk/strings.xml b/packages/SettingsLib/AppPreference/res/values-uk/strings.xml
new file mode 100644
index 0000000..eff0e78
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Додаток із миттєвим запуском"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-ur/strings.xml b/packages/SettingsLib/AppPreference/res/values-ur/strings.xml
new file mode 100644
index 0000000..f62fe62
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"فوری ایپ"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-uz/strings.xml b/packages/SettingsLib/AppPreference/res/values-uz/strings.xml
new file mode 100644
index 0000000..b9ac330
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Darhol ochiladigan ilova"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-vi/strings.xml b/packages/SettingsLib/AppPreference/res/values-vi/strings.xml
new file mode 100644
index 0000000..d23dad7
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Ứng dụng tức thì"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-zh-rCN/strings.xml b/packages/SettingsLib/AppPreference/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..0a00c52
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-zh-rCN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"免安装应用"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-zh-rHK/strings.xml b/packages/SettingsLib/AppPreference/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..da93bfc
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"免安裝應用程式"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-zh-rTW/strings.xml b/packages/SettingsLib/AppPreference/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..da93bfc
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"免安裝應用程式"</string>
+</resources>
diff --git a/packages/SettingsLib/AppPreference/res/values-zu/strings.xml b/packages/SettingsLib/AppPreference/res/values-zu/strings.xml
new file mode 100644
index 0000000..d73467c
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="install_type_instant" msgid="7217305006127216917">"Ama-app asheshayo"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-af/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-af/strings.xml
new file mode 100644
index 0000000..8055736
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-af/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Persoonlik"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Werk"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml
new file mode 100644
index 0000000..4de6c61
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"የግል"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ስራ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ar/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ar/strings.xml
new file mode 100644
index 0000000..cae1f00
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ar/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"شخصي"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"للعمل"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-as/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-as/strings.xml
new file mode 100644
index 0000000..9ac55bbe
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-as/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ব্যক্তিগত"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"কৰ্মস্থান"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-az/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-az/strings.xml
new file mode 100644
index 0000000..5e9d3fb
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-az/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Şəxsi"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"İş"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..7f9cf21
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Lično"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Posao"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-be/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-be/strings.xml
new file mode 100644
index 0000000..b7774de
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-be/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Асабістыя"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Працоўныя"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-bg/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-bg/strings.xml
new file mode 100644
index 0000000..f1ca6b2
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-bg/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Лични"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Служебни"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-bn/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-bn/strings.xml
new file mode 100644
index 0000000..385a901
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-bn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ব্যক্তিগত"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"অফিস"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-bs/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-bs/strings.xml
new file mode 100644
index 0000000..19390c2
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-bs/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Lično"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Poslovno"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ca/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ca/strings.xml
new file mode 100644
index 0000000..0190b91
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ca/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Feina"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-cs/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-cs/strings.xml
new file mode 100644
index 0000000..d5f920a
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-cs/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Osobní"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Prácovní"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-da/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-da/strings.xml
new file mode 100644
index 0000000..9d41b9c
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-da/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personlig"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Arbejde"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-el/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-el/strings.xml
new file mode 100644
index 0000000..0832eab
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-el/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Προσωπικά"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Εργασία"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-en-rAU/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..478e603
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-en-rAU/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Work"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-en-rGB/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..478e603
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-en-rGB/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Work"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-en-rIN/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..478e603
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-en-rIN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Work"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-es-rUS/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..b73026a
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-es-rUS/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Trabajo"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-es/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-es/strings.xml
new file mode 100644
index 0000000..b73026a
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-es/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Trabajo"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-et/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-et/strings.xml
new file mode 100644
index 0000000..e8fc44b
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-et/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Isiklik"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Töö"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-eu/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-eu/strings.xml
new file mode 100644
index 0000000..c22f4da
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-eu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Pertsonala"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Lanekoa"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-fa/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-fa/strings.xml
new file mode 100644
index 0000000..6eaf057
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-fa/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"شخصی"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"محل کار"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-fi/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-fi/strings.xml
new file mode 100644
index 0000000..8d0b9bf
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-fi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Henkilökohtainen"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Työ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-fr-rCA/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..43e4a59
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-fr-rCA/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personnel"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Professionnel"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-fr/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-fr/strings.xml
new file mode 100644
index 0000000..43e4a59
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-fr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personnel"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Professionnel"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-gl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-gl/strings.xml
new file mode 100644
index 0000000..364f15c
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-gl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Persoal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Traballo"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-gu/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-gu/strings.xml
new file mode 100644
index 0000000..4aba6db
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-gu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"વ્યક્તિગત"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ઑફિસ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml
new file mode 100644
index 0000000..a930032
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"निजी"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ऑफ़िस"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-hr/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-hr/strings.xml
new file mode 100644
index 0000000..cb434a8
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-hr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Osobno"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Posao"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-hu/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-hu/strings.xml
new file mode 100644
index 0000000..0127717
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-hu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Személyes"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Munkahelyi"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-hy/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-hy/strings.xml
new file mode 100644
index 0000000..353a6d3
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-hy/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Անձնական"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Աշխատանքային"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-in/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-in/strings.xml
new file mode 100644
index 0000000..173d56f
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-in/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Pribadi"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Kerja"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-is/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-is/strings.xml
new file mode 100644
index 0000000..cc3bdd5
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-is/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Persónulegt"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Vinna"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-it/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-it/strings.xml
new file mode 100644
index 0000000..1d1e70e
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-it/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personale"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Lavoro"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-iw/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-iw/strings.xml
new file mode 100644
index 0000000..4245145
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-iw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"פרופיל אישי"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"פרופיל עבודה"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ja/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ja/strings.xml
new file mode 100644
index 0000000..f52d803
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ja/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"個人用"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"仕事用"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ka/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ka/strings.xml
new file mode 100644
index 0000000..e93adff
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ka/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"პირადი"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"სამსახური"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-kk/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-kk/strings.xml
new file mode 100644
index 0000000..94eab4d
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-kk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Жеке"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Жұмыс істейтін"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-km/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-km/strings.xml
new file mode 100644
index 0000000..40fe4ff
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-km/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ផ្ទាល់ខ្លួន"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ការងារ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-kn/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-kn/strings.xml
new file mode 100644
index 0000000..41b70e8
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-kn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ವೈಯಕ್ತಿಕ"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ಕೆಲಸ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ko/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ko/strings.xml
new file mode 100644
index 0000000..3577efc
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ko/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"개인"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"업무"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ky/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ky/strings.xml
new file mode 100644
index 0000000..a65965c
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ky/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Жеке"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Жумуш"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-lo/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-lo/strings.xml
new file mode 100644
index 0000000..1e47347
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-lo/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ສ່ວນຕົວ"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ບ່ອນເຮັດວຽກ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-lt/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-lt/strings.xml
new file mode 100644
index 0000000..3ea9004
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-lt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Asmeninė"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Darbo"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-lv/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-lv/strings.xml
new file mode 100644
index 0000000..528deeb
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-lv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personīgais"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Darba"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-mk/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-mk/strings.xml
new file mode 100644
index 0000000..773b3f1
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-mk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Лични"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Работа"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ml/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ml/strings.xml
new file mode 100644
index 0000000..6ae94cc
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ml/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"വ്യക്തിപരം"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ഔദ്യോഗികം"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-mn/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-mn/strings.xml
new file mode 100644
index 0000000..e2361b7
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-mn/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Хувийн"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Ажил"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-mr/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-mr/strings.xml
new file mode 100644
index 0000000..0a48d0f
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-mr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"वैयक्तिक"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ऑफिस"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ms/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ms/strings.xml
new file mode 100644
index 0000000..607a290
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ms/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Peribadi"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Kerja"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-my/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-my/strings.xml
new file mode 100644
index 0000000..a6f8d23
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-my/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ကိုယ်ရေးကိုယ်တာ"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"အလုပ်"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-nb/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-nb/strings.xml
new file mode 100644
index 0000000..0a6ff7d
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-nb/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personlig"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Jobb"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ne/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ne/strings.xml
new file mode 100644
index 0000000..7c0d9e6
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ne/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"व्यक्तिगत"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"कामसम्बन्धी"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-nl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-nl/strings.xml
new file mode 100644
index 0000000..932057f
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-nl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Persoonlijk"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Werk"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-or/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-or/strings.xml
new file mode 100644
index 0000000..eea4177
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-or/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ବ୍ୟକ୍ତିଗତ"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ୱାର୍କ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-pa/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-pa/strings.xml
new file mode 100644
index 0000000..48d915e
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-pa/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ਨਿੱਜੀ"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ਕਾਰਜ"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-pl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-pl/strings.xml
new file mode 100644
index 0000000..8300df8
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-pl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Osobiste"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Służbowe"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-pt-rBR/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..6e98dc9
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-pt-rBR/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Pessoal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Trabalho"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-pt-rPT/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..a89bb04
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-pt-rPT/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Pessoal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Profissional"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-pt/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-pt/strings.xml
new file mode 100644
index 0000000..6e98dc9
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-pt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Pessoal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Trabalho"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ro/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ro/strings.xml
new file mode 100644
index 0000000..317b4e3
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ro/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Serviciu"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ru/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ru/strings.xml
new file mode 100644
index 0000000..165fda1
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ru/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Личный профиль"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Рабочий профиль"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-si/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-si/strings.xml
new file mode 100644
index 0000000..746e6e7
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-si/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"පුද්ගලික"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"කාර්ය"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sk/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sk/strings.xml
new file mode 100644
index 0000000..5e882b5
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Osobné"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Pracovné"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml
new file mode 100644
index 0000000..83ef291
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Osebno"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Služba"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sq/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sq/strings.xml
new file mode 100644
index 0000000..84ce281
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sq/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personale"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Puna"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sr/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sr/strings.xml
new file mode 100644
index 0000000..70b4793
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Лично"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Посао"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sv/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sv/strings.xml
new file mode 100644
index 0000000..8d1c657
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Privat"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Arbete"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sw/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sw/strings.xml
new file mode 100644
index 0000000..63d150c
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-sw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Binafsi"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Kazini"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ta/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ta/strings.xml
new file mode 100644
index 0000000..ab360a9
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ta/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"தனிப்பட்டவை"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"பணி"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml
new file mode 100644
index 0000000..75ee30f
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"వ్యక్తిగతం"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"ఆఫీస్"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-th/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-th/strings.xml
new file mode 100644
index 0000000..f35e8fc
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-th/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ส่วนตัว"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"งาน"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-tl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-tl/strings.xml
new file mode 100644
index 0000000..92b6f16
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-tl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Personal"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Trabaho"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-tr/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-tr/strings.xml
new file mode 100644
index 0000000..680ebfe
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-tr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Kişisel"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"İş"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-uk/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-uk/strings.xml
new file mode 100644
index 0000000..953e72c
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-uk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Особисті"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Робочі"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-ur/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-ur/strings.xml
new file mode 100644
index 0000000..336a7e0
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-ur/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"ذاتی"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"کام"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-uz/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-uz/strings.xml
new file mode 100644
index 0000000..5c1e4c0
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-uz/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Shaxsiy"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Ish"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-vi/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-vi/strings.xml
new file mode 100644
index 0000000..7e04838
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-vi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Cá nhân"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Công việc"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-zh-rCN/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..d5a1c03
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-zh-rCN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"个人"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"工作"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-zh-rHK/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..ec247c9
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-zh-rHK/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"個人"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"工作"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-zh-rTW/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..ec247c9
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-zh-rTW/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"個人"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"工作"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-zu/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-zu/strings.xml
new file mode 100644
index 0000000..c53aba8
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-zu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="settingslib_category_personal" msgid="1142302328104700620">"Okomuntu siqu"</string>
+ <string name="settingslib_category_work" msgid="4867750733682444676">"Umsebenzi"</string>
+</resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index f44b301..707768e 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tyd."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tyd."</string>
<string name="cancel" msgid="5665114069455378395">"Kanselleer"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Klaar"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wekkers en onthounotas"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Voeg nuwe gebruiker by?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Jy kan hierdie toestel met ander mense deel deur bykomende gebruikers te skep. Elke gebruiker het sy eie spasie wat hulle kan pasmaak met programme, muurpapier en so meer. Gebruikers kan ook toestelinstellings wat almal raak, soos Wi-Fi, aanpas.\n\nWanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul eie spasie opstel.\n\nEnige gebruiker kan programme vir alle ander gebruikers opdateer. Toeganklikheidinstellings en -dienste sal dalk nie na die nuwe gebruiker oorgedra word nie."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Wanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul spasie opstel.\n\nEnige gebruiker kan programme vir al die ander gebruikers opdateer."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Gee gebruiker adminvoorregte?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As ’n admin sal hulle ander gebruikers kan bestuur, toestelinstellings kan wysig, en ’n fabriekterugstelling van die toestel kan doen."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Moet die gebruiker nou opgestel word?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Maak seker die persoon is beskikbaar om die toestel te vat en hul spasie op te stel"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Stel profiel nou op?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Dit sal ’n nuwe gastesessie begin en alle programme en data van die huidige sessie uitvee"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Verlaat gasmodus?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Dit sal programme en data in die huidige gastesessie uitvee"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Gee hierdie gebruiker adminvoorregte"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Moenie vir gebruiker adminvoorregte gee nie"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Gaan uit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Stoor gasaktiwiteit?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Jy kan aktiwiteit in die huidige sessie stoor of alle programme en data uitvee"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 492e294..986208f 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ተጨማሪ ጊዜ።"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ያነሰ ጊዜ።"</string>
<string name="cancel" msgid="5665114069455378395">"ይቅር"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"እሺ"</string>
<string name="done" msgid="381184316122520313">"ተከናውኗል"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ማንቂያዎች እና አስታዋሾች"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"አዲስ ተጠቃሚ ይታከል?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ተጨማሪ ተጠቃሚዎችን በመፍጠር ይህን መሣሪያ ለሌሎች ሰዎች ማጋራት ይችላሉ። እያንዳንዱ ተጠቃሚ በራሱ መተግበሪያዎች፣ ልጣፍ እና በመሳሰሉ ነገሮች ሊያበጀው የሚችል የራሱ ቦታ አለው። ተጠቃሚዎችም እንዲሁ እንደ Wi‑Fi ያሉ በሁሉም ሰው ላይ ተጽዕኖ ሊኖራቸው የሚችሉ የመሣሪያ ቅንብሮችን ማስተካከል ይችላሉ። \n\nእርስዎ አንድ አዲስ ተጠቃሚ ሲያክሉ ያ ሰው የራሱ ቦታ ማዘጋጀት አለበት።\n\nማንኛውም ተጠቃሚ መተግበሪያዎችን ለሌሎች ተጠቃሚዎች ሁሉ ሊያዘምኑ ይችላሉ።"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"እርስዎ አንድ አዲስ ተጠቃሚ ሲያክሉ ያ ሰው የራሱ ቦታ ማዘጋጀት አለበት።\n\nማንኛውም ተጠቃሚ መተግበሪያዎችን ለሌሎች ተጠቃሚዎች ሁሉ ሊያዘምን ይችላል።"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ለዚህ ተጠቃሚ የአስተዳዳሪ መብቶች ይሰጣቸው?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"እንደ አስተዳዳሪ ሌሎች ተጠቃሚዎችን ማስተዳደር፣ የመሣሪያ ቅንብሮችን ማሻሻል እና መሣሪያውን የፋብሪካ ዳግም ማስጀመር ይችላሉ።"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ተጠቃሚ አሁን ይዋቀር?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ግለሰቡ መሣሪያውን ወስደው ቦታቸውን ለማዋቀር እንደሚገኙ ያረጋግጡ"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"መገለጫ አሁን ይዋቀር?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ይህ አዲስ የእንግዳ ክፍለ-ጊዜ ይጀምራል እና ሁሉንም መተግበሪያዎች እና ውሂብ አሁን ካለው ክፍለ-ጊዜ ይሰርዛል"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ከእንግዳ ሁኔታ ይውጣ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ይህ አሁን ካለው የእንግዳ ክፍለ-ጊዜ መተግበሪያዎችን እና ውሂብን ይሰርዛል"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ለዚህ ተጠቃሚ የአስተዳዳሪ መብቶችን ይስጡ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ለዚህ ተጠቃሚ የአስተዳዳሪ መብቶችን አይስጡ"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ውጣ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"የእንግዳ እንቅስቃሴ ይቀመጥ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"እንቅስቃሴን አሁን ካለው ክፍለ-ጊዜ ማስቀመጥ ወይም ሁሉንም መተግበሪያዎች እና ውሂብ መሰረዝ ይችላሉ"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index c3408cf..ae4b89d 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"وقت أكثر."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"وقت أقل."</string>
<string name="cancel" msgid="5665114069455378395">"إلغاء"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"حسنًا"</string>
<string name="done" msgid="381184316122520313">"تم"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"المنبّهات والتذكيرات"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"هل تريد إضافة مستخدم جديد؟"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"يمكنك مشاركة هذا الجهاز مع أشخاص آخرين من خلال إنشاء حسابات لمستخدمين إضافيين. وسيحصل كل مستخدم على مساحته الخاصة التي يمكنه تخصيصها بتطبيقاته وخلفياته التي يريدها وغير ذلك. ويمكن أيضًا للمستخدمين ضبط إعدادات الجهاز مثل Wi-Fi والتي تؤثر في جميع المستخدمين.\n\nعند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nيمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين. وقد لا يتم نقل إعدادات وخدمات \"سهولة الاستخدام\" إلى المستخدم الجديد."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"عند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nويمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"أتريد منح هذا المستخدم امتيازات مشرف؟"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"بصفته مشرفًا، سيتمكن من إدارة المستخدمين الآخرين وتعديل إعدادات الجهاز وإعادة ضبط الجهاز على الإعدادات الأصلية."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"هل تريد إعداد المستخدم الآن؟"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"يُرجى التأكّد من أن الشخص يمكنه استخدام الجهاز الآن وإعداد مساحته."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"هل ترغب في إعداد ملف شخصي الآن؟"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ستؤدي إعادة الضبط إلى بدء جلسة ضيف جديدة وحذف جميع التطبيقات والبيانات من الجلسة الحالية."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"هل تريد الخروج من وضع الضيف؟"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"سيؤدي الخروج من وضع الضيف إلى حذف التطبيقات والبيانات من جلسة الضيف الحالية."</string>
- <string name="grant_admin" msgid="4273077214151417783">"منح هذا المستخدم امتيازات المشرف"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"عدم منح هذا المستخدم امتيازات المشرف"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"خروج"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"هل تريد حفظ النشاط في وضع الضيف؟"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"يمكنك حفظ نشاط من الجلسة الحالية أو حذف كلّ التطبيقات والبيانات."</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index ef1f3bf..93813e2 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -86,7 +86,7 @@
<string name="bluetooth_disconnecting" msgid="7638892134401574338">"সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…"</string>
<string name="bluetooth_connecting" msgid="5871702668260192755">"সংযোগ কৰি থকা হৈছে…"</string>
<string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> সংযোগ কৰা হ’ল"</string>
- <string name="bluetooth_pairing" msgid="4269046942588193600">"যোৰা লগোৱা হৈছে…"</string>
+ <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_headset_no_a2dp" msgid="2893204819854215433">"সংযোগ কৰা হ’ল (কোনো ফ\'ন বা মিডিয়া নাই)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -386,7 +386,7 @@
<string name="transition_animation_scale_title" msgid="1278477690695439337">"ট্ৰাঞ্জিশ্বন এনিমেশ্বন স্কেল"</string>
<string name="animator_duration_scale_title" msgid="7082913931326085176">"এনিমেটৰ কালদৈৰ্ঘ্য স্কেল"</string>
<string name="overlay_display_devices_title" msgid="5411894622334469607">"গৌণ প্ৰদৰ্শনৰ নকল বনাওক"</string>
- <string name="debug_applications_category" msgid="5394089406638954196">"এপসমূহ"</string>
+ <string name="debug_applications_category" msgid="5394089406638954196">"এপ্সমূহ"</string>
<string name="immediately_destroy_activities" msgid="1826287490705167403">"কাৰ্যকলাপসমূহ নাৰাখিব"</string>
<string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"ব্যৱহাৰকাৰী ওলোৱাৰ লগে লগে সকলো কাৰ্যকলাপ মচক"</string>
<string name="app_process_limit_title" msgid="8361367869453043007">"নেপথ্যত চলা প্ৰক্ৰিয়াৰ সীমা"</string>
@@ -418,7 +418,7 @@
<item msgid="4548987861791236754">"চকুৱে দেখা পোৱা ধৰণৰ প্ৰাকৃতিক ৰং"</item>
<item msgid="1282170165150762976">"ডিজিটেল সমলৰ বাবে ৰং অপ্টিমাইজ কৰা হৈছে"</item>
</string-array>
- <string name="inactive_apps_title" msgid="5372523625297212320">"ষ্টেণ্ডবাইত থকা এপসমূহ"</string>
+ <string name="inactive_apps_title" msgid="5372523625297212320">"ষ্টেণ্ডবাইত থকা এপ্সমূহ"</string>
<string name="inactive_app_inactive_summary" msgid="3161222402614236260">"নিষ্ক্ৰিয়। ট\'গল কৰিবলৈ টিপক।"</string>
<string name="inactive_app_active_summary" msgid="8047630990208722344">"সক্ৰিয়। ট\'গল কৰিবলৈ টিপক।"</string>
<string name="standby_bucket_summary" msgid="5128193447550429600">"এপ্ ষ্টেণ্ডবাই অৱস্থাত আছে:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"অধিক সময়।"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"কম সময়।"</string>
<string name="cancel" msgid="5665114069455378395">"বাতিল কৰক"</string>
+ <string name="next" msgid="2699398661093607009">"পৰৱৰ্তী"</string>
+ <string name="back" msgid="5554327870352703710">"উভতি যাওক"</string>
+ <string name="save" msgid="3745809743277153149">"ছেভ কৰক"</string>
<string name="okay" msgid="949938843324579502">"ঠিক"</string>
<string name="done" msgid="381184316122520313">"হ’ল"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"এলাৰ্ম আৰু ৰিমাইণ্ডাৰ"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"নতুন ব্যৱহাৰকাৰী যোগ কৰিবনে?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"আপুনি অতিৰিক্ত ব্যৱহাৰকাৰীক যোগ কৰি এই ডিভাইচটো অন্য় ব্য়ক্তিৰ সৈতে শ্বেয়াৰ কৰিব পাৰে। প্ৰতিজন ব্যৱহাৰকাৰীৰ বাবে নিজাকৈ ঠাই আছে যাক তেওঁলোকে এপ্, ৱালপেপাৰ আৰু অন্য়ান্য় বস্তুৰ বাবে নিজৰ উপযোগিতা অনুযায়ী ব্যৱহাৰ কৰিব পাৰে। ব্যৱহাৰকাৰীসকলে সকলোকে প্ৰভাৱান্বিত কৰা ৱাই-ফাইৰ নিচিনা ডিভাইচৰ ছেটিং সাল-সলনি কৰিবও পাৰে।\n\nআপুনি যেতিয়া কোনো নতুন ব্যৱহাৰকাৰীক যোগ কৰে সেই ব্য়ক্তিজনে নিজেই নিজৰ বাবে ঠাই ছেট আপ কৰিব লাগিব।\n\nসকলো ব্যৱহাৰকাৰীয়ে অন্য় ব্যৱহাৰকাৰীৰ বাবে এপ্সমূহ আপডে’ট কৰিব পাৰে। সাধ্য় সুবিধাসমূহৰ ছেটিং আৰু সেৱাসমূহ নতুন ব্যৱহাৰকাৰীলৈ স্থানান্তৰ নহ\'বও পাৰে।"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"আপুনি যেতিয়া এজন নতুন ব্যৱহাৰকাৰী যোগ কৰে, তেওঁ নিজৰ ঠাই ছেট আপ কৰাৰ প্ৰয়োজন।\n\nযিকোনো ব্যৱহাৰকাৰীয়ে অন্য সকলো ব্যৱহাৰকাৰীৰ বাবে এপ্ আপডে\'ট কৰিব পাৰে।"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"এই ব্যৱহাৰকাৰীগৰাকীক প্ৰশাসকৰ বিশেষাধিকাৰ প্ৰদান কৰিবনে?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"এগৰাকী প্ৰশাসক হিচাপে, তেওঁ অন্য ব্যৱহাৰকাৰীক পৰিচালনা কৰিব, ডিভাইচৰ ছেটিং সংশোধন কৰিব আৰু ডিভাইচটো ফেক্টৰী ৰিছেট কৰিব পাৰিব।"</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"এই ব্যৱহাৰকাৰীগৰাকীক এগৰাকী প্ৰশাসক বনাবনে?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"প্ৰশাসকৰ ওচৰত কিছুমান বিশেষাধিকাৰ আছে, যিবোৰ অন্য ব্যৱহাৰকাৰীৰ নাই। এগৰাকী প্ৰশাসকে সকলো ব্যৱহাৰকাৰীক পৰিচালনা কৰিব, এই ডিভাইচটো আপডে’ট অথবা ৰিছেট কৰিব, ছেটিং সংশোধন কৰিব, ইনষ্টল কৰি থোৱা আটাইবোৰ এপ্ চাব আৰু অন্য লোকৰ বাবে প্ৰশাসকৰ বিশেষাধিকাৰ প্ৰদান কৰিব অথবা প্ৰত্যাহাৰ কৰিব পাৰে।"</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"প্ৰশাসকৰ বনাওক"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ব্যৱহাৰকাৰী এতিয়া ছেট আপ কৰিবনে?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ডিভাইচটো লৈ নিজৰ ঠাই ছেটআপ কৰিবলৈ নতুন ব্যৱহাৰকাৰী উপলব্ধ থকাটো নিশ্চিত কৰক"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"এতিয়া প্ৰ\'ফাইল ছেট আপ কৰিবনে?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"এইটোৱে এটা অতিথিৰ ছেশ্বন আৰম্ভ কৰিব আৰু বৰ্তমানৰ ছেশ্বনটোৰ পৰা আটাইবোৰ এপ্ আৰু ডেটা মচিব"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"অতিথি ম’ডৰ পৰা বাহিৰ হ’বনে?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"এইটোৱে বৰ্তমানৰ অতিথিৰ ছেশ্বনটোৰ পৰা এপ্ আৰু ডেটা মচিব"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ব্যৱহাৰকাৰীগৰাকীক প্ৰশাসকৰ বিশেষাধিকাৰ দিয়ক"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ব্যৱহাৰকাৰীক প্ৰশাসকৰ বিশেষাধিকাৰ প্ৰদান নকৰিব"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"হয়, তেওঁক এগৰাকী প্ৰশাসক বনাওক"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"নহয়, তেওঁক এগৰাকী প্ৰশাসক নবনাব"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"বাহিৰ হওক"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"অতিথিৰ কাৰ্যকলাপ ছেভ কৰিবনে?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"আপুনি বৰ্তমানৰ ছেশ্বনটোৰ পৰা কাৰ্যকলাপ ছেভ কৰিব পাৰে অথবা আটাইবোৰ এপ্ আৰু ডেটা মচিব পাৰে"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index cb476e2..9d441c9 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha çox vaxt."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha az vaxt."</string>
<string name="cancel" msgid="5665114069455378395">"Ləğv edin"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Ok"</string>
<string name="done" msgid="381184316122520313">"Hazırdır"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Siqnallar və xatırladıcılar"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Yeni istifadəçi əlavə edilsin?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Əlavə istifadəçilər yaratmaqla bu cihazı digərləri ilə paylaşa bilərsiniz. Hər bir istifadəçinin tətbiq, divar kağızı və daha çoxu ilə fərdiləşdirə biləcəyi fərdi məkanları olacaq. İstifadəçilər hər kəsə təsir edən Wi‑Fi kimi cihaz ayarlarını da tənzimləyə biləcək.\n\nYeni istifadəçi əlavə etdiyiniz zaman həmin istifadəçi öz məkanını ayarlamalıdır.\n\nİstənilən istifadəçi tətbiqləri digər bütün istifadəçilər üçün güncəlləyə bilər. Əlçatımlılıq ayarları və xidmətlər yeni istifadəçiyə transfer edilməyə bilər."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Yeni istifadəçi əlavə etdiyiniz zaman həmin şəxs öz yerini quraşdırmalıdır.\n\nİstənilən istifadəçi bütün digər istifadəçilərdən olan tətbiqləri güncəlləşdirə bilər."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Bu istifadəçiyə admin imtiyazları verilsin?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Admin olaraq o, digər istifadəçiləri idarə edə, cihaz ayarlarını dəyişdirə və cihazı zavod ayarlarına sıfırlaya biləcək."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"İstifadəçi indi ayarlansın?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Şəxsin cihazı götürə bilməsinə və yerini quraşdıra bilməsinə əmin olun"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil indi quraşdırılsın?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Bu, yeni qonaq sessiyası başladacaq və cari sessiyadan bütün tətbiqləri və datanı siləcək"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Qonaq rejimindən çıxılsın?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Bununla cari qonaq sessiyasındakı bütün tətbiqlər və data silinəcək"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Bu istifadəçiyə admin imtiyazları verin"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"İstifadəçiyə admin imtiyazları verməyin"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Çıxın"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Qonaq fəaliyyəti saxlansın?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Cari sessiyadakı fəaliyyəti saxlaya və ya bütün tətbiq və datanı silə bilərsiniz"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index c87f8aa..62025e4 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Više vremena."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string>
<string name="cancel" msgid="5665114069455378395">"Otkaži"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Potvrdi"</string>
<string name="done" msgid="381184316122520313">"Gotovo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi i podsetnici"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Dodajete novog korisnika?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Ovaj uređaj možete da delite sa drugim ljudima ako napravite još korisnika. Svaki korisnik ima sopstveni prostor, koji može da prilagođava pomoću aplikacija, pozadine i slično. Korisnici mogu da prilagođavaju i podešavanja uređaja koja utiču na svakoga, poput Wi‑Fi-ja.\n\nKada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike. Podešavanja i usluge pristupačnosti ne mogu da se prenose na novog korisnika."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dajete privilegije administratora?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Kao administrator, moći će da upravlja drugim korisnicima, menja podešavanja uređaja i resetuje uređaj na fabrička podešavanja."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Podešavate korisnika?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Ta osoba treba da uzme uređaj i podesi svoj prostor"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Želite li da odmah podesite profil?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Time ćete pokrenuti novu sesiju gosta i izbrisati sve aplikacije i podatke iz aktuelne sesije"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Izlazite iz režima gosta?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Time ćete izbrisati sve aplikacije i podatke iz aktuelne sesije gosta"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Daj ovom korisniku administratorske privilegije"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ne daj korisniku administratorske privilegije"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Izađi"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Sačuvaćete aktivnosti gosta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Sačuvajte aktivnosti iz aktuelne sesije ili izbrišite sve aplikacije i podatke"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tastatura"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Odaberite raspored tastature"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Podrazumevano"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Uključite ekran"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Uključivanje ekrana"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Dozvoli uključivanje ekrana"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Dozvoljava aplikaciji da uključi ekran. Ako se omogući, aplikacija može da uključi ekran u bilo kom trenutku bez vaše eksplicitne namere."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Želite da zaustavite emitovanje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 3e9bbb0..4a81fab 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Скасаваць"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Спалучэнне дае доступ да вашых кантактаў і гісторыі выклікаў пры падключэнні."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Не атрымалася падключыцца да прылады <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Не атрымалася спалучыцца з прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, таму што PIN-код або пароль няправiльныя."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Не спалучана з прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g> з-за няправільнага PIN-кода або ключа доступу."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Не магу размаўляць з прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Злучэнне адхілена прыладай <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Камп\'ютар"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Больш часу."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менш часу."</string>
<string name="cancel" msgid="5665114069455378395">"Скасаваць"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ОК"</string>
<string name="done" msgid="381184316122520313">"Гатова"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будзільнікі і напаміны"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Дадаць новага карыстальніка?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Вы можаце адкрыць доступ да гэтай прылады іншым людзям шляхам стварэння дадатковых карыстальнікаў. Кожны карыстальнік мае свой уласны раздзел, на якім ён можа наладзіць свае праграмы, шпалеры і іншае. Карыстальнікі таксама могуць наладжваць параметры прылады, напрыклад Wi-Fi, якія ўплываюць на ўсіх.\n\nКалі вы дадаяце новага карыстальніка, ён павінен наладзіць свой раздзел.\n\nЛюбы карыстальнік можа абнаўляць праграмы для ўсіх астатніх карыстальнікаў. Спецыяльныя магчымасці наладжваюцца асабіста кожным карыстальнікам."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Пасля стварэння профіля яго трэба наладзіць.\n\nЛюбы карыстальнік прылады можа абнаўляць праграмы ўсіх іншых карыстальнікаў."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Даць гэтаму карыстальніку правы адміністратара?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Адміністратар можа кіраваць іншымі карыстальнікамі, змяняць налады прылады і скідваць налады прылады да заводскіх значэнняў."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Наладзіць профіль?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Пераканайцеся, што чалавек мае магчымасць узяць прыладу і наладзіць свой раздзел"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Наладзiць профiль?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Будзе запушчаны новы гасцявы сеанс. Усе праграмы і даныя бягучага сеанса будуць выдалены"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Выйсці з гасцявога рэжыму?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Будуць выдалены праграмы і даныя бягучага гасцявога сеанса"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Даць гэтаму карыстальніку правы адміністратара"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Не даваць карыстальніку правы адміністратара"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Выйсці"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Захаваць дзеянні госця?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Можна захаваць даныя пра дзеянні ў бягучым сеансе ці выдаліць праграмы і даныя"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 9f425a88..b6b76c5 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -47,7 +47,7 @@
<string name="wifi_security_sae" msgid="3644520541721422843">"WPA3-Personal"</string>
<string name="wifi_security_psk_sae" msgid="8135104122179904684">"WPA2/WPA3-Personal"</string>
<string name="wifi_security_none_owe" msgid="5241745828327404101">"Няма/Enhanced Open"</string>
- <string name="wifi_security_owe" msgid="3343421403561657809">"Стандарт за сигурност Enhanced Open"</string>
+ <string name="wifi_security_owe" msgid="3343421403561657809">"Enhanced Open"</string>
<string name="wifi_security_eap_suiteb" msgid="415842785991698142">"WPA3-Enterprise, 192-битова защита"</string>
<string name="wifi_remembered" msgid="3266709779723179188">"Запазено"</string>
<string name="wifi_disconnected" msgid="7054450256284661757">"Няма връзка"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повече време."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"По-малко време."</string>
<string name="cancel" msgid="5665114069455378395">"Отказ"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ОK"</string>
<string name="done" msgid="381184316122520313">"Готово"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будилници и напомняния"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Добавяне на нов потребител?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Можете да споделите това устройство с други хора, като създадете допълнителни потребители. Всеки от тях има собствено работно пространство, което може да персонализира с приложения, тапет и др. Потребителите могат също да коригират настройки на устройството, които засягат всички – например за Wi‑Fi.\n\nКогато добавите нов потребител, той трябва да настрои работното си пространство.\n\nВсеки потребител може да актуализира приложенията за всички останали потребители. Настройките и услугите за достъпност може да не се прехвърлят за новия потребител."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Когато добавите нов потребител, той трябва да настрои работното си пространство.\n\nВсеки потребител може да актуализира приложенията за всички останали потребители."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Да се дадат ли админ. права?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Като администратор този потребител ще може да управлява други потребители, да променя настройките на устройството и да възстановява фабричните му настройки."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Настройване на потребителя?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Уверете се, че човекът има възможност да вземе устройството и да настрои работното си пространство."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Ще настроите ли потребителския профил сега?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Така ще стартирате нова сесия като гост и ще изтриете всички приложения и данни от текущата сесия"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Изход от режима на гост?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Така ще изтриете приложенията и данните от текущата сесия като гост"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Предоставяне на администраторски права на този потребител"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Без предоставяне на администраторски права на потребителя"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Изход"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Запазване на активността като гост?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Можете да запазите активността от сесията или да изтриете всички прил. и данни"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 1a353d7..a4ff171 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"আরও বেশি।"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"আরও কম।"</string>
<string name="cancel" msgid="5665114069455378395">"বাতিল"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ঠিক আছে"</string>
<string name="done" msgid="381184316122520313">"হয়ে গেছে"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"অ্যালার্ম এবং রিমাইন্ডার"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"নতুন ব্যবহারকারী জুড়বেন?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"আপনি একাধিক ব্যবহারকারীর আইডি তৈরি করে অন্যদের সাথে এই ডিভাইসটি শেয়ার করতে পারেন। ডিভাইসের স্টোরেজে প্রত্যেক ব্যবহারকারী তার নিজস্ব জায়গা পাবেন যা তিনি অ্যাপ, ওয়ালপেপার এবং আরও অনেক কিছু দিয়ে কাস্টমাইজ করতে পারেন। ওয়াই-ফাই এর মতো ডিভাইস সেটিংস, যেগুলি সকলের ক্ষেত্রে প্রযোজ্য হয়, সেগুলি ব্যবহারকারীরা পরিবর্তন করতে পারবেন।\n\nনতুন ব্যবহারকারীর আইডি যোগ করলে সেই ব্যক্তিকে স্টোরেজে তার নিজের জায়গা সেট-আপ করতে হবে।\n\nঅন্যান্য ব্যবহারকারীদের হয়ে যে কোনও ব্যবহারকারী অ্যাপ আপডেট করতে পারবেন। তবে ব্যবহারযোগ্যতার সেটিংস এবং পরিষেবা নতুন ব্যবহারকারীর ক্ষেত্রে প্রযোজ্য নাও হতে পারে।"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"আপনি একজন নতুন ব্যবহারকারী যোগ করলে তাকে তার জায়গা সেট-আপ করে নিতে হবে৷\n\nযেকোনও ব্যবহারকারী অন্য সব ব্যবহারকারীর জন্য অ্যাপ আপডেট করতে পারবেন৷"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"এই ব্যবহারকারীকে অ্যাডমিন সম্পর্কিত ক্ষমতা দেবেন?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"অ্যাডমিন হিসেবে তারা অন্য ব্যবহারকারীদের ম্যানেজ করতে, ডিভাইস সেটিংস পরিবর্তন এবং ফ্যাক্টরি রিসেট করতে পারবেন।"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"এখন ব্যবহারকারী সেট-আপ করবেন?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"নিশ্চিত করুন, যে ব্যক্তিটি ডিভাইসটি নেওয়ার জন্য এবং তার জায়গা সেট-আপ করার জন্য উপলব্ধ আছেন"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"এখনই প্রোফাইল সেট-আপ করবেন?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"এটি নতুন অতিথি সেশন চালু করবে এবং বর্তমান সেশন থেকে সব অ্যাপ ও ডেটা মুছে দেবে"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"\'অতিথি মোড\' ছেড়ে বেরিয়ে আসবেন?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"এটি বর্তমান অতিথি সেশন থেকে অ্যাপ ও ডেটা মুছে দেবে"</string>
- <string name="grant_admin" msgid="4273077214151417783">"এই ব্যবহারকারীকে অ্যাডমিন সম্পর্কিত ক্ষমতা দিন"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"এই ব্যবহারকারীকে অ্যাডমিন সম্পর্কিত ক্ষমতা দেবেন না"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"বেরিয়ে আসুন"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"অতিথি মোডের অ্যাক্টিভিটি সেভ করবেন?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"আপনি বর্তমান সেশন থেকে অ্যাক্টিভিটি সেভ করতে বা সব অ্যাপ ও ডেটা মুছতে পারবেন"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 8139dc3..a2b41c5 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Više vremena."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string>
<string name="cancel" msgid="5665114069455378395">"Otkaži"</string>
+ <string name="next" msgid="2699398661093607009">"Naprijed"</string>
+ <string name="back" msgid="5554327870352703710">"Nazad"</string>
+ <string name="save" msgid="3745809743277153149">"Sačuvaj"</string>
<string name="okay" msgid="949938843324579502">"Uredu"</string>
<string name="done" msgid="381184316122520313">"Gotovo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi i podsjetnici"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Dodati novog korisnika?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Ovaj uređaj možete dijeliti s drugima ako napravite dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću aplikacija, pozadinske slike i slično. Korisnici također mogu prilagoditi postavke uređaja koje utiču na sve ostale korisnike, kao što je WiFi.\n\nKada dodate novog korisnika, ta osoba treba postaviti svoj prostor.\n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kada dodate novog korisnika, ta osoba treba postaviti svoj prostor. \n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dati privilegije administratora?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Kao administrator će moći upravljati drugim korisnicima, promijeniti postavke uređaja i vratiti uređaj na fabričke postavke."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Postaviti korisnika kao administratora?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratori imaju posebna prava koja drugi korisnici nemaju. Administrator može upravljati svim korisnicima, ažurirati ili vratiti ovaj uređaj na zadano, izmijeniti postavke, vidjeti sve instalirane aplikacije i dodijeliti ili povući administratorska prava za druge."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Postavi kao administratora"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Postaviti korisnika sada?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Provjerite može li osoba uzeti uređaj i postaviti svoj prostor"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Postaviti profil sada?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Ovim ćete pokrenuti novu sesiju gosta i izbrisati sve aplikacije i podatke iz trenutne sesije"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Napustiti način rada za gosta?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ovim ćete izbrisati aplikacije i podatke iz trenutne sesije gosta"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dajte korisniku privilegije administratora"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nemojte dati korisniku privilegije administratora"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Da, postavi korisnika kao administratora"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Ne, nemoj postaviti korisnika kao administratora"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Napusti"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Sačuvati aktivnost gosta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Možete sačuvati aktivnost iz ove sesije ili izbrisati sve aplikacije i podatke"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 36a7c30..f8f742b 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -107,7 +107,7 @@
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferència de fitxers"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositiu d\'entrada"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"Accés a Internet"</string>
- <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartició de contactes i trucades"</string>
+ <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartició de contactes i historial de trucades"</string>
<string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Utilitza per compartir contactes i l\'historial de trucades"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartició de connexió d\'Internet"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"Missatges de text"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Més temps"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menys temps"</string>
<string name="cancel" msgid="5665114069455378395">"Cancel·la"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"D\'acord"</string>
<string name="done" msgid="381184316122520313">"Fet"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes i recordatoris"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Vols afegir un usuari nou?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Pots compartir aquest dispositiu amb altres persones creant usuaris addicionals. Cada usuari té el seu propi espai, que pot personalitzar amb aplicacions i fons de pantalla, entre d\'altres. Els usuaris també poden ajustar opcions de configuració del dispositiu, com ara la Wi-Fi, que afecten els altres usuaris.\n\nQuan afegeixis un usuari nou, haurà de configurar el seu espai.\n\nTots els usuaris poden actualitzar les aplicacions de la resta. És possible que la configuració i els serveis d\'accessibilitat no es transfereixin a l\'usuari nou."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Quan s\'afegeix un usuari nou, aquesta persona ha de configurar el seu espai.\n\nQualsevol usuari pot actualitzar les aplicacions dels altres usuaris."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Vols donar privilegis d\'admin. a l\'usuari?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Com a administrador podrà gestionar altres usuaris, modificar la configuració del dispositiu i restablir les dades de fàbrica."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Vols configurar l\'usuari ara?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Assegura\'t que la persona estigui disponible per accedir al dispositiu i configurar el seu espai."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vols configurar el perfil ara?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Aquesta acció iniciarà una nova sessió de convidat i suprimirà totes les aplicacions i dades de la sessió actual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sortir del mode de convidat?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Aquesta acció suprimirà les aplicacions i dades de la sessió de convidat actual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dona privilegis d\'administrador a aquest usuari"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"No donis privilegis d\'administrador a l\'usuari"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Surt"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Desar l\'activitat de convidat?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Pots desar l\'activitat de la sessió actual o suprimir totes les apps i dades"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index b695dfc..9813ffc 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Delší doba"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kratší doba"</string>
<string name="cancel" msgid="5665114069455378395">"Zrušit"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Hotovo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Budíky a připomenutí"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Přidat nového uživatele?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Vytvořením dalších uživatelů můžete toto zařízení sdílet s jinými lidmi. Každý uživatel má svůj prostor, který si může přizpůsobit instalací aplikací, přidáním tapety apod. Uživatelé také mohou upravit nastavení zařízení (např. Wi-Fi), která ovlivní všechny uživatele.\n\nKaždý nově přidaný uživatel si musí nastavit vlastní prostor.\n\nKaždý uživatel může aktualizovat aplikace všech ostatních uživatelů."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Když přidáte nového uživatele, musí si nastavit vlastní prostor.\n\nJakýkoli uživatel může aktualizovat aplikace všech ostatních uživatelů."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Udělit tomuto uživateli administrátorská práva?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Jako administrátor bude moci spravovat ostatní uživatele, upravovat nastavení zařízení a resetovat zařízení do továrního nastavení."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Nastavit uživatele?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Ujistěte se, že je uživatel k dispozici a může si v zařízení nastavit svůj prostor"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Nastavit profil?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Tímto zahájíte novou relaci hosta a smažete všechny aplikace a data z aktuální relace"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Ukončit režim hosta?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Tímto smažete aplikace a data z aktuální relace hosta"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Udělit tomuto uživateli administrátorská práva"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Neudělovat uživateli administrátorská práva"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Ukončit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Uložit aktivitu hosta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Aktivitu z aktuální relace můžete uložit, nebo všechny aplikace a data smazat"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fyzická klávesnice"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Zvolte rozložení klávesnice"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Výchozí"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Zapínat obrazovku"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Zapínání obrazovky"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Povolit zapínání obrazovky"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Povolte aplikaci zapínat obrazovku. Pokud aplikace bude mít toto oprávnění, může kdykoli zapnout obrazovku bez explicitního intentu."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Zastavit vysílání v aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index d61ee26..33131c8 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mere tid."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string>
<string name="cancel" msgid="5665114069455378395">"Annuller"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Udfør"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmer og påmindelser"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Vil du tilføje en ny bruger?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dele denne enhed med andre ved at oprette ekstra brugere. Hver bruger har sit personlige område, som kan tilpasses med apps, baggrund osv. Brugerne kan også justere enhedsindstillinger, som for eksempel Wi-Fi, som påvirker alle.\n\nNår du tilføjer en ny bruger, skal vedkommende konfigurere sit område.\n\nAlle brugere kan opdatere apps for alle andre brugere. Indstillinger og tjenester for hjælpefunktioner overføres muligvis ikke til den nye bruger."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Når du tilføjer en ny bruger, skal personen konfigurere sit rum.\n\nAlle brugere kan opdatere apps for alle de andre brugere."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Giv bruger admin.rettigheder?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Når brugeren er administrator, kan vedkommende administrere andre brugere, ændre enhedsindstillingerne og gendanne fabriksindstillingerne på enheden."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Vil du konfigurere brugeren nu?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Sørg for, at brugeren har mulighed for at tage enheden og konfigurere sit eget rum"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vil du oprette en profil nu?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Denne handling starter en ny gæstesession og sletter alle apps og data fra den aktuelle session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Vil du afslutte gæstetilstanden?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Denne handling sletter apps og data fra den aktuelle gæstesession."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Giv denne bruger administratorrettigheder"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Giv ikke brugeren administratorrettigheder"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Luk"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vil du gemme gæsteaktiviteten?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Du kan gemme aktivitet fra den aktuelle session eller slette alle apps og data"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 2cc048b..c32baec 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mehr Zeit."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Weniger Zeit."</string>
<string name="cancel" msgid="5665114069455378395">"Abbrechen"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Fertig"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wecker und Erinnerungen"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Neuen Nutzer hinzufügen?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Du kannst dieses Gerät zusammen mit anderen nutzen, indem du weitere Nutzer erstellst. Jeder erhält einen eigenen Bereich, in dem er Apps, den Hintergrund usw. personalisieren kann. Außerdem lassen sich Geräteeinstellungen wie WLAN ändern, die sich auf alle Nutzer auswirken.\n\nWenn du einen neuen Nutzer hinzufügst, muss dieser seinen Bereich einrichten.\n\nJeder Nutzer kann Apps für alle anderen Nutzer aktualisieren. Bedienungshilfen-Einstellungen und -Dienste werden möglicherweise nicht auf den neuen Nutzer übertragen."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Wenn du einen neuen Nutzer hinzufügst, muss dieser seinen Bereich einrichten.\n\nJeder Nutzer kann Apps für alle anderen Nutzer aktualisieren."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Nutzer Administratorberechtigungen geben?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Administratoren können andere Nutzer verwalten, Geräteeinstellungen ändern und das Gerät auf die Werkseinstellungen zurücksetzen."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Nutzer jetzt einrichten?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Die Person muss Zugang zum Gerät haben und bereit sein, ihren Bereich einzurichten."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil jetzt einrichten?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hierdurch wird eine neue Gastsitzung gestartet und alle Apps und Daten der aktuellen Sitzung werden gelöscht"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Gastmodus beenden?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Hierdurch werden Apps und Daten der aktuellen Gastsitzung gelöscht"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Nutzer Administratorberechtigungen geben"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nutzer keine Administratorberechtigungen geben"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Beenden"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Gastaktivität speichern?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Speichere Aktivitäten der aktuellen Sitzung oder lösche alle Apps und Daten"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 71a5492..0364665 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Ακύρωση"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Η σύζευξη παρέχει πρόσβαση στις επαφές σας και το ιστορικό κλήσεων όταν συνδεθείτε."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Δεν ήταν δυνατή η σύζευξη με τη συσκευή <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Δεν ήταν δυνατή η σύζευξη με το <xliff:g id="DEVICE_NAME">%1$s</xliff:g> λόγω εσφαλμένου PIN ή κλειδιού πρόσβασης."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Δεν ήταν δυνατή η σύζευξη με το <xliff:g id="DEVICE_NAME">%1$s</xliff:g> λόγω λάθους PIN ή κλειδιού πρόσβ."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Δεν είναι δυνατή η σύνδεση με τη συσκευή <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Η ζεύξη απορρίφθηκε από τη συσκευή <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Υπολογιστής"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Περισσότερη ώρα."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Λιγότερη ώρα."</string>
<string name="cancel" msgid="5665114069455378395">"Ακύρωση"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ΟΚ"</string>
<string name="done" msgid="381184316122520313">"Τέλος"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ξυπνητήρια και ειδοποιήσεις"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Προσθήκη νέου χρήστη;"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Μπορείτε να μοιραστείτε αυτήν τη συσκευή με άλλα άτομα, δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης θα έχει το δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, ταπετσαρία κ.λπ. Οι χρήστες μπορούν επίσης να προσαρμόσουν ρυθμίσεις της συσκευής, όπως το Wi‑Fi, που επηρεάζουν τους πάντες.\n\nΚατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες. Οι ρυθμίσεις και οι υπηρεσίες προσβασιμότητας ενδέχεται να μην μεταφερθούν στον νέο χρήστη."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει το χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Προνομία διαχειρ. στον χρήστη;"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Ως διαχειριστής θα μπορεί να διαχειρίζεται άλλους χρήστες, να τροποποιεί ρυθμίσεις της συσκευής και να κάνει επαναφορά των εργοστασιακών ρυθμίσεών της."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Να γίνει ρύθμιση χρήστη τώρα;"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Βεβαιωθείτε ότι ο χρήστης μπορεί να πάρει τη συσκευή και ρυθμίστε το χώρο του"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Να γίνει ρύθμιση προφίλ τώρα;"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Με αυτόν τον τρόπο θα ξεκινήσει μια νέα περίοδος σύνδεσης επισκέπτη και θα διαγραφούν όλες οι εφαρμογές και τα δεδομένα από την τρέχουσα περίοδο σύνδεσης"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Έξοδος από λειτ. επισκέπτη;"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Θα διαγραφούν εφαρμογές και δεδομένα από την τρέχουσα περίοδο σύνδεσης επισκέπτη"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Εκχώρηση προνομίων διαχειριστή σε αυτόν τον χρήστη"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Να μην εκχωρηθούν προνόμια διαχειριστή σε αυτόν τον χρήστη"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Έξοδος"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Αποθήκευση δραστ. επισκέπτη;"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Αποθήκευση δραστ. τρέχουσας περιόδου σύνδεσης ή διαγραφή εφαρμογών και δεδομένων"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 19dbc53..e1dc7b56 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string>
<string name="cancel" msgid="5665114069455378395">"Cancel"</string>
+ <string name="next" msgid="2699398661093607009">"Next"</string>
+ <string name="back" msgid="5554327870352703710">"Back"</string>
+ <string name="save" msgid="3745809743277153149">"Save"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Done"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarms and reminders"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customise with apps, wallpaper and so on. Users can also adjust device settings such as Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Give this user admin privileges?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As an admin, they will be able to manage other users, modify device settings and factory reset the device."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users don\'t. An admin can manage all users, update or reset this device, modify settings, see all installed apps and grant or revoke admin privileges for others."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure that the person is available to take the device and set up their space."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Set up profile now?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"This will start a new guest session and delete all apps and data from the current session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Exit guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"This will delete apps and data from the current guest session"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Give this user admin privileges"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Do not give user admin privileges"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Yes, make them an admin"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, don\'t make them an admin"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Exit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Save guest activity?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"You can save activity from the current session or delete all apps and data"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 7c14c1a..e793fb7 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string>
<string name="cancel" msgid="5665114069455378395">"Cancel"</string>
+ <string name="next" msgid="2699398661093607009">"Next"</string>
+ <string name="back" msgid="5554327870352703710">"Back"</string>
+ <string name="save" msgid="3745809743277153149">"Save"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Done"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarms and reminders"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customize with apps, wallpaper, and so on. Users can also adjust device settings like Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Give this user admin privileges?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As an admin, they will be able to manage other users, modify device settings and factory reset the device."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users dont. An admin can manage all users, update or reset this device, modify settings, see all installed apps, and grant or revoke admin privileges for others."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure the person is available to take the device and set up their space"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Set up profile now?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"This will start a new guest session and delete all apps and data from the current session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Exit guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"This will delete apps and data from the current guest session"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Give this user admin privileges"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Do not give user admin privileges"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Yes, make them an admin"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, dont make them an admin"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Exit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Save guest activity?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"You can save activity from the current session or delete all apps and data"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 19dbc53..e1dc7b56 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string>
<string name="cancel" msgid="5665114069455378395">"Cancel"</string>
+ <string name="next" msgid="2699398661093607009">"Next"</string>
+ <string name="back" msgid="5554327870352703710">"Back"</string>
+ <string name="save" msgid="3745809743277153149">"Save"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Done"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarms and reminders"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customise with apps, wallpaper and so on. Users can also adjust device settings such as Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Give this user admin privileges?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As an admin, they will be able to manage other users, modify device settings and factory reset the device."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users don\'t. An admin can manage all users, update or reset this device, modify settings, see all installed apps and grant or revoke admin privileges for others."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure that the person is available to take the device and set up their space."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Set up profile now?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"This will start a new guest session and delete all apps and data from the current session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Exit guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"This will delete apps and data from the current guest session"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Give this user admin privileges"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Do not give user admin privileges"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Yes, make them an admin"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, don\'t make them an admin"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Exit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Save guest activity?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"You can save activity from the current session or delete all apps and data"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 19dbc53..e1dc7b56 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string>
<string name="cancel" msgid="5665114069455378395">"Cancel"</string>
+ <string name="next" msgid="2699398661093607009">"Next"</string>
+ <string name="back" msgid="5554327870352703710">"Back"</string>
+ <string name="save" msgid="3745809743277153149">"Save"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Done"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarms and reminders"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customise with apps, wallpaper and so on. Users can also adjust device settings such as Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Give this user admin privileges?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As an admin, they will be able to manage other users, modify device settings and factory reset the device."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users don\'t. An admin can manage all users, update or reset this device, modify settings, see all installed apps and grant or revoke admin privileges for others."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure that the person is available to take the device and set up their space."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Set up profile now?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"This will start a new guest session and delete all apps and data from the current session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Exit guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"This will delete apps and data from the current guest session"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Give this user admin privileges"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Do not give user admin privileges"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Yes, make them an admin"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, don\'t make them an admin"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Exit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Save guest activity?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"You can save activity from the current session or delete all apps and data"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index af7a1cb..cfa2df5 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"More time."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Less time."</string>
<string name="cancel" msgid="5665114069455378395">"Cancel"</string>
+ <string name="next" msgid="2699398661093607009">"Next"</string>
+ <string name="back" msgid="5554327870352703710">"Back"</string>
+ <string name="save" msgid="3745809743277153149">"Save"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Done"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarms and reminders"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customize with apps, wallpaper, and so on. Users can also adjust device settings like Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Give this user admin privileges?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"As an admin, they will be able to manage other users, modify device settings and factory reset the device."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users dont. An admin can manage all users, update or reset this device, modify settings, see all installed apps, and grant or revoke admin privileges for others."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure the person is available to take the device and set up their space"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Set up profile now?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"This will start a new guest session and delete all apps and data from the current session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Exit guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"This will delete apps and data from the current guest session"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Give this user admin privileges"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Do not give user admin privileges"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Yes, make them an admin"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, dont make them an admin"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Exit"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Save guest activity?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"You can save activity from the current session or delete all apps and data"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 9e35c9e..38a7c32 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -107,7 +107,7 @@
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de archivos"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acceso a Internet"</string>
- <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartir contactos e historial de llam."</string>
+ <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartir contactos e historial de llamadas"</string>
<string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Uso para compartir contactos e historial de llamadas"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartir conexión a Internet"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensajes de texto"</string>
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"La sincronización te permite acceder a los contactos y al historial de llamadas cuando el dispositivo está conectado."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la clave de acceso o el PIN son incorrectos."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la llave de acceso o el PIN son incorrectos."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"No se puede establecer la comunicación con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Vínculo rechazado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computadora"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo"</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Aceptar"</string>
<string name="done" msgid="381184316122520313">"Listo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas y recordatorios"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"¿Agregar usuario nuevo?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Para compartir este dispositivo, crea más usuarios. Cada uno tendrá su propio espacio y podrá personalizarlo con apps, un fondo de pantalla y mucho más. Los usuarios también podrán ajustar algunas opciones del dispositivo, como la conexión Wi‑Fi, que afectan a todos los usuarios.\n\nCuando agregues un nuevo usuario, esa persona deberá configurar su espacio.\n\nCualquier usuario podrá actualizar las apps de otras personas. Es posible que no se transfieran los servicios ni las opciones de accesibilidad al nuevo usuario."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Cuando agregas un nuevo usuario, esa persona debe configurar su espacio.\n\nCualquier usuario puede actualizar las aplicaciones del resto de los usuarios."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"¿Dar privilegios de admin.?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administrador, podrá controlar a otros usuarios, modificar la configuración de dispositivos y restablecer su configuración de fábrica."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"¿Configurar el usuario ahora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona pueda acceder al dispositivo y configurar su espacio."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"¿Quieres configurar tu perfil ahora?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Esta acción comenzará una nueva sesión de invitado y borrará todas las apps y los datos de la sesión actual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"¿Salir del modo de invitado?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Esta acción borrará todas las apps y los datos de la sesión de invitado actual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Otorgar privilegios de administrador a este usuario"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"No otorgar privilegios de administrador a este usuario"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Salir"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"¿Guardar actividad de invitado?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Puedes guardar la actividad de la sesión actual o borrar las apps y los datos"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 01e3961..995a426 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"La vinculación permite acceder a tus contactos y al historial de llamadas cuando el dispositivo está conectado."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"No se ha podido emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se ha podido emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la clave de acceso o el PIN son incorrectos."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se puede emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la llave de acceso o el PIN son incorrectos."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"No se puede establecer comunicación con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Vinculación rechazada por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Ordenador"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo."</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Aceptar"</string>
<string name="done" msgid="381184316122520313">"Hecho"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas y recordatorios"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"¿Añadir nuevo usuario?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Puedes compartir este dispositivo si creas más usuarios. Cada uno tendrá su propio espacio y podrá personalizarlo con aplicaciones, un fondo de pantalla y mucho más. Los usuarios también pueden ajustar opciones del dispositivo, como la conexión Wi‑Fi, que afectan a todos los usuarios.\n\nCuando añadas un usuario, tendrá que configurar su espacio.\n\nCualquier usuario puede actualizar aplicaciones de todos los usuarios. Es posible que no se transfieran los servicios y opciones de accesibilidad al nuevo usuario."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Al añadir un nuevo usuario, dicha persona debe configurar su espacio.\n\nCualquier usuario puede actualizar las aplicaciones del resto de usuarios."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"¿Dar privilegios de administrador al usuario?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administrador, podrá gestionar otros usuarios, así como modificar los ajustes y restablecer el estado de fábrica del dispositivo."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"¿Configurar usuario ahora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona está disponible en este momento para usar el dispositivo y configurar su espacio."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"¿Quieres configurar un perfil ahora?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Se iniciará una nueva sesión de invitado y se borrarán todas las aplicaciones y datos de esta sesión"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"¿Salir del modo Invitado?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Se eliminarán todas las aplicaciones y datos de la sesión de invitado actual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dar privilegios de administrador a este usuario"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"No dar privilegios de administrador a este usuario"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Salir"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"¿Guardar actividad de invitado?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Puedes guardar la actividad de esta sesión o eliminar todas las aplicaciones y datos"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Elige el diseño del teclado"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predeterminado"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Encender pantalla"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Encender la pantalla"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Permitir encender la pantalla"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Permite que una aplicación encienda la pantalla. Si das este permiso, la aplicación puede encender la pantalla en cualquier momento sin que se lo pidas."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"¿Dejar de emitir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 4b8db97..12e44fe 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Pikem aeg."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lühem aeg."</string>
<string name="cancel" msgid="5665114069455378395">"Tühista"</string>
+ <string name="next" msgid="2699398661093607009">"Edasi"</string>
+ <string name="back" msgid="5554327870352703710">"Tagasi"</string>
+ <string name="save" msgid="3745809743277153149">"Salvesta"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Valmis"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmid ja meeldetuletused"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Kas lisada uus kasutaja?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Võite jagada seda seadet teiste inimestega, luues uusi kasutajaid. Igal kasutajal on oma ruum, mida saab kohandada rakenduste, taustapildi ja muuga. Kasutajad saavad kohandada ka seadme seadeid, näiteks WiFi-valikuid, mis mõjutavad kõiki kasutajaid.\n\nKui lisate uue kasutaja, siis peab ta seadistama oma ruumi.\n\nIga kasutaja saab rakendusi kõigi kasutajate jaoks värskendada. Juurdepääsetavuse seadeid ja teenuseid ei pruugita uuele kasutajale üle kanda."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kui lisate uue kasutaja, siis peab ta seadistama oma ruumi.\n\nIga kasutaja saab värskendada rakendusi kõigi kasutajate jaoks."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Kas anda kasutajale administraatoriõigused?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Administraatorina saab ta hallata teisi kasutajaid, muuta seadme seadeid ja lähtestada seadme tehaseseadetele."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Kas määrata see kasutaja administraatoriks?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Administraatoritel on eriõigused, mida teistel kasutajatel pole. Administraator saab hallata kõiki kasutajaid, värskendada või lähtestada seda seadet, muuta seadeid, vaadata kõiki installitud rakendusi ja anda teistele kasutajatele administraatoriõigused või need eemaldada."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Määra administraatoriks"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Kas seadistada kasutaja kohe?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Veenduge, et isik saaks seadet kasutada ja oma ruumi seadistada"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Kas soovite kohe profiili seadistada?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"See alustab uut külastajaseanssi ning kustutab kõik praeguse seansi rakendused ja andmed."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Kas väljuda külalisrežiimist?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"See kustutab praeguse külastajaseansi rakendused ja andmed"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Anna sellele kasutajale administraatoriõigused"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ära anna kasutajale administraatoriõiguseid"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Jah, määra ta administraatoriks"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Ei, ära määra teda administraatoriks"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Välju"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Kas salvestada külalise tegevus?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Võite selle seansi tegevused salvestada või kustutada kõik rakendused ja andmed."</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 35cbafc7..c882eb9 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Utzi"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Gailuak parekatzen badituzu, batetik besteko kontaktuak eta deien historia atzitu ahal izango dituzu."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Ezin izan da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin parekatu."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Ezin izan da parekatu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin, PIN edo pasakode okerra idatzi delako."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Ezin izan da parekatu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin, PIN edo sarbide-gako okerra idatzi delako."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Ezin da <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin komunikatu."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuak bikotetzea ukatu du."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Ordenagailua"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Denbora gehiago."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Denbora gutxiago."</string>
<string name="cancel" msgid="5665114069455378395">"Utzi"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Ados"</string>
<string name="done" msgid="381184316122520313">"Eginda"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmak eta abisuak"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Beste erabiltzaile bat gehitu nahi duzu?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Gailu hau beste pertsona batzuekin partekatzeko, sortu erabiltzaile gehiago. Erabiltzaile bakoitzak bere eremua izango du eta, bertan, aplikazioak, horma-papera eta antzekoak pertsonalizatu ahal izango ditu. Horrez gain, agian erabiltzaile guztiei eragingo dieten ezarpen batzuk ere doi daitezke; adibidez, wifi-konexioarena.\n\nErabiltzaile bat gehitzen duzunean, pertsona horrek berak konfiguratu beharko du bere eremua.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak. Baliteke erabilerraztasun-ezarpenak eta -zerbitzuak ez transferitzea erabiltzaile berriei."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Erabiltzaile bat gehitzen duzunean, erabiltzaile horrek bere eremua konfiguratu beharko du.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Administratzaile-baimenak eman nahi dizkiozu erabiltzaileari?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Administratzaile-baimenak ematen badizkiozu, hauek egin ahalko ditu: beste erabiltzaile batzuk kudeatu, gailuaren ezarpenak aldatu eta gailuaren jatorrizko datuak berrezarri."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Erabiltzailea konfiguratu?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Ziurtatu pertsona horrek gailua hartu eta bere eremua konfigura dezakeela"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profila konfiguratu?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Gonbidatuentzako saio berri bat abiaraziko da, eta saio honetako aplikazio eta datu guztiak ezabatuko"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Gonbidatu modutik irten nahi duzu?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Gonbidatuentzako saio honetako aplikazioak eta datuak ezabatuko dira"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Eman administratzaile-baimenak erabiltzaileari"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ez eman administratzaile-baimenik erabiltzaileari"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Irten"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Gonbidatuaren jarduerak gorde nahi dituzu?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Saio honetako jarduerak gorde ditzakezu, edo aplikazio eta datu guztiak ezabatu"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 8fa6b33..5643322 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -509,7 +509,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"استفاده از زبانهای سیستم"</string>
<string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"تنظیمات <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> بازنشد"</string>
<string name="ime_security_warning" msgid="6547562217880551450">"این روش ورودی ممکن است بتواند تمام متنی را که تایپ میکنید جمعآوری کند، از جمله اطلاعات شخصی مانند گذرواژهها و شمارههای کارت اعتباری. این روش توسط برنامه <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> ارائه میشود. از این روش ورودی استفاده میکنید؟"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"توجه: بعد از راهاندازی تا زمانیکه قفل تلفنتان را باز نکنید، این برنامه نمیتواند شروع شود"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"توجه: بعداز بازراهاندازی تا زمانیکه قفل تلفنتان را باز نکنید، این برنامه نمیتواند شروع شود"</string>
<string name="ims_reg_title" msgid="8197592958123671062">"وضعیت ثبت IMS"</string>
<string name="ims_reg_status_registered" msgid="884916398194885457">"ثبتشده"</string>
<string name="ims_reg_status_not_registered" msgid="2989287366045704694">"ثبت نشده است"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"زمان بیشتر."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"زمان کمتر."</string>
<string name="cancel" msgid="5665114069455378395">"لغو"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"تأیید"</string>
<string name="done" msgid="381184316122520313">"تمام"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"زنگهای هشدار و یادآوریها"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"کاربر جدیدی اضافه میکنید؟"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"با ایجاد کاربران بیشتر، میتوانید این دستگاه را با دیگران بهاشتراک بگذارید. هر کاربر فضای مخصوص به خودش را دارد که میتواند آن را با برنامهها، کاغذدیواری و موارد دیگر سفارشی کند. همچنین کاربران میتوانند تنظیماتی در دستگاه ایجاد کنند، مانند تنظیمات Wi-Fi، که بر تنظیمات بقیه اثر دارد.\n\nوقتی کاربر جدیدی اضافه میکنید، آن شخص باید فضای خودش را تنظیم کند.\n\nهر کاربر میتواند برنامهها را برای سایر کاربران بهروزرسانی کند. دسترسپذیری، تنظیمات، و سرویسها قابلانتقال به کاربر جدید نیستند."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"وقتی کاربر جدیدی اضافه میکنید آن فرد باید فضای خودش را تنظیم کند.\n\nهر کاربری میتواند برنامهها را برای همه کاربران دیگر بهروزرسانی کند."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"امتیازهای سرپرست به این کاربر اعطا شود؟"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"بهعنوان سرپرست، این فرد میتواند کاربران دیگر را مدیریت کند، تنظیمات دستگاه را تغییر دهد، و دستگاه را بازنشانی کارخانهای کند."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"هم اکنون کاربر تنظیم شود؟"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"مطمئن شوید شخص در دسترس است تا دستگاه را بگیرد و فضایش را تنظیم کند"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"اکنون نمایه را تنظیم میکنید؟"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"با این کار، جلسه مهمان جدیدی شروع خواهد شد و همه برنامهها و دادهها از جلسه کنونی حذف خواهند شد"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"از حالت مهمان خارج میشوید؟"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"با این کار، برنامهها و دادهها از جلسه مهمان کنونی حذف خواهند شد."</string>
- <string name="grant_admin" msgid="4273077214151417783">"امتیازهای سرپرست به این کاربر اعطا شود"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"امتیازهای سرپرست به کاربر اعطا نشود"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"خروج"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"فعالیت مهمان ذخیره شود؟"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"میتوانید فعالیت جلسه کنونی را ذخیره کنید یا همه برنامه و دادهها را حذف کنید"</string>
@@ -629,7 +641,7 @@
<string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"پیشفرض دستگاه"</string>
<string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غیرفعال"</string>
<string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"فعال"</string>
- <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"برای اعمال این تغییر، دستگاهتان باید راهاندازی مجدد شود. اکنون راهاندازی مجدد کنید یا لغو کنید."</string>
+ <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"برای اعمال این تغییر، دستگاه باید بازراهاندازی شود. یا اکنون بازراهاندازی کنید یا لغو کنید."</string>
<string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"هدفون سیمی"</string>
<string name="wifi_hotspot_switch_on_text" msgid="9212273118217786155">"روشن"</string>
<string name="wifi_hotspot_switch_off_text" msgid="7245567251496959764">"خاموش"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 0af656d..6377d2a 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Enemmän aikaa"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Vähemmän aikaa"</string>
<string name="cancel" msgid="5665114069455378395">"Peru"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Valmis"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Herätykset ja muistutukset"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Lisätäänkö uusi käyttäjä?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Voit jakaa tämän laitteen muiden kanssa luomalla lisää käyttäjiä. Kullakin käyttäjällä on oma tilansa, jota he voivat muokata esimerkiksi omilla sovelluksilla ja taustakuvilla. Käyttäjät voivat myös muokata laiteasetuksia, kuten Wi‑Fi-asetuksia, jotka vaikuttavat laitteen kaikkiin käyttäjiin.\n\nKun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää muiden käyttäjien sovelluksia. Esteettömyysominaisuuksia tai ‑palveluita ei välttämättä siirretä uudelle käyttäjälle."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää sovelluksia muille käyttäjille."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Annetaanko käyttäjälle järjestelmänvalvojan oikeudet?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Järjestelmänvalvoja voi ylläpitää muita käyttäjiä, muuttaa laitteen asetuksia ja palauttaa laitteen tehdasasetukset."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Lisätäänkö käyttäjä nyt?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Varmista, että käyttäjä voi ottaa laitteen nyt ja määrittää oman tilansa."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Määritetäänkö profiilin asetukset nyt?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Tämä aloittaa uuden vierailija-käyttökerran ja kaikki nykyisen istunnon sovellukset ja data poistetaan"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Poistutaanko vierastilasta?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Tämä poistaa nykyisen vierailija-käyttökerran sovellukset ja datan"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Anna tälle käyttäjälle järjestelmänvalvojan oikeudet"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Älä anna käyttäjälle järjestelmänvalvojan oikeuksia"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sulje"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Tallennetaanko vierastoiminta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Voit tallentaa tämän istunnon toimintaa tai poistaa kaikki sovellukset ja datan"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 5596e70..b0203dc 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -486,7 +486,7 @@
<string name="disabled" msgid="8017887509554714950">"Désactivée"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Autorisée"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Non autorisée"</string>
- <string name="install_other_apps" msgid="3232595082023199454">"Installer applis inconnues"</string>
+ <string name="install_other_apps" msgid="3232595082023199454">"Installer les applications inconnues"</string>
<string name="home" msgid="973834627243661438">"Accueil des paramètres"</string>
<string-array name="battery_labels">
<item msgid="7878690469765357158">"0 %"</item>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string>
<string name="cancel" msgid="5665114069455378395">"Annuler"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"OK"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes et rappels"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Ajouter un utilisateur?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Vous pouvez partager cet appareil avec d\'autres personnes en ajoutant des utilisateurs. Chaque utilisateur dispose de son propre espace, où il peut personnaliser, entre autres, ses applications et son fond d\'écran. Chacun peut également modifier les paramètres de l\'appareil, comme les réseaux Wi-Fi, qui touchent tous les utilisateurs.\n\nLorsque vous ajoutez un utilisateur, celui-ci doit configurer son propre espace.\n\nTout utilisateur peut mettre à jour les applications pour les autres utilisateurs. Il se peut que les paramètres et les services d\'accessibilité ne soient pas transférés aux nouveaux utilisateurs."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nTout utilisateur peut mettre à jour les applications pour tous les autres utilisateurs."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Privi. d\'admin. à l\'utilisateur?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"En tant qu\'administrateur, il pourra gérer d\'autres utilisateurs, modifier les paramètres de l\'appareil et rétablir les paramètres par défaut de l\'appareil."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurer l\'utilisateur?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Assurez-vous que la personne est disponible et qu\'elle peut utiliser l\'appareil pour configurer son espace."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurer le profil maintenant?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Une nouvelle session d\'invité sera lancée, et toutes les applications et données de la session en cours seront supprimées"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Quitter le mode Invité?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Les applications et les données de la session d\'invité en cours seront supprimées"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Accorder des privilèges d\'administrateur à cet utilisateur"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ne pas accorder de privilèges d\'administrateur à l\'utilisateur"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Quitter"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Enregistrer l\'activité d\'invité?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Vous pouvez enregistrer l\'activité de session ou supprimer les applis et données"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 12ba2c3..33c4b98 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Annuler"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"L\'association vous permet d\'accéder à vos contacts et à l\'historique des appels lorsque vous êtes connecté."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Impossible d\'associer à <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Impossible d\'associer <xliff:g id="DEVICE_NAME">%1$s</xliff:g> : le code ou le mot de passe est incorrect."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Impossible d\'associer <xliff:g id="DEVICE_NAME">%1$s</xliff:g> : code ou clé d\'accès incorrects."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Impossible d\'établir la communication avec <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Association refusée par <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Ordinateur"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string>
<string name="cancel" msgid="5665114069455378395">"Annuler"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"OK"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes et rappels"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Ajouter un utilisateur ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Vous pouvez partager cet appareil avec d\'autres personnes en ajoutant des utilisateurs. Chaque utilisateur dispose de son propre espace où il peut personnaliser ses applications et son fond d\'écran, entre autres. Chaque utilisateur peut également modifier les paramètres de l\'appareil qui s\'appliquent à tous, tels que le Wi-Fi.\n\nLorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nN\'importe quel utilisateur peut mettre à jour les applications pour tous les autres. Toutefois, il est possible que les services et les paramètres d\'accessibilité ne soient pas transférés vers le nouvel utilisateur."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nN\'importe quel utilisateur peut mettre à jour les applications pour tous les autres utilisateurs."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Droits admin à l\'utilisateur ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"En tant qu\'administrateur, il pourra gérer d\'autres utilisateurs, modifier les paramètres et rétablir la configuration d\'usine de l\'appareil."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurer l\'utilisateur ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Assurez-vous que la personne est prête à utiliser l\'appareil et à configurer son espace."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurer le profil maintenant ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Cette action lancera une nouvelle session Invité et supprimera toutes les applis et données de la session actuelle"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Quitter le mode Invité ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Cette action supprimera les applis et données de la session Invité actuelle."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Accordez des droits d\'administrateur à cet utilisateur"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"N\'accordez pas de droits d\'administrateur à l\'utilisateur"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Quitter"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Enregistrer l\'activité ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Enregistrez l\'activité de la session actuelle ou supprimez les applis et données"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 7577cd5..9dffccb 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Máis tempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Aceptar"</string>
<string name="done" msgid="381184316122520313">"Feito"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas e recordatorios"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Engadir un usuario novo?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Podes compartir este dispositivo con outras persoas a través da creación de usuarios adicionais. Cada usuario ten o seu propio espazo que pode personalizar coas súas propias aplicacións, fondos de pantalla etc. Os usuarios tamén poden modificar as opcións de configuración do dispositivo, como a rede wifi, que afectan a todo o mundo.\n\nCando engadas un usuario novo, este deberá configurar o seu espazo.\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios. Non se poden transferir ao novo usuario os servizos nin a configuración de accesibilidade."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Cando engadas un usuario novo, este deberá configurar o seu espazo.\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Privilexios de administrador?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administrador, poderá xestionar outros usuarios, modificar a configuración dos dispositivos e restablecer a configuración de fábrica."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuario agora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que a persoa está dispoñible para acceder ao dispositivo e configurar o seu espazo"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar o perfil agora?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Iniciarase unha nova sesión de convidado e eliminaranse todas as aplicacións e datos desta sesión"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Saír do modo de convidado?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Eliminaranse as aplicacións e os datos da sesión de convidado actual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dar a este usuario privilexios de administrador"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Non dar a este usuario privilexios de administrador"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Saír"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Gardar actividade do convidado?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Podes gardar a actividade da sesión ou eliminar todas as aplicacións e datos"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 1696f81a..157b4f7 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"વધુ સમય."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ઓછો સમય."</string>
<string name="cancel" msgid="5665114069455378395">"રદ કરો"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ઓકે"</string>
<string name="done" msgid="381184316122520313">"થઈ ગયું"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"અલાર્મ અને રિમાઇન્ડર"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"નવા વપરાશકર્તાને ઉમેરીએ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"તમે વધારાના વપરાશકર્તાઓ બનાવીને અન્ય લોકો સાથે આ ડિવાઇસને શેર કરી શકો છો. દરેક વપરાશકર્તા પાસે તેમની પોતાની સ્પેસ છે, જેને તેઓ ઍપ, વૉલપેપર, વગેરે સાથે કસ્ટમાઇઝ કરી શકે છે. વપરાશકર્તાઓ પ્રત્યેક વ્યક્તિને અસર કરતી હોય તેવી ડિવાઇસ સેટિંગ જેમ કે વાઇ-ફાઇને પણ સમાયોજિત કરી શકે છે.\n\nજ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમની સ્પેસ સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા અન્ય બધા વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે. નવા વપરાશકર્તાને ઍક્સેસિબિલિટી સેટિંગ અને સેવાઓ ટ્રાન્સફર ન પણ થાય."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ અપ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"યુઝરને ઍડમિન વિશેષાધિકાર આપીએ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ઍડમિન તરીકે, તેઓ અન્ય વપરાશકર્તાઓને મેનેજ, ડિવાઇસ સેટિંગમાં ફેરફાર અને ડિવાઇસને ફેક્ટરી રીસેટ કરી શકશે."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"અત્યારે જ વપરાશકર્તાને સેટ અપ કરીએ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ખાતરી કરો કે વ્યક્તિ ડિવાઇસ લેવા અને તેમના સ્થાનનું સેટ અપ કરવા માટે ઉપલબ્ધ છે"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"હવે પ્રોફાઇલ સેટ કરીએ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"આમ કરવાથી કોઈ નવું અતિથિ સત્ર ચાલુ થશે તેમજ હાલના સત્રમાંની તમામ ઍપ અને ડેટા ડિલીટ થશે"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"શું અતિથિ મોડમાંથી બહાર નીકળીએ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"આમ કરવાથી હાલના અતિથિ સત્રની તમામ ઍપ અને ડેટા ડિલીટ કરવામાં આવશે"</string>
- <string name="grant_admin" msgid="4273077214151417783">"આ વપરાશકર્તાને ઍડમિનના વિશેષાધિકારો આપો"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"આ વપરાશકર્તાને ઍડમિનના વિશેષાધિકારો આપશો નહીં"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"બહાર નીકળો"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"શું અતિથિ પ્રવૃત્તિ સાચવીએ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"તમે હાલના સત્રની પ્રવૃત્તિ સાચવી શકો છો અથવા તમામ ઍપ અને ડેટા ડિલીટ કરી શકો છો"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 04c225c..f0d12cc 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"रद्द करें"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"कनेक्ट होने पर, पेयरिंग से आपके संपर्कों और कॉल इतिहास तक पहुंचा जा सकता है."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> के साथ युग्मित नहीं हो सका."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"गलत पिन या पासवर्ड की वजह से <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से नहीं जोड़ा जा सका."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"गलत पिन या पासकी की वजह से <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से नहीं जोड़ा जा सका."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> से संचार नहीं कर सकता."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ने जोड़ने का अनुरोध नहीं माना."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"कंप्यूटर"</string>
@@ -214,7 +214,7 @@
</string-array>
<string name="choose_profile" msgid="343803890897657450">"प्रोफ़ाइल चुनें"</string>
<string name="category_personal" msgid="6236798763159385225">"निजी"</string>
- <string name="category_work" msgid="4014193632325996115">"ऑफ़िस"</string>
+ <string name="category_work" msgid="4014193632325996115">"वर्क"</string>
<string name="development_settings_title" msgid="140296922921597393">"डेवलपर के लिए सेटिंग और टूल"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"डेवलपर के लिए सेटिंग और टूल चालू करें"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"ऐप्लिकेशन विकास के लिए विकल्प सेट करें"</string>
@@ -486,7 +486,7 @@
<string name="disabled" msgid="8017887509554714950">"बंद किया गया"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"अनुमति है"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"अनुमति नहीं है"</string>
- <string name="install_other_apps" msgid="3232595082023199454">"अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति देना"</string>
+ <string name="install_other_apps" msgid="3232595082023199454">"अज्ञात ऐप्लिकेशन इंस्टॉल करने की अनुमति देना"</string>
<string name="home" msgid="973834627243661438">"सेटिंग का होम पेज"</string>
<string-array name="battery_labels">
<item msgid="7878690469765357158">"0%"</item>
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ज़्यादा समय."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कम समय."</string>
<string name="cancel" msgid="5665114069455378395">"रद्द करें"</string>
+ <string name="next" msgid="2699398661093607009">"आगे बढ़ें"</string>
+ <string name="back" msgid="5554327870352703710">"वापस जाएं"</string>
+ <string name="save" msgid="3745809743277153149">"सेव करें"</string>
<string name="okay" msgid="949938843324579502">"ठीक है"</string>
<string name="done" msgid="381184316122520313">"हो गया"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"अलार्म और रिमाइंडर"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"नया उपयोगकर्ता जोड़ें?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"नए उपयोगकर्ता जोड़कर इस डिवाइस को दूसरे लोगों के साथ शेयर किया जा सकता है. हर उपयोगकर्ता के पास अपनी जगह होती है, जिसमें वे ऐप्लिकेशन, वॉलपेपर, और दूसरी चीज़ों में मनमुताबिक बदलाव कर सकते हैं. उपयोगकर्ता वाई-फ़ाई जैसी डिवाइस सेटिंग में भी बदलाव कर सकते हैं, जिसका असर हर किसी पर पड़ता है.\n\nजब किसी नए उपयोगकर्ता को जोड़ा जाता है, तो उसे अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता, दूसरे सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है. ऐसा भी हो सकता है कि सुलभता सेटिंग और सेवाएं नए उपयोगकर्ता को ट्रांसफ़र न हो पाएं."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"कोई नया उपयोगकर्ता जोड़ने पर, उसे अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता बाकी सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"इस व्यक्ति को एडमिन के खास अधिकार दें?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"एडमिन के तौर पर, उनके पास अन्य लोगों की अनुमतियां को मैनेज करने, डिवाइस की सेटिंग बदलने, और डिवाइस को फ़ैक्ट्री रीसेट करने का अधिकार होगा."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"क्या इस व्यक्ति को एडमिन बनाना है?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"एडमिन, अन्य लोगों के मुकाबले खास अधिकार होते हैं. एडमिन के पास ये अधिकार होते हैं: सभी लोगों को मैनेज करना, इस डिवाइस को अपडेट या रीसेट करना, सेटिंग में बदलाव करना, इंस्टॉल किए गए सभी ऐप्लिकेशन देखना, और अन्य लोगों को एडमिन के खास अधिकार देना या उन्हें वापस लेना."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"एडमिन बनाएं"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"उपयोगकर्ता को अभी सेट करें?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"पक्का करें कि व्यक्ति डिवाइस का इस्तेमाल करने और अपनी जगह सेट करने के लिए मौजूद है"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"प्रोफ़ाइल अभी सेट करें?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ऐसा करने पर, मेहमान के तौर पर ब्राउज़ करने का एक नया सेशन शुरू हो जाएगा. साथ ही, पिछले सेशन में मौजूद डेटा और इस्तेमाल किए जा रहे ऐप्लिकेशन को मिटा दिया जाएगा"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"मेहमान मोड से बाहर निकलना है?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"इससे, मेहमान मोड के मौजूदा सेशन का डेटा और इसमें इस्तेमाल हो रहे ऐप्लिकेशन मिट जाएंगे"</string>
- <string name="grant_admin" msgid="4273077214151417783">"इस व्यक्ति को एडमिन के खास अधिकार दें"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"इस व्यक्ति को एडमिन के खास अधिकार न दें"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"हां, इन्हें एडमिन बनाएं"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"नहीं, इन्हें एडमिन न बनाएं"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"बाहर निकलें"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"मेहमान मोड की गतिविधि को सेव करना है?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"मौजूदा सेशन की गतिविधि को सेव किया जा सकता है या सभी ऐप और डेटा को मिटाया जा सकता है"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 06fe6f2..41528f3 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Odustani"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Uparivanje omogućuje pristup vašim kontaktima i povijesti poziva dok ste povezani."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Uparivanje s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije bilo moguće."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Uparivanje s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije uspjelo zbog netočnog PIN-a ili zaporke."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Uparivanje s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije uspjelo zbog netočnog PIN-a ili pristupnog ključa."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Komunikacija s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije moguća."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Uparivanje odbio uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Računalo"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Više vremena."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string>
<string name="cancel" msgid="5665114069455378395">"Odustani"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"U redu"</string>
<string name="done" msgid="381184316122520313">"Gotovo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi i podsjetnici"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Dodati novog korisnika?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Da biste ovaj uređaj dijelili s drugima, možete napraviti dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću vlastitih aplikacija, pozadine i tako dalje. Korisnici mogu prilagoditi i postavke uređaja koje utječu na sve ostale korisnike, na primjer Wi‑Fi.\n\nKada dodate novog korisnika, ta osoba mora postaviti svoj prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kada dodate novog korisnika, ta osoba mora postaviti vlastiti prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dati korisniku administratorske ovlasti?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Kao administrator moći će upravljati drugim korisnicima, mijenjati postavke uređaja i vraćati uređaj na tvorničke postavke."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Želite li postaviti korisnika?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Uređaj morate dati toj osobi da sama postavi svoj prostor"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Želite li sada postaviti profil?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Time će se pokrenuti nova gostujuća sesija i izbrisati sve aplikacije i podaci iz trenutačne sesije."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Napustiti način rada za goste?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Time će se izbrisati aplikacije i podaci iz trenutačne gostujuće sesije."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Daj ovom korisniku administratorske ovlasti"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nemoj dati korisniku administratorske ovlasti"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Izlaz"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Spremiti aktivnosti gosta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Možete spremiti aktivnosti iz ove sesije ili izbrisati sve aplikacije i podatke"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 5d25572..36e4f39 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Több idő."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kevesebb idő."</string>
<string name="cancel" msgid="5665114069455378395">"Mégse"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Kész"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ébresztések és emlékeztetők"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Hozzáad új felhasználót?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"További felhasználók létrehozásával megoszthatja ezt az eszközt másokkal. Minden felhasználó saját felülettel rendelkezik, amelyet személyre szabhat saját alkalmazásaival, háttérképével stb. A felhasználók módosíthatják az eszköz beállításait is, például a Wi‑Fi használatát, amely mindenkit érint.\n\nHa új felhasználót ad hozzá, az illetőnek be kell állítania saját felületét.\n\nBármely felhasználó frissítheti az alkalmazásokat valamennyi felhasználó számára. Előfordulhat, hogy a kisegítő lehetőségekkel kapcsolatos beállításokat és szolgáltatásokat nem viszi át a rendszer az új felhasználóhoz."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Ha új felhasználót ad hozzá, az illetőnek be kell állítania saját tárterületét.\n\nBármely felhasználó frissítheti az alkalmazásokat valamennyi felhasználó számára."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Ad adminisztrátori jogosultságokat?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Adminisztrátorként más felhasználókat kezelhet, módosíthatja az eszközbeállításokat és visszaállíthatja az eszköz gyári beállításait."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Beállít most egy felhasználót?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Győződjön meg arról, hogy a személy hozzá tud férni az eszközhöz, hogy beállíthassa a területét"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Létrehoz most egy profilt?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"A művelettel új vendégmunkamenetet indít, valamint az összes alkalmazást és adatot törli az aktuális munkamenetből"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Kilép a vendég módból?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"A művelettel törlődnek az aktuális vendégmunkamenet alkalmazásai és adatai"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Adminisztrátori jogosultságok megadása a felhasználónak"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ne kapjon a felhasználó adminisztrátori jogosultságokat"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Kilépés"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Menti a vendégtevékenységeket?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Tevékenységeket menthet az aktuális munkamenetből, vagy minden appot és adatot törölhet"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 69e57cc..23a8044 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ավելացնել ժամանակը:"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Պակասեցնել ժամանակը:"</string>
<string name="cancel" msgid="5665114069455378395">"Չեղարկել"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Եղավ"</string>
<string name="done" msgid="381184316122520313">"Պատրաստ է"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Զարթուցիչներ և հիշեցումներ"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Ավելացնե՞լ նոր օգտատեր"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Այս սարքից կարող եք օգտվել մի քանի հոգով: Դրա համար անհրաժեշտ է ստեղծել լրացուցիչ պրոֆիլներ: Յուրաքանչյուր օգտատեր կարող է կարգավորել իր պրոֆիլը ըստ իր հայեցողության և ճաշակի (օր.՝ ընտրել իր ուզած պաստառը, տեղադրել անհրաժեշտ հավելվածները և այլն): Բացի այդ, օգտատերերը կարող են կարգավորել սարքի որոշ պարամետրեր (օր.՝ Wi-Fi-ը), որոնք կգործեն նաև մյուս պրոֆիլների համար:\n\nԵրբ նոր պրոֆիլ ավելացնեք, տվյալ օգտատերը պետք է կարգավորի այն:\n\nՅուրաքանչյուր օգտատեր կարող է թարմացնել մյուս օգտատերերի հավելվածները: Հատուկ գործառույթների և ծառայությունների կարգավորումները կարող են չփոխանցվել նոր օգտատերերին:"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Երբ նոր օգտատեր եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտատեր կարող է թարմացնել հավելվածները բոլոր օգտատերերի համար:"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Տրամադրե՞լ արտոնություններ"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Որպես ադմինիստրատոր՝ նա կկարողանա կառավարել այլ օգտատերերի, փոխել սարքի կարգավորումները և վերականգնել սարքի գործարանային կարգավորումները։"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Կարգավորե՞լ պրոֆիլը"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Համոզվեք, որ անձը կարող է վերցնել սարքը և կարգավորել իր տարածքը"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Կարգավորե՞լ պրոֆիլը հիմա:"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Կսկսվի հյուրի նոր աշխատաշրջան, իսկ նախորդ աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Դուրս գա՞լ հյուրի ռեժիմից"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Հյուրի ընթացիկ աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Օգտատիրոջը տրամադրել ադմինիստրատորի արտոնություններ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Օգտատիրոջը չտրամադրել ադմինիստրատորի արտոնություններ"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Դուրս գալ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Պահե՞լ հյուրի ռեժիմի պատմությունը"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Պահեք ընթացիկ աշխատաշրջանի պատմությունը կամ ջնջեք հավելվածներն ու տվյալները"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index d174c75..0037b2d 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lebih lama."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lebih cepat."</string>
<string name="cancel" msgid="5665114069455378395">"Batal"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Oke"</string>
<string name="done" msgid="381184316122520313">"Selesai"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarm dan pengingat"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Tambahkan pengguna baru?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Anda dapat menggunakan perangkat ini bersama orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruang sendiri, yang dapat disesuaikan dengan aplikasi, wallpaper, dan lainnya. Pengguna juga dapat menyesuaikan setelan perangkat seperti Wi-Fi yang dapat memengaruhi semua pengguna lain.\n\nSaat Anda menambahkan pengguna baru, pengguna tersebut perlu menyiapkan ruangnya.\n\nPengguna mana pun dapat mengupdate aplikasi untuk semua pengguna lainnya. Layanan dan setelan aksesibilitas mungkin tidak ditransfer ke pengguna baru."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Saat Anda menambahkan pengguna baru, orang tersebut perlu menyiapkan ruang mereka sendiri.\n\nPengguna mana pun dapat memperbarui aplikasi untuk semua pengguna lain."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Berikan hak istimewa admin?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Sebagai admin, mereka akan dapat mengelola pengguna lainnya, mengubah setelan perangkat, dan mereset perangkat ke setelan pabrik."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Siapkan pengguna sekarang?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Pastikan orang tersebut ada untuk mengambil perangkat dan menyiapkan ruangnya"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Siapkan profil sekarang?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Tindakan ini akan memulai sesi tamu baru dan menghapus semua aplikasi serta data dari sesi saat ini"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Keluar dari mode tamu?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Tindakan ini akan menghapus aplikasi dan data dari sesi tamu saat ini"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Beri pengguna ini hak istimewa admin"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Jangan beri pengguna hak istimewa admin"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Keluar"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Simpan aktivitas tamu?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Anda bisa menyimpan aktivitas sesi saat ini atau menghapus semua aplikasi & data"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Keyboard fisik"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Pilih tata letak keyboard"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Aktifkan layar"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Mengaktifkan layar"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Izinkan pengaktifan layar"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Mengizinkan aplikasi mengaktifkan layar. Jika diizinkan, aplikasi dapat mengaktifkan layar kapan saja tanpa izin Anda."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Hentikan siaran <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index d97a001..ced9ec6 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meiri tími."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minni tími."</string>
<string name="cancel" msgid="5665114069455378395">"Hætta við"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Í lagi"</string>
<string name="done" msgid="381184316122520313">"Lokið"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Vekjarar og áminningar"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Bæta nýjum notanda við?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Þú getur búið til fleiri notendur til að deila þessu tæki með öðrum. Hver notandi hefur sitt eigið svæði sem viðkomandi getur sérsniðið með forritum, veggfóðri o.s.frv. Notendur geta einnig breytt þeim stillingum tækisins sem hafa áhrif á alla notendur, t.d. Wi-Fi.\n\nÞegar þú bætir nýjum notanda við þarf sá notandi að setja upp svæðið sitt.\n\nHvaða notandi sem er getur uppfært forrit fyrir alla aðra notendur. Ekki er tryggt að stillingar á aðgengi og þjónustu flytjist yfir á nýja notandann."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Þegar þú bætir nýjum notanda við þarf sá notandi að setja upp svæðið sitt.\n\nHvaða notandi sem er getur uppfært forrit fyrir alla aðra notendur."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Viltu veita þessum notanda stjórnandaheimildir?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Sem stjórnandi getur viðkomandi stjórnað öðrum notendum, breytt tækjastillingum og núllstillt tækið."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Setja notanda upp núna?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Gakktu úr skugga um að notandinn geti tekið tækið og sett upp sitt svæði"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Setja upp snið núna?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Þetta opnar nýja gestalotu og eyðir öllum forritum og gögnum úr núverandi lotu"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Loka gestastillingu?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Þetta eyðir forritum og gögnum úr núverandi gestalotu"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Veita þessum notanda stjórnandaheimildir"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ekki veita þessum notanda stjórnandaheimildir"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Hætta"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vista aðgerðir úr gestalotu?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Þú getur vistað aðgerðir úr núverandi lotu eða eytt öllum forritum og gögnum"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 17d9edb..7829bd2 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -213,8 +213,8 @@
<item msgid="6946761421234586000">"400%"</item>
</string-array>
<string name="choose_profile" msgid="343803890897657450">"Scegli profilo"</string>
- <string name="category_personal" msgid="6236798763159385225">"Personali"</string>
- <string name="category_work" msgid="4014193632325996115">"Di lavoro"</string>
+ <string name="category_personal" msgid="6236798763159385225">"Personale"</string>
+ <string name="category_work" msgid="4014193632325996115">"Lavoro"</string>
<string name="development_settings_title" msgid="140296922921597393">"Opzioni sviluppatore"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"Attiva Opzioni sviluppatore"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"Imposta opzioni per lo sviluppo di applicazioni"</string>
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Più tempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Meno tempo."</string>
<string name="cancel" msgid="5665114069455378395">"Annulla"</string>
+ <string name="next" msgid="2699398661093607009">"Avanti"</string>
+ <string name="back" msgid="5554327870352703710">"Indietro"</string>
+ <string name="save" msgid="3745809743277153149">"Salva"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Fine"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Sveglie e promemoria"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Aggiungere un nuovo utente?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Puoi condividere il dispositivo con altre persone creando altri utenti. Ogni utente ha un proprio spazio personalizzabile con app, sfondo e così via. Gli utenti possono anche regolare le impostazioni del dispositivo, come il Wi‑Fi, che riguardano tutti.\n\nQuando crei un nuovo utente, la persona in questione deve configurare il proprio spazio.\n\nQualsiasi utente può aggiornare le app per tutti gli altri utenti. I servizi e le impostazioni di accessibilità non potranno essere trasferiti al nuovo utente."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Il nuovo utente, una volta aggiunto, deve configurare il proprio spazio.\n\nQualsiasi utente può aggiornare le app per tutti gli altri."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Concedere privilegi amministrativi all\'utente?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"In qualità di amministratore, l\'utente potrà gestire altri utenti, modificare le impostazioni del dispositivo e ripristinare i dati di fabbrica di quest\'ultimo."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Vuoi impostare questo utente come amministratore?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Gli amministratori hanno privilegi speciali che altri utenti non hanno. Un amministratore può gestire tutti gli utenti, aggiornare o resettare questo dispositivo, modificare le impostazioni, vedere tutte le app installate e concedere o revocare privilegi amministrativi per altri utenti."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Imposta come amministratore"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurare l\'utente ora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Assicurati che la persona sia disponibile a prendere il dispositivo e configurare il suo spazio"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurare il profilo ora?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Verrà avviata una nuova sessione Ospite e verranno eliminati tutti i dati e le app della sessione corrente"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Vuoi uscire da modalità Ospite?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Verranno eliminati i dati e le app della sessione Ospite corrente"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Concedi privilegi amministrativi all\'utente"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Non concedere privilegi amministrativi all\'utente"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Sì, imposta come amministratore"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"No, non impostare come amministratore"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Esci"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vuoi salvare l\'attività Ospite?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Puoi salvare l\'attività della sessione corrente o eliminare tutti i dati e le app"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index c38111a..30a79de 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"יותר זמן."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"פחות זמן."</string>
<string name="cancel" msgid="5665114069455378395">"ביטול"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"אישור"</string>
<string name="done" msgid="381184316122520313">"סיום"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"שעונים מעוררים ותזכורות"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"להוסיף משתמש חדש?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ניתן לשתף מכשיר זה עם אנשים אחרים על ידי יצירת משתמשים נוספים. לכל משתמש מרחב משלו, שאותו אפשר להתאים אישית בעזרת אפליקציות, טפט ופריטים נוספים. המשתמשים יכולים גם להתאים הגדרות של המכשיר כגון Wi‑Fi, שמשפיעות על כולם.\n\nכשמוסיפים משתמש חדש, על משתמש זה להגדיר את המרחב שלו.\n\nכל אחד מהמשתמשים יכול לעדכן אפליקציות לכל שאר המשתמשים. ייתכן שהגדרות ושירותים של נגישות לא יועברו למשתמש החדש."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"כשמוסיפים משתמש חדש, המשתמש הזה צריך להגדיר את המרחב שלו.\n\nכל משתמש יכול לעדכן אפליקציות עבור כל המשתמשים האחרים."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"לתת למשתמש הזה הרשאות אדמין?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"בתור אדמין, המשתמש יוכל לנהל משתמשים אחרים, לשנות את הגדרות המכשיר ולאפס את המכשיר להגדרות המקוריות."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"האם להגדיר משתמש עכשיו?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"כדאי לוודא שהמשתמש זמין ויכול לקחת את המכשיר ולהגדיר את המרחב שלו"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"האם להגדיר פרופיל עכשיו?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"הפעולה הזו תתחיל גלישה חדשה כאורח ותמחק את כל האפליקציות והנתונים מהסשן הנוכחי"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"לצאת ממצב אורח?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"הפעולה הזו תמחק את האפליקציות והנתונים מהגלישה הנוכחית כאורח"</string>
- <string name="grant_admin" msgid="4273077214151417783">"אני רוצה לתת הרשאות אדמין למשתמש הזה"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"אני לא רוצה לתת הרשאות אדמין למשתמש הזה"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"יציאה"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"לשמור את פעילות האורח?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"אפשר לשמור את הפעילות מהסשן הנוכחי או למחוק את כל האפליקציות והנתונים"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index a7635c7..f0e632a 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"長くします。"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"短くします。"</string>
<string name="cancel" msgid="5665114069455378395">"キャンセル"</string>
+ <string name="next" msgid="2699398661093607009">"次へ"</string>
+ <string name="back" msgid="5554327870352703710">"戻る"</string>
+ <string name="save" msgid="3745809743277153149">"保存"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"完了"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"アラームとリマインダー"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"新しいユーザーを追加しますか?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"追加ユーザーを作成して、このデバイスを他のユーザーと共有できます。各ユーザーは各自のスペースを所有して、アプリや壁紙などのカスタマイズを行うことができます。Wi-Fi など、すべてのユーザーに影響するデバイス設定を変更することもできます。\n\n新しく追加したユーザーは各自でスペースをセットアップする必要があります。\n\nすべてのユーザーがアプリを更新でき、その影響は他のユーザーにも及びます。ユーザー補助機能の設定とサービスは新しいユーザーに適用されないことがあります。"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"新しく追加したユーザーは各自でスペースをセットアップする必要があります。\n\nすべてのユーザーがアプリを更新でき、その影響は他のユーザーにも及びます。"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"このユーザーに管理者権限を付与しますか?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"管理者は、他のユーザーの管理、デバイスの設定の変更、デバイスの出荷時設定へのリセットを行えます。"</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"このユーザーを管理者にしますか?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"管理者には、他のユーザーにはない特別な権限が与えられます。管理者は、すべてのユーザーの管理、このデバイスの更新やリセット、設定の変更、インストール済みのすべてのアプリの確認、他のユーザーに対する管理者権限の許可や取り消しを行えます。"</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"管理者にする"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ユーザーを今すぐセットアップ"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ユーザーがデバイスを使って各自のスペースをセットアップできるようにします"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"プロファイルを今すぐセットアップしますか?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"新しいゲスト セッションが開始し、現在のセッションのすべてのアプリとデータが削除されます"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ゲストモードを終了しますか?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"現在のゲスト セッションからすべてのアプリとデータが削除されます"</string>
- <string name="grant_admin" msgid="4273077214151417783">"このユーザーに管理者権限を付与します"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ユーザーに管理者権限を付与しません"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"はい、管理者にします"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"いいえ、管理者にしません"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"終了"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ゲストアクティビティの保存"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"現在のセッションのアクティビティの保存や、すべてのアプリとデータの削除を行えます"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 568d061..99ee13a 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"მეტი დრო."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ნაკლები დრო."</string>
<string name="cancel" msgid="5665114069455378395">"გაუქმება"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"კარგი"</string>
<string name="done" msgid="381184316122520313">"მზადაა"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"მაღვიძარები და შეხსენებები"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"დაემატოს ახალი მომხმარებელი?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"დამატებითი მომხმარებლების შექმნით, შეგიძლიათ ეს მოწყობილობა სხვებს გაუზიაროთ. ყოველ მომხმარებელს თავისი სივრცე აქვს, რომლის პერსონალიზება შეუძლია საკუთარი აპებით, ფონით და ა.შ. მომხმარებლებს აგრეთვე შეუძლიათ ისეთი პარამეტრების მორგება, როგორიცაა Wi‑Fi, რაც ყველაზე გავრცელდება.\n\nახალი მომხმარებლის დამატების შემდეგ, მომხმარებელმა საკუთარი სივრცე უნდა დააყენოს.\n\nყველა მომხმარებელი შეძლებს აპების ყველა სხვა მომხმარებლისთვის განახლებას. მარტივი წვდომის პარამეტრები/სერვისები შესაძლოა ახალ მომხმარებლებზე არ გავრცელდეს."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ახალი მომხმარებლის დამატებისას, ამ მომხმარებელს საკუთარი სივრცის შექმნა მოუწევს.\n\nნებისმიერ მომხმარებელს შეუძლია აპები ყველა სხვა მომხმარებლისათვის განაახლოს."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"მისცემთ ამ მომხმ. ადმ. პრივ.?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ადმინისტრატორის როლში ისინი შეძლებენ სხვა მომხმარებლების მართვას, მოწყობილობის პარამეტრების მოდიფიკაციას და მოწყობილობის ქარხნული პარამეტრების დაბრუნებას."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"გსურთ მომხმარებლის პარამეტრების დაყენება?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"დარწმუნდით, რომ პირს შეუძლია მოწყობილობის აღება და საკუთარი სივრცის დაყენება"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"გსურთ დავაყენო პროფილი ახლა?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ამ ქმედებით დაიწყება სტუმრის ახალი სესია და წაიშლება ყველა აპი და მონაცემი მიმდინარე სესიიდან"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"გსურთ სტუმრის რეჟიმიდან გასვლა?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ეს ქმედება წაშლის აპებსა და მონაცემებს სტუმრის რეჟიმის მიმდინარე სესიიდან"</string>
- <string name="grant_admin" msgid="4273077214151417783">"მიეცეს ამ მომხმარებელს ადმინისტრატორის პრივილეგიები"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"არ მიეცეს ამ მომხმარებელს ადმინისტრატორის პრივილეგიები"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"გასვლა"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"გსურთ სტუმრის აქტივობის შენახვა?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"შეგიძლიათ შეინახოთ აქტივობა მიმდინარე სესიიდან ან წაშალოთ ყველა აპი და მონაცემი"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 414ad01..c6381d6 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -86,7 +86,7 @@
<string name="bluetooth_disconnecting" msgid="7638892134401574338">"Ажыратылуда…"</string>
<string name="bluetooth_connecting" msgid="5871702668260192755">"Жалғауда..."</string>
<string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды"</string>
- <string name="bluetooth_pairing" msgid="4269046942588193600">"Жұптауда..."</string>
+ <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_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (телефонсыз не аудиосыз)"</string>
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Бас тарту"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Жұптасқан кезде, контактілеріңіз бен қоңыраулар тарихын көру мүмкіндігі беріледі."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> жұпталу орындалмады."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысымен жұптаса алмады, себебі PIN немесе рұқсат кілті дұрыс емес."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысымен жұптаса алмады, себебі PIN немесе кіру кілті дұрыс емес."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысымен қатынаса алмайды"</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысы жұпталудан бас тартты."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компьютер"</string>
@@ -163,9 +163,9 @@
<string name="data_usage_uninstalled_apps" msgid="1933665711856171491">"Алынған қолданбалар"</string>
<string name="data_usage_uninstalled_apps_users" msgid="5533981546921913295">"Алынған қолданбалар және пайдаланушылар"</string>
<string name="data_usage_ota" msgid="7984667793701597001">"Жүйелік жаңарту"</string>
- <string name="tether_settings_title_usb" msgid="3728686573430917722">"USB тетеринг"</string>
+ <string name="tether_settings_title_usb" msgid="3728686573430917722">"USB-тетеринг"</string>
<string name="tether_settings_title_wifi" msgid="4803402057533895526">"Алынбалы хот-спот"</string>
- <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Bluetooth тетеринг"</string>
+ <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Bluetooth-тетеринг"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"Тетеринг"</string>
<string name="tether_settings_title_all" msgid="8910259483383010470">"Тетеринг және алынбалы хотспот"</string>
<string name="managed_user_title" msgid="449081789742645723">"Барлық жұмыс қолданбалары"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбірек уақыт."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Азырақ уақыт."</string>
<string name="cancel" msgid="5665114069455378395">"Бас тарту"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Жарайды"</string>
<string name="done" msgid="381184316122520313">"Дайын"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Оятқыш және еске салғыш"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Жаңа пайдаланушы қосылсын ба?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Қосымша профильдер жасай отырып, бұл құрылғыны басқалармен ортақ пайдалануға болады. Әр пайдаланушы қолданбаларды, тұсқағаздарды орнатып, профилін өз қалауынша реттей алады. Сондай-ақ барлығы ортақ қолданатын Wi‑Fi сияқты параметрлерді де реттеуге болады.\n\nЖаңа пайдаланушы енгізілгенде, ол өз профилін реттеуі керек болады.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады. Арнайы мүмкіндіктерге қатысты параметрлер мен қызметтер жаңа пайдаланушыға өтпейді."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Жаңа пайдаланушыны қосқанда, сол адам өз кеңістігін реттеуі керек.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Бұл пайдаланушыға әкімші өкілеттігі берілсін бе?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Әкімші ретінде ол басқа пайдаланушыларды басқара, құрылғы параметрлерін өзгерте және құрылғыны зауыттық параметрлерге қайтара алады."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Профиль құру керек пе?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Пайдаланушы құрылғыны алып, өз профилін реттеуі керек."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайл қазір жасақталсын ба?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Мұндайда жаңа қонақ сеансы басталады және ағымдағы сеанстағы барлық қолданба мен дерек жойылады."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Қонақ режимінен шығу керек пе?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ағымдағы қонақ сеансындағы барлық қолданба мен дерек жойылады."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Бұл пайдаланушыға әкімші өкілеттігі берілсін"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Пайдаланушыға әкімші өкілеттігі берілмесін"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Шығу"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Қонақ әрекетін сақтау керек пе?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ағымдағы сеанстағы әрекетті сақтай не барлық қолданба мен деректі жоя аласыз."</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 1cbf245..5444bd1 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"រយៈពេលច្រើនជាង។"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"រយៈពេលតិចជាង។"</string>
<string name="cancel" msgid="5665114069455378395">"បោះបង់"</string>
+ <string name="next" msgid="2699398661093607009">"បន្ទាប់"</string>
+ <string name="back" msgid="5554327870352703710">"ថយក្រោយ"</string>
+ <string name="save" msgid="3745809743277153149">"រក្សាទុក"</string>
<string name="okay" msgid="949938843324579502">"យល់ព្រម"</string>
<string name="done" msgid="381184316122520313">"រួចរាល់"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ម៉ោងរោទ៍ និងការរំលឹក"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"បញ្ចូលអ្នកប្រើប្រាស់ថ្មី?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"អ្នកអាចចែករំលែកឧបករណ៍នេះជាមួយមនុស្សផ្សេងទៀតបានដោយបង្កើតអ្នកប្រើប្រាស់បន្ថែម។ អ្នកប្រើប្រាស់ម្នាក់ៗមានទំហំផ្ទុកផ្ទាល់ខ្លួនរបស់គេ ដែលពួកគេអាចប្ដូរតាមបំណងសម្រាប់កម្មវិធី ផ្ទាំងរូបភាព និងអ្វីៗផ្សេងទៀត។ អ្នកប្រើប្រាស់ក៏អាចកែសម្រួលការកំណត់ឧបករណ៍ដូចជា Wi‑Fi ដែលប៉ះពាល់ដល់អ្នកប្រើប្រាស់ផ្សេងទៀតផងដែរ។\n\nនៅពេលដែលអ្នកបញ្ចូលអ្នកប្រើប្រាស់ថ្មី បុគ្គលនោះត្រូវតែរៀបចំទំហំផ្ទុករបស់គេ។\n\nអ្នកប្រើប្រាស់ណាក៏អាចដំឡើងកំណែកម្មវិធីសម្រាប់អ្នកប្រើប្រាស់ទាំងអស់ផ្សេងទៀតបានដែរ។ ការកំណត់ភាពងាយស្រួល និងសេវាកម្មមិនអាចផ្ទេរទៅកាន់អ្នកប្រើប្រាស់ថ្មីបានទេ។"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"នៅពេលអ្នកបញ្ចូលអ្នកប្រើប្រាស់ថ្មី អ្នកប្រើប្រាស់នោះចាំបាច់ត្រូវរៀបចំលំហផ្ទាល់ខ្លួនរបស់គាត់។\n\nអ្នកប្រើប្រាស់ណាក៏អាចដំឡើងកំណែកម្មវិធីសម្រាប់អ្នកប្រើប្រាស់ទាំងអស់ផ្សេងទៀតបានដែរ។"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យអ្នកប្រើប្រាស់នេះឬ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ក្នុងនាមជាអ្នកគ្រប់គ្រង គាត់នឹងអាចគ្រប់គ្រងអ្នកប្រើប្រាស់ផ្សេងទៀត កែប្រែការកំណត់ឧបករណ៍ និងកំណត់ឧបករណ៍ដូចចេញពីរោងចក្រ។"</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យអ្នកប្រើប្រាស់នេះឬ?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"អ្នកគ្រប់គ្រងមានសិទ្ធិពិសេសដែលអ្នកប្រើប្រាស់ផ្សេងទៀតមិនមាន។ អ្នកគ្រប់គ្រងអាចគ្រប់គ្រងអ្នកប្រើប្រាស់ទាំងអស់ ធ្វើបច្ចុប្បន្នភាពឬកំណត់ឧបករណ៍នេះឡើងវិញ កែសម្រួលការកំណត់ មើលកម្មវិធីដែលបានដំឡើងទាំងអស់ និងផ្ដល់ឬដកសិទ្ធិជាអ្នកគ្រប់គ្រងសម្រាប់អ្នកផ្សេងទៀត។"</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រង"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"រៀបចំអ្នកប្រើប្រាស់ឥឡូវនេះ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"សូមប្រាកដថាអ្នកប្រើប្រាស់នេះអាចយកឧបករណ៍ និងរៀបចំទំហំផ្ទុករបស់គេបាន"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"រៀបចំប្រវត្តិរូបឥឡូវ?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ការធ្វើបែបនេះនឹងចាប់ផ្ដើមវគ្គភ្ញៀវថ្មី និងលុបកម្មវិធី និងទិន្នន័យទាំងអស់ចេញពីវគ្គបច្ចុប្បន្ន"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ចាកចេញពីមុខងារភ្ញៀវឬ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ការធ្វើបែបនេះនឹងលុបកម្មវិធី និងទិន្នន័យចេញពីវគ្គភ្ញៀវបច្ចុប្បន្ន"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យអ្នកប្រើប្រាស់នេះ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"កុំផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យអ្នកប្រើប្រាស់នេះ"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"បាទ/ចាស ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យគាត់"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"ទេ កុំផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យគាត់"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ចាកចេញ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"រក្សាទុកសកម្មភាពភ្ញៀវឬ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"អ្នកអាចរក្សាទុកសកម្មភាពពីវគ្គបច្ចុប្បន្ន ឬលុបកម្មវិធីនិងទិន្នន័យទាំងអស់"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 8071be4..f64bd53 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -214,7 +214,7 @@
</string-array>
<string name="choose_profile" msgid="343803890897657450">"ಪ್ರೊಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಿ"</string>
<string name="category_personal" msgid="6236798763159385225">"ವೈಯಕ್ತಿಕ"</string>
- <string name="category_work" msgid="4014193632325996115">"ಕೆಲಸದ ಸ್ಥಳ"</string>
+ <string name="category_work" msgid="4014193632325996115">"ಕೆಲಸ"</string>
<string name="development_settings_title" msgid="140296922921597393">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳು"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"ಅಪ್ಲಿಕೇಶನ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ಹೆಚ್ಚು ಸಮಯ."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ಕಡಿಮೆ ಸಮಯ."</string>
<string name="cancel" msgid="5665114069455378395">"ರದ್ದುಮಾಡಿ"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ಸರಿ"</string>
<string name="done" msgid="381184316122520313">"ಮುಗಿದಿದೆ"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ಅಲಾರಾಮ್ಗಳು ಮತ್ತು ರಿಮೈಂಡರ್ಗಳು"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸುವುದೇ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ನೀವು ಹೆಚ್ಚುವರಿ ಬಳಕೆದಾರರನ್ನು ರಚಿಸುವ ಮೂಲಕ ಇತರ ಜನರ ಜೊತೆಗೆ ಈ ಸಾಧನವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು. ಪ್ರತಿ ಬಳಕೆದಾರರು ತಮ್ಮದೇ ಸ್ಥಳವನ್ನು ಹೊಂದಿರುತ್ತಾರೆ, ಇದರಲ್ಲಿ ಅವರು ತಮ್ಮದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು, ವಾಲ್ಪೇಪರ್ ಮತ್ತು ಮುಂತಾದವುಗಳ ಮೂಲಕ ಕಸ್ಟಮೈಸ್ ಮಾಡಿಕೊಳ್ಳಬಹುದು. ಎಲ್ಲರ ಮೇಲೂ ಪರಿಣಾಮ ಬೀರುವಂತೆ ವೈ-ಫೈ ರೀತಿಯ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಕೆದಾರರು ಸರಿಹೊಂದಿಸಬಹುದು.\n\nನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗೆ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು. ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಸೇವೆಗಳು ಹೊಸ ಬಳಕೆದಾರರಿಗೆ ವರ್ಗಾವಣೆ ಆಗದಿರಬಹುದು."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ಈ ಬಳಕೆದಾರರಿಗೆ ನಿರ್ವಾಹಕ ಸೌಲಭ್ಯ ನೀಡಬೇಕೆ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ನಿರ್ವಾಹಕರಾಗಿ, ಅವರು ಇತರ ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಹಿಸಲು, ಸಾಧನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಮತ್ತು ಸಾಧನವನ್ನು ಫ್ಯಾಕ್ಟರಿ ರೀಸೆಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ಈಗ ಬಳಕೆದಾರರನ್ನು ಸೆಟ್ ಮಾಡುವುದೇ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ಸಾಧನವನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಮತ್ತು ಅದರ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಲು ವ್ಯಕ್ತಿಯು ಲಭ್ಯವಿದ್ದಾರೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ಇದೀಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಹೊಂದಿಸುವುದೇ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ಈ ಪ್ರಕ್ರಿಯೆಯು ಹೊಸ ಅತಿಥಿ ಸೆಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಸ್ತುತ ಸೆಶನ್ನಿಂದ ಎಲ್ಲಾ ಆ್ಯಪ್ಗಳು ಹಾಗೂ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ಅತಿಥಿ ಮೋಡ್ನಿಂದ ನಿರ್ಗಮಿಸಬೇಕೆ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ಈ ಪ್ರಕ್ರಿಯೆಯು ಪ್ರಸ್ತುತ ಅತಿಥಿ ಸೆಷನ್ನಿಂದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ಈ ಬಳಕೆದಾರರಿಗೆ ನಿರ್ವಾಹಕ ಸೌಲಭ್ಯಗಳನ್ನು ನೀಡಿ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ಬಳಕೆದಾರ ನಿರ್ವಾಹಕ ಸೌಲಭ್ಯಗಳನ್ನು ನೀಡಬೇಡಿ"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ನಿರ್ಗಮಿಸಿ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ಅತಿಥಿ ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬೇಕೆ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ನೀವು ಪ್ರಸ್ತುತ ಸೆಶನ್ನ ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬಹುದು ಅಥವಾ ಎಲ್ಲಾ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಬಹುದು"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index ad71c09..74e1cea 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"시간 늘리기"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"시간 줄이기"</string>
<string name="cancel" msgid="5665114069455378395">"취소"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"확인"</string>
<string name="done" msgid="381184316122520313">"완료"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"알람 및 리마인더"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"신규 사용자를 추가할까요?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"추가 사용자를 만들어 다른 사용자와 기기를 공유할 수 있습니다. 각 사용자는 앱, 배경화면 등으로 맞춤설정할 수 있는 자신만의 공간을 갖게 됩니다. 또한 모든 사용자에게 영향을 미치는 Wi‑Fi와 같은 기기 설정도 조정할 수 있습니다.\n\n추가된 신규 사용자는 자신의 공간을 설정해야 합니다.\n\n모든 사용자가 앱을 업데이트할 수 있으며, 업데이트는 다른 사용자에게도 적용됩니다. 접근성 설정 및 서비스는 신규 사용자에게 이전되지 않을 수도 있습니다."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"추가된 새로운 사용자는 자신의 공간을 설정해야 합니다.\n\n모든 사용자는 다른 사용자들을 위하여 앱을 업데이트할 수 있습니다."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"이 사용자에게 관리자 권한을 부여하시겠습니까?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"관리자는 다른 사용자를 관리하고 기기 설정을 수정하며 기기를 초기화할 수 있습니다."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"지금 사용자를 설정하시겠습니까?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"사용자가 기기를 사용하여 자신의 공간을 설정할 수 있도록 하세요."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"지금 프로필을 설정하시겠습니까?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"새로운 게스트 세션이 시작되고 기존 세션의 모든 앱과 데이터가 삭제됩니다."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"게스트 모드를 종료하시겠습니까?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"현재 게스트 세션의 앱과 데이터가 삭제됩니다."</string>
- <string name="grant_admin" msgid="4273077214151417783">"이 사용자에게 관리자 권한 부여"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"사용자에게 관리자 권한 부여 안 함"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"종료"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"게스트 활동을 저장하시겠습니까?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"기존 세션의 활동을 저장하거나 모든 앱과 데이터를 삭제할 수 있습니다."</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index 704f0cd..f67e0bf 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Жок"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Жупташканда байланыштарыңыз менен чалуу таржымалыңызды пайдалана аласыз."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүнө туташуу мүмкүн болгон жок."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN-код же сырсөз туура эмес болгондуктан, \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" түзмөгүнө туташуу мүмкүн болгон жок."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN-код же сырсөз туура эмес болгондуктан, \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" туташпай калды."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен байланышуу мүмкүн эмес."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Жупташтырууну <xliff:g id="DEVICE_NAME">%1$s</xliff:g> четке какты."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компьютер"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбүрөөк убакыт."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Азыраак убакыт."</string>
<string name="cancel" msgid="5665114069455378395">"Жок"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Бүттү"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ойготкучтар жана эстеткичтер"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Жаңы колдонуучу кошосузбу?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Эгер түзмөгүңүздү дагы бир адам колдонуп жаткан болсо, кошумча профилдерди түзүп коюңуз. Профилдин ээси аны өзү каалагандай тууралап, тушкагаздарды коюп, керектүү колдонмолорду орнотуп алат. Мындан тышкары, колдонуучулар түзмөктүн Wi‑Fi´ды өчүрүү/күйгүзүү сыяктуу жалпы параметрлерин өзгөртө алышат.\n\nПрофиль түзүлгөндөн кийин, аны тууралап алуу керек.\n\nЖалпы колдонмолорду баары жаңырта алат, бирок атайын мүмкүнчүлүктөр өз-өзүнчө жөндөлөт."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Жаңы колдонуучу кошулганда, ал өз мейкиндигин түзүп алышы керек.\n\nКолдонмолорду бир колдонуучу жаңыртканда, ал калган бардык колдонуучулар үчүн да жаңырат."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Бул колдонуучуга админ укуктарын бересизби?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Админ катары ал башка колдонуучуларды башкарып, түзмөктүн параметрлерин өзгөртүп жана түзмөктү баштапкы абалга кайтара алат."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Профилди жөндөйсүзбү?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Өз мейкиндигин жөндөп алышы үчүн, түзмөктү колдонуучуга беришиңиз керек."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайл азыр түзүлсүнбү?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Бул аракет жаңы конок сеансын баштап, учурдагы сеанстагы бардык колдонмолорду жана алардагы нерселерди жок кылат"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Конок режиминен чыгасызбы?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Учурдагы конок сеансындагы бардык колдонмолор менен алардагы нерселер өчүп калат"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Бул колдонуучуга админ укуктарын берүү"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Колдонуучуга админ укуктары берилбесин"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Чыгуу"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Коноктун аракеттерин сактайсызбы?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Учурдагы сеанстагы аракеттерди сактап же бардык колдонмолорду жана алардагы нерселерди жок кылсаңыз болот"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 242c855..c9a40f6 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"ຍົກເລີກ"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"ການຈັບຄູ່ຈະອະນຸຍາດໃຫ້ເຂົ້າເຖິງລາຍຊື່ຜູ່ຕິດຕໍ່ ແລະ ປະຫວັດການໂທຂອງທ່ານທຸກໆເທື່ອທີ່ເຊື່ອມຕໍ່ກັນ."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"ບໍ່ສາມາດຈັບຄູ່ກັບ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ບໍ່ສາມາດຈັບຄູ່ກັບ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້ ເພາະ PIN ຫຼື passkey ບໍ່ຖືກຕ້ອງ."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ບໍ່ສາມາດຈັບຄູ່ກັບ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້ເພາະ PIN ຫຼື ກະແຈຜ່ານບໍ່ຖືກຕ້ອງ."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"ບໍ່ສາມາດຕິດຕໍ່ສື່ສານກັບ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"ການຈັບຄູ່ຖືກປະຕິເສດໂດຍ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"ຄອມພິວເຕີ"</string>
@@ -485,7 +485,7 @@
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ຄວບຄຸມໂດຍການຕັ້ງຄ່າທີ່ຈຳກັດໄວ້"</string>
<string name="disabled" msgid="8017887509554714950">"ປິດການນຳໃຊ້"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ອະນຸຍາດແລ້ວ"</string>
- <string name="external_source_untrusted" msgid="5037891688911672227">"ບໍ່ອະນຸຍາດແລ້ວ"</string>
+ <string name="external_source_untrusted" msgid="5037891688911672227">"ບໍ່ອະນຸຍາດ"</string>
<string name="install_other_apps" msgid="3232595082023199454">"ຕິດຕັ້ງແອັບທີ່ບໍ່ຮູ້ຈັກ"</string>
<string name="home" msgid="973834627243661438">"ໜ້າທຳອິດຂອງການຕັ້ງຄ່າ"</string>
<string-array name="battery_labels">
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ເພີ່ມເວລາ."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ຫຼຸດເວລາ."</string>
<string name="cancel" msgid="5665114069455378395">"ຍົກເລີກ"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ຕົກລົງ"</string>
<string name="done" msgid="381184316122520313">"ແລ້ວໆ"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ໂມງປຸກ ແລະ ການແຈ້ງເຕືອນ"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"ເພີ່ມຜູ້ໃຊ້ໃໝ່ບໍ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ທ່ານສາມາດໃຊ້ອຸປະກອນນີ້ຮ່ວມກັບຄົນອື່ນໄດ້ໂດຍການສ້າງຜູ້ໃຊ້ເພີ່ມເຕີມ. ຜູ້ໃຊ້ແຕ່ລະຄົນຈະມີພື້ນທີ່ຂອງຕົວເອງ, ເຊິ່ງເຂົາເຈົ້າສາມາດປັບແຕ່ງແອັບ, ຮູບພື້ນຫຼັງ ແລະ ອື່ນໆໄດ້. ຜູ້ໃຊ້ຕ່າງໆ ສາມາດປັບແຕ່ງການຕັ້ງຄ່າອຸປະກອນໄດ້ ເຊັ່ນ: Wi‑Fi ທີ່ມີຜົນກະທົບທຸກຄົນ.\n\nເມື່ອທ່ານເພີ່ມຜູ້ໃຊ້ໃໝ່, ບຸກຄົນນັ້ນຈະຕ້ອງຕັ້ງຄ່າພື້ນທີ່ຂອງເຂົາເຈົ້າກ່ອນ.\n\nຜູ້ໃຊ້ໃດກໍຕາມສາມາດອັບເດດແອັບສຳລັບຜູ້ໃຊ້ຄົນອື່ນທັງໝົດໄດ້. ການຕັ້ງຄ່າການຊ່ວຍເຂົ້າເຖິງອາດບໍ່ຖືກໂອນຍ້າຍໄປໃຫ້ຜູ້ໃຊ້ໃໝ່."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ເມື່ອທ່ານເພີ່ມຜູ້ໃຊ້ໃໝ່, ຜູ້ໃຊ້ນັ້ນຈະຕ້ອງຕັ້ງຄ່າພື້ນທີ່ບ່ອນຈັດເກັບຂໍ້ມູນຂອງລາວ.\n\nຜູ້ໃຊ້ທຸກຄົນສາມາດອັບເດດແອັບສຳລັບຜູ້ໃຊ້ຄົນອື່ນທັງໝົດໄດ້."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ໃຫ້ສິດທິຜູ້ເບິ່ງແຍງລະບົບແກ່ຜູ້ໃຊ້ນີ້ບໍ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ຜູ້ເບິ່ງແຍງລະບົບຈະສາມາດຈັດການຜູ້ໃຊ້ອື່ນໆ, ແກ້ໄຂການຕັ້ງຄ່າອຸປະກອນ ແລະ ຣີເຊັດອຸປະກອນເປັນຄ່າຈາກໂຮງງານໄດ້."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ຕັ້ງຄ່າຜູ້ໃຊ້ຕອນນີ້ບໍ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ກວດສອບໃຫ້ແນ່ໃຈວ່າບຸກຄົນດັ່ງກ່າວສາມາດຮັບອຸປະກອນ ແລະ ຕັ້ງຄ່າພື້ນທີ່ຂອງພວກເຂົາໄດ້"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ຕັ້ງຄ່າໂປຣໄຟລ໌ດຽວນີ້?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ນີ້ຈະເລີ່ມໄລຍະເວລາຂອງແຂກໃໝ່ ແລະ ລຶບແອັບ ແລະ ຂໍ້ມູນທັງໝົດອອກຈາກເຊດຊັນປັດຈຸບັນ"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ອອກຈາກໂໝດແຂກບໍ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ນີ້ຈະລຶບແອັບ ແລະ ຂໍ້ມູນອອກຈາກເຊດຊັນແຂກປັດຈຸບັນ"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ໃຫ້ສິດທິຜູ້ເບິ່ງແຍງລະບົບແກ່ຜູ້ໃຊ້ນີ້"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ບໍ່ມອບສິດທິຜູ້ເບິ່ງແຍງລະບົບໃຫ້ແກ່ຜູ້ໃຊ້"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ອອກ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ບັນທຶກການເຄື່ອນໄຫວແຂກບໍ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ທ່ານສາມາດບັນທຶກການເຄື່ອນໄຫວຈາກເຊດຊັນປັດຈຸບັນ ຫຼື ລຶບແອັບ ແລະ ຂໍ້ມູນທັງໝົດໄດ້"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 7a8aff5..058065e 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daugiau laiko."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mažiau laiko."</string>
<string name="cancel" msgid="5665114069455378395">"Atšaukti"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Gerai"</string>
<string name="done" msgid="381184316122520313">"Atlikta"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Signalai ir priminimai"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Pridėti naują naudotoją?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Galite bendrinti šį įrenginį su kitais žmonėmis sukūrę papildomų naudotojų. Kiekvienam naudotojui suteikiama atskira erdvė, kurią jie gali tinkinti naudodami programas, ekrano foną ir kt. Be to, naudotojai gali koreguoti įrenginio nustatymus, pvz., „Wi‑Fi“, kurie taikomi visiems.\n\nKai pridedate naują naudotoją, šis asmuo turi nusistatyti savo erdvę.\n\nBet kuris naudotojas gali atnaujinti visų kitų naudotojų programas. Pasiekiamumo nustatymai ir paslaugos gali nebūti perkeltos naujam naudotojui."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kai pridedate naują naudotoją, šis asmuo turi nustatyti savo vietą.\n\nBet kuris naudotojas gali atnaujinti visų kitų naudotojų programas."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Suteikti šiam naudotojui administratoriaus privilegijas?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Kaip administratotorius jis galės valdyti kitus naudotojus, keisti įrenginio nustatymus ir atkurti įrenginio gamyklinius nustatymus."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Nustatyti naudotoją dabar?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Įsitikinkite, kad asmuo gali paimti įrenginį ir nustatyti savo vietą"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Nustatyti profilį dabar?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Bus pradėta nauja svečio sesija ir iš esamos sesijos bus ištrintos visos programos ir duomenys"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Išeiti iš svečio režimo?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Bus ištrintos esamos svečio sesijos programos ir duomenys"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Suteikti šiam naudotojui administratoriaus privilegijas"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nesuteikti šiam naudotojui administratoriaus privilegijų"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Išeiti"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Išsaugoti svečio veiklą?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Galite išsaugoti esamos sesijos veiklą arba ištrinti visas programas ir duomenis"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 6425e16..32d9243 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -165,7 +165,7 @@
<string name="data_usage_ota" msgid="7984667793701597001">"Sistēmas atjauninājumi"</string>
<string name="tether_settings_title_usb" msgid="3728686573430917722">"USB saistīšana"</string>
<string name="tether_settings_title_wifi" msgid="4803402057533895526">"Pārnēsājams tīklājs"</string>
- <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Bluetooth saistīšana"</string>
+ <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"Bluetooth piesaiste"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"Saistīšana"</string>
<string name="tether_settings_title_all" msgid="8910259483383010470">"Piesaiste un pārn. tīklājs"</string>
<string name="managed_user_title" msgid="449081789742645723">"Visas darba grupas"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Vairāk laika."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mazāk laika."</string>
<string name="cancel" msgid="5665114069455378395">"Atcelt"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"LABI"</string>
<string name="done" msgid="381184316122520313">"Gatavs"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Signāli un atgādinājumi"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Vai pievienot jaunu lietotāju?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Varat koplietot šo ierīci ar citām personām, izveidojot papildu lietotājus. Katram lietotājam ir sava vide, kas ir pielāgojama, izmantojot lietotnes, fona tapetes u.c. Lietotāji var pielāgot arī ierīces iestatījumus, kas attiecas uz visiem lietotājiem, piemēram, Wi‑Fi.\n\nKad pievienosiet jaunu lietotāju, viņam būs jāizveido sava vide.\n\nIkviens lietotājs var atjaunināt lietotnes citu lietotāju vietā. Pieejamības iestatījumi un pakalpojumi var netikt pārsūtīti jaunajam lietotājam."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kad pievienosiet jaunu lietotāju, viņam būs jāizveido sava vide.\n\nIkviens lietotājs var atjaunināt lietotnes citu lietotāju vietā."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Vai piešķirt šim lietotājam administratora atļaujas?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Kā administrators šis lietotājs varēs pārvaldīt citus lietotājus, mainīt ierīces iestatījumus un atiestatīt ierīcē rūpnīcas datus."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Iestatīt kontu tūlīt?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Pārliecinieties, ka persona var izmantot ierīci un iestatīt savu vidi."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vai iestatīt profilu tūlīt?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Tādējādi tiks sākta jauna viesa sesijas un visas pašreizējās sesijas lietotnes un dati tiks dzēsti"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Vai iziet no viesa režīma?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Tādējādi tiks dzēstas pašreizējās viesa sesijas lietotnes un dati."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Piešķirt šim lietotājam administratora atļaujas"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nepiešķirt lietotājam administratora atļaujas"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Iziet"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vai saglabāt viesa darbības?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Varat saglabāt pašreizējās sesijas darbības vai dzēst visas lietotnes un datus"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 558b1a3..f8a66f8 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повеќе време."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Помалку време."</string>
<string name="cancel" msgid="5665114069455378395">"Откажи"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Во ред"</string>
<string name="done" msgid="381184316122520313">"Готово"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Аларми и потсетници"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Да се додаде нов корисник?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Уредов може да го споделувате со други лица ако додадете дополнителни корисници. Секој корисник има сопствен простор што може да го приспособува со апликации, тапети и слично. Корисниците може да приспособуваат и поставки за уредот, како на пр., Wi‑Fi, што важат за сите.\n\nКога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници. Поставките и услугите за пристапност не може да се префрлат на новиот корисник."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Кога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Да му се дадат привилегии на администратор на корисников?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Како администратор, корисникот ќе може да управува со другите корисници, да ги менува поставките за уредот и да го ресетира уредот на фабрички поставки."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Ќе поставите корисник сега?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Проверете дали лицето е достапно да го земе уредот и да го постави својот простор"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Постави профил сега?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Ова ќе започне нова гостинска сесија и ќе ги избрише сите апликации и податоци од тековната сесија"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Да се излезе од режим на гостин?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ова ќе ги избрише сите апликации и податоци од тековната гостинска сесија"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Дајте му привилегии на администратор на корисников"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Не давајте му привилегии на администратор на корисников"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Излези"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Да се зачува активност на гостин?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Може да зачувате активност од тековната сесија или да ги избришете сите апликации и податоци"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 75f9037..ac4b077 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"കൂടുതൽ സമയം."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"കുറഞ്ഞ സമയം."</string>
<string name="cancel" msgid="5665114069455378395">"റദ്ദാക്കുക"</string>
+ <string name="next" msgid="2699398661093607009">"അടുത്തത്"</string>
+ <string name="back" msgid="5554327870352703710">"മടങ്ങുക"</string>
+ <string name="save" msgid="3745809743277153149">"സംരക്ഷിക്കുക"</string>
<string name="okay" msgid="949938843324579502">"ശരി"</string>
<string name="done" msgid="381184316122520313">"പൂർത്തിയായി"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"അലാറങ്ങളും റിമെെൻഡറുകളും"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"പുതിയ ഉപയോക്താവിനെ ചേർക്കണോ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"കൂടുതൽ ഉപയോക്താക്കളെ സൃഷ്ടിച്ചുകൊണ്ട് ഈ ഉപകരണം മറ്റുള്ളവരുമായി നിങ്ങൾക്ക് പങ്കിടാം. ആപ്പുകളും വാൾപേപ്പറുകളും മറ്റും ഉപയോഗിച്ച് ഇഷ്ടാനുസൃതമാക്കാൻ ഓരോ ഉപയോക്താവിനും സാധിക്കും. വൈഫൈ പോലെ എല്ലാവരെയും ബാധിക്കുന്ന ഉപകരണ ക്രമീകരണവും ഉപയോക്താക്കൾക്ക് അഡ്ജസ്റ്റ് ചെയ്യാം.\n\nനിങ്ങളൊരു പുതിയ ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ, ആ വ്യക്തി സ്വന്തമായ ഇടം സജ്ജീകരിക്കേണ്ടതുണ്ട്.\n\n ഏതെങ്കിലും ഉപയോക്താവിന് എല്ലാ ഉപയോക്താക്കൾക്കുമായി ആപ്പുകൾ അപ്ഡേറ്റ് ചെയ്യാനാകും. ഉപയോഗസഹായി ക്രമീകരണവും സേവനങ്ങളും പുതിയ ഉപയോക്താവിന് കൈമാറുകയില്ല."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"നിങ്ങൾ ഒരു പുതിയ ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ, ആ വ്യക്തി സ്വന്തമായ ഇടം സജ്ജീകരിക്കേണ്ടതുണ്ട്.\n\nമറ്റെല്ലാ ഉപയോക്താക്കൾക്കുമായി ഏതെങ്കിലും ഉപയോക്താവിന് ആപ്പുകൾ അപ്ഡേറ്റ് ചെയ്യാം."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ഈ യൂസറിന് അഡ്മിൻ പവർ നൽകണോ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ഒരു അഡ്മിൻ എന്ന നിലയിൽ, അവർക്ക് മറ്റ് ഉപയോക്താക്കളെ മാനേജ് ചെയ്യാനും ഉപകരണ ക്രമീകരണങ്ങൾ പരിഷ്കരിക്കാനും ഉപകരണം ഫാക്ടറി റീസെറ്റ് ചെയ്യാനും കഴിയും."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"ഈ ഉപയോക്താവിനെ അഡ്മിൻ ആക്കണോ?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"മറ്റ് ഉപയോക്താക്കൾക്ക് ഇല്ലാത്ത പ്രത്യേക അധികാരങ്ങൾ അഡ്മിനുകൾക്കുണ്ട്. അഡ്മിന് എല്ലാ ഉപയോക്താക്കളെയും മാനേജ് ചെയ്യാനും ഈ ഉപകരണം അപ്ഡേറ്റ് അല്ലെങ്കിൽ റീസെറ്റ് ചെയ്യാനും ക്രമീകരണം പരിഷ്കരിക്കാനും ഇൻസ്റ്റാൾ ചെയ്ത എല്ലാ ആപ്പുകളും കാണാനും മറ്റുള്ളവർക്ക് അഡ്മിന്റെ പ്രത്യേക അധികാരങ്ങൾ അനുവദിക്കുകയോ റദ്ദാക്കുകയോ ചെയ്യാനും കഴിയും."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"അഡ്മിൻ ആക്കുക"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ഉപയോക്താവിനെ ഇപ്പോൾ സജ്ജീകരിക്കണോ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ഉപകരണം എടുത്ത് ഇടം സജ്ജീകരിക്കുന്നതിന് വ്യക്തി ലഭ്യമാണെന്ന് ഉറപ്പാക്കുക"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ഇപ്പോൾ പ്രൊഫൈൽ സജ്ജീകരിക്കണോ?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ഇത് പുതിയൊരു അതിഥി സെഷൻ ആരംഭിക്കുകയും നിലവിലെ സെഷനിൽ നിന്ന് എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കുകയും ചെയ്യും"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"അതിഥി മോഡിൽ നിന്ന് പുറത്തുകടക്കണോ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"നിലവിലെ അതിഥി സെഷനിൽ നിന്ന് ആപ്പുകളും ഡാറ്റയും ഇത് ഇല്ലാതാക്കും"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ഈ ഉപയോക്താവിന് പ്രത്യേക അഡ്മിൻ അധികാരം നൽകൂ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ഉപയോക്താവിന് അഡ്മിന്റെ പ്രത്യേക അധികാരങ്ങൾ നൽകരുത്"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"ശരി, അവരെ അഡ്മിനാക്കുക"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"വേണ്ട, അവരെ അഡ്മിൻ ആക്കേണ്ടതില്ല"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"പുറത്തുകടക്കുക"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"അതിഥി ആക്റ്റിവിറ്റി സംരക്ഷിക്കണോ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"നിലവിലെ സെഷനിൽ നിന്നുള്ള ആക്റ്റിവിറ്റി സംരക്ഷിക്കാം അല്ലെങ്കിൽ എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കാം"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index e53992a..80ca5fd 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Цуцлах"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Хослуулснаар холбогдсон үед таны харилцагчид болон дуудлагын түүхэд хандах боломжтой."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-тай хослуулж чадсангүй."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Буруу ПИН эсхүл дамжих түлхүүрээс шалтгаалан <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-тай хослуулж чадсангүй."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Буруу ПИН эсхүл нэвтрэх түлхүүрээс шалтгаалан <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-тай хослуулж чадсангүй."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-тай холбоо барих боломжгүй."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Хослуулахаас <xliff:g id="DEVICE_NAME">%1$s</xliff:g> татгалзсан."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компьютер"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Их хугацаа."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Бага хугацаа."</string>
<string name="cancel" msgid="5665114069455378395">"Цуцлах"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Болсон"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Сэрүүлэг болон сануулагч"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Шинэ хэрэглэгч нэмэх үү?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Та нэмэлт хэрэглэгч үүсгэх замаар бусад хүмүүстэй энэ төхөөрөмжийг хуваалцаж болно. Хэрэглэгч тус бүр апп, дэлгэцийн зураг болон бусад зүйлээ өөрчлөх боломжтой хувийн орон зайтай байна. Түүнчлэн хэрэглэгч нь бүх хэрэглэгчид нөлөөлөх боломжтой Wi-Fi зэрэг төхөөрөмжийн тохиргоог өөрчлөх боломжтой.\n\nХэрэв та шинэ хэрэглэгч нэмэх бол тухайн хүн хувийн орон зайгаа бүрдүүлэх ёстой.\n\nХэрэглэгч бүр бусад бүх хэрэглэгчийн өмнөөс апп шинэчилж болно. Хандалтын тохиргоо болон үйлчилгээг шинэ хэрэглэгчид шилжүүлэх боломжгүй байж болзошгүй."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Энэ хэрэглэгчид админы эрх өгөх үү?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Админы хувьд тэр бусад хэрэглэгчийг удирдах, төхөөрөмжийн тохиргоог өөрчлөх болон төхөөрөмжийг үйлдвэрийн тохиргоонд шинэчлэх боломжтой болно."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Хэрэглэгчийг одоо тохируулах уу?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Хэрэглэгч төхөөрөмжийг авч өөрийн профайлыг тохируулах боломжтой эсэхийг шалгана уу"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайлыг одоо тохируулах уу?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Энэ нь шинэ зочны харилцан үйлдэл эхлүүлж, одоогийн харилцан үйлдлээс бүх апп болон өгөгдлийг устгана"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Зочны горимоос гарах уу?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Энэ нь одоогийн зочны харилцан үйлдлээс аппууд болон өгөгдлийг устгана"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Энэ хэрэглэгчид админы эрх өгөх"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Энэ хэрэглэгчид админы эрх өгөхгүй"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Гарах"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Зочны үйл ажиллагааг хадгалах уу?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Та одоогийн харилцан үйлдлээс үйл ажиллагаа хадгалах эсвэл бүх апп, өгөгдлийг устгаж болно"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index aa2eae4..3836e17 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"जास्त वेळ."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कमी वेळ."</string>
<string name="cancel" msgid="5665114069455378395">"रद्द करा"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ठीक आहे"</string>
<string name="done" msgid="381184316122520313">"पूर्ण झाले"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"अलार्म आणि रिमाइंडर"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"नवीन वापरकर्ता जोडायचा?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"अतिरिक्त वापरकर्ते तयार करून तुम्ही इतर लोकांसोबत हे डिव्हाइस शेअर करू शकता. प्रत्येक वापरकर्त्यास त्यांची स्वतःची स्पेस असते, जी ते अॅप्स, वॉलपेपर आणि यासारख्या गोष्टींनी कस्टमाइझ करू शकतात. वापरकर्ते प्रत्येकाला प्रभावित करणाऱ्या वाय-फाय सारख्या डिव्हाइस सेटिंग्ज अॅडजस्ट देखील करू शकतात.\n\nतुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीला त्याची स्पेस सेट अप करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप अपडेट करू शकतो. अॅक्सेसिबिलिटी सेटिंग्ज आणि सेवा नवीन वापरकर्त्याला कदाचित ट्रान्सफर होणार नाहीत."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"तुम्ही एक नवीन वापरकर्ता जोडता तेव्हा, त्या व्यक्तीस त्यांचे स्थान सेट करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप्स अपडेट करू शकतो."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"वापरकर्त्याला ॲडमिन विशेषाधिकार द्यायचे?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ॲडमिन असल्याने ते इतर वापरकर्त्यांना व्यवस्थापित करू शकतात, डिव्हाइस सेटिंग्ज सुधारित करू शकतात आणि डिव्हाइसला फॅक्टरी रीसेट करू शकतात."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"आता वापरकर्ता सेट करायचा?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"तो वापरकर्ता डिव्हाइसजवळ आहे आणि त्याचे स्थान सेट करण्यासाठी उपलब्ध आहे याची खात्री करा"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"आता प्रोफाईल सेट करायचा?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"हे नवीन अतिथी सत्र सुरू करेल आणि सध्याच्या सत्रातील सर्व अॅप्स व डेटा हटवेल"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"अतिथी मोडमधून बाहेर पडायचे का?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"हे सध्याच्या अतिथी सत्रातील अॅप्स आणि डेटा हटवेल"</string>
- <string name="grant_admin" msgid="4273077214151417783">"या वापरकर्त्याला ॲडमिनचे विशेषाधिकार द्या"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"या वापरकर्त्याला ॲडमिनचे विशेषाधिकार देऊ नका"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"बाहेर पडा"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"अतिथी अॅक्टिव्हिटी सेव्ह करायची का?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"सध्याच्या सत्रातील अॅक्टिव्हिटी सेव्ह करू किंवा सर्व अॅप्स व डेटा हटवू शकता"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 78f5121..2c3bb50 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lagi masa."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kurang masa."</string>
<string name="cancel" msgid="5665114069455378395">"Batal"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Selesai"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Penggera dan peringatan"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Tambah pengguna baharu?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Anda boleh berkongsi peranti ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna mempunyai ruang mereka sendiri, yang boleh diperibadikan dengan apl, kertas dinding dan sebagainya. Pengguna juga boleh melaraskan tetapan peranti seperti Wi-Fi yang akan memberi kesan kepada semua orang.\n\nApabila anda menambah pengguna baharu, orang itu perlu menyediakan ruang mereka.\n\nMana-mana pengguna boleh mengemas kini apl untuk semua pengguna lain. Tetapan dan perkhidmatan kebolehaksesan tidak boleh dipindahkan kepada pengguna baharu."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Apabila anda menambah pengguna baharu, orang itu perlu menyediakan ruang mereka.\n\nMana-mana pengguna boleh mengemas kini apl untuk semua pengguna lain."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Berikan keistimewaan pentadbir kepada pengguna ini?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Sebagai pentadbir, mereka dapat mengurus pengguna lain, mengubah suai tetapan peranti dan membuat tetapan semula kilang pada peranti."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Sediakan pengguna sekarang?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Pastikan orang itu tersedia untuk mengambil peranti dan menyediakan ruangan"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Sediakan profil sekarang?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Tindakan ini akan memulakan sesi tetamu baharu dan memadamkan semua apl dan data daripada sesi semasa"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Keluar daripada mod tetamu?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Tindakan ini akan memadamkan apl dan data daripada sesi tetamu semasa"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Berikan keistimewaan pentadbir kepada pengguna ini"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Jangan berikan keistimewaan pentadbir kepada pengguna"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Keluar"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Simpan aktiviti tetamu?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Anda boleh menyimpan aktiviti daripada sesi semasa atau memadamkan semua apl dan data"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index ee27607..e09afe5 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -107,8 +107,8 @@
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ဖိုင်လွဲပြောင်းခြင်း"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"ထည့်သွင်းသော စက်"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"အင်တာနက်ချိတ်ဆက်ခြင်း"</string>
- <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"အဆက်အသွယ်၊ ယခင်ခေါ်ဆိုမှုများ မျှဝေခြင်း"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"အဆက်အသွယ်နှင့် ယခင်ခေါ်ဆိုမှုများ မျှဝေရန် သုံးသည်"</string>
+ <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"အဆက်အသွယ်၊ ခေါ်ဆိုမှုမှတ်တမ်း မျှဝေခြင်း"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"အဆက်အသွယ်နှင့် ခေါ်ဆိုမှုမှတ်တမ်း မျှဝေရန် သုံးသည်"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"အင်တာနက်ဆက်သွယ်မှု မျှဝေခြင်း"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"မိုဘိုင်းမက်ဆေ့ဂျ်များ"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM အသုံးပြုခြင်း"</string>
@@ -166,8 +166,8 @@
<string name="tether_settings_title_usb" msgid="3728686573430917722">"USB သုံး၍ချိတ်ဆက်ခြင်း"</string>
<string name="tether_settings_title_wifi" msgid="4803402057533895526">"ရွေ့လျားနိုင်သောဟော့စပေါ့"</string>
<string name="tether_settings_title_bluetooth" msgid="916519902721399656">"ဘလူးတုသ်သုံးချိတ်ဆက်ခြင်း"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"မိုဘိုင်းသုံးတွဲချိတ်ခြင်း"</string>
- <string name="tether_settings_title_all" msgid="8910259483383010470">"တဆင့်ချိတ်ဆက်ခြင်း၊ ဟော့စပေါ့"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"မိုဘိုင်းသုံး၍ ချိတ်ဆက်ခြင်း"</string>
+ <string name="tether_settings_title_all" msgid="8910259483383010470">"မိုဘိုင်းမိုဒမ်၊ ဟော့စပေါ့"</string>
<string name="managed_user_title" msgid="449081789742645723">"အလုပ်သုံးအက်ပ်များအားလုံး"</string>
<string name="unknown" msgid="3544487229740637809">"မသိ"</string>
<string name="running_process_item_user_label" msgid="3988506293099805796">"အသုံးပြုသူ- <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
@@ -220,7 +220,7 @@
<string name="development_settings_summary" msgid="8718917813868735095">"အပလီကေးရှင်းတိုးတက်မှုအတွက် ရွေးချယ်မှုကိုသတ်မှတ်သည်"</string>
<string name="development_settings_not_available" msgid="355070198089140951">"ဤအသုံးပြုသူအတွက် ဆော့ဖ်ဝဲရေးသူ ရွေးစရာများ မရနိုင်ပါ"</string>
<string name="vpn_settings_not_available" msgid="2894137119965668920">"ဤ အသုံးပြုသူ အတွက် VPN ဆက်တင်များကို မရယူနိုင်"</string>
- <string name="tethering_settings_not_available" msgid="266821736434699780">"ဤ အသုံးပြုသူ အတွက် ချိတ်တွဲရေး ဆက်တင်များကို မရယူနိုင်"</string>
+ <string name="tethering_settings_not_available" msgid="266821736434699780">"ဤအသုံးပြုသူအတွက် မိုဘိုင်းသုံး၍ ချိတ်ဆက်ခြင်း ဆက်တင်များ မရနိုင်ပါ"</string>
<string name="apn_settings_not_available" msgid="1147111671403342300">"ဤ အသုံးပြုသူ အတွက် ဝင်လိုသည့် နေရာ အမည်၏ ဆက်တင်များကို မရယူနိုင်"</string>
<string name="enable_adb" msgid="8072776357237289039">"USB အမှားရှာခြင်း"</string>
<string name="enable_adb_summary" msgid="3711526030096574316">"USB နှင့်ချိတ်ထားလျှင် အမှားရှာဖွေဖယ်ရှားမှုစနစ် စတင်ရန်"</string>
@@ -272,7 +272,7 @@
<string name="wifi_scan_throttling" msgid="2985624788509913617">"Wi‑Fi ရှာဖွေခြင်း ထိန်းချုပ်မှု"</string>
<string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Wi‑Fi ပြောင်းလဲသော MAC ကျပန်းပြုလုပ်ခြင်း"</string>
<string name="mobile_data_always_on" msgid="8275958101875563572">"မိုဘိုင်းဒေတာကို အမြဲဖွင့်ထားရန်"</string>
- <string name="tethering_hardware_offload" msgid="4116053719006939161">"ဖုန်းကို မိုဒမ်အဖြစ်အသုံးပြုမှု စက်ပစ္စည်းဖြင့် အရှိန်မြှင့်တင်ခြင်း"</string>
+ <string name="tethering_hardware_offload" msgid="4116053719006939161">"မိုဘိုင်းသုံး၍ ချိတ်ဆက်ရန် စက်ပစ္စည်း အရှိန်မြှင့်တင်ခြင်း"</string>
<string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"အမည်မရှိသော ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသရန်"</string>
<string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"ပကတိ အသံနှုန်း သတ်မှတ်ချက် ပိတ်ရန်"</string>
<string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"Gabeldorsche ကို ဖွင့်ရန်"</string>
@@ -317,7 +317,7 @@
<string name="allow_mock_location_summary" msgid="179780881081354579">"ပုံစံတုတည်နေရာများကို ခွင့်ပြုရန်"</string>
<string name="debug_view_attributes" msgid="3539609843984208216">"ရည်ညွှန်းချက်စိစစ်ခြင်း မြင်ကွင်း"</string>
<string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Wi-Fi ဖွင့်ထားချိန်တွင်လည်း မိုဘိုင်းဒေတာ အမြဲတမ်းဖွင့်မည် (မြန်ဆန်သည့် ကွန်ရက် ပြောင်းခြင်းအတွက်)။"</string>
- <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"အရှိန်မြှင့်တင်ရန် မိုဘိုင်းဖုန်းသုံး ချိတ်ဆက်မျှဝေခြင်း စက်ပစ္စည်းကို ရနိုင်လျှင် သုံးပါ"</string>
+ <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"အရှိန်မြှင့်တင်ရန် မိုဘိုင်းသုံး၍ ချိတ်ဆက်သည့် စက်ပစ္စည်းကို ရနိုင်လျှင် သုံးပါ"</string>
<string name="adb_warning_title" msgid="7708653449506485728">"USB ပြသနာရှာခြင်း ခွင့်ပြုပါမလား?"</string>
<string name="adb_warning_message" msgid="8145270656419669221">"USBအမှားရှားခြင်းမှာ ဆော့ဝဲလ်ရေးသားရန်အတွက်သာ ရည်ရွယ်ပါသည်။ သင့်ကွန်ပြုတာနှင့်သင့်စက်ကြားတွင် ဒေတာများကိုကူးယူရန်၊ အကြောင်းမကြားပဲနှင့် သင့်စက်အတွင်းသို့ အပလီကေးရှင်းများထည့်သွင်းခြင်းနှင့် ဒေတာမှတ်တမ်းများဖတ်ရန်အတွက် အသုံးပြုပါ"</string>
<string name="adbwifi_warning_title" msgid="727104571653031865">"ကြိုးမဲ့ အမှားရှာပြင်ခြင်းကို ခွင့်ပြုမလား။"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"အချိန်တိုးရန်။"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"အချိန်လျှော့ရန်။"</string>
<string name="cancel" msgid="5665114069455378395">"မလုပ်တော့"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"ပြီးပြီ"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"နှိုးစက်နှင့် သတိပေးချက်များ"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"အသုံးပြုသူအသစ် ထည့်မလား။"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"နောက်ထပ် အသုံးပြုသူများ ထည့်သွင်းခြင်းဖြင့် ဤစက်ပစ္စည်းကို အခြားသူများနှင့် မျှဝေအသုံးပြုနိုင်သည်။ အသုံးပြုသူတိုင်းသည် မိမိတို့ကိုယ်ပိုင်နေရာ ရရှိမည်ဖြစ်ပြီး အက်ပ်၊ နောက်ခံပုံနှင့် အခြားအရာတို့ဖြင့် စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါမည်။ အားလုံးကို အကျိုးသက်ရောက်မှု ရှိစေနိုင်သည့် Wi-Fi ကဲ့သို့ ဆက်တင်များကိုလည်း ချိန်ညှိနိုင်ပါမည်။\n\nအသုံးပြုသူအသစ် ထည့်သည့်အခါ ထိုသူသည် မိမိ၏ကိုယ်ပိုင်နေရာကို သတ်မှတ်ရပါမည်။\n\nအသုံးပြုသူ မည်သူမဆို အခြားအသုံးပြုသူများအတွက် အက်ပ်များကို အပ်ဒိတ်လုပ်နိုင်သည်။ အများသုံးစွဲနိုင်မှုဆက်တင်များနှင့် ဝန်ဆောင်မှုများကို အသုံးပြုသူအသစ်ထံသို့ လွှဲပြောင်းပေးမည် မဟုတ်ပါ။"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"သင်က အသုံးပြုသူ အသစ် တစ်ဦးကို ထည့်ပေးလိုက်လျှင်၊ ထိုသူသည် ၎င်း၏ နေရာကို သတ်မှတ်စီစဉ်ရန် လိုအပ်မည်။\n\n အသုံးပြုသူ မည်သူမဆို ကျန်အသုံးပြုသူ အားလုံးတို့အတွက် အက်ပ်များကို အပ်ဒိတ်လုပ်ပေးနိုင်သည်။"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"အသုံးပြုသူကို စီမံသူလုပ်ပိုင်ခွင့်ပေးမလား။"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"စီမံခန့်ခွဲသူအနေဖြင့် အခြားအသုံးပြုသူများကို စီမံခြင်း၊ စက်ပစ္စည်းဆက်တင်များကို ပြင်ဆင်ခြင်းနှင့် စက်ပစ္စည်းကို စက်ရုံထုတ်အတိုင်း ပြင်ဆင်သတ်မှတ်ခြင်းတို့ ပြုလုပ်နိုင်ပါမည်။"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"အသုံးပြုသူကို ယခုသတ်မှတ်မလား။"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ထိုသူသည် ကိရိယာကိုယူ၍ ၎င်းတို့၏နေရာများကို ယခုသတ်မှတ်နိုင်ရမည်"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ယခု ကိုယ်ရေးအချက်အလက်ကို အစီအမံလုပ်မည်လား?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"၎င်းသည် ဧည့်သည် စက်ရှင်အသစ်ကို စတင်မည်ဖြစ်ပြီး လက်ရှိစက်ရှင်မှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်ပါမည်"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ဧည့်သည်မုဒ်မှ ထွက်မလား။"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"၎င်းသည် လက်ရှိဧည့်သည် စက်ရှင်မှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ဤအသုံးပြုသူကို စီမံသူလုပ်ပိုင်ခွင့်များ ပေးပါ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"အသုံးပြုသူကို စီမံသူလုပ်ပိုင်ခွင့်များ မပေးပါနှင့်"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ထွက်ရန်"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ဧည့်သည်လုပ်ဆောင်ချက် သိမ်းမလား။"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"လက်ရှိစက်ရှင်မှ လုပ်ဆောင်ချက် သိမ်းနိုင်သည် (သို့) အက်ပ်နှင့် ဒေတာအားလုံး ဖျက်နိုင်သည်"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 08c2f7b..c550e3e 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -251,7 +251,7 @@
<string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP-adresse og port"</string>
<string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"Skann QR-koden"</string>
<string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"Koble til enheten via wifi ved å skanne en QR-kode"</string>
- <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Koble til et Wifi-nettverk"</string>
+ <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Koble til et wifi-nettverk"</string>
<string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, feilsøking, utvikler"</string>
<string name="bugreport_in_power" msgid="8664089072534638709">"Snarvei til feilrapport"</string>
<string name="bugreport_in_power_summary" msgid="1885529649381831775">"Vis en knapp for generering av feilrapport i batterimenyen"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mer tid."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string>
<string name="cancel" msgid="5665114069455378395">"Avbryt"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Ferdig"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmer og påminnelser"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Vil du legge til en ny bruker?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dele denne enheten med andre folk ved å opprette flere brukere. Hver bruker har sin egen plass de kan tilpasse med apper, bakgrunner og annet. Brukere kan også justere enhetsinnstillinger, for eksempel Wifi, som påvirker alle.\n\nNår du legger til en ny bruker, må vedkommende angi innstillinger for plassen sin.\n\nAlle brukere kan oppdatere apper for alle andre brukere. Innstillinger og tjenester for tilgjengelighet overføres kanskje ikke til den nye brukeren."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Når du legger til en ny bruker, må hen konfigurere sitt eget område.\n\nAlle brukere kan oppdatere apper for alle andre brukere."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Gi administratorrettigheter?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Som administrator kan hen administrere andre brukere, endre enhetsinnstillinger og tilbakestille enheten til fabrikkstandard."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Vil du konfigurere brukeren?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Sørg for at brukeren er tilgjengelig for å konfigurere området sitt på enheten"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vil du konfigurere profilen nå?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Dette starter en ny gjesteøkt og sletter alle apper og data fra den gjeldende økten"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Vil du avslutte gjestemodus?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Dette sletter apper og data fra den gjeldende gjesteøkten"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Gi denne brukeren administratorrettigheter"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ikke gi brukeren administratorrettigheter"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Avslutt"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vil du lagre gjesteaktivitet?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Du kan lagre aktivitet fra den gjeldende økten eller slette alle apper og data"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 140fdcb..9421e71 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -106,9 +106,9 @@
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"फोन कलहरू"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"फाइल स्थानान्तरण"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"इनपुट उपकरण"</string>
- <string name="bluetooth_profile_pan" msgid="1006235139308318188">"इन्टरनेट पहुँच"</string>
- <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"कन्ट्याक्ट र कलको इतिहास सेयर गर्ने"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"कन्ट्याक्ट र कलको इतिहास सेयर गर्न प्रयोग गरियोस्"</string>
+ <string name="bluetooth_profile_pan" msgid="1006235139308318188">"इन्टरनेट एक्सेस"</string>
+ <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"कन्ट्याक्ट र कल हिस्ट्री सेयर गर्ने"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"कन्ट्याक्ट र कल हिस्ट्री सेयर गर्न प्रयोग गरियोस्"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"इन्टरनेट जडान साझेदारी गर्दै"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"टेक्स्ट म्यासेजहरू"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM पहुँच"</string>
@@ -123,7 +123,7 @@
<string name="bluetooth_opp_profile_summary_connected" msgid="2393521801478157362">"फाइल ट्रान्सफर सर्भरमा जडान गरियो"</string>
<string name="bluetooth_map_profile_summary_connected" msgid="4141725591784669181">"नक्सासँग जडित"</string>
<string name="bluetooth_sap_profile_summary_connected" msgid="1280297388033001037">"SAP मा जडित"</string>
- <string name="bluetooth_opp_profile_summary_not_connected" msgid="3959741824627764954">"फाइल ट्रान्सफर सर्भरसँग जडान गरिएको छैन"</string>
+ <string name="bluetooth_opp_profile_summary_not_connected" msgid="3959741824627764954">"फाइल ट्रान्सफर सर्भरसँग कनेक्ट गरिएको छैन"</string>
<string name="bluetooth_hid_profile_summary_connected" msgid="3923653977051684833">"इनपुट उपकरणसँग जोडिएको छ"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="380469653827505727">"इन्टरनेटमाथिको पहुँचका लागि डिभाइसमा जडान गरियो"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="3744773111299503493">"यन्त्रसँग स्थानीय इन्टरनेट जडान साझा गर्दै"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"थप समय।"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कम समय।"</string>
<string name="cancel" msgid="5665114069455378395">"रद्द गर्नुहोस्"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ठिक छ"</string>
<string name="done" msgid="381184316122520313">"सम्पन्न भयो"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"अलार्म र रिमाइन्डरहरू"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"नयाँ प्रयोगकर्ता थप्ने हो?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो डिभाइस प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता डिभाइसका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तर पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा नसर्न सक्छ।"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"तपाईंले नयाँ प्रयोगकर्ता थप्नुभयो भने ती प्रयोगकर्ताले आफ्नो स्पेस सेट गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ताले अरू प्रयोगकर्ताका एपहरू अपडेट गर्न सक्छन्।"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"यी प्रयोगकर्तालाई एड्मिनले पाउने विशेषाधिकार दिने हो?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"उहाँ एड्मिनका हैसियतले अन्य प्रयोगकर्ताहरू व्यवस्थापन गर्न, डिभाइसका सेटिङ बदल्न र डिभाइस फ्याक्ट्री रिसेट गर्न सक्नु हुने छ।"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"अहिले प्रयोगकर्ता सेटअप गर्ने हो?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"यी व्यक्ति यन्त्र यो डिभाइस चलाउन र आफ्नो ठाउँ सेट गर्न उपलब्ध छन् भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"अहिले प्रोफाइल सेटअप गर्ने हो?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"यसो गर्नाले नयाँ अतिथि सत्र सुरु हुने छ र हालको अतिथि सत्रका सबै एप तथा डेटा मेटिने छ"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"अतिथि मोडबाट बाहिरिने हो?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"यसो गर्नाले हालको अतिथि सत्रका एप तथा डेटा मेटिने छ"</string>
- <string name="grant_admin" msgid="4273077214151417783">"यी प्रयोगकर्तालाई एड्मिनले पाउने विशेषाधिकार दिनुहोस्"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"यी प्रयोगकर्तालाई एड्मिनले पाउने विशेषाधिकार नदिनुहोस्"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"बाहिरिनुहोस्"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"अतिथि सत्रमा गरिएका क्रियाकलाप सेभ गर्ने हो?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"तपाईं हालको सत्रमा गरिएका क्रियाकलाप सेभ गर्न वा सबै एप तथा डेटा मेटाउन सक्नुहुन्छ"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 64ee7ede..2cad755c 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tijd."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tijd."</string>
<string name="cancel" msgid="5665114069455378395">"Annuleren"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Klaar"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wekkers en herinneringen"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Nieuwe gebruiker toevoegen?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Je kunt dit apparaat met anderen delen door extra gebruikers te maken. Elke gebruiker heeft een eigen profiel met zelf gekozen apps, achtergrond, enzovoort. Gebruikers kunnen ook apparaatinstellingen aanpassen die van invloed zijn op alle gebruikers, zoals wifi.\n\nWanneer je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers. Toegankelijkheidsinstellingen en -services worden mogelijk niet overgezet naar de nieuwe gebruiker."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Wanneer je een nieuwe gebruiker toevoegt, moet die persoon hun eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Deze gebruiker beheerdersrechten geven?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Als beheerder kan deze persoon andere gebruikers beheren, apparaatinstellingen aanpassen en het apparaat terugzetten op de fabrieksinstellingen."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Gebruiker nu instellen?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Zorg ervoor dat de persoon het apparaat kan overnemen om een profiel in te stellen"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profiel nu instellen?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hiermee start een nieuwe gastsessie en worden alle apps en gegevens van de huidige sessie verwijderd"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Gastmodus sluiten?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Hierdoor worden apps en gegevens van de huidige gastsessie verwijderd"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Deze gebruiker beheerdersrechten geven"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Gebruiker geen beheerdersrechten geven"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sluiten"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Gastactiviteit opslaan?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Sla activiteit van de huidige sessie op of verwijder alle apps en gegevens"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index b68c1f0..2c667c3 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"ପେୟାରିଂ ଫଳରେ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଆପଣଙ୍କ ସମ୍ପର୍କଗୁଡ଼ିକୁ ଏବଂ କଲ୍ର ଇତିବୃତିକୁ ଆକସେସ୍ ମଞ୍ଜୁର ହୁଏ।"</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର୍ କରିହେଲା ନାହିଁ।"</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ଏକ ଭୁଲ୍ PIN କିମ୍ବା ପାସକୀ କାରଣରୁ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର୍ କରିପାରିଲା ନାହିଁ।"</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ଏକ ଭୁଲ PIN କିମ୍ବା ପାସକୀ ଥିବା ଯୋଗୁଁ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର କରିପାରିଲା ନାହିଁ।"</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ଯୋଗାଯୋଗ ସ୍ଥାପନା କରିପାରୁନାହିଁ।"</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ଦ୍ୱାରା ପେୟାରିଙ୍ଗ ପାଇଁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରିଦିଆଗଲା।"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"କମ୍ପ୍ୟୁଟର୍"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ଅଧିକ ସମୟ।"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"କମ୍ ସମୟ।"</string>
<string name="cancel" msgid="5665114069455378395">"ବାତିଲ"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ଠିକ୍ ଅଛି"</string>
<string name="done" msgid="381184316122520313">"ହୋଇଗଲା"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ଆଲାରାମ୍ ଏବଂ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"ନୂତନ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବେ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ଅତିରିକ୍ତ ଉପଯୋଗକର୍ତ୍ତା ଯୋଗ କରି ଆପଣ ଏହି ଡିଭାଇସକୁ ଅନ୍ୟ ଲୋକମାନଙ୍କ ସହିତ ସେୟାର କରିପାରିବେ। ପ୍ରତ୍ୟେକ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ନିଜର ସ୍ପେସ୍ ଅଛି ଯାହାକୁ ସେମାନେ ଆପ, ୱାଲପେପର୍ ଓ ଏପରି ଅନେକ କିଛି ସହିତ କଷ୍ଟମାଇଜ କରିପାରିବେ। ଉପଯୋଗକର୍ତ୍ତା ୱାଇ-ଫାଇ ଭଳି ଡିଭାଇସ ସେଟିଂସକୁ ମଧ୍ୟ ଆଡଜଷ୍ଟ କରିପାରିବେ ଯାହା ସମସ୍ତଙ୍କୁ ପ୍ରଭାବିତ କରିଥାଏ। \n\nଯେତେବେଳେ ଆପଣ ଗୋଟିଏ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବେ, ସେତେବେଳେ ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ନିଜର ସ୍ପେସ୍କୁ ସେଟଅପ କରିବାକୁ ପଡ଼ିବ। \n\nଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ଯେ କୌଣସି ଉପଯୋଗକର୍ତ୍ତା ଆପକୁ ଅପଡେଟ କରିପାରିବେ। ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସ ଏବଂ ସେବାଗୁଡ଼ିକ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ସ୍ଥାନାନ୍ତର ହୋଇନପାରେ।"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ଆପଣ ଜଣେ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବା ବେଳେ, ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ତାଙ୍କ ସ୍ପେସ ସେଟ ଅପ କରିବାକୁ ପଡ଼ିବ।\n\nଅନ୍ୟ ସମସ୍ତ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ, ଆପଗୁଡ଼ିକୁ ଯେ କୌଣସି ଉପଯୋଗକର୍ତ୍ତା ଅପଡେଟ କରିପାରିବେ।"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ଏହି ୟୁଜରଙ୍କୁ ଆଡମିନ ବିଶେଷ ଅଧିକାରଗୁଡ଼ିକ ଦେବେ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ଜଣେ ଆଡମିନ ଭାବରେ, ସେମାନେ ଅନ୍ୟ ୟୁଜରମାନଙ୍କୁ ପରିଚାଳନା କରିବା, ଡିଭାଇସ ସେଟିଂସକୁ ପରିବର୍ତ୍ତନ କରିବା ଏବଂ ଡିଭାଇସକୁ ଫେକ୍ଟୋରୀ ରିସେଟ କରିବା ପାଇଁ ସକ୍ଷମ ହେବେ।"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ଏବେ ଉପଯୋଗକର୍ତ୍ତା ସେଟଅପ କରିବେ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ସୁନିଶ୍ଚିତ କରନ୍ତୁ ଯେ, ବ୍ୟକ୍ତି ଜଣକ ଡିଭାଇସ୍ ଓ ନିଜର ସ୍ଥାନ ସେଟଅପ୍ କରିବା ପାଇଁ ଉପଲବ୍ଧ ଅଛନ୍ତି।"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ପ୍ରୋଫାଇଲ୍କୁ ଏବେ ସେଟ୍ କରିବେ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ଏହା ଏକ ନୂଆ ଅତିଥି ସେସନ ଆରମ୍ଭ କରିବ ଏବଂ ବର୍ତ୍ତମାନର ସେସନରୁ ସମସ୍ତ ଆପ୍ସ ଏବଂ ଡାଟାକୁ ଡିଲିଟ କରିବ"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ଅତିଥି ମୋଡରୁ ବାହାରି ଯିବେ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ଏହା ବର୍ତ୍ତମାନର ଅତିଥି ସେସନରୁ ଆପ୍ସ ଏବଂ ଡାଟାକୁ ଡିଲିଟ କରିବ"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ଏହି ୟୁଜରଙ୍କୁ ଆଡମିନ ବିଶେଷ ଅଧିକାରଗୁଡ଼ିକ ଦିଅନ୍ତୁ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ୟୁଜରଙ୍କୁ ଆଡମିନ ବିଶେଷ ଅଧିକାରଗୁଡ଼ିକ ଦିଅନ୍ତୁ ନାହିଁ"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ବାହାରି ଯାଆନ୍ତୁ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ଅତିଥି କାର୍ଯ୍ୟକଳାପ ସେଭ କରିବେ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ଆପଣ ଏବେର ସେସନରୁ କାର୍ଯ୍ୟକଳାପକୁ ସେଭ କରିପାରିବେ ବା ସବୁ ଆପ୍ସ ଓ ଡାଟାକୁ ଡିଲିଟ କରିପାରିବେ"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 08b0787..068d695 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"ਰੱਦ ਕਰੋ"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"ਜੋੜਾਬੱਧ ਕਰਨਾ ਕਨੈਕਟ ਕੀਤੇ ਜਾਣ ਤੇ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਪੇਅਰ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ਇੱਕ ਗਲਤ ਪਿੰਨ ਜਾਂ ਪਾਸਕੁੰਜੀ ਦੇ ਕਾਰਨ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਜੋੜਾਬੱਧ ਨਹੀਂ ਹੋ ਸਕਿਆ।"</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ਗਲਤ ਪਿੰਨ ਜਾਂ ਪਾਸਕੀ ਦੇ ਕਾਰਨ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਜੋੜਾਬੱਧ ਨਹੀਂ ਹੋ ਸਕਿਆ।"</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਚਾਰ ਨਹੀਂ ਕਰ ਸਕਦਾ।"</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"ਪੇਅਰਿੰਗ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"ਕੰਪਿਊਟਰ"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ਹੋਰ ਸਮਾਂ।"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ਘੱਟ ਸਮਾਂ।"</string>
<string name="cancel" msgid="5665114069455378395">"ਰੱਦ ਕਰੋ"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ਠੀਕ ਹੈ"</string>
<string name="done" msgid="381184316122520313">"ਹੋ ਗਿਆ"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"ਅਲਾਰਮ ਅਤੇ ਰਿਮਾਈਂਡਰ"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"ਕੀ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"ਤੁਸੀਂ ਵਾਧੂ ਵਰਤੋਂਕਾਰ ਬਣਾ ਕੇ ਹੋਰਾਂ ਲੋਕਾਂ ਨਾਲ ਇਹ ਡੀਵਾਈਸ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹੋ। ਹਰੇਕ ਵਰਤੋਂਕਾਰ ਦੀ ਆਪਣੀ ਖੁਦ ਦੀ ਜਗ੍ਹਾ ਹੁੰਦੀ ਹੈ, ਜਿਸਨੂੰ ਉਹ ਐਪਾਂ ਅਤੇ ਵਾਲਪੇਪਰ ਆਦਿ ਨਾਲ ਵਿਉਂਤਬੱਧ ਕਰ ਸਕਦੇ ਹਨ। ਵਰਤੋਂਕਾਰ ਵਾਈ-ਫਾਈ ਵਰਗੀਆਂ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਨੂੰ ਵੀ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਹਰੇਕ ਵਰਤੋਂਕਾਰ \'ਤੇ ਅਸਰ ਪੈਂਦਾ ਹੈ।\n\nਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣੀ ਜਗ੍ਹਾ ਸੈੱਟ ਅੱਪ ਕਰਨੀ ਪੈਂਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਵਰਤੋਂਕਾਰ ਬਾਕੀ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ। ਸ਼ਾਇਦ ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਨੂੰ ਕਿਸੇ ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਟ੍ਰਾਂਸਫਰ ਨਾ ਕੀਤਾ ਜਾ ਸਕੇ।"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣੀ ਜਗ੍ਹਾ ਸੈੱਟਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਵਰਤੋਂਕਾਰ ਹੋਰ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ਕੀ ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਵਿਸ਼ੇਸ਼-ਅਧਿਕਾਰ ਦੇਣੇ ਹਨ?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ਪ੍ਰਸ਼ਾਸਕ ਵਜੋਂ, ਉਹ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਣਗੇ, ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਨੂੰ ਸੋਧ ਸਕਣਗੇ ਅਤੇ ਡੀਵਾਈਸ ਨੂੰ ਫੈਕਟਰੀ ਰੀਸੈੱਟ ਕਰ ਸਕਣਗੇ।"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ਕੀ ਹੁਣ ਵਰਤੋਂਕਾਰ ਸੈੱਟ ਅੱਪ ਕਰਨਾ ਹੈ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਵਿਅਕਤੀ ਡੀਵਾਈਸ ਵਰਤਣ ਅਤੇ ਆਪਣੀ ਜਗ੍ਹਾ ਦੇ ਸੈੱਟ ਅੱਪ ਲਈ ਉਪਲਬਧ ਹੈ"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ਕੀ ਹੁਣ ਪ੍ਰੋਫਾਈਲ ਸੈੱਟ ਅੱਪ ਕਰਨੀ ਹੈ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ਇਸ ਨਾਲ ਨਵਾਂ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗਾ ਅਤੇ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ਕੀ ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਣਾ ਹੈ?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ਇਸ ਨਾਲ ਮੌਜੂਦਾ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਵਿਸ਼ੇਸ਼-ਅਧਿਕਾਰ ਦਿਓ"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਵਿਸ਼ੇਸ਼-ਅਧਿਕਾਰ ਨਾ ਦਿਓ"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ਬਾਹਰ ਜਾਓ"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ਕੀ ਮਹਿਮਾਨ ਸਰਗਰਮੀ ਰੱਖਿਅਤ ਕਰਨੀ ਹੈ?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ਤੁਸੀਂ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਦੀ ਸਰਗਰਮੀ ਨੂੰ ਰੱਖਿਅਤ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 089bc2d..f8c2c97 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -140,8 +140,8 @@
<string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SPARUJ"</string>
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Anuluj"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Sparowanie powoduje przyznanie dostępu do historii połączeń i Twoich kontaktów w trakcie połączenia."</string>
- <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nie można sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nie można sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ze względu na błędny kod PIN lub klucz."</string>
+ <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nie udało się sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nie udało się sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ze względu na błędny kod PIN lub klucz."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nie można skomunikować się z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Powiązanie odrzucone przez urządzenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Komputer"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Więcej czasu."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mniej czasu."</string>
<string name="cancel" msgid="5665114069455378395">"Anuluj"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Gotowe"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmy i przypomnienia"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Dodać nowego użytkownika?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Z tego urządzenia możesz korzystać wraz z innymi osobami, dodając na nim konta użytkowników. Każdy użytkownik ma własne miejsce na swoje aplikacje, tapety i inne dane. Może też zmieniać ustawienia, które wpływają na wszystkich użytkowników urządzenia (np. Wi‑Fi).\n\nGdy dodasz nowego użytkownika, musi on skonfigurować swoje miejsce na dane.\n\nKażdy użytkownik może aktualizować aplikacje w imieniu wszystkich pozostałych użytkowników. Ułatwienia dostępu i usługi mogą nie zostać przeniesione na konto nowego użytkownika."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Gdy dodasz nowego użytkownika, musi on skonfigurować swoją przestrzeń.\n\nKażdy użytkownik może aktualizować aplikacje wszystkich innych użytkowników."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Nadać uprawnienia administratora?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Administrator będzie mógł zarządzać innymi użytkownikami, zmieniać ustawienia urządzenia i przywracać urządzenie do ustawień fabrycznych."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Skonfigurować ustawienia dla użytkownika?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Upewnij się, że ta osoba jest w pobliżu i może skonfigurować swój profil"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Skonfigurować teraz profil?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Zostanie uruchomiona nowa sesja gościa. Wszystkie aplikacje i dane z obecnej sesji zostaną usunięte."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Zamknąć tryb gościa?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Wszystkie aplikacje i dane z obecnej sesji gościa zostaną usunięte."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Nadaj temu użytkownikowi uprawnienia administratora"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nie nadawaj uprawnień administratora"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Zamknij"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Zapisać aktywność gościa?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Możesz zapisać aktywność z obecnej sesji lub usunąć wszystkie aplikacje i dane"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 44110c2..f6ffce0 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <string name="next" msgid="2699398661093607009">"Próxima"</string>
+ <string name="back" msgid="5554327870352703710">"Voltar"</string>
+ <string name="save" msgid="3745809743277153149">"Salvar"</string>
<string name="okay" msgid="949938843324579502">"Ok"</string>
<string name="done" msgid="381184316122520313">"Concluído"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes e lembretes"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo usuário?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada usuário tem o próprio espaço, que pode ser personalizado com apps, planos de fundo, etc. Os usuários também podem ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Quando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para os demais usuários."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dar privilégios de administrador ao usuário?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administrador, essa pessoa poderá gerenciar outros usuários, modificar as configurações e redefinir o dispositivo para a configuração original."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Transformar esse usuário um administrador?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Administradores têm privilégios especiais que outros usuários não têm. Um administrador pode gerenciar todos os usuários, atualizar ou redefinir este dispositivo, modificar configurações, conferir todos os apps instalados e conceder ou revogar privilégios de administrador para outras pessoas."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Transformar o usuário em administrador"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuário agora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Certifique-se de que a pessoa está disponível para acessar o dispositivo e fazer as próprias configurações"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar perfil agora?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Essa ação vai iniciar uma nova Sessão de visitante e excluir todos os apps e dados da sessão atual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sair do modo visitante?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Essa ação vai excluir apps e dados da Sessão de visitante atual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dar privilégios de administrador ao usuário"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Não dar privilégios de administrador ao usuário"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Sim, transformar esse usuário em administrador"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Não, não transformar o usuário em administrador"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sair"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvar a atividade do visitante?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Você pode salvar a atividade da sessão atual ou excluir todos os apps e dados"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 893964b..8751ba2 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Concluir"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes e lembretes"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo utilizador?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Pode partilhar este dispositivo com outras pessoas ao criar utilizadores adicionais. Cada utilizador possui o seu próprio espaço, que pode ser personalizado com apps, imagens de fundo, etc. Os utilizadores também podem ajustar as definições do dispositivo, como o Wi‑Fi, que afetam os restantes utilizadores.\n\nAo adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar apps para todos os outros utilizadores. Os serviços e as definições de acessibilidade podem não ser transferidos para o novo utilizador."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar aplicações para todos os outros utilizadores."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dar priv. admin ao utilizador?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administradores, vão poder gerir outros utilizadores, modificar as definições do dispositivo e fazer uma reposição de fábrica do dispositivo."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o utilizador agora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Certifique-se de que a pessoa está disponível para levar o dispositivo e configurar o seu espaço"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar perfil agora?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Esta ação inicia uma nova sessão de convidado e elimina todas as apps e dados da sessão atual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sair do modo convidado?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Esta ação elimina as apps e os dados da sessão de convidado atual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dar privilégios de administrador a este utilizador"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Não dar privilégios de administrador a este utilizador"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sair"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Guardar atividade de convidado?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Pode guardar a atividade da sessão atual ou eliminar todas as apps e dados"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 44110c2..f6ffce0 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
<string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
+ <string name="next" msgid="2699398661093607009">"Próxima"</string>
+ <string name="back" msgid="5554327870352703710">"Voltar"</string>
+ <string name="save" msgid="3745809743277153149">"Salvar"</string>
<string name="okay" msgid="949938843324579502">"Ok"</string>
<string name="done" msgid="381184316122520313">"Concluído"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes e lembretes"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo usuário?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada usuário tem o próprio espaço, que pode ser personalizado com apps, planos de fundo, etc. Os usuários também podem ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Quando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para os demais usuários."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Dar privilégios de administrador ao usuário?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Como administrador, essa pessoa poderá gerenciar outros usuários, modificar as configurações e redefinir o dispositivo para a configuração original."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Transformar esse usuário um administrador?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Administradores têm privilégios especiais que outros usuários não têm. Um administrador pode gerenciar todos os usuários, atualizar ou redefinir este dispositivo, modificar configurações, conferir todos os apps instalados e conceder ou revogar privilégios de administrador para outras pessoas."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Transformar o usuário em administrador"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuário agora?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Certifique-se de que a pessoa está disponível para acessar o dispositivo e fazer as próprias configurações"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar perfil agora?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Essa ação vai iniciar uma nova Sessão de visitante e excluir todos os apps e dados da sessão atual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sair do modo visitante?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Essa ação vai excluir apps e dados da Sessão de visitante atual"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Dar privilégios de administrador ao usuário"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Não dar privilégios de administrador ao usuário"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Sim, transformar esse usuário em administrador"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Não, não transformar o usuário em administrador"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sair"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvar a atividade do visitante?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Você pode salvar a atividade da sessão atual ou excluir todos os apps e dados"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 97060f9..ae9f1aa 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mai mult timp."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mai puțin timp."</string>
<string name="cancel" msgid="5665114069455378395">"Anulează"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Gata"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarme și mementouri"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Adaugi un utilizator nou?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Poți să permiți accesul la acest dispozitiv altor persoane creând utilizatori suplimentari. Fiecare utilizator are propriul spațiu, pe care îl poate personaliza cu aplicații, imagini de fundal etc. De asemenea, utilizatorii pot ajusta setările dispozitivului, cum ar fi setările pentru Wi-Fi, care îi afectează pe toți ceilalți utilizatori.\n\nDupă ce adaugi un utilizator nou, acesta trebuie să-și configureze spațiul.\n\nOricare dintre utilizatori poate actualiza aplicațiile pentru toți ceilalți utilizatori. Este posibil ca setările de accesibilitate și serviciile să nu se transfere la noul utilizator."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Când adaugi un utilizator nou, acesta trebuie să-și configureze spațiul.\n\nOrice utilizator poate actualiza aplicațiile pentru toți ceilalți utilizatori."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Acorzi utilizatorului privilegii de administrator?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Ca administrator, va putea să gestioneze alți utilizatori, să modifice setările dispozitivului și să revină la setările din fabrică ale dispozitivului."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurezi utilizatorul acum?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Asigură-te că utilizatorul are posibilitatea de a prelua dispozitivul și de a-și configura spațiul"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurezi profilul acum?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Astfel, va începe o nouă sesiune pentru invitați și se vor șterge toate aplicațiile și datele din sesiunea actuală"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Ieși din modul pentru invitați?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Se vor șterge toate aplicațiile și datele din sesiunea pentru invitați actuală"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Acordă-i utilizatorului privilegii de administrator"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Nu îi acorda utilizatorului privilegii de administrator"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Ieși"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvezi activitatea invitatului?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Salvează activitatea din sesiunea actuală sau șterge aplicațiile și datele"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 47bf5a0..96179d7 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Увеличить продолжительность"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Уменьшить продолжительность"</string>
<string name="cancel" msgid="5665114069455378395">"Отмена"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ОК"</string>
<string name="done" msgid="381184316122520313">"Готово"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будильники и напоминания"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Добавить пользователя?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Если этим устройством пользуются сразу несколько человек, для каждого из них можно создать отдельный профиль – практически собственное пространство со своими приложениями, обоями и т. д. При этом из профиля можно поменять и настройки устройства, общие для всех, например выбрать сеть Wi-Fi.\n\nКогда вы добавляете нового пользователя, ему нужно настроить свой профиль.\n\nОбновлять общие приложения может любой пользователь, однако специальные возможности настраиваются индивидуально."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"После создания профиля его потребуется настроить.\n\nЛюбой пользователь устройства может обновлять приложения для всех аккаунтов."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Права администратора"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Как администратор, он сможет управлять другими пользователями, менять и сбрасывать настройки устройства."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Настроить профиль?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Вам потребуется передать устройство пользователю, чтобы он мог настроить свой профиль."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Настроить профиль?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"При этом начнется новый гостевой сеанс, а все данные и приложения предыдущего сеанса будут удалены."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Выйти из гостевого режима?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Все приложения и данные текущего гостевого сеанса будут удалены."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Предоставить пользователю права администратора"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Не предоставлять пользователю права администратора"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Выйти"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Сохранить историю сеанса?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Сохраните историю текущего сеанса или удалите данные и приложения."</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index fbefa92..8dfe489 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"වේලාව වැඩියෙන්."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"වේලාව අඩුවෙන්."</string>
<string name="cancel" msgid="5665114069455378395">"අවලංගු කරන්න"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"හරි"</string>
<string name="done" msgid="381184316122520313">"නිමයි"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"එලාම සහ සිහිකැඳවීම්"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"අලුත් පරිශීලකයෙක් එක් කරන්නද?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"අමතර පරිශීලකයින් නිර්මාණය කිරීම මඟින් වෙනත් පුද්ගලයන් සමඟ මෙම උපාංගය ඔබට බෙදා ගත හැකිය. සෑම පරිශීලකයෙක්ටම ඔවුන්ගේම යෙදුම්, වෝල්පේපර, සහ වෙනත් ඒවා අභිරුචි කළ හැකි තමන්ට අයිති ඉඩක් ඇත. පරිශීලකයින්ට Wi‑Fi වැනි සෑම දෙනාටම බලපාන උපාංග සැකසීම්ද සීරුමාරු කළ හැක.\n\nඔබ නව පරිශීලකයෙකු එක් කළ විට ඔවුන්ගේ ඉඩ එම පුද්ගලයා සකසා ගත යුතු වේ.\n\nඕනෑම පරිශීලකයෙකුට අනෙක් සියලු පරිශීලකයන් සඳහා යෙදුම් යාවත්කාලීන කළ හැකිය. ප්රවේශයතා සැකසීම් සහ සේවා නව පරිශීලකයා වෙත මාරු නොකරනු ඇත."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"ඔබ අලුත් පරිශීලකයෙක් එකතු කරන විට, එම පුද්ගලයා ඔහුගේ වැඩ කරන ඉඩ සකසා ගත යුතුය.\n\nසියළුම අනෙක් පරිශීලකයින් සඳහා ඕනෑම පරිශීලකයෙකුට යාවත්කාලීන කළ හැක."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"මෙම පරිශීලකයාට පරිපාලක වරප්රසාද ලබා දෙන්න ද?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"පරිපාලකයෙකු ලෙස, ඔවුන්ට වෙනත් පරිශීලකයින් කළමනාකරණය කිරීමට, උපාංග සැකසීම් වෙනස් කිරීමට සහ උපාංගය කර්මාන්තශාලා යළි සැකසීමට හැකි වනු ඇත."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"දැන් පරිශීලකයා සකසන්නද?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"උපාංගය ලබාගෙන තමන්ගේ ඉඩ සකසා ගැනීමට අදාළ පුද්ගලයා සිටින බව තහවුරු කරගන්න"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"දැන් පැතිකඩ සකසන්නද?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"මෙය නව ආගන්තුක සැසියක් ආරම්භ කර වත්මන් සැසියෙන් සියලු යෙදුම් සහ දත්ත මකනු ඇත"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ආගන්තුක ප්රකාරයෙන් පිටවන්නද?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"මෙය වත්මන් ආගන්තුක සැසියෙන් යෙදුම් සහ දත්ත මකනු ඇත"</string>
- <string name="grant_admin" msgid="4273077214151417783">"මෙම පරිශීලකයාට පරිපාලක වරප්රසාද ලබා දෙන්න"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"මෙම පරිශීලකයාට පරිපාලක වරප්රසාද ලබා නොදෙන්න"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"පිටවන්න"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ආගන්තුක ක්රියාකාරකම් සුරකින්නද?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ඔබට වත්මන් සැසියෙන් ක්රියාකාරකම් සුරැකීමට හෝ සියලු යෙදුම් සහ දත්ත මැකීමට හැකිය"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 80374e0..cbfdcef 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Dlhší čas."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kratší čas."</string>
<string name="cancel" msgid="5665114069455378395">"Zrušiť"</string>
+ <string name="next" msgid="2699398661093607009">"Ďalej"</string>
+ <string name="back" msgid="5554327870352703710">"Späť"</string>
+ <string name="save" msgid="3745809743277153149">"Uložiť"</string>
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Hotovo"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Budíky a pripomenutia"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Pridať nového používateľa?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Vytvorením ďalších používateľov môžete toto zariadenie zdieľať s inými ľuďmi. Každý používateľ má svoje prostredie, ktoré si môže prispôsobiť vlastnými aplikáciami, tapetou atď. Používatelia tiež môžu upraviť nastavenia zariadenia (napr. Wi-Fi), ktoré ovplyvnia všetkých používateľov.\n\nKeď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nAkýkoľvek používateľ môže aktualizovať aplikácie všetkých používateľov. Nastavenia dostupnosti a služby sa nemusia preniesť novému používateľovi."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Keď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nAkýkoľvek používateľ môže aktualizovať aplikácie všetkých ostatných používateľov."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Udeliť použ. spr. oprávnenia?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Ako správca bude môcť spravovať iných používateľov, meniť nastavenia zariadenia a obnoviť jeho výrobné nastavenia."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Chcete tohto používateľa nastaviť ako správcu?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Správcovia majú oproti iným používateľom špeciálne oprávnenia. Správca môže ovládať všetkých používateľov, aktualizovať alebo resetovať toto zariadenie, upravovať nastavenia, prezerať všetky nainštalované aplikácie a udeľovať či odoberať správcovské oprávnenia iným používateľom."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Nastaviť ako správcu"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Chcete teraz nastaviť používateľa?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Uistite sa, že je daná osoba k dispozícii a môže si na zariadení nastaviť svoj priestor."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Nastaviť profil?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Týmto sa spustí nová relácia hosťa a odstránia sa všetky aplikácie a údaje z aktuálnej relácie"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Chcete ukončiť režim pre hostí?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ukončí sa režim pre hostí a odstránia sa aplikácie a údaje z relácie hosťa"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Udeliť tomuto používateľovi správcovské oprávnenia"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Neudeliť tomuto používateľovi správcovské oprávnenia"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Áno, nastaviť ako správcu"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Nie, nenastaviť ako správcu"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Ukončiť"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Chcete uložiť aktivitu hosťa?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Môžte uložiť aktivitu aktuálnej relácie alebo odstrániť všetky aplikácie a údaje"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 814fa63..222f300 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daljši čas."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Krajši čas."</string>
<string name="cancel" msgid="5665114069455378395">"Prekliči"</string>
+ <string name="next" msgid="2699398661093607009">"Naprej"</string>
+ <string name="back" msgid="5554327870352703710">"Nazaj"</string>
+ <string name="save" msgid="3745809743277153149">"Shrani"</string>
<string name="okay" msgid="949938843324579502">"V redu"</string>
<string name="done" msgid="381184316122520313">"Končano"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi in opomniki"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Želite dodati uporabnika?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"To napravo lahko delite z drugimi tako, da ustvarite dodatne uporabnike. Vsak ima svoj prostor, ki ga lahko prilagodi z aplikacijami, ozadji in drugim. Uporabniki lahko tudi prilagodijo nastavitve naprave, ki vplivajo na vse, na primer nastavitve omrežja Wi-Fi.\n\nKo dodate novega uporabnika, mora ta nastaviti svoj prostor.\n\nVsak uporabnik lahko posodobi aplikacije za vse druge uporabnike. Nastavitve in storitve za dostopnost morda ne bodo prenesene v prostor novega uporabnika."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Ko dodate novega uporabnika, mora ta nastaviti svoj prostor.\n\nVsak uporabnik lahko posodobi aplikacije za vse druge uporabnike."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Naj ta uporabnik dobi skrbniške pravice?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Skrbniške pravice omogočajo upravljanje drugih uporabnikov, spreminjanje nastavitev naprave in ponastavitev naprave na tovarniške nastavitve."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"Želite tega uporabnika spremeniti v skrbnika?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"Skrbniki imajo posebne pravice, ki jih drugi uporabniki nimajo. Skrbnik lahko upravlja vse uporabnike, posodobi ali ponastavi to napravo, spreminja nastavitve, si ogleduje vse nameščene aplikacije ter odobri ali zavrne skrbniške pravice za druge."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"Spremeni v skrbnika"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Želite uporabnika nastaviti zdaj?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Prepričajte se, da ima oseba čas za nastavitev svojega prostora."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Želite zdaj nastaviti profil?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"S tem boste začeli novo sejo gosta ter izbrisali vse aplikacije in podatke v trenutni seji."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Želite zapreti način za goste?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"S tem boste izbrisali aplikacije in podatke v trenutni seji gosta."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Temu uporabniku podeli skrbniške pravice"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Uporabniku ne podeli skrbniških pravic"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"Da, spremeni v skrbnika"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"Ne, ne spremeni v skrbnika"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Zapri"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Želite shraniti dejavnost gosta?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Lahko shranite dejavnost v trenutni seji ali izbrišete vse aplikacije in podatke."</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 5897466..f5cfb95 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Më shumë kohë."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Më pak kohë."</string>
<string name="cancel" msgid="5665114069455378395">"Anulo"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Në rregull"</string>
<string name="done" msgid="381184316122520313">"U krye"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmet dhe alarmet rikujtuese"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Të shtohet përdorues i ri?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Mund ta ndash këtë pajisje me persona të tjerë duke krijuar përdorues shtesë. Çdo përdorues ka hapësirën e vet, të cilën mund ta personalizojë me aplikacione, me imazhin e sfondit etj. Përdoruesit mund të rregullojnë po ashtu cilësimet e pajisjes, si Wi‑Fi, të cilat ndikojnë te të gjithë.\n\nKur shton një përdorues të ri, ai person duhet të konfigurojë hapësirën e vet.\n\nÇdo përdorues mund t\'i përditësojë aplikacionet për të gjithë përdoruesit e tjerë. Cilësimet e qasshmërisë dhe shërbimet mund të mos transferohen te përdoruesi i ri."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kur shton një përdorues të ri, ai person duhet të konfigurojë hapësirën e vet.\n\nÇdo përdorues mund t\'i përditësojë aplikacionet për të gjithë përdoruesit e tjerë."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"T\'i jepen këtij përdoruesi privilegjet e administratorit?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Si administrator, ai person do të mund të menaxhojë përdoruesit e tjerë, të modifikojë cilësimet e pajisjes dhe ta rivendosë pajisjen në gjendje fabrike."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Të konfig. përdoruesi tani?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Sigurohu që personi të jetë i gatshëm të marrë pajisjen dhe të caktojë hapësirën e vet"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Të konfigurohet tani profili?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Kjo do të fillojë një sesion të ri për vizitorë dhe do të fshijë të gjitha aplikacionet dhe të dhënat nga sesioni aktual"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Të hiqet modaliteti \"vizitor\"?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Kjo do të fshijë aplikacionet dhe të dhënat nga sesioni aktual për vizitorë"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Jepi këtij përdoruesi privilegjet e administratorit"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Mos i jep përdoruesit privilegjet e administratorit"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Dil"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Të ruhet aktiviteti i vizitorit?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ruaj aktivitetin nga sesioni aktual ose fshi të gjitha aplikacionet e të dhënat"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 32affcc..7bd5267 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Више времена."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Мање времена."</string>
<string name="cancel" msgid="5665114069455378395">"Откажи"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Потврди"</string>
<string name="done" msgid="381184316122520313">"Готово"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Аларми и подсетници"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Додајете новог корисника?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Овај уређај можете да делите са другим људима ако направите још корисника. Сваки корисник има сопствени простор, који може да прилагођава помоћу апликација, позадине и слично. Корисници могу да прилагођавају и подешавања уређаја која утичу на свакога, попут Wi‑Fi-ја.\n\nКада додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике. Подешавања и услуге приступачности не могу да се преносе на новог корисника."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Када додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Дајете привилегије администратора?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Као администратор, моћи ће да управља другим корисницима, мења подешавања уређаја и ресетује уређај на фабричка подешавања."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Подешавате корисника?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Та особа треба да узме уређај и подеси свој простор"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Желите ли да одмах подесите профил?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Тиме ћете покренути нову сесију госта и избрисати све апликације и податке из актуелне сесије"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Излазите из режима госта?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Тиме ћете избрисати све апликације и податке из актуелне сесије госта"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Дај овом кориснику администраторске привилегије"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Не дај кориснику администраторске привилегије"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Изађи"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Сачуваћете активности госта?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Сачувајте активности из актуелне сесије или избришите све апликације и податке"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Физичка тастатура"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Одаберите распоред тастатуре"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Подразумевано"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Укључите екран"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Укључивање екрана"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Дозволи укључивање екрана"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Дозвољава апликацији да укључи екран. Ако се омогући, апликација може да укључи екран у било ком тренутку без ваше експлицитне намере."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Желите да зауставите емитовање апликације <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index f60fc83..177eae4 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Längre tid."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kortare tid."</string>
<string name="cancel" msgid="5665114069455378395">"Avbryt"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Klar"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarm och påminnelser"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Lägga till ny användare?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dela enheten med andra om du skapar flera användare. Alla användare får sitt eget utrymme som de kan anpassa som de vill med appar, bakgrund och så vidare. Användarna kan även ändra enhetsinställningar som påverkar alla, till exempel wifi.\n\nNär du lägger till en ny användare måste han eller hon konfigurera sitt utrymme.\n\nAlla användare kan uppdatera appar för samtliga användares räkning. Tillgänglighetsinställningar och tjänster kanske inte överförs till den nya användaren."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"När du lägger till en ny användare måste den personen konfigurera sitt utrymme.\n\nAlla användare kan uppdatera appar för samtliga användares räkning."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Ge administratörsbehörigheter?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Som administratör kan användaren hantera andra användare, ändra enhetsinställningar och återställa enhetens standardinställningar"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Konfigurera användare nu?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Kontrollera att personen finns tillgänglig för att konfigurera sitt utrymme på enheten"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vill du konfigurera en profil nu?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"En ny gästsession startas och alla appar och all data från den pågående sessionen raderas"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Vill du avsluta gästläget?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Appar och data från den pågående gästsessionen raderas"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Ge den här användaren administratörsbehörigheter"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Ge inte administratörsbehörigheter"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Avsluta"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Vill du spara gästaktivitet?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Du kan spara aktivitet från den pågående sessionen eller radera appar och data"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 0e3afae..6784aa5 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Muda zaidi."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Muda kidogo."</string>
<string name="cancel" msgid="5665114069455378395">"Ghairi"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Sawa"</string>
<string name="done" msgid="381184316122520313">"Nimemaliza"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ving\'ora na vikumbusho"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Ungependa kuongeza mtumiaji?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Unaweza kutumia kifaa hiki pamoja na watu wengine kwa kuongeza watumiaji wa ziada. Kila mtumiaji ana nafasi yake mwenyewe, ambayo anaweza kuweka programu, mandhari na vipengee vingine anavyopenda. Watumiaji pia wanaweza kurekebisha mipangilio ya kifaa inayoathiri kila mtu kama vile Wi-Fi.\n\nUnapomwongeza mtumiaji mpya, mtu huyo anahitaji kujitayarishia nafasi yake.\n\nMtumiaji yeyote anaweza kuwasasishia watumiaji wengine wote programu. Huenda mipangilio na huduma za ufikivu zisihamishiwe mtumiaji mgeni."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Mtumiaji mpya utakayemwongeza atahitaji kujitayarishia nafasi yake.\n\nMtumiaji yoyote anaweza kusasisha programu kwa niaba ya wengine wote."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Ungependa kumpatia mtumiaji huyu haki za msimamizi?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Akiwa msimamizi, ataweza kusimamia watumiaji wengine, kurekebisha mipangilio ya kifaa na kurejesha mipangilio ambayo kifaa kiIitoka nayo kiwandani."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Mtumiaji aongezwe sasa?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Hakikisha kuwa mtu huyu anaweza kuchukua kifaa na kujitayarishia nafasi yake"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Ungependa kuweka wasifu sasa?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hatua hii itaanzisha upya kipindi cha mgeni na kufuta programu na data yote kwenye kipindi cha sasa"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Utafunga matumizi ya wageni?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Hatua hii itafuta programu na data kutoka kwenye kipindi cha mgeni cha sasa"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Mpatie mtumiaji huyu haki za msimamizi"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Usimpatie mtumiaji haki za msimamizi"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Funga"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Utahifadhi shughuli za mgeni?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Unaweza kuhifadhi shughuli kutoka kipindi cha sasa au kufuta programu na data yote"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 402aeb2..76344cb 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"நேரத்தை அதிகரிக்கும்."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"நேரத்தைக் குறைக்கும்."</string>
<string name="cancel" msgid="5665114069455378395">"ரத்துசெய்"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"சரி"</string>
<string name="done" msgid="381184316122520313">"முடிந்தது"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"அலாரங்களும் நினைவூட்டல்களும்"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"புதியவரைச் சேர்க்கவா?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"கூடுதல் பயனர்களை உருவாக்குவதன் மூலம், பிறருடன் இந்தச் சாதனத்தைப் பகிர்ந்துகொள்ளலாம். ஒவ்வொரு பயனருக்கும் அவர்களுக்கென ஒரு இடம் இருக்கும், அதில் அவர்கள் ஆப்ஸ், வால்பேப்பர் மற்றும் பலவற்றைப் பயன்படுத்திப் பிரத்தியேகப்படுத்தலாம். வைஃபை போன்ற மற்ற சாதன அமைப்புகளைப் பயனர்கள் மாற்றலாம், இந்த மாற்றம் அனைவருக்கும் பொருந்தும்.\n\nநீங்கள் புதிய பயனரைச் சேர்க்கும்போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஎந்தவொரு பயனரும், பிற எல்லாப் பயனர்களுக்குமான ஆப்ஸைப் புதுப்பிக்கலாம். அணுகல்தன்மை அமைப்புகளையும் சேவைகளையும், புதிய பயனருக்கு இடமாற்ற முடியாமல் போகலாம்."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"புதியவரைச் சேர்க்கும் போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஇருக்கும் ஆப்ஸை எவரும் புதுப்பிக்கலாம்."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"நிர்வாக சிறப்புரிமைகளை வழங்கவா?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"நிர்வாகியாக, மற்ற பயனர்களை நிர்வகிக்கலாம் சாதன அமைப்புகளை மாற்றலாம் சாதனத்தை ஆரம்பநிலைக்கு மீட்டமைக்கலாம்."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"இப்போது பயனரை அமைக்கவா?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"இந்தச் சாதனத்தை இவர் பயன்படுத்தும் நிலையிலும், அவருக்கான அமைப்புகளை அவரே செய்து கொள்பவராகவும் இருக்க வேண்டும்."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"இப்போது சுயவிவரத்தை அமைக்கவா?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"புதிய கெஸ்ட் அமர்வு தொடங்கப்படும், மேலும் தற்போதைய கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"கெஸ்ட் முறையிலிருந்து வெளியேறவா?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"தற்போதைய கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்"</string>
- <string name="grant_admin" msgid="4273077214151417783">"இந்தப் பயனருக்கு நிர்வாகச் சிறப்புரிமைகளை வழங்கவும்"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"பயனருக்கு நிர்வாகச் சிறப்புரிமைகளை வழங்க வேண்டாம்"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"வெளியேறு"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"கெஸ்ட் செயல்பாடுகளைச் சேமிக்கவா?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"தற்போதைய அமர்வின் செயல்பாடுகளைச் சேமிக்கலாம் அல்லது ஆப்ஸையும் தரவையும் நீக்கலாம்"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index d800433..e31148c 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"రద్దు చేయండి"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"పెయిర్ చేయడం వలన కనెక్ట్ చేయబడినప్పుడు మీ కాంటాక్ట్లకు అలాగే కాల్ హిస్టరీకి యాక్సెస్ను మంజూరు చేస్తుంది."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడం సాధ్యపడలేదు."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"పిన్ లేదా పాస్కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో పెయిర్ చేయడం సాధ్యపడలేదు."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN లేదా పాస్కీ చెల్లని కారణంగా <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో పెయిర్ చేయడం సాధ్యపడలేదు."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో కమ్యూనికేట్ చేయడం సాధ్యపడదు."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> జత చేయడాన్ని తిరస్కరించింది."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"కంప్యూటర్"</string>
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ఎక్కువ సమయం."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"తక్కువ సమయం."</string>
<string name="cancel" msgid="5665114069455378395">"రద్దు చేయండి"</string>
+ <string name="next" msgid="2699398661093607009">"తర్వాత"</string>
+ <string name="back" msgid="5554327870352703710">"వెనుకకు"</string>
+ <string name="save" msgid="3745809743277153149">"సేవ్ చేయండి"</string>
<string name="okay" msgid="949938843324579502">"సరే"</string>
<string name="done" msgid="381184316122520313">"పూర్తయింది"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"అలారాలు, రిమైండర్లు"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"కొత్త యూజర్ను జోడించాలా?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"అదనపు యూజర్లను క్రియేట్ చేయడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్కు వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్లు, వాల్పేపర్ మొదలైనవాటితో అనుకూలంగా మార్చవచ్చు. యూజర్లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన యూజర్లందరి కోసం యాప్లను అప్డేట్ చేయవచ్చు. యాక్సెసిబిలిటీ సెట్టింగ్లు, సర్వీస్లు కొత్త యూజర్కి బదిలీ కాకపోవచ్చు."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"మీరు కొత్త యూజర్ను జోడించినప్పుడు, ఆ వ్యక్తి తన స్పేస్ను సెటప్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగతా యూజర్ల కోసం యాప్లను అప్డేట్ చేయగలరు."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"వీరికి అడ్మిన్ హక్కు ఇవ్వాలా?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ఒక అడ్మిన్గా, వారు ఇతర యూజర్లను మేనేజ్ చేయగలరు, పరికర సెట్టింగ్లను ఎడిట్ చేయగలరు, పరికరాన్ని ఫ్యాక్టరీ రీసెట్ చేయగలరు."</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"ఈ యూజర్ను అడ్మిన్ చేయాలా?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"యూజర్లకు లేని ప్రత్యేక హక్కులు అడ్మిన్లకు ఉంటాయి. అడ్మిన్, యూజర్లందరినీ మేనేజ్ చేయగలరు, ఈ పరికరాన్ని అప్డేట్ లేదా రీసెట్ చేయగలరు, సెట్టింగ్లను మార్చగలరు, ఇన్స్టాల్ అయ్యి ఉండే యాప్లన్నింటినీ చూడగలరు, ఇతరులకు అడ్మిన్ హక్కులను ఇవ్వగలరు, లేదా ఉపసంహరించగలరు."</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"అడ్మిన్గా చేయాలి"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"యూజర్ను ఇప్పుడే సెటప్ చేయాలా?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"పరికరాన్ని తీసుకోవడానికి వ్యక్తి అందుబాటులో ఉన్నారని నిర్ధారించుకొని, ఆపై వారికి స్టోరేజ్ స్థలాన్ని సెటప్ చేయండి"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ఇప్పుడు ప్రొఫైల్ను సెటప్ చేయాలా?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ఇది కొత్త గెస్ట్ సెషన్ను ప్రారంభిస్తుంది, ప్రస్తుత సెషన్ నుండి అన్ని యాప్లు, డేటాను తొలగిస్తుంది."</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"గెస్ట్ మోడ్ నుండి వైదొలగాలా?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"ఇది ప్రస్తుత గెస్ట్ సెషన్ నుండి యాప్లను వాటితో పాటు డేటాను తొలగిస్తుంది"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ఈ యూజర్కు అడ్మిన్ హక్కులను ఇవ్వండి"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"యూజర్కు అడ్మిన్ హక్కులను ఇవ్వకండి"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"అవును, వారిని అడ్మిన్ చేయాలి"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"వద్దు, వారిని అడ్మిన్ చేయవద్దు"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"వైదొలగండి"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"గెస్ట్ యాక్టివిటీని సేవ్ చేయాలా?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"మీరు సెషన్ నుండి యాక్టివిటీని సేవ్ చేయవచ్చు, అన్ని యాప్లు, డేటాను తొలగించవచ్చు"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 89b8ce2..54545c1b6 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -136,12 +136,12 @@
<string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ใช้สำหรับการป้อนข้อมูล"</string>
<string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ใช้สำหรับเครื่องช่วยฟัง"</string>
<string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"ใช้สำหรับ LE_AUDIO"</string>
- <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"จับคู่อุปกรณ์"</string>
+ <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"จับคู่"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"จับคู่อุปกรณ์"</string>
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"ยกเลิก"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"การจับคู่อุปกรณ์จะให้สิทธิ์การเข้าถึงที่อยู่ติดต่อและประวัติการโทรเมื่อเชื่อมต่อแล้ว"</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"ไม่สามารถจับคู่กับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ไม่สามารถจับคู่กับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ได้เพราะ PIN หรือรหัสผ่านไม่ถูกต้อง"</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ไม่สามารถจับคู่กับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ได้เพราะ PIN หรือพาสคีย์ไม่ถูกต้อง"</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"ไม่สามารถเชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ปฏิเสธการจับคู่อุปกรณ์"</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"คอมพิวเตอร์"</string>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"เวลามากขึ้น"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"เวลาน้อยลง"</string>
<string name="cancel" msgid="5665114069455378395">"ยกเลิก"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ตกลง"</string>
<string name="done" msgid="381184316122520313">"เสร็จสิ้น"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"การปลุกและการช่วยเตือน"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"ต้องการเพิ่มผู้ใช้ใหม่ใช่ไหม"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"คุณมีสิทธิ์แชร์อุปกรณ์นี้กับผู้อื่นได้โดยการเพิ่มผู้ใช้ แต่ละคนจะมีพื้นที่ของตนเองซึ่งปรับใช้กับแอป วอลเปเปอร์ และรายการอื่นๆ ได้ อีกทั้งยังปรับการตั้งค่าอุปกรณ์ได้ด้วย เช่น Wi‑Fi ซึ่งจะมีผลกับทุกคน\n\nเมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตน\n\nผู้ใช้ทุกคนมีสิทธิ์อัปเดตแอปให้ผู้ใช้รายอื่น การตั้งค่าและบริการสำหรับการช่วยเหลือพิเศษอาจโอนไปยังผู้ใช้ใหม่ไม่ได้"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"เมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตนเอง\n\nผู้ใช้ทุกคนสามารถอัปเดตแอปสำหรับผู้ใช้รายอื่นได้"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"ให้สิทธิ์ผู้ดูแลแก่ผู้ใช้ไหม"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"ผู้ดูแลระบบจะสามารถจัดการผู้ใช้รายอื่น แก้ไขการตั้งค่าอุปกรณ์ และรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นได้"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"ตั้งค่าผู้ใช้เลยไหม"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ตรวจสอบว่าบุคคลดังกล่าวสามารถนำอุปกรณ์ไปตั้งค่าพื้นที่ของตนได้"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"หากต้องการตั้งค่าโปรไฟล์ทันที"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"การดำเนินการนี้จะเริ่มเซสชันผู้ใช้ชั่วคราวใหม่ และจะลบแอปและข้อมูลทั้งหมดจากเซสชันปัจจุบัน"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"ออกจากโหมดผู้ใช้ชั่วคราวไหม"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"การดำเนินการนี้จะลบแอปและข้อมูลออกจากเซสชันผู้ใช้ชั่วคราวในปัจจุบัน"</string>
- <string name="grant_admin" msgid="4273077214151417783">"ให้สิทธิ์ของผู้ดูแลระบบแก่ผู้ใช้รายนี้"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"ไม่ให้สิทธิ์ของผู้ดูแลระบบแก่ผู้ใช้รายนี้"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"ออก"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"บันทึกกิจกรรมของผู้ใช้ชั่วคราวไหม"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"คุณสามารถบันทึกกิจกรรมจากเซสชันปัจจุบันหรือจะลบแอปและข้อมูลทั้งหมดก็ได้"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index dbd3a8b..6e23eba 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Dagdagan ang oras."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Bawasan ang oras."</string>
<string name="cancel" msgid="5665114069455378395">"Kanselahin"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Tapos na"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Mga alarm at paalala"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Magdagdag ng bagong user?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Puwede mong ibahagi ang device na ito sa ibang tao sa pamamagitan ng paggawa ng mga karagdagang user. May sariling espasyo ang bawat user na maaari nilang i-customize gamit ang mga app, wallpaper, at iba pa. Puwede ring isaayos ng mga user ang mga setting ng device tulad ng Wi‑Fi na nakakaapekto sa lahat.\n\nKapag nagdagdag ka ng bagong user, kailangang i-set up ng taong iyon ang kanyang espasyo.\n\nMaaaring mag-update ng mga app ang sinumang user para sa lahat ng iba pang user. Maaaring hindi malipat sa bagong user ang mga setting at serbisyo sa pagiging naa-access."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Kapag nagdagdag ka ng bagong user, kailangang i-set up ng taong iyon ang kanyang espasyo.\n\nAng sinumang user ay puwedeng mag-update ng mga app para sa lahat ng iba pang user."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Bigyan ang user na ito ng mga pribilehiyo ng admin?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Bilang admin, magagawa niyang pamahalaan ang iba pang user, baguhin ang mga setting ng device, at i-factory reset ang device."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"I-set up ang user ngayon?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Tiyaking available ang tao na kunin ang device at i-set up ang kanyang space"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Mag-set up ng profile ngayon?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Magsisimula ito ng bagong session ng bisita at made-delete ang lahat ng app at data mula sa kasalukuyang session"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Umalis sa guest mode?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ide-delete nito ang mga app at data mula sa kasalukuyang session ng bisita"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Bigyan ang user na ito ng mga pribilehiyo ng admin"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Huwag bigyan ang user ng mga pribilehiyo ng admin"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Umalis"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"I-save ang aktibidad ng bisita?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Puwedeng i-save ang aktibidad ng session ngayon o i-delete lahat ng app at data"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 628bd93..6187ad2 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -141,7 +141,7 @@
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"İptal"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Eşleme işlemi, bağlantı kurulduğunda kişilerinize ve çağrı geçmişine erişim izni verir."</string>
<string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ile eşlenemedi."</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN veya parola yanlış olduğundan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ile eşlenemedi."</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN veya şifre anahtarı yanlış olduğundan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ile eşlenemedi."</string>
<string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ile iletişim kurulamıyor."</string>
<string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Eşleme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> tarafından reddedildi."</string>
<string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Bilgisayar"</string>
@@ -486,7 +486,7 @@
<string name="disabled" msgid="8017887509554714950">"Devre dışı"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"İzin verildi"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"İzin verilmiyor"</string>
- <string name="install_other_apps" msgid="3232595082023199454">"Bilinmeyen uygulamaları yükle"</string>
+ <string name="install_other_apps" msgid="3232595082023199454">"Bilinmeyen uygulamaları yükleme"</string>
<string name="home" msgid="973834627243661438">"Ayarlar Ana Sayfası"</string>
<string-array name="battery_labels">
<item msgid="7878690469765357158">"%0"</item>
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha uzun süre."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha kısa süre."</string>
<string name="cancel" msgid="5665114069455378395">"İptal"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"Tamam"</string>
<string name="done" msgid="381184316122520313">"Bitti"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmlar ve hatırlatıcılar"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Yeni kullanıcı eklensin mi?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Ek kullanıcılar oluşturarak bu cihazı başkalarıyla paylaşabilirsiniz. Her kullanıcının uygulamalarla, duvar kağıdıyla ve başka ayarlarla özelleştirebileceği kendi alanı olur. Kullanıcılar ayrıca kablosuz ağ gibi herkesi etkileyen cihaz ayarlarını değiştirebilirler.\n\nYeni bir kullanıcı eklediğinizde, ilgili kişinin kendi alanını ayarlaması gerekir.\n\nHer kullanıcı diğer tüm kullanıcılar için uygulamaları güncelleyebilir. Erişilebilirlik ayarları ve hizmetleri yeni kullanıcıya aktarılamayabilir."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Yeni bir kullanıcı eklediğinizde, bu kişinin kendi alanını ayarlaması gerekir.\n\nHerhangi bir kullanıcı, diğer tüm kullanıcılar için uygulamaları güncelleyebilir."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Yönetici ayrıcalıkları verilsin mi?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Yönetici olan kullanıcılar diğer kullanıcıları yönetebilir, cihaz ayarlarını değiştirebilir ve cihazı fabrika ayarlarına sıfırlayabilir."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Kullanıcı şimdi ayarlansın mı?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"İlgili kişinin cihazı almak ve kendi alanını ayarlamak için müsait olduğundan emin olun"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil şimdi yapılandırılsın mı?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Bu işlem, yeni bir misafir oturumu başlatarak mevcut oturumdaki tüm uygulamaları ve verileri siler"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Misafir modundan çıkılsın mı?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Bu işlem mevcut misafir oturumundaki tüm uygulamaları ve verileri siler"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Bu kullanıcıya yönetici ayrıcalıkları verin"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Bu kullanıcıya yönetici ayrıcalıkları vermeyin"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Çık"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Misafir etkinliği kaydedilsin mi?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Oturumdaki etkinliği kaydedebilir ya da tüm uygulama ve verileri silebilirsiniz"</string>
@@ -665,7 +677,7 @@
<string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziksel klavye"</string>
<string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Klavye düzenini seçin"</string>
<string name="keyboard_layout_default_label" msgid="1997292217218546957">"Varsayılan"</string>
- <string name="turn_screen_on_title" msgid="3266937298097573424">"Ekranı aç"</string>
+ <string name="turn_screen_on_title" msgid="3266937298097573424">"Ekranı açma"</string>
<string name="allow_turn_screen_on" msgid="6194845766392742639">"Ekranı açmaya izin ver"</string>
<string name="allow_turn_screen_on_description" msgid="43834403291575164">"Bir uygulamanın ekranı açmasına izin verin. İzin verildiğinde, uygulama sizin belirgin niyetiniz olmadan istediği zaman ekranı açabilir."</string>
<string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında anons durdurulsun mu?"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 15c24e8..96708ff 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Більше часу."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менше часу."</string>
<string name="cancel" msgid="5665114069455378395">"Скасувати"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ОК"</string>
<string name="done" msgid="381184316122520313">"Готово"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будильники й нагадування"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Додати нового користувача?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Цим пристроєм можуть користуватися кілька людей. Для цього потрібно створити додаткові профілі. Власник профілю може налаштувати його на свій смак: вибрати фоновий малюнок, установити потрібні додатки тощо. Користувачі також можуть налаштовувати певні параметри пристрою (як-от Wi-Fi), які застосовуватимуться до решти профілів.\n\nПісля створення новий профіль потрібно налаштувати.\n\nБудь-який користувач пристрою може оновлювати додатки для решти користувачів. Налаштування спеціальних можливостей і сервісів можуть не передаватися новому користувачеві."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Користувач має налаштувати свій профіль після створення.\n\nБудь-який користувач пристрою може оновлювати додатки для решти користувачів."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Надати права адміністратора?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Права адміністратора дадуть змогу керувати іншими користувачами, змінювати та скидати налаштування пристрою."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Створити користувача зараз?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Переконайтеся, що користувач може взяти пристрій і налаштувати профіль"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Налаштувати профіль зараз?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Почнеться новий сеанс у режимі гостя, а всі додатки й дані з поточного сеансу буде видалено"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Вийти з режиму гостя?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Усі додатки й дані з поточного сеансу в режимі гостя буде видалено."</string>
- <string name="grant_admin" msgid="4273077214151417783">"Надати цьому користувачу права адміністратора"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Не надавати користувачу права адміністратора"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Вийти"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Зберегти дії в режимі гостя?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ви можете зберегти дії з поточного сеансу або видалити всі додатки й дані"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 60d5f11..5917a32 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"زیادہ وقت۔"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"کم وقت۔"</string>
<string name="cancel" msgid="5665114069455378395">"منسوخ کریں"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"ٹھیک ہے"</string>
<string name="done" msgid="381184316122520313">"ہو گیا"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"الارمز اور یاد دہانیاں"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"نیا صارف شامل کریں؟"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"آپ اضافی صارفین تخلیق کر کے دوسرے لوگوں کے ساتھ اس آلہ کا اشتراک کر سکتے ہیں۔ ہر صارف کے پاس اپنی جگہ ہوتی ہے، جسے وہ ایپس، وال پیپر وغیرہ کے ساتھ حسب ضرورت بنا سکتا ہے۔ صارفین Wi‑Fi جیسی آلے کی ترتیبات کو ایڈجسٹ بھی کر سکتے ہیں جس کا اثر ہر کسی پر ہوتا ہے۔\n\nجب آپ ایک نیا صارف شامل کرتے ہیں، تو اسے اپنی جگہ سیٹ اپ کرنا پڑتی ہے۔\n\nکوئی بھی صارف دیگر تمام صارفین کیلئے ایپس اپ ڈیٹ کر سکتا ہے۔ رسائی کی ترتیبات اور سروسز کو نئے صارف کو منتقل نہیں کیا جا سکتا۔"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"اس صارف کو منتظم کی مراعات دیں؟"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"بطور منتظم وہ دیگر صارفین کا نظم، آلہ کی ترتیبات میں ترمیم اور آلہ کو فیکٹری ری سیٹ کر پائیں گے۔"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"صارف کو ابھی سیٹ اپ کریں؟"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"یقینی بنائیں کہ وہ شخص آلہ لینے اور اپنی جگہ کو سیٹ اپ کرنے کیلئے دستیاب ہے"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"پروفائل کو ابھی ترتیب دیں؟"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"اس سے ایک نیا مہمان سیشن شروع ہو گا اور موجودہ سیشن سے تمام ایپس اور ڈیٹا حذف ہو جائے گا"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"مہمان وضع سے باہر نکلیں؟"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"یہ موجودہ مہمان سیشن سے ایپس اور ڈیٹا کو حذف کر دے گا"</string>
- <string name="grant_admin" msgid="4273077214151417783">"اس صارف کو منتظم کی مراعات دیں"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"صارف کو منتظم کی مراعات نہ دیں"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"باہر نکلیں"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"مہمان کی سرگرمی محفوظ کریں؟"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"آپ موجودہ سیشن سے سرگرمی کو محفوظ یا تمام ایپس اور ڈیٹا کو حذف کر سکتے ہیں"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 93a21b7..b32222c 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ko‘proq vaqt."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kamroq vaqt."</string>
<string name="cancel" msgid="5665114069455378395">"Bekor qilish"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Tayyor"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Signal va eslatmalar"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Foydalanuvchi qo‘shilsinmi?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Bu qurilmadan bir necha kishi alohida foydalanuvchilar qo‘shib foydalanishi mumkin. Har bir foydalanuvchiga diskda joy ajratiladi, tayinlangan hajm ilovalar, ekran foni rasmi, va hokazolarga taqsimlanishi mumkin. Foydalanuvchilar Wi-Fi kabi sozlamalarni o‘zgartirsa, qolganlarda ham aks etishi mumkin. \n\nYangi profil qo‘shilgach, uni sozlash lozim.\n\nQurilmaning istalgan foydalanuvchisi ilovalarni barcha hisoblar uchun yangilashi mumkin. Qulayliklar sozlamalari va xizmatlar yangi foydalanuvchiga o‘tkazilmasligi mumkin."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Yangi profil qo‘shilgach, uni sozlash lozim.\n\nQurilmaning istalgan foydalanuvchisi ilovalarni barcha hisoblar uchun yangilashi mumkin."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Foydalanuvchiga admin huquqi berilsinmi?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Administrator sifatida ular boshqa foydalanuvchilarni boshqarish, qurilma sozlamalarini oʻzgartirish va qurilmani zavod sozlamalariga qaytarish huquqiga ega boʻladi."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Profil hozir sozlansinmi?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Agar foydalanuvchi profilini hozir sozlay olmasa, keyinroq ham sozlab olishi mumkin."</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil hozir sozlansinmi?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Bunda yangi mehmon seansi ishga tushadi va joriy seans ilova va maʼlumotlari tozalanadi"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Mehmon rejimidan chiqasizmi?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Bunda joriy mehmon seansidagi ilova va ularning maʼlumotlari tozalanadi"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Bu foydalanuvchiga admin huquqlarini berish"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Foydalanuvchiga admin huquqlari berilmasin"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Chiqish"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Mehmon faoliyati saqlansinmi?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Joriy seansdagi faoliyatni saqlash yoki barcha ilova va maʼlumotlarni oʻchirib tashlashingiz mumkin"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 847cfaa..0d24ea9 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Nhiều thời gian hơn."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ít thời gian hơn."</string>
<string name="cancel" msgid="5665114069455378395">"Hủy"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"OK"</string>
<string name="done" msgid="381184316122520313">"Xong"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Chuông báo và lời nhắc"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Thêm người dùng mới?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Bạn có thể chia sẻ thiết bị này với người khác bằng cách tạo thêm người dùng. Mỗi người dùng sẽ có không gian riêng của mình. Họ có thể tùy chỉnh không gian riêng đó bằng các ứng dụng, hình nền, v.v. Người dùng cũng có thể điều chỉnh các tùy chọn cài đặt thiết bị có ảnh hưởng đến tất cả mọi người, chẳng hạn như Wi‑Fi.\n\nKhi bạn thêm người dùng mới, họ cần thiết lập không gian của mình.\n\nMọi người dùng đều có thể cập nhật ứng dụng cho tất cả người dùng khác. Các dịch vụ và các tùy chọn cài đặt hỗ trợ tiếp cận có thể không chuyển sang người dùng mới."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Khi bạn thêm người dùng mới, họ cần thiết lập không gian của mình.\n\nMọi người dùng đều có thể cập nhật ứng dụng cho tất cả người dùng khác."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Trao đặc quyền của quản trị viên?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Với tư cách là quản trị viên, họ sẽ có thể quản lý những người dùng khác, sửa đổi chế độ cài đặt thiết bị cũng như đặt lại thiết bị về trạng thái ban đầu."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Thiết lập người dùng ngay bây giờ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Đảm bảo người dùng có mặt để tự thiết lập không gian của mình trên thiết bị"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Thiết lập tiểu sử ngay bây giờ?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Thao tác này sẽ bắt đầu một phiên khách mới và xoá mọi ứng dụng cũng như dữ liệu trong phiên hiện tại"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Thoát khỏi chế độ khách?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Thao tác này sẽ xoá các ứng dụng và dữ liệu trong phiên khách hiện tại"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Trao đặc quyền quản trị viên cho người dùng này"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Không trao đặc quyền của quản trị viên"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Thoát"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Lưu hoạt động ở chế độ khách?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Bạn có thể lưu hoạt động trong phiên hiện tại hoặc xoá mọi ứng dụng và dữ liệu"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index a2aca7a..7cf8968 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"增加时间。"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"减少时间。"</string>
<string name="cancel" msgid="5665114069455378395">"取消"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"确定"</string>
<string name="done" msgid="381184316122520313">"完成"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"闹钟和提醒"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"要添加新用户吗?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"创建新用户后,您就能够与其他人共用此设备。每位用户都有自己的专属空间,而且在自己的个人空间内还可以自行安装自己想要的应用、设置壁纸等。此外,用户还可以调整会影响所有用户的设备设置(例如 WLAN 设置)。\n\n当您添加新用户后,该用户需要自行设置个人空间。\n\n任何用户都可以为所有其他用户更新应用。无障碍功能设置和服务可能无法转移给新用户。"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"当您添加新用户后,该用户需要自行设置个人空间。\n\n任何用户都可以为所有其他用户更新应用。"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"向此用户授予管理员权限?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"获授管理员权限的用户将能够管理其他用户、修改设备设置及将该设备恢复出厂设置。"</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"要现在设置该用户吗?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"请让相应用户操作设备并设置他们自己的空间。"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"要立即设置个人资料吗?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"此操作会开始新的访客会话,并删除当前会话中的所有应用和数据"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"要退出访客模式吗?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"此操作会删除当前访客会话中的所有应用和数据"</string>
- <string name="grant_admin" msgid="4273077214151417783">"向此用户授予管理员权限"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"不向此用户授予管理员权限"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"退出"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"要保存访客活动记录吗?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"您可以保存当前会话中的活动记录,也可以删除所有应用和数据"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index f49932d..3ef92cf 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -214,7 +214,7 @@
</string-array>
<string name="choose_profile" msgid="343803890897657450">"選擇設定檔"</string>
<string name="category_personal" msgid="6236798763159385225">"個人"</string>
- <string name="category_work" msgid="4014193632325996115">"公司"</string>
+ <string name="category_work" msgid="4014193632325996115">"工作"</string>
<string name="development_settings_title" msgid="140296922921597393">"開發人員選項"</string>
<string name="development_settings_enable" msgid="4285094651288242183">"啟用開發人員選項"</string>
<string name="development_settings_summary" msgid="8718917813868735095">"設定應用程式開發選項"</string>
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"增加時間。"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"減少時間。"</string>
<string name="cancel" msgid="5665114069455378395">"取消"</string>
+ <string name="next" msgid="2699398661093607009">"繼續"</string>
+ <string name="back" msgid="5554327870352703710">"返回"</string>
+ <string name="save" msgid="3745809743277153149">"儲存"</string>
<string name="okay" msgid="949938843324579502">"確定"</string>
<string name="done" msgid="381184316122520313">"完成"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"鬧鐘和提醒"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"新增使用者?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"您可以建立其他使用者,與他人共用這部裝置。每位使用者都有屬於自己的空間,並可以自訂應用程式、桌布等等。此外,使用者也可以調整會影響所有人的裝置設定,例如 Wi‑Fi 設定。\n\n新加入的使用者需要自行設定個人空間。\n\n任何使用者都可以為所有其他使用者更新應用程式。無障礙功能設定和服務則未必適用於新的使用者。"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"新增的使用者需要自行設定個人空間。\n\n任何使用者都可以為其他所有使用者更新應用程式。"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"要向此使用者授予管理員權限嗎?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"管理員將可管理其他使用者、修改裝置設定,以及將裝置回復原廠設定。"</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"要將這位使用者設為管理員嗎?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"管理員具備其他使用者沒有的權限,例如可管理所有使用者、更新或重設這部裝置、修改設定、查看所有已安裝的應用程式,以及將管理員權限授予他人,或撤銷他人的管理員權限。"</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"設為管理員"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"立即設定使用者?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"請確保對方現在可以在裝置上設定自己的空間"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"立即設定個人檔案?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"此操作會開始新的訪客工作階段,並刪除目前工作階段的所有應用程式和資料"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"要結束訪客模式嗎?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"此操作會刪除目前訪客工作階段中的所有應用程式和資料"</string>
- <string name="grant_admin" msgid="4273077214151417783">"向此使用者授予管理員權限"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"不要向使用者授予管理員權限"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"是,將這位使用者設為管理員"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"否,不要將這位使用者設為管理員"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"結束"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"要儲存訪客活動嗎?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"您可儲存目前工作階段中的活動或刪除所有應用程式和資料"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index c381ebd..168a8b7 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -519,6 +519,9 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"增加時間。"</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"減少時間。"</string>
<string name="cancel" msgid="5665114069455378395">"取消"</string>
+ <string name="next" msgid="2699398661093607009">"繼續"</string>
+ <string name="back" msgid="5554327870352703710">"返回"</string>
+ <string name="save" msgid="3745809743277153149">"儲存"</string>
<string name="okay" msgid="949938843324579502">"確定"</string>
<string name="done" msgid="381184316122520313">"完成"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"鬧鐘與提醒"</string>
@@ -573,8 +576,9 @@
<string name="user_add_user_title" msgid="5457079143694924885">"要新增使用者嗎?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"你可以建立其他使用者,藉此與他人共用這個裝置。每位使用者都有自己的專屬空間,並可使用應用程式、桌布等項目自訂個人空間。此外,使用者也可以調整會影響所有人的裝置設定,例如 Wi‑Fi 設定。\n\n新增的使用者需要自行設定個人空間。\n\n任何使用者都可以為所有其他使用者更新應用程式。無障礙設定和服務可能無法轉移到新的使用者。"</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"新增的使用者需要自行設定個人空間。\n\n任何使用者皆可為其他所有使用者更新應用程式。"</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"要將管理員權限授予此使用者嗎?"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"取得管理員權限後,就能管理其他使用者、修改裝置設定,以及將裝置恢復原廠設定。"</string>
+ <string name="user_grant_admin_title" msgid="5157031020083343984">"要將這位使用者設為管理員嗎?"</string>
+ <string name="user_grant_admin_message" msgid="1673791931033486709">"管理員具備其他使用者沒有的權限,例如可管理所有使用者、更新或重設這部裝置、修改設定、查看所有已安裝的應用程式,以及將管理員權限授予他人,或撤銷他人的管理員權限。"</string>
+ <string name="user_grant_admin_button" msgid="5441486731331725756">"設為管理員"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"立即設定使用者?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"請確保對方可以使用裝置並設定自己的空間"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"立即建立個人資料?"</string>
@@ -606,8 +610,8 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"如果重設,系統會開始新的訪客工作階段,並刪除目前工作階段中的所有應用程式和資料"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"要結束訪客模式嗎?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"如果結束,系統會刪除目前訪客工作階段中的所有應用程式和資料"</string>
- <string name="grant_admin" msgid="4273077214151417783">"將管理員權限授予這位使用者"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"不要將管理員權限授予使用者"</string>
+ <string name="grant_admin" msgid="4323199171790522574">"是,將這位使用者設為管理員"</string>
+ <string name="not_grant_admin" msgid="3557849576157702485">"否,不要將這位使用者設為管理員"</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"結束"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"要儲存訪客活動嗎?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"你可以儲存目前工作階段中的活動,也可以刪除所有應用程式和資料"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index f80515a..18d19dd 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -519,6 +519,12 @@
<string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Isikhathi esiningi."</string>
<string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Isikhathi esincane."</string>
<string name="cancel" msgid="5665114069455378395">"Khansela"</string>
+ <!-- no translation found for next (2699398661093607009) -->
+ <skip />
+ <!-- no translation found for back (5554327870352703710) -->
+ <skip />
+ <!-- no translation found for save (3745809743277153149) -->
+ <skip />
<string name="okay" msgid="949938843324579502">"KULUNGILE"</string>
<string name="done" msgid="381184316122520313">"Kwenziwe"</string>
<string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ama-alamu nezikhumbuzi"</string>
@@ -573,8 +579,12 @@
<string name="user_add_user_title" msgid="5457079143694924885">"Engeza umsebenzisi omusha?"</string>
<string name="user_add_user_message_long" msgid="1527434966294733380">"Manje ungabelana ngale divayisi nabanye abantu ngokudala abasebenzisi abangeziwe. Umsebenzisi ngamunye unesikhala sakhe, angakwazi ukusenza ngendlela ayifisayo ngezinhlelo zokusebenza, isithombe sangemuva, njalo njalo. Abasebenzisi bangalungisa izilungiselelo zedivayisi ezifana ne-Wi-Fi ezithinta wonke umuntu.\n\nUma ungeza umsebenzisi omusha, loyo muntu kumele asethe isikhala sakhe.\n\nNoma imuphi umsebenzisi angabuyekeza izinhlelo zokusebenza kubo bonke abanye abasebenzisi. Izilungiselelo zokufinyelela kungenzeka zingadluliselwa kumsebenzisi omusha."</string>
<string name="user_add_user_message_short" msgid="3295959985795716166">"Uma ungeza umsebenzisi omusha, loyo muntu udinga ukusetha isikhala sakhe.\n\nNoma yimuphi umsebenzisi angabuyekeza izinhlelo zokusebenza kubo bonke abasebenzisi."</string>
- <string name="user_grant_admin_title" msgid="5565796912475193314">"Nika umsebenzi ilungelo lokuphatha"</string>
- <string name="user_grant_admin_message" msgid="7925257971286380976">"Njengomphathi, bazokwazi ukuphatha abanye abasebenzisi, balungise amasethingi edivayisi futhi basethe kabusha njengasekuqaleni idivayisi."</string>
+ <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
+ <skip />
+ <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
+ <skip />
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Setha umsebenzisi manje?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Qinisekisa ukuthi umuntu uyatholakala ukuze athathe idivayisi futhi asethe isikhala sakhe"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Setha iphrofayela manje?"</string>
@@ -606,8 +616,10 @@
<string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Lokhu kuzoqala isikhathi sesihambeli esisha futhi kusule wonke ama-app nedatha kusuka esikhathini samanje"</string>
<string name="guest_exit_dialog_title" msgid="1846494656849381804">"Phuma kumodi yesihambeli?"</string>
<string name="guest_exit_dialog_message" msgid="1743218864242719783">"Lokhu kuzosula ama-app nedatha kusuka esikhathini sesihambeli samanje"</string>
- <string name="grant_admin" msgid="4273077214151417783">"Nikeza lo msebenzisi amalungelo okuphatha"</string>
- <string name="not_grant_admin" msgid="6985027675930546850">"Unganiki umsebenzisi amalungelo okuphatha"</string>
+ <!-- no translation found for grant_admin (4323199171790522574) -->
+ <skip />
+ <!-- no translation found for not_grant_admin (3557849576157702485) -->
+ <skip />
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"Phuma"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Londoloza umsebenzi wesihambeli?"</string>
<string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ungalondoloza umsebenzi kusuka esikhathini samanje noma usule wonke ama-app nedatha"</string>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index ff80f52..214c903 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1262,6 +1262,12 @@
<!-- Button label for generic cancel action [CHAR LIMIT=20] -->
<string name="cancel">Cancel</string>
+ <!-- Button label for generic next action [CHAR LIMIT=20] -->
+ <string name="next">Next</string>
+ <!-- Button label for generic back action [CHAR LIMIT=20] -->
+ <string name="back">Back</string>
+ <!-- Button label for generic save action [CHAR LIMIT=20] -->
+ <string name="save">Save</string>
<!-- Button label for generic OK action [CHAR LIMIT=20] -->
<string name="okay">OK</string>
<!-- Button label for generic Done action, to be pressed when an action has been completed [CHAR LIMIT=20] -->
@@ -1388,9 +1394,11 @@
<!-- Message for add user confirmation dialog - short version. [CHAR LIMIT=none] -->
<string name="user_add_user_message_short">When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. </string>
<!-- Title for grant user admin privileges dialog [CHAR LIMIT=65] -->
- <string name="user_grant_admin_title">Give this user admin privileges?</string>
+ <string name="user_grant_admin_title">Make this user an admin?</string>
<!-- Message for grant admin privileges dialog. [CHAR LIMIT=none] -->
- <string name="user_grant_admin_message">As an admin, they will be able to manage other users, modify device settings and factory reset the device.</string>
+ <string name="user_grant_admin_message">Admins have special privileges that other users don\’t. An admin can manage all users, update or reset this device, modify settings, see all installed apps, and grant or revoke admin privileges for others.</string>
+ <!-- Confirmation button for grant user admin privileges dialog [CHAR LIMIT=65] -->
+ <string name="user_grant_admin_button">Make admin</string>
<!-- Title of dialog to setup a new user [CHAR LIMIT=30] -->
<string name="user_setup_dialog_title">Set up user now?</string>
<!-- Message in dialog to setup a new user after creation [CHAR LIMIT=none] -->
@@ -1458,9 +1466,9 @@
<string name="guest_exit_dialog_message">This will delete
apps and data from the current guest session</string>
<!-- Dialog message on action grant admin privileges [CHAR LIMIT=60] -->
- <string name="grant_admin">Give this user admin privileges</string>
+ <string name="grant_admin">Yes, make them an admin</string>
<!-- Dialog message on action not grant admin privileges [CHAR LIMIT=60] -->
- <string name="not_grant_admin">Do not give user admin privileges</string>
+ <string name="not_grant_admin">No, don\’t make them an admin</string>
<!-- Dialog button on action exit guest (ephemeral guest) [CHAR LIMIT=80] -->
<string name="guest_exit_dialog_button">Exit</string>
<!-- Dialog title on action exit guest (non-ephemeral guest) [CHAR LIMIT=32] -->
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java
index cb386fb..7a26f76 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/BatterySaverUtilsTest.java
@@ -97,7 +97,6 @@
assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
SAVER_ENABLED_UNKNOWN)).isTrue();
- verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));
assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
@@ -117,7 +116,6 @@
assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, true,
SAVER_ENABLED_UNKNOWN)).isTrue();
- verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));
assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
@@ -136,7 +134,6 @@
assertThat(BatterySaverUtils.setPowerSaveMode(mMockContext, true, false,
SAVER_ENABLED_UNKNOWN)).isTrue();
- verify(mMockContext, times(0)).sendBroadcast(any(Intent.class));
verify(mMockPowerManager, times(1)).setPowerSaveModeEnabled(eq(true));
assertEquals(1, Secure.getInt(mMockResolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, -1));
diff --git a/packages/SettingsProvider/src/android/provider/settings/OWNERS b/packages/SettingsProvider/src/android/provider/settings/OWNERS
index 0f88811..d901e2c 100644
--- a/packages/SettingsProvider/src/android/provider/settings/OWNERS
+++ b/packages/SettingsProvider/src/android/provider/settings/OWNERS
@@ -1,4 +1,4 @@
# Bug component: 656484
-include platform/frameworks/base:/services/backup/OWNERS
+include platform/frameworks/base:/services/backup/BACKUP_OWNERS
diff --git a/packages/SettingsProvider/test/src/android/provider/OWNERS b/packages/SettingsProvider/test/src/android/provider/OWNERS
index 0f88811..db4b27c 100644
--- a/packages/SettingsProvider/test/src/android/provider/OWNERS
+++ b/packages/SettingsProvider/test/src/android/provider/OWNERS
@@ -1,4 +1,3 @@
# Bug component: 656484
-include platform/frameworks/base:/services/backup/OWNERS
-
+include platform/frameworks/base:/services/backup/BACKUP_OWNERS
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index a202e16..706666c 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -449,6 +449,7 @@
Settings.Global.SHOW_PEOPLE_SPACE,
Settings.Global.SHOW_NEW_NOTIF_DISMISS,
Settings.Global.SHOW_RESTART_IN_CRASH_DIALOG,
+ Settings.Global.SHOW_TARE_DEVELOPER_OPTIONS,
Settings.Global.SHOW_TEMPERATURE_WARNING,
Settings.Global.SHOW_USB_TEMPERATURE_ALARM,
Settings.Global.SIGNED_CONFIG_VERSION,
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 78d93bd..a110f56 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -23,7 +23,9 @@
>
<!-- Standard permissions granted to the shell. -->
+ <uses-permission android:name="android.permission.MANAGE_HEALTH_PERMISSIONS" />
<uses-permission android:name="android.permission.MANAGE_HEALTH_DATA" />
+ <uses-permission android:name="android.permission.health.READ_EXERCISE_ROUTE" />
<uses-permission android:name="android.permission.MIGRATE_HEALTH_CONNECT_DATA" />
<uses-permission android:name="android.permission.LAUNCH_DEVICE_MANAGER_SETUP" />
<uses-permission android:name="android.permission.GET_RUNTIME_PERMISSIONS" />
@@ -634,6 +636,9 @@
<uses-permission android:name="android.permission.MANAGE_HOTWORD_DETECTION" />
<uses-permission android:name="android.permission.BIND_HOTWORD_DETECTION_SERVICE" />
+ <!-- Permission required for CTS test - CtsVoiceInteractionTestCases -->
+ <uses-permission android:name="android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER"/>
+
<uses-permission android:name="android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE" />
<!-- Permission required for CTS test - KeyguardLockedStateApiTest -->
diff --git a/packages/Shell/res/values-or/strings.xml b/packages/Shell/res/values-or/strings.xml
index 5171839..190dc5b 100644
--- a/packages/Shell/res/values-or/strings.xml
+++ b/packages/Shell/res/values-or/strings.xml
@@ -35,7 +35,7 @@
<string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"ଜିପ୍ ଫାଇଲରେ ବଗ୍ ରିପୋର୍ଟ ବିବରଣୀ ଯୋଡ଼ାଯାଇପାରିଲା ନାହିଁ"</string>
<string name="bugreport_unnamed" msgid="2800582406842092709">"ବେନାମୀ"</string>
<string name="bugreport_info_action" msgid="2158204228510576227">"ବିବରଣୀ"</string>
- <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ସ୍କ୍ରିନ୍ସଟ୍"</string>
+ <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ସ୍କ୍ରିନସଟ"</string>
<string name="bugreport_screenshot_taken" msgid="5684211273096253120">"ସଫଳତାପୂର୍ବକ ସ୍କ୍ରୀନଶଟ୍ ନିଆଗଲା"</string>
<string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ସ୍କ୍ରୀନ୍ଶଟ୍ ନିଆଯାଇପାରିଲା ନାହିଁ।"</string>
<string name="bugreport_info_dialog_title" msgid="1355948594292983332">"ବଗ୍ ରିପୋର୍ଟ <xliff:g id="ID">#%d</xliff:g>ର ବିବରଣୀ"</string>
diff --git a/packages/SoundPicker/res/values-ky/strings.xml b/packages/SoundPicker/res/values-ky/strings.xml
index aeec7a8..3c95228 100644
--- a/packages/SoundPicker/res/values-ky/strings.xml
+++ b/packages/SoundPicker/res/values-ky/strings.xml
@@ -22,7 +22,7 @@
<string name="add_ringtone_text" msgid="6642389991738337529">"Шыңгыр кошуу"</string>
<string name="add_alarm_text" msgid="3545497316166999225">"Ойготкуч кошуу"</string>
<string name="add_notification_text" msgid="4431129543300614788">"Билдирме кошуу"</string>
- <string name="delete_ringtone_text" msgid="201443984070732499">"Жок кылуу"</string>
+ <string name="delete_ringtone_text" msgid="201443984070732499">"Өчүрүү"</string>
<string name="unable_to_add_ringtone" msgid="4583511263449467326">"Жеке рингтон кошулбай жатат"</string>
<string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Жеке рингтон жок кылынбай жатат"</string>
<string name="app_label" msgid="3091611356093417332">"Үндөр"</string>
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 7a1d9a3..62c6c1d 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -243,15 +243,11 @@
// domain
"tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt",
"tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt",
- "tests/src/com/android/systemui/keyguard/domain/interactor/AlternateBouncerInteractorTest.kt",
- "tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt",
"tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt",
"tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt",
"tests/src/com/android/systemui/keyguard/domain/interactor/LightRevealScrimInteractorTest.kt",
"tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceRegistry.kt",
"tests/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt",
- "tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt",
- "tests/src/com/android/systemui/keyguard/domain/interactor/PrimaryBouncerInteractorWithCoroutinesTest.kt",
// ui
"tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt",
"tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBouncerViewModelTest.kt",
@@ -259,6 +255,24 @@
"tests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToDreamingTransitionViewModelTest.kt",
"tests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToOccludedTransitionViewModelTest.kt",
"tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt",
+
+ // Biometric
+ "tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt",
+ "tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt",
+ "tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt",
+ "tests/src/com/android/systemui/biometrics/AuthControllerTest.java",
+ "tests/src/com/android/systemui/biometrics/BiometricDisplayListenerTest.java",
+ "tests/src/com/android/systemui/biometrics/FaceHelpMessageDeferralTest.kt",
+ "tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt",
+ "tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt",
+ "tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java",
+ "tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java",
+ "tests/src/com/android/systemui/biometrics/UdfpsDisplayModeTest.java",
+ "tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerBaseTest.java",
+ "tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java",
+ "tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt",
+ "tests/src/com/android/systemui/biometrics/UdfpsShellTest.kt",
+ "tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt",
],
path: "tests/src",
}
@@ -403,6 +417,10 @@
privileged: true,
resource_dirs: [],
kotlincflags: ["-Xjvm-default=all"],
+ optimize: {
+ shrink_resources: false,
+ proguard_flags_files: ["proguard.flags"],
+ },
plugins: ["dagger2-compiler"],
}
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-bg/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-bg/strings.xml
index 165b927..8faa670 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-bg/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-bg/strings.xml
@@ -22,7 +22,7 @@
<string name="next_button_content_description" msgid="6810058269847364406">"Към следващия екран"</string>
<string name="accessibility_menu_description" msgid="4458354794093858297">"Менюто за достъпност предоставя голямо екранно меню за управление на устройството ви. Можете да заключвате устройството си, да управлявате яркостта и силата на звука, да правите екранни снимки и др."</string>
<string name="accessibility_menu_summary" msgid="340071398148208130">"Управление на устройството чрез голямо меню"</string>
- <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Настр. за меню за дост."</string>
+ <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Настройки за менюто за достъпност"</string>
<string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Големи бутони"</string>
<string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Увеличаване на размера на бутоните в менюто за достъпност"</string>
<string name="pref_help_title" msgid="6871558837025010641">"Помощ"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
index 9214197..fb31e1d 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
@@ -10,8 +10,8 @@
<string name="power_utterance" msgid="7444296686402104807">"Optionen für Ein-/Aus-Taste"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"Kürzlich geöffnete Apps"</string>
<string name="lockscreen_label" msgid="648347953557887087">"Sperrbildschirm"</string>
- <string name="quick_settings_label" msgid="2999117381487601865">"Schnelleinstellungen"</string>
- <string name="notifications_label" msgid="6829741046963013567">"Benachrichtigungen"</string>
+ <string name="quick_settings_label" msgid="2999117381487601865">"Schnelleinstellungen"</string>
+ <string name="notifications_label" msgid="6829741046963013567">"Benachrichtigungen"</string>
<string name="screenshot_label" msgid="863978141223970162">"Screenshot"</string>
<string name="screenshot_utterance" msgid="1430760563401895074">"Screenshot erstellen"</string>
<string name="volume_up_label" msgid="8592766918780362870">"Lautstärke erhöhen"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
index c51c9af..60e49ae 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
@@ -5,7 +5,7 @@
<string name="accessibility_menu_intro" msgid="3164193281544042394">"Το μενού προσβασιμότητας παρέχει ένα μεγάλο μενού στην οθόνη για να ελέγχετε τη συσκευή σας. Μπορείτε να κλειδώνετε τη συσκευή, να ελέγχετε την ένταση ήχου και τη φωτεινότητα, να λαμβάνετε στιγμιότυπα οθόνης και άλλα."</string>
<string name="assistant_label" msgid="6796392082252272356">"Βοηθός"</string>
<string name="assistant_utterance" msgid="65509599221141377">"Βοηθός"</string>
- <string name="a11y_settings_label" msgid="3977714687248445050">"Ρυθμίσεις προσβασιμότητας"</string>
+ <string name="a11y_settings_label" msgid="3977714687248445050">"Ρυθμίσεις προσβU+00ADασιμότητας"</string>
<string name="power_label" msgid="7699720321491287839">"Κουμπί λειτουργίας"</string>
<string name="power_utterance" msgid="7444296686402104807">"Επιλογές λειτουργίας"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"Πρόσφατες εφαρμογές"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
index 4670291..5968179 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
@@ -22,7 +22,7 @@
<string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
<string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
<string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
- <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility menu settings"</string>
+ <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
<string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
<string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
<string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
index 4670291..5968179 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
@@ -22,7 +22,7 @@
<string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
<string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
<string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
- <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility menu settings"</string>
+ <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
<string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
<string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
<string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
index 4670291..5968179 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
@@ -22,7 +22,7 @@
<string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
<string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
<string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
- <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility menu settings"</string>
+ <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
<string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
<string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
<string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-eu/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-eu/strings.xml
index 28b560a..f6dcdd3 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-eu/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-eu/strings.xml
@@ -5,7 +5,7 @@
<string name="accessibility_menu_intro" msgid="3164193281544042394">"Erabilerraztasun-menuari esker, tamaina handiko menu bat izango duzu pantailan; menu horren bidez, gailua kontrolatzeko aukera izango duzu. Besteak beste, hauek egin ahalko dituzu: gailua blokeatu; bolumena eta distira kontrolatu, eta pantaila-argazkiak egin."</string>
<string name="assistant_label" msgid="6796392082252272356">"Laguntzailea"</string>
<string name="assistant_utterance" msgid="65509599221141377">"Laguntzailea"</string>
- <string name="a11y_settings_label" msgid="3977714687248445050">"Erabilerraztasun-ezarpenak"</string>
+ <string name="a11y_settings_label" msgid="3977714687248445050">"Erabilerraztasun-&#173;ezarpenak"</string>
<string name="power_label" msgid="7699720321491287839">"Bateria"</string>
<string name="power_utterance" msgid="7444296686402104807">"Bateria kontrolatzeko aukerak"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"Azken aplikazioak"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
index 87a9503..1715d56 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menu Accessibilité"</string>
+ <string name="accessibility_menu_service_name" msgid="730136711554740131">"menu Accessibilité"</string>
<string name="accessibility_menu_intro" msgid="3164193281544042394">"Le menu Accessibilité propose un grand espace à l\'écran à l\'aide duquel vous pouvez contrôler votre appareil. Utilisez-le pour verrouiller votre appareil, régler le volume et la luminosité, prendre des captures d\'écran et plus."</string>
<string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
<string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-hy/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-hy/strings.xml
index 135d443..e06787f 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-hy/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-hy/strings.xml
@@ -10,7 +10,7 @@
<string name="power_utterance" msgid="7444296686402104807">"Սնուցման կոճակի ընտրանքներ"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"Վերջին հավելվածներ"</string>
<string name="lockscreen_label" msgid="648347953557887087">"Կողպէկրան"</string>
- <string name="quick_settings_label" msgid="2999117381487601865">"Արագ կարգավորումներ"</string>
+ <string name="quick_settings_label" msgid="2999117381487601865">"Արագ\\nկարգավորումներ"</string>
<string name="notifications_label" msgid="6829741046963013567">"Ծանուցումներ"</string>
<string name="screenshot_label" msgid="863978141223970162">"Սքրինշոթ"</string>
<string name="screenshot_utterance" msgid="1430760563401895074">"Ստանալ սքրինշոթը"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
index 68f3fae..9726f20 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
@@ -11,7 +11,7 @@
<string name="recent_apps_label" msgid="6583276995616385847">"Соңғы қолданбалар"</string>
<string name="lockscreen_label" msgid="648347953557887087">"Құлып экраны"</string>
<string name="quick_settings_label" msgid="2999117381487601865">"Жылдам параметрлер"</string>
- <string name="notifications_label" msgid="6829741046963013567">"Хабарландырулар"</string>
+ <string name="notifications_label" msgid="6829741046963013567">"Хабарланды00ADрулар"</string>
<string name="screenshot_label" msgid="863978141223970162">"Скриншот"</string>
<string name="screenshot_utterance" msgid="1430760563401895074">"Скриншот жасау"</string>
<string name="volume_up_label" msgid="8592766918780362870">"Дыбысын арттыру"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
index ba22596..3a40b9f 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
@@ -23,7 +23,7 @@
<string name="accessibility_menu_description" msgid="4458354794093858297">"ଆପଣଙ୍କ ଡିଭାଇସକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଆକ୍ସେସିବିଲିଟୀ ମେନୁ ଏକ ବଡ଼ ଅନ-ସ୍କ୍ରିନ ମେନୁ ପ୍ରଦାନ କରେ। ଆପଣ ଆପଣଙ୍କ ଡିଭାଇସକୁ ଲକ କରିପାରିବେ, ଭଲ୍ୟୁମ ଓ ଉଜ୍ଜ୍ୱଳତାକୁ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ, ସ୍କ୍ରିନସଟ ନେଇପାରିବେ ଏବଂ ଆହୁରି ଅନେକ କିଛି କରିପାରିବେ।"</string>
<string name="accessibility_menu_summary" msgid="340071398148208130">"ବଡ଼ ମେନୁ ମାଧ୍ୟମରେ ଡିଭାଇସକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"</string>
<string name="accessibility_menu_settings_name" msgid="1716888058785672611">"ଆକ୍ସେସିବିଲିଟୀ ମେନୁ ସେଟିଂସ"</string>
- <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"ବଡ଼ ବଟନ୍"</string>
+ <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"ବଡ଼ ବଟନ"</string>
<string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"ଆକ୍ସେସିବିଲିଟୀ ମେନୁ ବଟନର ଆକାର ବଢ଼ାନ୍ତୁ"</string>
<string name="pref_help_title" msgid="6871558837025010641">"ସାହାଯ୍ୟ"</string>
<string name="brightness_percentage_label" msgid="7391554573977867369">"ଉଜ୍ଜ୍ୱଳତା <xliff:g id="PERCENTAGE">%1$s</xliff:g> %%"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-pa/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-pa/strings.xml
index 31fab24..bfe0980 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-pa/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-pa/strings.xml
@@ -9,7 +9,7 @@
<string name="power_label" msgid="7699720321491287839">"ਪਾਵਰ"</string>
<string name="power_utterance" msgid="7444296686402104807">"ਪਾਵਰ ਵਿਕਲਪ"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"ਹਾਲੀਆ ਐਪਾਂ"</string>
- <string name="lockscreen_label" msgid="648347953557887087">"ਲਾਕ ਸਕ੍ਰੀਨ"</string>
+ <string name="lockscreen_label" msgid="648347953557887087">"ਸਕ੍ਰੀਨ ਲਾਕ ਕਰੋ"</string>
<string name="quick_settings_label" msgid="2999117381487601865">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
<string name="notifications_label" msgid="6829741046963013567">"ਸੂਚਨਾਵਾਂ"</string>
<string name="screenshot_label" msgid="863978141223970162">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/AccessibilityMenuService.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/AccessibilityMenuService.java
index 96ea5b4..27aade5 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/AccessibilityMenuService.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/AccessibilityMenuService.java
@@ -19,6 +19,7 @@
import android.Manifest;
import android.accessibilityservice.AccessibilityButtonController;
import android.accessibilityservice.AccessibilityService;
+import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -82,6 +83,9 @@
// TODO(b/136716947): Support multi-display once a11y framework side is ready.
private DisplayManager mDisplayManager;
+
+ private KeyguardManager mKeyguardManager;
+
private final DisplayManager.DisplayListener mDisplayListener =
new DisplayManager.DisplayListener() {
int mRotation;
@@ -114,7 +118,7 @@
private final BroadcastReceiver mToggleMenuReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- mA11yMenuLayout.toggleVisibility();
+ toggleVisibility();
}
};
@@ -159,10 +163,7 @@
*/
@Override
public void onClicked(AccessibilityButtonController controller) {
- if (SystemClock.uptimeMillis() - mLastTimeTouchedOutside
- > BUTTON_CLICK_TIMEOUT) {
- mA11yMenuLayout.toggleVisibility();
- }
+ toggleVisibility();
}
/**
@@ -209,6 +210,7 @@
mDisplayManager = getSystemService(DisplayManager.class);
mDisplayManager.registerDisplayListener(mDisplayListener, null);
mAudioManager = getSystemService(AudioManager.class);
+ mKeyguardManager = getSystemService(KeyguardManager.class);
sInitialized = true;
}
@@ -379,4 +381,12 @@
}
return false;
}
+
+ private void toggleVisibility() {
+ boolean locked = mKeyguardManager != null && mKeyguardManager.isKeyguardLocked();
+ if (!locked && SystemClock.uptimeMillis() - mLastTimeTouchedOutside
+ > BUTTON_CLICK_TIMEOUT) {
+ mA11yMenuLayout.toggleVisibility();
+ }
+ }
}
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/tests/src/com/android/systemui/accessibility/accessibilitymenu/tests/AccessibilityMenuServiceTest.java b/packages/SystemUI/accessibility/accessibilitymenu/tests/src/com/android/systemui/accessibility/accessibilitymenu/tests/AccessibilityMenuServiceTest.java
index 7277392..9d1af0e 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/tests/src/com/android/systemui/accessibility/accessibilitymenu/tests/AccessibilityMenuServiceTest.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/tests/src/com/android/systemui/accessibility/accessibilitymenu/tests/AccessibilityMenuServiceTest.java
@@ -33,6 +33,7 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Instrumentation;
+import android.app.KeyguardManager;
import android.app.UiAutomation;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -44,6 +45,7 @@
import android.os.PowerManager;
import android.provider.Settings;
import android.util.Log;
+import android.view.Display;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -69,15 +71,19 @@
private static final int CLICK_ID = AccessibilityNodeInfo.ACTION_CLICK;
private static final int TIMEOUT_SERVICE_STATUS_CHANGE_S = 5;
- private static final int TIMEOUT_UI_CHANGE_S = 10;
+ private static final int TIMEOUT_UI_CHANGE_S = 5;
private static final int NO_GLOBAL_ACTION = -1;
private static final String INPUT_KEYEVENT_KEYCODE_BACK = "input keyevent KEYCODE_BACK";
+ private static final String TEST_PIN = "1234";
private static Instrumentation sInstrumentation;
private static UiAutomation sUiAutomation;
private static AtomicInteger sLastGlobalAction;
private static AccessibilityManager sAccessibilityManager;
+ private static PowerManager sPowerManager;
+ private static KeyguardManager sKeyguardManager;
+ private static DisplayManager sDisplayManager;
@BeforeClass
public static void classSetup() throws Throwable {
@@ -85,8 +91,14 @@
sInstrumentation = InstrumentationRegistry.getInstrumentation();
sUiAutomation = sInstrumentation.getUiAutomation(
UiAutomation.FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES);
+ sUiAutomation.adoptShellPermissionIdentity(
+ UiAutomation.ALL_PERMISSIONS.toArray(new String[0]));
+
final Context context = sInstrumentation.getTargetContext();
sAccessibilityManager = context.getSystemService(AccessibilityManager.class);
+ sPowerManager = context.getSystemService(PowerManager.class);
+ sKeyguardManager = context.getSystemService(KeyguardManager.class);
+ sDisplayManager = context.getSystemService(DisplayManager.class);
// Disable all a11yServices if any are active.
if (!sAccessibilityManager.getEnabledAccessibilityServiceList(
@@ -123,12 +135,16 @@
@AfterClass
public static void classTeardown() throws Throwable {
+ clearPin();
Settings.Secure.putString(sInstrumentation.getTargetContext().getContentResolver(),
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "");
}
@Before
public void setup() throws Throwable {
+ clearPin();
+ wakeUpScreen();
+ sUiAutomation.executeShellCommand("input keyevent KEYCODE_MENU");
openMenu();
}
@@ -138,11 +154,43 @@
sLastGlobalAction.set(NO_GLOBAL_ACTION);
}
+ private static void clearPin() throws Throwable {
+ sUiAutomation.executeShellCommand("locksettings clear --old " + TEST_PIN);
+ TestUtils.waitUntil("Device did not register as unlocked & insecure.",
+ TIMEOUT_SERVICE_STATUS_CHANGE_S,
+ () -> !sKeyguardManager.isDeviceSecure());
+ }
+
+ private static void setPin() throws Throwable {
+ sUiAutomation.executeShellCommand("locksettings set-pin " + TEST_PIN);
+ TestUtils.waitUntil("Device did not recognize as locked & secure.",
+ TIMEOUT_SERVICE_STATUS_CHANGE_S,
+ () -> sKeyguardManager.isDeviceSecure());
+ }
+
private static boolean isMenuVisible() {
AccessibilityNodeInfo root = sUiAutomation.getRootInActiveWindow();
return root != null && root.getPackageName().toString().equals(PACKAGE_NAME);
}
+ private static void wakeUpScreen() throws Throwable {
+ sUiAutomation.executeShellCommand("input keyevent KEYCODE_WAKEUP");
+ TestUtils.waitUntil("Screen did not wake up.",
+ TIMEOUT_UI_CHANGE_S,
+ () -> sPowerManager.isInteractive());
+ }
+
+ private static void closeScreen() throws Throwable {
+ Display display = sDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
+ setPin();
+ sUiAutomation.performGlobalAction(GLOBAL_ACTION_LOCK_SCREEN);
+ TestUtils.waitUntil("Screen did not close.",
+ TIMEOUT_UI_CHANGE_S,
+ () -> !sPowerManager.isInteractive()
+ && display.getState() == Display.STATE_OFF
+ );
+ }
+
private static void openMenu() throws Throwable {
Intent intent = new Intent(PACKAGE_NAME + INTENT_TOGGLE_MENU);
sInstrumentation.getContext().sendBroadcast(intent);
@@ -381,23 +429,24 @@
@Test
public void testOnScreenLock_closesMenu() throws Throwable {
- openMenu();
- Context context = sInstrumentation.getTargetContext();
- PowerManager powerManager = context.getSystemService(PowerManager.class);
-
- assertThat(powerManager).isNotNull();
- assertThat(powerManager.isInteractive()).isTrue();
-
- sUiAutomation.performGlobalAction(GLOBAL_ACTION_LOCK_SCREEN);
- TestUtils.waitUntil("Screen did not become locked",
- TIMEOUT_UI_CHANGE_S,
- () -> !powerManager.isInteractive());
-
- sUiAutomation.executeShellCommand("input keyevent KEYCODE_WAKEUP");
- TestUtils.waitUntil("Screen did not wake up",
- TIMEOUT_UI_CHANGE_S,
- () -> powerManager.isInteractive());
+ closeScreen();
+ wakeUpScreen();
assertThat(isMenuVisible()).isFalse();
}
+
+ @Test
+ public void testOnScreenLock_cannotOpenMenu() throws Throwable {
+ closeScreen();
+ wakeUpScreen();
+
+ boolean timedOut = false;
+ try {
+ openMenu();
+ } catch (AssertionError e) {
+ // Expected
+ timedOut = true;
+ }
+ assertThat(timedOut).isTrue();
+ }
}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt
index 3eb7fd8..23f16f2 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt
@@ -18,6 +18,7 @@
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.fonts.Font
+import android.graphics.fonts.FontVariationAxis
import android.graphics.text.PositionedGlyphs
import android.text.Layout
import android.text.TextPaint
@@ -211,8 +212,15 @@
run.baseX[i] = MathUtils.lerp(run.baseX[i], run.targetX[i], progress)
run.baseY[i] = MathUtils.lerp(run.baseY[i], run.targetY[i], progress)
}
- run.fontRuns.forEach {
- it.baseFont = fontInterpolator.lerp(it.baseFont, it.targetFont, progress)
+ run.fontRuns.forEach { fontRun ->
+ fontRun.baseFont =
+ fontInterpolator.lerp(fontRun.baseFont, fontRun.targetFont, progress)
+ val tmpFontVariationsArray = mutableListOf<FontVariationAxis>()
+ fontRun.baseFont.axes.forEach {
+ tmpFontVariationsArray.add(FontVariationAxis(it.tag, it.styleValue))
+ }
+ basePaint.fontVariationSettings =
+ FontVariationAxis.toFontVariationSettings(tmpFontVariationsArray)
}
}
}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt
index 1786d13..91c0a5b 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleAnimationConfig.kt
@@ -19,17 +19,11 @@
val maxHeight: Float = 0f,
val pixelDensity: Float = 1f,
var color: Int = Color.WHITE,
- val opacity: Int = RIPPLE_DEFAULT_ALPHA,
- val sparkleStrength: Float = RIPPLE_SPARKLE_STRENGTH,
+ val opacity: Int = RippleShader.RIPPLE_DEFAULT_ALPHA,
+ val sparkleStrength: Float = RippleShader.RIPPLE_SPARKLE_STRENGTH,
// Null means it uses default fade parameter values.
val baseRingFadeParams: RippleShader.FadeParams? = null,
val sparkleRingFadeParams: RippleShader.FadeParams? = null,
val centerFillFadeParams: RippleShader.FadeParams? = null,
val shouldDistort: Boolean = true
-) {
- companion object {
- const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f
- const val RIPPLE_DEFAULT_COLOR: Int = 0xffffffff.toInt()
- const val RIPPLE_DEFAULT_ALPHA: Int = 115 // full opacity is 255.
- }
-}
+)
diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt
index b5b6037..7e56f4b 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleShader.kt
@@ -60,6 +60,10 @@
const val DEFAULT_CENTER_FILL_FADE_OUT_START = 0f
const val DEFAULT_CENTER_FILL_FADE_OUT_END = 0.6f
+ const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f
+ const val RIPPLE_DEFAULT_COLOR: Int = 0xffffffff.toInt()
+ const val RIPPLE_DEFAULT_ALPHA: Int = 115 // full opacity is 255.
+
private const val SHADER_UNIFORMS =
"""
uniform vec2 in_center;
diff --git a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleView.kt b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleView.kt
index ef5ad43..b899127 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleView.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/surfaceeffects/ripple/RippleView.kt
@@ -72,9 +72,9 @@
this.rippleShape = rippleShape
rippleShader = RippleShader(rippleShape)
- rippleShader.color = RippleAnimationConfig.RIPPLE_DEFAULT_COLOR
+ rippleShader.color = RippleShader.RIPPLE_DEFAULT_COLOR
rippleShader.rawProgress = 0f
- rippleShader.sparkleStrength = RippleAnimationConfig.RIPPLE_SPARKLE_STRENGTH
+ rippleShader.sparkleStrength = RippleShader.RIPPLE_SPARKLE_STRENGTH
rippleShader.pixelDensity = resources.displayMetrics.density
ripplePaint.shader = rippleShader
@@ -209,7 +209,7 @@
*
* The alpha value of the color will be applied to the ripple. The alpha range is [0-255].
*/
- fun setColor(color: Int, alpha: Int = RippleAnimationConfig.RIPPLE_DEFAULT_ALPHA) {
+ fun setColor(color: Int, alpha: Int = RippleShader.RIPPLE_DEFAULT_ALPHA) {
rippleShader.color = ColorUtils.setAlphaComponent(color, alpha)
}
diff --git a/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/CleanArchitectureDependencyViolationDetectorTest.kt b/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/CleanArchitectureDependencyViolationDetectorTest.kt
index a5f832a..ff150c8c 100644
--- a/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/CleanArchitectureDependencyViolationDetectorTest.kt
+++ b/packages/SystemUI/checks/tests/com/android/internal/systemui/lint/CleanArchitectureDependencyViolationDetectorTest.kt
@@ -38,7 +38,7 @@
}
@Test
- fun `No violations`() {
+ fun noViolations() {
lint()
.files(
*LEGITIMATE_FILES,
@@ -51,7 +51,7 @@
}
@Test
- fun `Violation - domain depends on ui`() {
+ fun violation_domainDependsOnUi() {
lint()
.files(
*LEGITIMATE_FILES,
@@ -86,7 +86,7 @@
}
@Test
- fun `Violation - ui depends on data`() {
+ fun violation_uiDependsOnData() {
lint()
.files(
*LEGITIMATE_FILES,
@@ -121,7 +121,7 @@
}
@Test
- fun `Violation - shared depends on all other layers`() {
+ fun violation_sharedDependsOnAllOtherLayers() {
lint()
.files(
*LEGITIMATE_FILES,
@@ -166,7 +166,7 @@
}
@Test
- fun `Violation - data depends on domain`() {
+ fun violation_dataDependsOnDomain() {
lint()
.files(
*LEGITIMATE_FILES,
diff --git a/packages/SystemUI/common/src/com/android/systemui/common/buffer/RingBuffer.kt b/packages/SystemUI/common/src/com/android/systemui/common/buffer/RingBuffer.kt
index de49d1c..4734a38 100644
--- a/packages/SystemUI/common/src/com/android/systemui/common/buffer/RingBuffer.kt
+++ b/packages/SystemUI/common/src/com/android/systemui/common/buffer/RingBuffer.kt
@@ -19,14 +19,16 @@
import kotlin.math.max
/**
- * A simple ring buffer implementation
+ * A simple ring buffer of recycled items
*
- * Use [advance] to get the least recent item in the buffer (and then presumably fill it with
- * appropriate data). This will cause it to become the most recent item.
+ * Use [advance] to add items to the buffer.
*
* As the buffer is used, it will grow, allocating new instances of T using [factory] until it
- * reaches [maxSize]. After this point, no new instances will be created. Instead, the "oldest"
- * instances will be recycled from the back of the buffer and placed at the front.
+ * reaches [maxSize]. After this point, no new instances will be created. Instead, calls to
+ * [advance] will recycle the "oldest" instance from the start of the buffer, placing it at the end.
+ *
+ * The items in the buffer are "recycled" in that they are reused, but it is up to the caller of
+ * [advance] to properly reset any data that was previously stored on those items.
*
* @param maxSize The maximum size the buffer can grow to before it begins functioning as a ring.
* @param factory A function that creates a fresh instance of T. Used by the buffer while it's
@@ -37,11 +39,13 @@
private val buffer = MutableList<T?>(maxSize) { null }
/**
- * An abstract representation that points to the "end" of the buffer. Increments every time
- * [advance] is called and never wraps. Use [indexOf] to calculate the associated index into the
- * backing array. Always points to the "next" available slot in the buffer. Before the buffer
- * has completely filled, the value pointed to will be null. Afterward, it will be the value at
- * the "beginning" of the buffer.
+ * An abstract representation that points to the "end" of the buffer, i.e. one beyond the
+ * location of the last item. Increments every time [advance] is called and is never wrapped.
+ *
+ * Use [indexOf] to calculate the associated index into the backing array. Before the buffer has
+ * been completely filled, this will point to the next empty slot to fill; afterwards it will
+ * point to the next item that should be recycled (which, because the buffer is a ring, is the
+ * "start" of the buffer).
*
* This value is unlikely to overflow. Assuming [advance] is called at rate of 100 calls/ms,
* omega will overflow after a little under three million years of continuous operation.
@@ -56,12 +60,15 @@
get() = if (omega < maxSize) omega.toInt() else maxSize
/**
- * Advances the buffer's position by one and returns the value that is now present at the "end"
- * of the buffer. If the buffer is not yet full, uses [factory] to create a new item. Otherwise,
- * reuses the value that was previously at the "beginning" of the buffer.
+ * Adds an item to the end of the buffer. The caller should reset the returned item's contents
+ * and then fill it with appropriate data.
*
- * IMPORTANT: The value is returned as-is, without being reset. It will retain any data that was
- * previously stored on it.
+ * If the buffer is not yet full, uses [factory] to create a new item. Otherwise, it recycles
+ * the oldest item from the front of the buffer and moves it to the end.
+ *
+ * Importantly, recycled items are returned as-is, without being reset. They will retain any
+ * data that was previously stored on them. Callers must make sure to clear any historical data,
+ * if necessary.
*/
fun advance(): T {
val index = indexOf(omega)
@@ -72,8 +79,7 @@
/**
* Returns the value stored at [index], which can range from 0 (the "start", or oldest element
- * of the buffer) to [size]
- * - 1 (the "end", or newest element of the buffer).
+ * of the buffer) to [size] - 1 (the "end", or newest element of the buffer).
*/
operator fun get(index: Int): T {
if (index < 0 || index >= size) {
@@ -89,12 +95,6 @@
return buffer[indexOf(start + index)]!!
}
- inline fun forEach(action: (T) -> Unit) {
- for (i in 0 until size) {
- action(get(i))
- }
- }
-
override fun iterator(): Iterator<T> {
return object : Iterator<T> {
private var position: Int = 0
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
index eaf3229..34adcc7 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt
@@ -32,6 +32,12 @@
import com.android.systemui.plugins.PluginLifecycleManager
import com.android.systemui.plugins.PluginListener
import com.android.systemui.plugins.PluginManager
+import com.android.systemui.plugins.log.LogBuffer
+import com.android.systemui.plugins.log.LogLevel
+import com.android.systemui.plugins.log.LogMessage
+import com.android.systemui.plugins.log.LogMessageImpl
+import com.android.systemui.plugins.log.MessageInitializer
+import com.android.systemui.plugins.log.MessagePrinter
import com.android.systemui.util.Assert
import java.io.PrintWriter
import java.util.concurrent.ConcurrentHashMap
@@ -40,7 +46,6 @@
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
-private const val DEBUG = true
private val KEY_TIMESTAMP = "appliedTimestamp"
private fun <TKey, TVal> ConcurrentHashMap<TKey, TVal>.concurrentGetOrPut(
@@ -55,6 +60,32 @@
return result ?: value
}
+private val TMP_MESSAGE: LogMessage by lazy { LogMessageImpl.Factory.create() }
+
+private inline fun LogBuffer?.tryLog(
+ tag: String,
+ level: LogLevel,
+ messageInitializer: MessageInitializer,
+ noinline messagePrinter: MessagePrinter,
+ ex: Throwable? = null,
+) {
+ if (this != null) {
+ // Wrap messagePrinter to convert it from crossinline to noinline
+ this.log(tag, level, messageInitializer, messagePrinter, ex)
+ } else {
+ messageInitializer(TMP_MESSAGE)
+ val msg = messagePrinter(TMP_MESSAGE)
+ when (level) {
+ LogLevel.VERBOSE -> Log.v(tag, msg, ex)
+ LogLevel.DEBUG -> Log.d(tag, msg, ex)
+ LogLevel.INFO -> Log.i(tag, msg, ex)
+ LogLevel.WARNING -> Log.w(tag, msg, ex)
+ LogLevel.ERROR -> Log.e(tag, msg, ex)
+ LogLevel.WTF -> Log.wtf(tag, msg, ex)
+ }
+ }
+}
+
/** ClockRegistry aggregates providers and plugins */
open class ClockRegistry(
val context: Context,
@@ -66,8 +97,9 @@
val handleAllUsers: Boolean,
defaultClockProvider: ClockProvider,
val fallbackClockId: ClockId = DEFAULT_CLOCK_ID,
+ val logBuffer: LogBuffer? = null,
val keepAllLoaded: Boolean,
- val subTag: String,
+ subTag: String,
) {
private val TAG = "${ClockRegistry::class.simpleName} ($subTag)"
interface ClockChangeListener {
@@ -113,9 +145,11 @@
}
if (manager != info.manager) {
- Log.e(
+ logBuffer.tryLog(
TAG,
- "Clock Id conflict on load: $id is registered to another provider"
+ LogLevel.ERROR,
+ { str1 = id },
+ { "Clock Id conflict on load: $str1 is double registered" }
)
continue
}
@@ -138,9 +172,11 @@
val id = clock.clockId
val info = availableClocks[id]
if (info?.manager != manager) {
- Log.e(
+ logBuffer.tryLog(
TAG,
- "Clock Id conflict on unload: $id is registered to another provider"
+ LogLevel.ERROR,
+ { str1 = id },
+ { "Clock Id conflict on unload: $str1 is double registered" }
)
continue
}
@@ -211,7 +247,7 @@
ClockSettings.deserialize(json)
} catch (ex: Exception) {
- Log.e(TAG, "Failed to parse clock settings", ex)
+ logBuffer.tryLog(TAG, LogLevel.ERROR, {}, { "Failed to parse clock settings" }, ex)
null
}
settings = result
@@ -240,7 +276,7 @@
)
}
} catch (ex: Exception) {
- Log.e(TAG, "Failed to set clock settings", ex)
+ logBuffer.tryLog(TAG, LogLevel.ERROR, {}, { "Failed to set clock settings" }, ex)
}
settings = value
}
@@ -400,46 +436,55 @@
}
private fun onConnected(clockId: ClockId) {
- if (DEBUG) {
- Log.i(TAG, "Connected $clockId")
- }
-
+ logBuffer.tryLog(TAG, LogLevel.DEBUG, { str1 = clockId }, { "Connected $str1" })
if (currentClockId == clockId) {
- if (DEBUG) {
- Log.i(TAG, "Current clock ($clockId) was connected")
- }
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.INFO,
+ { str1 = clockId },
+ { "Current clock ($str1) was connected" }
+ )
}
}
private fun onLoaded(clockId: ClockId) {
- if (DEBUG) {
- Log.i(TAG, "Loaded $clockId")
- }
+ logBuffer.tryLog(TAG, LogLevel.DEBUG, { str1 = clockId }, { "Loaded $str1" })
if (currentClockId == clockId) {
- Log.i(TAG, "Current clock ($clockId) was loaded")
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.INFO,
+ { str1 = clockId },
+ { "Current clock ($str1) was loaded" }
+ )
triggerOnCurrentClockChanged()
}
}
private fun onUnloaded(clockId: ClockId) {
- if (DEBUG) {
- Log.i(TAG, "Unloaded $clockId")
- }
+ logBuffer.tryLog(TAG, LogLevel.DEBUG, { str1 = clockId }, { "Unloaded $str1" })
if (currentClockId == clockId) {
- Log.w(TAG, "Current clock ($clockId) was unloaded")
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.WARNING,
+ { str1 = clockId },
+ { "Current clock ($str1) was unloaded" }
+ )
triggerOnCurrentClockChanged()
}
}
private fun onDisconnected(clockId: ClockId) {
- if (DEBUG) {
- Log.i(TAG, "Disconnected $clockId")
- }
+ logBuffer.tryLog(TAG, LogLevel.DEBUG, { str1 = clockId }, { "Disconnected $str1" })
if (currentClockId == clockId) {
- Log.w(TAG, "Current clock ($clockId) was disconnected")
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.WARNING,
+ { str1 = clockId },
+ { "Current clock ($str1) was disconnected" }
+ )
}
}
@@ -466,12 +511,27 @@
if (isEnabled && clockId.isNotEmpty()) {
val clock = createClock(clockId)
if (clock != null) {
- if (DEBUG) {
- Log.i(TAG, "Rendering clock $clockId")
- }
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.INFO,
+ { str1 = clockId },
+ { "Rendering clock $str1" }
+ )
return clock
+ } else if (availableClocks.containsKey(clockId)) {
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.WARNING,
+ { str1 = clockId },
+ { "Clock $str1 not loaded; using default" }
+ )
} else {
- Log.e(TAG, "Clock $clockId not found; using default")
+ logBuffer.tryLog(
+ TAG,
+ LogLevel.ERROR,
+ { str1 = clockId },
+ { "Clock $str1 not found; using default" }
+ )
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
index 3ec3b5c..6ca7f12 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
@@ -62,10 +62,7 @@
private val defaultLineSpacing = resources.getFloat(R.dimen.keyguard_clock_line_spacing_scale)
override val events: DefaultClockEvents
- override lateinit var animations: DefaultClockAnimations
- private set
-
- override val config = ClockConfig(hasCustomPositionUpdatedAnimation = true)
+ override val config = ClockConfig()
init {
val parent = FrameLayout(ctx)
@@ -84,13 +81,13 @@
clocks = listOf(smallClock.view, largeClock.view)
events = DefaultClockEvents()
- animations = DefaultClockAnimations(0f, 0f)
events.onLocaleChanged(Locale.getDefault())
}
override fun initialize(resources: Resources, dozeFraction: Float, foldFraction: Float) {
largeClock.recomputePadding(null)
- animations = DefaultClockAnimations(dozeFraction, foldFraction)
+ largeClock.animations = LargeClockAnimations(largeClock.view, dozeFraction, foldFraction)
+ smallClock.animations = DefaultClockAnimations(smallClock.view, dozeFraction, foldFraction)
events.onColorPaletteChanged(resources)
events.onTimeZoneChanged(TimeZone.getDefault())
smallClock.events.onTimeTick()
@@ -115,6 +112,9 @@
view.logBuffer = value
}
+ override var animations: DefaultClockAnimations = DefaultClockAnimations(view, 0f, 0f)
+ internal set
+
init {
if (seedColor != null) {
currentColor = seedColor!!
@@ -170,6 +170,12 @@
view: AnimatableClockView,
seedColor: Int?,
) : DefaultClockFaceController(view, seedColor) {
+ override val config = ClockFaceConfig(hasCustomPositionUpdatedAnimation = true)
+
+ init {
+ animations = LargeClockAnimations(view, 0f, 0f)
+ }
+
override fun recomputePadding(targetRegion: Rect?) {
// We center the view within the targetRegion instead of within the parent
// view by computing the difference and adding that to the padding.
@@ -220,7 +226,8 @@
}
}
- inner class DefaultClockAnimations(
+ open inner class DefaultClockAnimations(
+ val view: AnimatableClockView,
dozeFraction: Float,
foldFraction: Float,
) : ClockAnimations {
@@ -229,34 +236,40 @@
init {
if (foldState.isActive) {
- clocks.forEach { it.animateFoldAppear(false) }
+ view.animateFoldAppear(false)
} else {
- clocks.forEach { it.animateDoze(dozeState.isActive, false) }
+ view.animateDoze(dozeState.isActive, false)
}
}
override fun enter() {
if (!dozeState.isActive) {
- clocks.forEach { it.animateAppearOnLockscreen() }
+ view.animateAppearOnLockscreen()
}
}
- override fun charge() = clocks.forEach { it.animateCharge { dozeState.isActive } }
+ override fun charge() = view.animateCharge { dozeState.isActive }
override fun fold(fraction: Float) {
val (hasChanged, hasJumped) = foldState.update(fraction)
if (hasChanged) {
- clocks.forEach { it.animateFoldAppear(!hasJumped) }
+ view.animateFoldAppear(!hasJumped)
}
}
override fun doze(fraction: Float) {
val (hasChanged, hasJumped) = dozeState.update(fraction)
if (hasChanged) {
- clocks.forEach { it.animateDoze(dozeState.isActive, !hasJumped) }
+ view.animateDoze(dozeState.isActive, !hasJumped)
}
}
+ }
+ inner class LargeClockAnimations(
+ view: AnimatableClockView,
+ dozeFraction: Float,
+ foldFraction: Float,
+ ) : DefaultClockAnimations(view, dozeFraction, foldFraction) {
override fun onPositionUpdated(fromRect: Rect, toRect: Rect, fraction: Float) {
largeClock.moveForSplitShade(fromRect, toRect, fraction)
}
diff --git a/packages/SystemUI/docs/dagger.md b/packages/SystemUI/docs/dagger.md
index 9b4c21e..4a6240b 100644
--- a/packages/SystemUI/docs/dagger.md
+++ b/packages/SystemUI/docs/dagger.md
@@ -108,20 +108,13 @@
### Using injection with Fragments
-Fragments are created as part of the FragmentManager, so they need to be
-setup so the manager knows how to create them. To do that, add a method
-to com.android.systemui.fragments.FragmentService$FragmentCreator that
-returns your fragment class. That is all that is required, once the method
-exists, FragmentService will automatically pick it up and use injection
-whenever your fragment needs to be created.
+Fragments are created as part of the FragmentManager, so injectable Fragments need to be registered
+so the manager knows how to create them. This is done via
+[FragmentService#addFragmentInstantiationProvider](../src/com/android/systemui/fragments/FragmentService.java).
+Pass it the class of your fragment and a `Provider` for your fragment at some time before your
+Fragment is accessed.
-```java
-public interface FragmentCreator {
- NavigationBarFragment createNavigationBar();
-}
-```
-
-If you need to create your fragment (i.e. for the add or replace transaction),
+When you need to create your fragment (i.e. for the add or replace transaction),
then the FragmentHostManager can do this for you.
```java
diff --git a/packages/SystemUI/monet/src/com/android/systemui/monet/ColorScheme.kt b/packages/SystemUI/monet/src/com/android/systemui/monet/ColorScheme.kt
index 204bac8..450c616 100644
--- a/packages/SystemUI/monet/src/com/android/systemui/monet/ColorScheme.kt
+++ b/packages/SystemUI/monet/src/com/android/systemui/monet/ColorScheme.kt
@@ -316,9 +316,9 @@
),
CLOCK_VIBRANT(
CoreSpec(
- a1 = TonalSpec(HueSource(), ChromaBound(ChromaSource(), 30.0, Chroma.MAX_VALUE)),
- a2 = TonalSpec(HueAdd(20.0), ChromaBound(ChromaSource(), 30.0, Chroma.MAX_VALUE)),
- a3 = TonalSpec(HueAdd(60.0), ChromaBound(ChromaSource(), 30.0, Chroma.MAX_VALUE)),
+ a1 = TonalSpec(HueSource(), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)),
+ a2 = TonalSpec(HueAdd(20.0), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)),
+ a3 = TonalSpec(HueAdd(60.0), ChromaBound(ChromaSource(), 70.0, Chroma.MAX_VALUE)),
// Not Used
n1 = TonalSpec(HueSource(), ChromaConstant(0.0)),
diff --git a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
index e0d0184..1811c02 100644
--- a/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
+++ b/packages/SystemUI/plugin/bcsmartspace/src/com/android/systemui/plugins/BcSmartspaceDataPlugin.java
@@ -187,7 +187,7 @@
if (action.getIntent() != null) {
startIntent(v, action.getIntent(), showOnLockscreen);
} else if (action.getPendingIntent() != null) {
- startPendingIntent(action.getPendingIntent(), showOnLockscreen);
+ startPendingIntent(v, action.getPendingIntent(), showOnLockscreen);
}
} catch (ActivityNotFoundException e) {
Log.w(TAG, "Could not launch intent for action: " + action, e);
@@ -199,7 +199,7 @@
if (action.getIntent() != null) {
startIntent(v, action.getIntent(), showOnLockscreen);
} else if (action.getPendingIntent() != null) {
- startPendingIntent(action.getPendingIntent(), showOnLockscreen);
+ startPendingIntent(v, action.getPendingIntent(), showOnLockscreen);
}
} catch (ActivityNotFoundException e) {
Log.w(TAG, "Could not launch intent for action: " + action, e);
@@ -210,6 +210,6 @@
void startIntent(View v, Intent i, boolean showOnLockscreen);
/** Start the PendingIntent */
- void startPendingIntent(PendingIntent pi, boolean showOnLockscreen);
+ void startPendingIntent(View v, PendingIntent pi, boolean showOnLockscreen);
}
}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
index 1fec331..6d4dbf6 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ActivityStarter.java
@@ -79,6 +79,11 @@
void postStartActivityDismissingKeyguard(Intent intent, int delay);
void postStartActivityDismissingKeyguard(Intent intent, int delay,
@Nullable ActivityLaunchAnimator.Controller animationController);
+
+ /** Posts a start activity intent that dismisses keyguard. */
+ void postStartActivityDismissingKeyguard(Intent intent, int delay,
+ @Nullable ActivityLaunchAnimator.Controller animationController,
+ @Nullable String customMessage);
void postStartActivityDismissingKeyguard(PendingIntent intent);
/**
@@ -93,6 +98,10 @@
void dismissKeyguardThenExecute(OnDismissAction action, @Nullable Runnable cancel,
boolean afterKeyguardGone);
+ /** Authenticates if needed and dismisses keyguard to execute an action. */
+ void dismissKeyguardThenExecute(OnDismissAction action, @Nullable Runnable cancel,
+ boolean afterKeyguardGone, @Nullable String customMessage);
+
interface Callback {
void onActivityStarted(int resultCode);
}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
index 05630e7..8ef2d80 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
@@ -69,9 +69,6 @@
/** Events that clocks may need to respond to */
val events: ClockEvents
- /** Triggers for various animations */
- val animations: ClockAnimations
-
/** Initializes various rendering parameters. If never called, provides reasonable defaults. */
fun initialize(
resources: Resources,
@@ -79,8 +76,10 @@
foldFraction: Float,
) {
events.onColorPaletteChanged(resources)
- animations.doze(dozeFraction)
- animations.fold(foldFraction)
+ smallClock.animations.doze(dozeFraction)
+ largeClock.animations.doze(dozeFraction)
+ smallClock.animations.fold(foldFraction)
+ largeClock.animations.fold(foldFraction)
smallClock.events.onTimeTick()
largeClock.events.onTimeTick()
}
@@ -100,6 +99,9 @@
/** Events specific to this clock face */
val events: ClockFaceEvents
+ /** Triggers for various animations */
+ val animations: ClockAnimations
+
/** Some clocks may log debug information */
var logBuffer: LogBuffer?
}
@@ -192,13 +194,6 @@
/** Render configuration for the full clock. Modifies the way systemUI behaves with this clock. */
data class ClockConfig(
- /**
- * Whether this clock has a custom position update animation. If true, the keyguard will call
- * `onPositionUpdated` to notify the clock of a position update animation. If false, a default
- * animation will be used (e.g. a simple translation).
- */
- val hasCustomPositionUpdatedAnimation: Boolean = false,
-
/** Transition to AOD should move smartspace like large clock instead of small clock */
val useAlternateSmartspaceAODTransition: Boolean = false,
@@ -213,6 +208,13 @@
/** Call to check whether the clock consumes weather data */
val hasCustomWeatherDataDisplay: Boolean = false,
+
+ /**
+ * Whether this clock has a custom position update animation. If true, the keyguard will call
+ * `onPositionUpdated` to notify the clock of a position update animation. If false, a default
+ * animation will be used (e.g. a simple translation).
+ */
+ val hasCustomPositionUpdatedAnimation: Boolean = false,
)
/** Structure for keeping clock-specific settings */
diff --git a/packages/SystemUI/proguard.flags b/packages/SystemUI/proguard.flags
index 10bb00c..a8ed843 100644
--- a/packages/SystemUI/proguard.flags
+++ b/packages/SystemUI/proguard.flags
@@ -1,156 +1,13 @@
-# Preserve line number information for debugging stack traces.
--keepattributes SourceFile,LineNumberTable
+-include proguard_common.flags
-# Preserve relationship information that can impact simple class naming.
--keepattributes EnclosingMethod,InnerClasses
-
--keep class com.android.systemui.recents.OverviewProxyRecentsImpl
--keep class com.android.systemui.statusbar.car.CarStatusBar
--keep class com.android.systemui.statusbar.phone.CentralSurfaces
-keep class com.android.systemui.statusbar.tv.TvStatusBar
--keep class ** extends com.android.systemui.SystemUIInitializer {
- *;
-}
--keep class * extends com.android.systemui.CoreStartable
--keep class * implements com.android.systemui.CoreStartable$Injector
-
-# Needed for builds to properly initialize KeyFrames from xml scene
--keepclassmembers class * extends androidx.constraintlayout.motion.widget.Key {
- public <init>();
-}
-
-# Needed to ensure callback field references are kept in their respective
-# owning classes when the downstream callback registrars only store weak refs.
-# TODO(b/264686688): Handle these cases with more targeted annotations.
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- private com.android.keyguard.KeyguardUpdateMonitorCallback *;
- private com.android.systemui.privacy.PrivacyConfig$Callback *;
- private com.android.systemui.privacy.PrivacyItemController$Callback *;
- private com.android.systemui.settings.UserTracker$Callback *;
- private com.android.systemui.statusbar.phone.StatusBarWindowCallback *;
- private com.android.systemui.util.service.Observer$Callback *;
- private com.android.systemui.util.service.ObservableServiceConnection$Callback *;
-}
-# Note that these rules are temporary companions to the above rules, required
-# for cases like Kotlin where fields with anonymous types use the anonymous type
-# rather than the supertype.
--if class * extends com.android.keyguard.KeyguardUpdateMonitorCallback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.privacy.PrivacyConfig$Callback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.privacy.PrivacyItemController$Callback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.settings.UserTracker$Callback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.statusbar.phone.StatusBarWindowCallback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.util.service.Observer$Callback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
--if class * extends com.android.systemui.util.service.ObservableServiceConnection$Callback
--keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
- <1> *;
-}
-
--keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);
-}
-
--keep class ** extends androidx.preference.PreferenceFragment
--keep class com.android.systemui.tuner.*
-
-# The plugins subpackage acts as a shared library that might be referenced in
-# dynamically-loaded plugin APKs.
--keep class com.android.systemui.plugins.** {
- *;
-}
--keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
- *;
-}
--keep class androidx.core.app.CoreComponentFactory
-
--keep public class * extends com.android.systemui.CoreStartable {
- public <init>(android.content.Context);
-}
-
-# Keep the wm shell lib
--keep class com.android.wm.shell.*
-# Keep the protolog group methods that are called by the generated code
--keepclassmembers class com.android.wm.shell.protolog.ShellProtoLogGroup {
+-keep class com.android.systemui.SystemUIInitializerImpl {
*;
}
--keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.GlobalRootComponent { !synthetic *; }
--keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.GlobalRootComponent$SysUIComponentImpl { !synthetic *; }
--keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.Dagger** { !synthetic *; }
--keep,allowoptimization,allowaccessmodification class com.android.systemui.tv.Dagger** { !synthetic *; }
-
-# Prevent optimization or access modification of any referenced code that may
-# conflict with code in the bootclasspath.
-# TODO(b/222468116): Resolve such collisions in the build system.
--keepnames class android.**.nano.** { *; }
--keepnames class com.android.**.nano.** { *; }
--keepnames class com.android.internal.protolog.** { *; }
--keepnames class android.hardware.common.** { *; }
-
-# Allows proguard to make private and protected methods and fields public as
-# part of optimization. This lets proguard inline trivial getter/setter methods.
--allowaccessmodification
-
-# Removes runtime checks added through Kotlin to JVM code genereration to
-# avoid linear growth as more Kotlin code is converted / added to the codebase.
-# These checks are generally applied to Java platform types (values returned
-# from Java code that don't have nullness annotations), but we remove them to
-# avoid code size increases.
-#
-# See also https://kotlinlang.org/docs/reference/java-interop.html
-#
-# TODO(b/199941987): Consider standardizing these rules in a central place as
-# Kotlin gains adoption with other platform targets.
--assumenosideeffects class kotlin.jvm.internal.Intrinsics {
- # Remove check for method parameters being null
- static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
-
- # When a Java platform type is returned and passed to Kotlin NonNull method,
- # remove the null check
- static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String);
- static void checkNotNullExpressionValue(java.lang.Object, java.lang.String);
-
- # Remove check that final value returned from method is null, if passing
- # back Java platform type.
- static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String, java.lang.String);
- static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String);
-
- # Null check for accessing a field from a parent class written in Java.
- static void checkFieldIsNotNull(java.lang.Object, java.lang.String, java.lang.String);
- static void checkFieldIsNotNull(java.lang.Object, java.lang.String);
-
- # Removes code generated from !! operator which converts Nullable type to
- # NonNull type. These would throw an NPE immediate after on access.
- static void checkNotNull(java.lang.Object, java.lang.String);
- static void checkNotNullParameter(java.lang.Object, java.lang.String);
-
- # Removes lateinit var check being used before being set. Check is applied
- # on every field access without this.
- static void throwUninitializedPropertyAccessException(java.lang.String);
+-keep class com.android.systemui.tv.TvSystemUIInitializer {
+ *;
}
-# Strip verbose logs.
--assumenosideeffects class android.util.Log {
- static *** v(...);
- static *** isLoggable(...);
-}
--assumenosideeffects class android.util.Slog {
- static *** v(...);
-}
--maximumremovedandroidloglevel 2
+
+-keep,allowoptimization,allowaccessmodification class com.android.systemui.dagger.DaggerReferenceGlobalRootComponent** { !synthetic *; }
+-keep,allowoptimization,allowaccessmodification class com.android.systemui.tv.DaggerTvGlobalRootComponent** { !synthetic *; }
\ No newline at end of file
diff --git a/packages/SystemUI/proguard_common.flags b/packages/SystemUI/proguard_common.flags
new file mode 100644
index 0000000..1d008cf
--- /dev/null
+++ b/packages/SystemUI/proguard_common.flags
@@ -0,0 +1,141 @@
+# Preserve line number information for debugging stack traces.
+-keepattributes SourceFile,LineNumberTable
+
+-keep class com.android.systemui.VendorServices
+
+# the `#inject` methods are accessed via reflection to work on ContentProviders
+-keepclassmembers class * extends com.android.systemui.dagger.SysUIComponent { void inject(***); }
+
+# Needed for builds to properly initialize KeyFrames from xml scene
+-keepclassmembers class * extends androidx.constraintlayout.motion.widget.Key {
+ public <init>();
+}
+
+# Needed to ensure callback field references are kept in their respective
+# owning classes when the downstream callback registrars only store weak refs.
+# TODO(b/264686688): Handle these cases with more targeted annotations.
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ private com.android.keyguard.KeyguardUpdateMonitorCallback *;
+ private com.android.systemui.privacy.PrivacyConfig$Callback *;
+ private com.android.systemui.privacy.PrivacyItemController$Callback *;
+ private com.android.systemui.settings.UserTracker$Callback *;
+ private com.android.systemui.statusbar.phone.StatusBarWindowCallback *;
+ private com.android.systemui.util.service.Observer$Callback *;
+ private com.android.systemui.util.service.ObservableServiceConnection$Callback *;
+}
+# Note that these rules are temporary companions to the above rules, required
+# for cases like Kotlin where fields with anonymous types use the anonymous type
+# rather than the supertype.
+-if class * extends com.android.keyguard.KeyguardUpdateMonitorCallback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.privacy.PrivacyConfig$Callback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.privacy.PrivacyItemController$Callback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.settings.UserTracker$Callback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.statusbar.phone.StatusBarWindowCallback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.util.service.Observer$Callback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+-if class * extends com.android.systemui.util.service.ObservableServiceConnection$Callback
+-keepclassmembers,allowaccessmodification class com.android.systemui.**, com.android.keyguard.** {
+ <1> *;
+}
+
+-keepclasseswithmembers class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keep class ** extends androidx.preference.PreferenceFragment
+-keep class com.android.systemui.tuner.*
+
+# The plugins subpackage acts as a shared library that might be referenced in
+# dynamically-loaded plugin APKs.
+-keep class com.android.systemui.plugins.** {
+ *;
+}
+-keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
+ *;
+}
+-keep class androidx.core.app.CoreComponentFactory
+
+# Keep the wm shell lib
+-keep class com.android.wm.shell.*
+# Keep the protolog group methods that are called by the generated code
+-keepclassmembers class com.android.wm.shell.protolog.ShellProtoLogGroup {
+ *;
+}
+
+# Prevent optimization or access modification of any referenced code that may
+# conflict with code in the bootclasspath.
+# TODO(b/222468116): Resolve such collisions in the build system.
+-keepnames class android.**.nano.** { *; }
+-keepnames class com.android.**.nano.** { *; }
+-keepnames class com.android.internal.protolog.** { *; }
+-keepnames class android.hardware.common.** { *; }
+
+# Allows proguard to make private and protected methods and fields public as
+# part of optimization. This lets proguard inline trivial getter/setter methods.
+-allowaccessmodification
+
+# Removes runtime checks added through Kotlin to JVM code genereration to
+# avoid linear growth as more Kotlin code is converted / added to the codebase.
+# These checks are generally applied to Java platform types (values returned
+# from Java code that don't have nullness annotations), but we remove them to
+# avoid code size increases.
+#
+# See also https://kotlinlang.org/docs/reference/java-interop.html
+#
+# TODO(b/199941987): Consider standardizing these rules in a central place as
+# Kotlin gains adoption with other platform targets.
+-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
+ # Remove check for method parameters being null
+ static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
+
+ # When a Java platform type is returned and passed to Kotlin NonNull method,
+ # remove the null check
+ static void checkExpressionValueIsNotNull(java.lang.Object, java.lang.String);
+ static void checkNotNullExpressionValue(java.lang.Object, java.lang.String);
+
+ # Remove check that final value returned from method is null, if passing
+ # back Java platform type.
+ static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String, java.lang.String);
+ static void checkReturnedValueIsNotNull(java.lang.Object, java.lang.String);
+
+ # Null check for accessing a field from a parent class written in Java.
+ static void checkFieldIsNotNull(java.lang.Object, java.lang.String, java.lang.String);
+ static void checkFieldIsNotNull(java.lang.Object, java.lang.String);
+
+ # Removes code generated from !! operator which converts Nullable type to
+ # NonNull type. These would throw an NPE immediate after on access.
+ static void checkNotNull(java.lang.Object, java.lang.String);
+ static void checkNotNullParameter(java.lang.Object, java.lang.String);
+
+ # Removes lateinit var check being used before being set. Check is applied
+ # on every field access without this.
+ static void throwUninitializedPropertyAccessException(java.lang.String);
+}
+
+
+# Strip verbose logs.
+-assumenosideeffects class android.util.Log {
+ static *** v(...);
+ static *** isLoggable(...);
+}
+-assumenosideeffects class android.util.Slog {
+ static *** v(...);
+}
+-maximumremovedandroidloglevel 2
diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml
index 526b654..39b4183 100644
--- a/packages/SystemUI/res-keyguard/values-af/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-af/strings.xml
@@ -21,14 +21,11 @@
<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">"Voer jou PIN in"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Voer PIN in"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Voer jou patroon in"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Teken patroon"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Voer jou wagwoord in"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Voer wagwoord in"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ongeldige kaart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Gelaai"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laai tans draadloos"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Die e-SIM kan weens \'n fout nie gedeaktiveer word nie."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Verkeerde patroon"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Verkeerde patroon. Probeer weer."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Verkeerde wagwoord"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Verkeerde wagwoord. Probeer weer."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Verkeerde PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Verkeerde PIN. Probeer weer."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Of ontsluit met vingerafdruk"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Vingerafdruk nie herken nie"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Gesig nie erken nie"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Probeer weer of voer PIN in"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Probeer weer of voer wagwoord in"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Probeer weer of voer patroon in"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN word vereis as daar te veel pogings was"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Wagwoord word vereis as daar te veel pogings was"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Patroon word vereis as daar te veel pogings was"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Ontsluit met PIN of vingerafdruk"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Ontsluit met wagwoord of vingerafdruk"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Ontsluit met patroon of vingerafdruk"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Toestel deur werkbeleid gesluit vir meer sekuriteit"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN word vereis ná vassluit"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Wagwoord word vereis ná vassluit"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Patroon word vereis ná vassluit"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Opdatering word tydens onaktiewe ure geïnstalleer"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Meer sekuriteit vereis. PIN ruk lank nie gebruik nie."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Meer sekuriteit vereis. Wagwoord ruk lank nie gebruik nie."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Meer sekuriteit vereis. Patroon ruk lank nie gebruik nie."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Meer sekuriteit vereis. Toestel ruk lank nie ontsluit nie."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Kan nie met gesig ontsluit nie. Te veel pogings."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Kan nie met vingerafdruk ontsluit nie. Te veel pogings."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Vertrouensagent is nie beskikbaar nie"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Te veel pogings met verkeerde PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Te veel pogings met verkeerde patroon"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Te veel pogings met verkeerde wagwoord"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Probeer weer oor # sekonde.}other{Probeer weer oor # sekondes.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Voer SIM se PIN in."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Voer SIM se PIN vir \"<xliff:g id="CARRIER">%1$s</xliff:g>\" in."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-PUK-bewerking het misluk!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Wissel invoermetode"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Vliegtuigmodus"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Patroon word vereis nadat toestel herbegin"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN word vereis nadat toestel herbegin"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Wagwoord word vereis nadat toestel herbegin"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Gebruik eerder ’n patroon vir bykomende sekuriteit"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik eerder ’n PIN vir bykomende sekuriteit"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Gebruik eerder ’n wagwoord vir bykomende sekuriteit"</string>
diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml
index ae7e1f9..e175007 100644
--- a/packages/SystemUI/res-keyguard/values-am/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-am/strings.xml
@@ -21,14 +21,11 @@
<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">"የእርስዎን ፒን ያስገቡ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ፒን ያስገቡ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ሥርዓተ-ጥለትዎን ያስገቡ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ስርዓተ ጥለት ይሳሉ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ይለፍ ቃልዎን ያስገቡ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"የይለፍ ቃል ያስገቡ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ልክ ያልሆነ ካርድ።"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ባትሪ ሞልቷል"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • በገመድ አልባ ኃይል በመሙላት ላይ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"በአንድ ስህተት ምክንያት eSIM ሊሰናከል አልቻለም።"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"አስገባ"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"የተሳሳተ ሥርዓተ ጥለት"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"የተሳሳተ ስርዓተ ጥለት። እንደገና ይሞክሩ።"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"የተሳሳተ የይለፍ ቃል"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"የተሳሳተ የይለፍ ቃል። እንደገና ይሞክሩ።"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"የተሳሳተ ፒን"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"የተሳሳተ ፒን። እንደገና ይሞክሩ።"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ወይም በጣት አሻራ ይክፈቱ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"የጣት አሻራ አልታወቀም"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ፊት አልታወቀም"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"እንደገና ይሞክሩ ወይም ፒን ያስገቡ"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"እንደገና ይሞክሩ ወይም የይለፍ ቃል ያስገቡ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"እንደገና ይሞክሩ ወይም ስርዓተ ጥለት ይሳሉ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"በጣም ከብዙ ሙከራዎች በኋላ ፒን ያስፈልጋል"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"በጣም ከብዙ ሙከራዎች በኋላ የይለፍ ቃል ያስፈልጋል"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"በጣም ከብዙ ሙከራዎች በኋላ ስርዓተ ጥለት ያስፈልጋል"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"በፒን ወይም የጣት አሻራ ይክፈቱ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"በይለፍ ቃል ወይም የጣት አሻራ ይክፈቱ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"በስርዓተ ጥለት ወይም የጣት አሻራ ይክፈቱ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ለተጨማሪ ደህንነት፣ መሣሪያ በሥራ መመሪያ ተቆልፏል"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ከመቆለፊያ በኋላ ፒን ያስፈልጋል"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ከመቆለፊያ በኋላ የይለፍ ቃል ያስፈልጋል"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ከመቆለፊያ በኋላ ስርዓተ ጥለት ያስፈልጋል"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ዝማኔ በቦዘኑ ሰዓታት ወቅት ይጭናል"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። ፒን ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። የይለፍ ቃል ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። ስርዓተ ጥለት ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። መሣሪያ ለተወሰነ ጊዜ አልተቆለፈም ነበር።"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"በፊት መክፈት አልተቻለም። በጣም ብዙ ሙከራዎች።"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"በጣት አሻራ መክፈት አልተቻለም። በጣም ብዙ ሙከራዎች።"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"የተአማኒነት ወኪል አይገኝም"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"በተሳሳተ ፒን በጣም ብዙ ሙከራዎች"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"በተሳሳተ ስርዓተ ጥለት በጣም ብዙ ሙከራዎች"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"በተሳሳተ የይለፍ ቃል በጣም ብዙ ሙከራዎች"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{በ# ሰከንድ ውስጥ እንደገና ይሞክሩ።}one{በ# ሰከንድ ውስጥ እንደገና ይሞክሩ።}other{በ# ሰከንዶች ውስጥ እንደገና ይሞክሩ።}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"የሲም ፒን ያስገቡ።"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"የ«<xliff:g id="CARRIER">%1$s</xliff:g>» ሲም ፒን ያስገቡ።"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"የሲም PUK ክወና አልተሳካም!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"የግቤት ስልት ቀይር"</string>
<string name="airplane_mode" msgid="2528005343938497866">"የአውሮፕላን ሁነታ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"መሣሪያ እንደገና ከጀመረ በኋላ ስርዓተ ጥለት ያስፈልጋል"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"መሣሪያ እንደገና ከጀመረ በኋላ ፒን ያስፈልጋል"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"መሣሪያ እንደገና ከጀመረ በኋላ የይለፍ ቃል ያስፈልጋል"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ለተጨማሪ ደህንነት በምትኩ ስርዓተ ጥለት ይጠቀሙ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ለተጨማሪ ደህንነት በምትኩ ፒን ይጠቀሙ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ለተጨማሪ ደህንነት በምትኩ የይለፍ ቃል ይጠቀሙ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml
index 7720357..fa0fb44 100644
--- a/packages/SystemUI/res-keyguard/values-ar/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml
@@ -21,14 +21,11 @@
<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">"أدخل رقم التعريف الشخصي (PIN)"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"أدخِل رقم التعريف الشخصي."</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"أدخل النقش"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ارسم النقش."</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"أدخل كلمة المرور"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"أدخِل كلمة المرور."</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"بطاقة غير صالحة."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"تم الشحن"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • جارٍ الشحن لاسلكيًا"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"يتعذّر إيقاف eSIM بسبب خطأ."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"النقش غير صحيح."</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"نقش خطأ. أعِد المحاولة."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"كلمة مرور غير صحيحة"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"لقد أدخلت كلمة مرور خاطئة. يُرجى إعادة المحاولة."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"رقم تعريف شخصي خاطئ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"لقد أدخلت رقم تعريف شخصي غير صحيح. يُرجى إعادة المحاولة."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"جرّب فتح القفل باستخدام بصمة الإصبع."</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"لم يتم التعرّف على البصمة."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"لم يتم التعرّف على الوجه."</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"يُرجى إعادة المحاولة أو إدخال رقم التعريف الشخصي."</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"يُرجى إعادة المحاولة أو إدخال كلمة المرور."</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"يُرجى إعادة المحاولة أو رسم النقش."</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"يجب إدخال رقم PIN لأنّك أجريت محاولات كثيرة جدًا."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"يجب إدخال كلمة المرور لأنك أجريت محاولات كثيرة جدًا."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"يجب رسم النقش لأنّك أجريت محاولات كثيرة جدًا."</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"افتح برقم PIN أو البصمة."</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"افتح القفل بكلمة مرور أو ببصمة إصبع."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"افتح بالنقش أو بصمة الإصبع"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"لمزيد من الأمان، تم قفل الجهاز وفقًا لسياسة العمل."</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"يجب إدخال رقم التعريف الشخصي بعد إلغاء التأمين."</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"يجب إدخال كلمة المرور بعد إلغاء التأمين."</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"يجب رسم النقش بعد إلغاء التأمين."</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"سيتم تثبيت التحديث خلال ساعات عدم النشاط."</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"يجب تعزيز الأمان. لم يُستخدَم رقم PIN لبعض الوقت."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"يجب تعزيز الأمان. لم تستخدَم كلمة المرور لبعض الوقت."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"يجب تعزيز الأمان. لم يُستخدَم النقش لبعض الوقت."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"يجب تعزيز الأمان. لم يتم فتح قفل الجهاز لبعض الوقت."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"يتعذّر فتح القفل بالوجه. أجريت محاولات كثيرة جدًا."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"يتعذّر الفتح ببصمة الإصبع. أجريت محاولات كثيرة جدًا."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ميزة \"الوكيل المعتمد\" غير متاحة."</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"أجريت محاولات كثيرة جدًا بإدخال رقم تعريف شخصي خاطئ."</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"أجريت محاولات كثيرة جدًا برسم نقش خاطئ."</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"أجريت محاولات كثيرة جدًا بإدخال كلمة مرور خاطئة."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{أعِد المحاولة خلال ثانية واحدة.}zero{أعِد المحاولة خلال # ثانية.}two{أعِد المحاولة خلال ثانيتين.}few{أعِد المحاولة خلال # ثوانٍ.}many{أعِد المحاولة خلال # ثانية.}other{أعِد المحاولة خلال # ثانية.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"أدخل رقم التعريف الشخصي لشريحة SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"أدخل رقم التعريف الشخصي لشريحة SIM التابعة للمشغّل \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"تعذّر إتمام عملية PUK لشريحة SIM"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"تبديل أسلوب الإدخال"</string>
<string name="airplane_mode" msgid="2528005343938497866">"وضع الطيران"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"يجب رسم النقش بعد إعادة تشغيل الجهاز."</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"يجب إدخال رقم التعريف الشخصي بعد إعادة تشغيل الجهاز."</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"يجب إدخال كلمة المرور بعد إعادة تشغيل الجهاز."</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"لمزيد من الأمان، استخدِم النقش بدلاً من ذلك."</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"لمزيد من الأمان، أدخِل رقم التعريف الشخصي بدلاً من ذلك."</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"لمزيد من الأمان، أدخِل كلمة المرور بدلاً من ذلك."</string>
diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml
index 4991d62..686891f 100644
--- a/packages/SystemUI/res-keyguard/values-as/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-as/strings.xml
@@ -21,14 +21,11 @@
<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">"আপোনাৰ পিন দিয়ক"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"পিন দিয়ক"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"আপোনাৰ আৰ্হি দিয়ক"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"আৰ্হি আঁকক"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"আপোনাৰ পাছৱর্ড দিয়ক"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"পাছৱৰ্ড দিয়ক"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ব্যৱহাৰৰ অযোগ্য ছিম কাৰ্ড"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"চ্চার্জ কৰা হ’ল"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • বেতাঁৰৰ জৰিয়তে চাৰ্জ কৰি থকা হৈছে"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"এটা আসোঁৱাহৰ কাৰণে ই-ছিম অক্ষম কৰিব পৰা নাযায়।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"এণ্টাৰ বুটাম"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ভুল আৰ্হি"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ভুল আৰ্হি। পুনৰ চেষ্টা কৰক।"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ভুল পাছৱৰ্ড"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ভুল পাছৱৰ্ড। পুনৰ চেষ্টা কৰক।"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ভুল পিন"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ভুল পিন। পুনৰ চেষ্টা কৰক।"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"অথবা ফিংগাৰপ্ৰিণ্টেৰে আনলক কৰক"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"অচিনাক্ত ফিংগাৰপ্ৰিণ্ট"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"মুখাৱয়ব চিনি পোৱা নাই"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"পুনৰ চেষ্টা কৰক অথবা পিন দিয়ক"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"পুনৰ চেষ্টা কৰক অথবা পাছৱৰ্ড দিয়ক"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"পুনৰ চেষ্টা কৰক অথবা আৰ্হি আঁকক"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"অত্যধিক প্ৰয়াসৰ পাছত পিন দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"অত্যধিক প্ৰয়াসৰ পাছত পাছৱৰ্ড দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"অত্যধিক প্ৰয়াসৰ পাছত আৰ্হি দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"পিন অথবা ফিংগাৰপ্ৰিণ্টেৰে আনলক কৰক"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"পাছৱৰ্ড অথবা ফিংগাৰপ্ৰিণ্টেৰে আনলক কৰক"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"আৰ্হি অথবা ফিংগাৰপ্ৰিণ্টেৰে আনলক কৰক"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"অধিক সুৰক্ষাৰ বাবে, কৰ্মস্থানৰ নীতিয়ে ডিভাইচটো লক কৰিছে"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"লকডাউনৰ পাছত পিন দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"লকডাউনৰ পাছত পাছৱৰ্ড দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"লকডাউনৰ পাছত আৰ্হি দিয়াৰ আৱশ্যক"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"নিষ্ক্ৰিয় হৈ থকাৰ সময়ত আপডে’ট ইনষ্টল কৰা হ’ব"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি আৰ্হি ব্যৱহাৰ কৰা হোৱা নাই।"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি পাছৱৰ্ড ব্যৱহাৰ কৰা হোৱা নাই।"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি আৰ্হি ব্যৱহাৰ কৰা হোৱা নাই।"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। ডিভাইচটো কিছু সময় ধৰি আনলক কৰা হোৱা নাই।"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"মুখাৱয়বেৰে আনলক কৰিব নোৱাৰি। অতি বেছিসংখ্যক প্ৰয়াস।"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ফিংগাৰপ্ৰিণ্টেৰে আনলক কৰিব নোৱাৰি। অতি বেছিসংখ্যক প্ৰয়াস।"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"বিশ্বাসী এজেণ্ট উপলব্ধ নহয়"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ভুল পিন দি অতি বেছিসংখ্যক প্ৰয়াস কৰা হৈছে"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ভুল আৰ্হি দি অতি বেছিসংখ্যক প্ৰয়াস কৰা হৈছে"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ভুল পাছৱৰ্ড দি অতি বেছিসংখ্যক প্ৰয়াস কৰা হৈছে"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{১ ছেকেণ্ডত আকৌ চেষ্টা কৰক।}one{# ছেকেণ্ডৰ পাছত আকৌ চেষ্টা কৰক।}other{# ছেকেণ্ডৰ পাছত আকৌ চেষ্টা কৰক।}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ছিমৰ পিন দিয়ক।"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\"ৰ ছিমৰ পিন দিয়ক।"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"ছিম PUKৰ জৰিয়তে আনলক কৰিব পৰা নগ\'ল!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ইনপুট পদ্ধতি সলনি কৰক"</string>
<string name="airplane_mode" msgid="2528005343938497866">"এয়াৰপ্লে’ন ম’ড"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত আৰ্হিৰ আৱশ্যক"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত পিনৰ আৱশ্যক"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ডিভাইচ ৰিষ্টাৰ্ট হোৱাৰ পাছত পাছৱৰ্ডৰ আৱশ্যক"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে আৰ্হি ব্যৱহাৰ কৰক"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে পিন ব্যৱহাৰ কৰক"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ইয়াৰ পৰিৱৰ্তে পাছৱৰ্ড ব্যৱহাৰ কৰক"</string>
diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml
index 6861f6a..6eb36bd 100644
--- a/packages/SystemUI/res-keyguard/values-az/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-az/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN kodu daxil edin"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN daxil edin"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Modeli daxil edin"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Model çəkin"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Şifrənizi daxil edin"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Parol daxil edin"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Yanlış Kart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Enerji yığılıb"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Simsiz şəkildə batareya yığır"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM xəta səbəbi ilə deaktiv edilmədi."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Daxil edin"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Yanlış model"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Səhv model. Yenə sınayın."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Yanlış parol"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Səhv parol. Yenə sınayın."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Yanlış PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Səhv PIN. Yenə sınayın."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Yaxud barmaq izi ilə kiliddən çıxarın"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Barmaq izi tanınmır"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Üz tanınmır"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Təkrar sınayın və ya PIN daxil edin"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Təkrar sınayın və ya parol daxil edin"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Təkrar sınayın və ya model çəkin"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Çoxlu cəhddən sonra PIN tələb edilir"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Çoxlu cəhddən sonra parol tələb edilir"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Çoxlu cəhddən sonra model tələb edilir"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN/barmaq izi ilə açın"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Parol/barmaq izi ilə açın"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Model/barmaq izi ilə açın"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Qoruma üçün cihaz iş siyasətinə uyğun kilidləndi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Kilidləmədən sonra PIN tələb edilir"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kilidləmədən sonra parol tələb edilir"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kilidləmədən sonra model tələb edilir"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Güncəllənmə qeyri-işlək saatlarda quraşdırılacaq"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Qoruma lazımdır. PIN bir müddət işlənməyib."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Qoruma lazımdır. Parol bir müddət işlənməyib."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Qoruma lazımdır. Model bir müddət işlənməyib."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Qoruma lazımdır. Cihaz bir müddət açılmayıb."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Üz ilə açmaq olmur. Çox cəhd edilib."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Barmaq izi ilə açmaq olmur. Çox cəhd edilib."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"İnam agenti əlçatan deyil"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Səhv PIN ilə çox cəhd edildi"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Səhv model ilə çox cəhd edildi"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Səhv parol ilə çox cəhd edildi"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# saniyə sonra yenidən cəhd edin.}other{# saniyə sonra yenidən cəhd edin.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN\'ni daxil edin."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" üçün SIM PIN\'ni daxil edin."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK əməliyyatı alınmadı!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Daxiletmə metoduna keçin"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Təyyarə rejimi"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Cihaz təkrar başladıldıqdan sonra model tələb edilir"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Cihaz təkrar başladıldıqdan sonra PIN tələb edilir"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Cihaz təkrar başladıldıqdan sonra parol tələb edilir"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Əlavə təhlükəsizlik üçün modeldən istifadə edin"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Əlavə təhlükəsizlik üçün PIN istifadə edin"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Əlavə təhlükəsizlik üçün paroldan istifadə edin"</string>
diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
index 1b93803..6e2dd24 100644
--- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
@@ -21,14 +21,11 @@
<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">"Unesite PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Unesite PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Unesite šablon"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nacrtajte šablon"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Unesite lozinku"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Unesite lozinku"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nevažeća kartica."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Napunjena je"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Bežično punjenje"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM ne može da se onemogući zbog greške."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Pogrešan šablon"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Pogrešan šablon. Probajte ponovo."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Pogrešna lozinka"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Pogrešna lozinka. Probajte ponovo."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Pogrešan PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Pogrešan PIN. Probajte ponovo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ili otključajte otiskom prsta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Otisak prsta neprepoznat"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Lice nije prepoznato"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Probajte ponovo ili unesite PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Probajte ponovo ili unesite lozinku"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Probajte ponovo ili nacrtajte šablon"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN je obavezan posle previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Lozinka je obavezna posle previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Šablon je obavezan posle previše pokušaja"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Otključajte PIN-om ili otiskom prsta"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Otključajte lozinkom ili otiskom prsta"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Otključajte šablonom ili otiskom prsta"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Radi bezbednosti smernice za posao su zaključ. uređaj"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je obavezan posle zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lozinka je obavezna posle zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Šablon je obavezan posle zaključavanja"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje se instalira tokom neaktivnosti"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna zaštita. PIN dugo nije korišćen."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna zaštita. Lozinka dugo nije korišćena."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna zaštita. Šablon dugo nije korišćen."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Potrebna je dodatna zaštita. Uređaj dugo nije otključan."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Otključavanje licem nije uspelo. Previše pokušaja."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Otključavanje otiskom nije uspelo. Previše pokušaja."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Pouzdani agent je nedostupan"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Previše pokušaja sa netačnim PIN-om"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Previše pokušaja sa netačnim šablonom"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Previše pokušaja sa netačnom lozinkom"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Probajte ponovo za # sekundu.}one{Probajte ponovo za # sekundu.}few{Probajte ponovo za # sekunde.}other{Probajte ponovo za # sekundi.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Unesite PIN za SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Unesite PIN za SIM „<xliff:g id="CARRIER">%1$s</xliff:g>“."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Radnja sa PUK kodom za SIM nije uspela!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Promeni metod unosa"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Režim rada u avionu"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Šablon je obavezan posle restarta uređaja"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN je obavezan posle restarta uređaja"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Lozinka je obavezna posle restarta uređaja"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatnu bezbednost koristite šablon"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatnu bezbednost koristite PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatnu bezbednost koristite lozinku"</string>
diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml
index 98d2863..4781c3a 100644
--- a/packages/SystemUI/res-keyguard/values-be/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-be/strings.xml
@@ -21,14 +21,11 @@
<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">"Увядзіце PIN-код"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Увядзіце PIN-код"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Увядзіце ўзор разблакіроўкі"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Увядзіце ўзор"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Увядзіце пароль"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Увядзіце пароль"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Несапраўдная картка."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Зараджаны"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ідзе бесправадная зарадка"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Немагчыма адключыць eSIM-карту з-за памылкі."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Увесці"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Няправільны ўзор разблакіроўкі"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Памылка. Паўтарыце спробу."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Няправільны пароль"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Памылка. Паўтарыце спробу."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Няправільны PIN-код"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Памылка. Паўтарыце спробу."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Або разблакіруйце адбіткам пальца"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Адбітак пальца не распазнаны"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Твар не распазнаны"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Паўтарыце спробу або ўвядзіце PIN-код"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Паўтарыце спробу або ўвядзіце пароль"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Паўтарыце спробу або ўвядзіце ўзор разблакіроўкі"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Занадта шмат няўдалых спроб. Увядзіце PIN-код"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Занадта шмат няўдалых спроб. Увядзіце пароль"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Занадта шмат спроб. Увядзіце ўзор разблакіроўкі"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Разблакіруйце PIN-кодам або адбіткам пальца"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Разблакіруйце паролем або адбіткам пальца"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Разблакіруйце ўзорам або адбіткам пальца"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Прылада заблакіравана згодна з палітыкай арганізацыі"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Пасля блакіроўкі неабходна ўвесці PIN-код"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Пасля блакіроўкі неабходна ўвесці пароль"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Пасля блакіроўкі неабходна ўвесці ўзор разблакіроўкі"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Абнаўленне ўсталюецца, калі прылада будзе неактыўная"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся PIN-код."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся пароль."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся ўзор разблакіроўкі."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Патрабуецца дадатковая праверка. Прылада даўно заблакіравана."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Нельга разблакіраваць тварам. Занадта шмат спроб."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Нельга разблакіраваць пальцам. Занадта шмат спроб."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Даверчы агент недаступны"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Занадта шмат спроб увесці няправільны PIN-код"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Занадта шмат спроб увесці няправільны ўзор"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Занадта шмат спроб увесці няправільны пароль"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Паўтарыце спробу праз # секунду.}one{Паўтарыце спробу праз # секунду.}few{Паўтарыце спробу праз # секунды.}many{Паўтарыце спробу праз # секунд.}other{Паўтарыце спробу праз # секунды.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Увядзіце PIN-код SIM-карты."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Увядзіце PIN-код SIM-карты для \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Разблакіраваць SIM-карту PUK-кодам не атрымалася!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Пераключэнне рэжыму ўводу"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Рэжым палёту"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Пасля перазапуску прылады неабходна ўвесці ўзор разблакіроўкі"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Пасля перазапуску прылады неабходна ўвесці PIN-код"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Пасля перазапуску прылады неабходна ўвесці пароль"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"У мэтах дадатковай бяспекі скарыстайце ўзор разблакіроўкі"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"У мэтах дадатковай бяспекі скарыстайце PIN-код"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"У мэтах дадатковай бяспекі скарыстайце пароль"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml
index 7a2f5e9..42965f6 100644
--- a/packages/SystemUI/res-keyguard/values-bg/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml
@@ -21,14 +21,11 @@
<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">"Въведете ПИН кода си"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Въведете ПИН кода"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Въведете фигурата си"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Начертайте фигурата"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Въведете паролата си"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Въведете паролата"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Картата е невалидна."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Заредена"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарежда се безжично"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Електронната SIM карта не може да бъде деактивирана поради грешка."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"„Enter“"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Грешна фигура"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Грешна фигура. Нов опит."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Грешна парола"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Грешна парола. Нов опит."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Грешен ПИН код"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Грешен ПИН. Опитайте пак."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Или отключете с отпечатък"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Отпечатъкът не е разпознат"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Лицето не е разпознато"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Опитайте отново или въведете ПИН кода"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Опитайте отново или въведете паролата"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Опитайте отново или начертайте фигурата"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"След твърде много опити се изисква ПИН код"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"След твърде много опити се изисква парола"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"След твърде много опити се изисква фигура"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Отключете с ПИН/отпечатък"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Отключ. с парола/отпечатък"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Отключ. с фигура/отпечатък"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Устройството бе заключено от служебните правила"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"След заключването се изисква ПИН код"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"След заключването се изисква парола"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"След заключването се изисква фигура"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Актуализацията ще се инсталира при неактивност"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Изисква се допъл. защита. ПИН кодът не е ползван скоро."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Изисква се допъл. защита. Паролата не е ползвана скоро."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Изисква се допъл. защита. Фигурата не е ползвана скоро."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Изисква се допъл. защита. У-вото не е отключвано скоро."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Не може да се отключи с лице. Твърде много опити."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Не може да се откл. с отпечатък. Твърде много опити."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Функцията за надежден агент не е налице"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Твърде много опити с грешен ПИН код"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Твърде много опити с грешна фигура"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Твърде много опити с грешна парола"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Опитайте отново след # секунда.}other{Опитайте отново след # секунди.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Въведете ПИН кода за SIM картата."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Въведете ПИН кода на SIM картата за „<xliff:g id="CARRIER">%1$s</xliff:g>“."</string>
@@ -141,13 +108,10 @@
<string name="kg_password_pin_failed" msgid="5136259126330604009">"Операцията с ПИН кода за SIM картата не бе успешна!"</string>
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Операцията с PUK кода за SIM картата не бе успешна!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Превключване на метода на въвеждане"</string>
- <string name="airplane_mode" msgid="2528005343938497866">"Самолет. режим"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="airplane_mode" msgid="2528005343938497866">"Самолетен режим"</string>
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"След рестартирането на у-вото се изисква фигура"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"След рестартирането на у-вото се изисква ПИН код"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"След рестартирането на у-вото се изисква парола"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"За допълнителна сигурност използвайте фигура вместо това"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"За допълнителна сигурност използвайте ПИН код вместо това"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"За допълнителна сигурност използвайте парола вместо това"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml
index 1d9bc2d..4dcceab 100644
--- a/packages/SystemUI/res-keyguard/values-bn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml
@@ -21,14 +21,11 @@
<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">"পিন লিখুন"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"পিন লিখুন"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"প্যাটার্ন আঁকুন"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"প্যাটার্ন দিন"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"পাসওয়ার্ড লিখুন"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"পাসওয়ার্ড লিখুন"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ভুল কার্ড।"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"চার্জ হয়েছে"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ওয়্যারলেস পদ্ধতিতে চার্জ হচ্ছে"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"একটি সমস্যার কারণে ই-সিমটি বন্ধ করা যাচ্ছে না।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"এন্টার"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ভুল প্যাটার্ন"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ভুল প্যাটার্ন। আবার চেষ্টা করুন।"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ভুল পাসওয়ার্ড"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ভুল পাসওয়ার্ড। আবার চেষ্টা করুন।"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ভুল পিন"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ভুল পিন, আবার চেষ্টা করুন।"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"বা ফিঙ্গারপ্রিন্টের সাহায্যে আনলক করুন"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ফিঙ্গারপ্রিন্ট শনাক্ত হয়নি"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ফেস চেনা যায়নি"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"আবার চেষ্টা করুন বা পিন লিখুন"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"আবার চেষ্টা করুন বা পাসওয়ার্ড লিখুন"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"আবার চেষ্টা করুন বা প্যাটার্ন দিন"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"অনেক বেশিবার চেষ্টা করার পরে পিন দিতে হবে"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"অনেক বেশিবার চেষ্টা করার পরে পাসওয়ার্ড দিতে হবে"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"অনেক বেশিবার চেষ্টা করার পরে প্যাটার্ন দিতে হবে"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"পিন বা ফিঙ্গারপ্রিন্টের সাহায্যে আনলক করুন"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"পাসওয়ার্ড বা ফিঙ্গারপ্রিন্টের সাহায্যে আনলক করুন"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"প্যাটার্ন বা ফিঙ্গারপ্রিন্টের সাহায্যে আনলক করুন"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"অতিরিক্ত সুরক্ষার জন্য, কাজ সংক্রান্ত নীতি অনুসারে ডিভাইস লক করে দেওয়া হয়েছে"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"লকডাউন হওয়ার পরে পিন দিতে হবে"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"লকডাউন হওয়ার পরে পাসওয়ার্ড দিতে হবে"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"লকডাউন হওয়ার পরে প্যাটার্ন দিতে হবে"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ডিভাইস অ্যাক্টিভ না থাকাকালীন আপডেট ইনস্টল হবে"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"অতিরিক্ত সুরক্ষা দরকার। পিন কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"অতিরিক্ত সুরক্ষা দরকার। পাসওয়ার্ড কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"অতিরিক্ত সুরক্ষা দরকার। প্যাটার্ন কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"অতিরিক্ত সুরক্ষা দরকার। ডিভাইস কিছুক্ষণ আনলক ছিল না।"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ফেস দিয়ে আনলক করা যাচ্ছে না। অনেকবার চেষ্টা করেছেন।"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ফিঙ্গারপ্রিন্ট দিয়ে আনলক করা যাচ্ছে না। অনেকবার চেষ্টা করেছেন।"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"\'বিশ্বস্ত এজেন্ট\' ফিচার উপলভ্য নেই"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ভুল পিন দিয়ে অনেক বেশিবার চেষ্টা করা হয়েছে"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ভুল প্যাটার্ন দিয়ে অনেক বেশিবার চেষ্টা করা হয়েছে"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ভুল পাসওয়ার্ড দিয়ে অনেক বেশিবার চেষ্টা করা হয়েছে"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# সেকেন্ডের মধ্যে আবার চেষ্টা করুন।}one{# সেকেন্ডের মধ্যে আবার চেষ্টা করুন।}other{# সেকেন্ডের মধ্যে আবার চেষ্টা করুন।}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"সিমের পিন লিখুন।"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" এর জন্য সিমের পিন লিখুন।"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"সিম PUK দিয়ে আনলক করা যায়নি!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ইনপুট পদ্ধতি পরিবর্তন করুন"</string>
<string name="airplane_mode" msgid="2528005343938497866">"বিমান মোড"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ডিভাইস রিস্টার্ট হওয়ার পরে প্যাটার্ন দিতে হবে"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ডিভাইস রিস্টার্ট হওয়ার পরে পিন দিতে হবে"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ডিভাইস রিস্টার্ট হওয়ার পরে পাসওয়ার্ড দিতে হবে"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে প্যাটার্ন ব্যবহার করুন"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে পিন ব্যবহার করুন"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"অতিরিক্ত সুরক্ষার জন্য, এর বদলে পাসওয়ার্ড ব্যবহার করুন"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index 6ae7b18..3770c7d 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -21,14 +21,11 @@
<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">"Unesite svoj PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Unesite PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Unesite uzorak"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Unesite uzorak"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Unesite lozinku"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Unesite lozinku"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nevažeća kartica."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Napunjeno"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Bežično punjenje"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM nije moguće onemogućiti zbog greške."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Pogrešan uzorak"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Pogrešan uzorak. Pokušajte ponovo."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Pogrešna lozinka"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Pogrešna lozinka Pokušajte ponovo."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Pogrešan PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Pogrešan PIN. Pokušajte ponovo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ili otključajte otiskom prsta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Otisak nije prepoznat"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Lice nije prepoznato"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Pokušajte ponovo ili unesite PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Pokušajte ponovo ili unesite lozinku"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Pokušajte ponovo ili unesite uzorak"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN je potreban nakon previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Lozinka je potrebna nakon previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Uzorak je potreban nakon previše pokušaja"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Otključajte PIN-om ili otiskom"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Otključajte lozinkom ili otiskom"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Otključajte uzorkom ili otiskom"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Radi sigurnosti uređaj je zaključan radnim pravilima"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je potreban nakon zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lozinka je potrebna nakon zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Uzorak je potreban nakon zaključavanja"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje će se instalirati u periodu neaktivnosti"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna zaštita. PIN dugo nije unošen."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna zaštita. Lozinka dugo nije unošena."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna zaštita. Uzorak dugo nije unošen."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Potrebna je dodatna zaštita. Uređaj dugo nije otključavan."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nije moguće otključati licem. Previše pokušaja."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nije moguće otključati otiskom. Previše pokušaja."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Pouzdani agent nije dostupan"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Previše pokušaja s pogrešnim PIN-om"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Previše pokušaja s pogrešnim uzorkom"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Previše pokušaja s pogrešnom lozinkom"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Pokušajte ponovo za # s.}one{Pokušajte ponovo za # s.}few{Pokušajte ponovo za # s.}other{Pokušajte ponovo za # s.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Unesite PIN SIM kartice."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Unesite PIN SIM kartice operatera \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Korištenje PUK-a za SIM nije uspjelo!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Promjena načina unosa"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Način rada u avionu"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Uzorak je potreban nakon ponovnog pokretanja uređaja"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN je potreban nakon ponovnog pokretanja uređaja"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Lozinka je potrebna nakon pokretanja uređaja"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Radi dodatne zaštite, umjesto toga koristite uzorak"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Radi dodatne zaštite, umjesto toga koristite PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Radi dodatne zašitite, umjesto toga koristite lozinku"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml
index eefd491..89c3635 100644
--- a/packages/SystemUI/res-keyguard/values-ca/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml
@@ -21,14 +21,11 @@
<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">"Introdueix el PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Introdueix el PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introdueix el patró"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dibuixa el patró"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introdueix la contrasenya"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Introdueix la contrasenya"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"La targeta no és vàlida."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Bateria carregada"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • S\'està carregant sense fil"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"S\'ha produït un error i no es pot desactivar l\'eSIM."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Retorn"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Patró incorrecte"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Patró incorrecte. Torna-hi."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Contrasenya incorrecta"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Contrasenya incorrecta. Torna-hi."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"El PIN no és correcte"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN incorrecte. Torna-hi."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"O desbloqueja amb l\'empremta digital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"L\'empremta no es reconeix"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"No s\'ha reconegut la cara"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Torna-ho a provar o introdueix el PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Torna-ho a provar o introdueix la contrasenya"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Torna-ho a provar o dibuixa el patró"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Es requereix el PIN després de massa intents"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Es requereix la contrasenya després de massa intents"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Es requereix el patró després de massa intents"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloqueja amb PIN o empremta"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloqueja amb contrasenya o empremta"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloqueja amb patró o empremta"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Per política de treball, s\'ha bloquejat per seguretat"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Cal el PIN després del bloqueig de seguretat"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Cal la contrasenya després del bloqueig de seguretat"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Cal el patró després del bloqueig de seguretat"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"S\'actualitzarà durant les hores d\'inactivitat"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Cal més seguretat. Fa temps que no utilitzes el PIN."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Cal més seguretat. Contrasenya no utilitzada fa temps."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Cal més seguretat. Fa temps que no utilitzes el patró."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Cal més seguretat. Dispositiu no desbloquejat fa temps."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"No pots desbloquejar amb la cara. Massa intents."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"No pots desbloquejar amb l\'empremta. Massa intents."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"L\'agent de confiança no està disponible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Massa intents amb un PIN incorrecte"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Massa intents amb un patró incorrecte"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Massa intents amb una contrasenya incorrecta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Torna-ho a provar d\'aquí a # segon.}many{Torna-ho a provar d\'aquí a # segons.}other{Torna-ho a provar d\'aquí a # segons.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introdueix el PIN de la SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introdueix el PIN de la SIM de: <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"No s\'ha pogut desbloquejar la SIM amb el codi PUK."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Canvia el mètode d\'introducció"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mode d\'avió"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Cal el patró després de reiniciar el dispositiu"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Cal el PIN després de reiniciar el dispositiu"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Cal la contrasenya després de reiniciar el dispositiu"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Per a més seguretat, utilitza el patró"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Per a més seguretat, utilitza el PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Per a més seguretat, utilitza la contrasenya"</string>
diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml
index c3de04d..22f46a0 100644
--- a/packages/SystemUI/res-keyguard/values-cs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml
@@ -21,14 +21,11 @@
<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">"Zadejte PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Zadejte kód PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Zadejte gesto"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nakreslete gesto"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Zadejte heslo"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Zadejte heslo"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Neplatná karta."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Nabito"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Bezdrátové nabíjení"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM kartu kvůli chybě nelze deaktivovat."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Nesprávné gesto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Nesprávné gesto. Zkuste to znovu."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Špatné heslo"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Nesprávné heslo. Zkuste to znovu."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Nesprávný kód PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Nesprávný PIN. Zkuste to znovu."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Nebo odemkněte otiskem prstu"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Otisk prstu nebyl rozpoznán"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Obličej nebyl rozpoznán"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Zkuste to znovu nebo zadejte PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Zkuste to znovu nebo zadejte heslo"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Zkuste to znovu nebo nakreslete gesto"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Po příliš mnoha pokusech je vyžadován PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Po příliš mnoha pokusech je vyžadováno heslo"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Po příliš mnoha pokusech je vyžadováno gesto"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Zadejte PIN nebo otisk"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Zadejte heslo nebo otisk"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Zadejte gesto nebo otisk"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Kvůli zabezpečení se zařízení zamkne prac. zásadami"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po uzamčení je třeba zadat PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po uzamčení je třeba zadat heslo"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po uzamčení je třeba zadat gesto"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizace se nainstaluje v období neaktivity"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Je potřeba další krok. PIN dlouho nepoužit."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Je potřeba další krok. Heslo dlouho nepoužito."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Je potřeba další krok. Gesto dlouho nepoužito."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Je potřeba další krok. Zařízení dlouho odemknuto."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nelze odemknout obličejem. Příliš mnoho pokusů."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nelze odemknout otiskem prstu. Příliš mnoho pokusů."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agent důvěry není k dispozici"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Příliš mnoho pokusů s nesprávným kódem PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Příliš mnoho pokusů s nesprávným gestem"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Příliš mnoho pokusů s nesprávným heslem"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Zkuste to znovu za # sekundu.}few{Zkuste to znovu za # sekundy.}many{Zkuste to znovu za # sekundy.}other{Zkuste to znovu za # sekund.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Zadejte kód PIN SIM karty."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Zadejte kód PIN SIM karty <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operace pomocí kódu PUK SIM karty se nezdařila."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Přepnout metodu zadávání"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Režim Letadlo"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Po restartu zařízení je vyžadováno gesto"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Po restartu zařízení je vyžadován PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Po restartu zařízení je vyžadováno heslo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Z bezpečnostních důvodů raději použijte gesto"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Z bezpečnostních důvodů raději použijte PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Z bezpečnostních důvodů raději použijte heslo"</string>
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index a453bb5..5f3c2e7 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -21,14 +21,11 @@
<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">"Angiv din pinkode"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Angiv pinkode"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Angiv dit mønster"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Tegn mønster"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Angiv din adgangskode"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Angiv adgangskode"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ugyldigt kort."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Opladet"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Trådløs opladning"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM kan ikke deaktiveres på grund af en fejl."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Forkert mønster"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Forkert mønster. Prøv igen."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Forkert adgangskode"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Forkert adgangskode. Prøv igen."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Forkert pinkode"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Forkert pinkode. Prøv igen."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Eller lås op med fingeraftryk"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingeraftryk blev ikke genkendt"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Ansigt blev ikke genkendt"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Prøv igen, eller angiv pinkode"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Prøv igen, eller angiv adgangskode"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Prøv igen, eller tegn mønster"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Pinkode er påkrævet efter for mange forsøg"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Adgangskode er påkrævet efter for mange forsøg"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Mønster er påkrævet efter for mange forsøg"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Lås op med pinkode eller fingeraftryk"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Lås op med adgangskode eller fingeraftryk"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Lås op med mønster eller fingeraftryk"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Enhed låst af arbejdspolitik af hensyn til sikkerhed"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pinkode er påkrævet efter brug af ekstralås"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Adgangskode er påkrævet efter brug af ekstralås"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mønster er påkrævet efter brug af ekstralås"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Opdateringen installeres under inaktivitet"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mere sikkerhed er påkrævet. Pinkoden er ikke blevet brugt i et stykke tid."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mere sikkerhed er påkrævet. Adgangskoden er ikke blevet brugt i et stykke tid."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Mere sikkerhed er påkrævet. Mønsteret er ikke blevet brugt i et stykke tid."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Mere sikkerhed er påkrævet. Enheden er ikke blevet låst op i et stykke tid."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Oplåsning med ansigt mislykkedes. For mange forsøg."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Oplåsning med finger mislykkedes. For mange forsøg."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent er ikke tilgængelig"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"For mange forsøg med forkert pinkode"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"For mange forsøg med forkert mønster"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"For mange forsøg med forkert adgangskode"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Prøv igen om # sekund.}one{Prøv igen om # sekund.}other{Prøv igen om # sekunder.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Angiv pinkoden til SIM-kortet."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Angiv pinkoden til SIM-kortet fra \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK-koden til SIM-kortet blev afvist"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Skift indtastningsmetode"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Flytilstand"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Mønster er påkrævet efter genstart af enheden"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pinkode er påkrævet efter genstart af enheden"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Adgangskode er påkrævet efter genstart af enheden"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Øg sikkerheden ved at bruge dit oplåsningsmønter i stedet"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Øg sikkerheden ved at bruge din pinkode i stedet"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Øg sikkerheden ved at bruge din adgangskode i stedet"</string>
diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml
index 069cb50..23e5668 100644
--- a/packages/SystemUI/res-keyguard/values-el/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-el/strings.xml
@@ -21,14 +21,11 @@
<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">"Εισαγάγετε τον αριθμό PIN σας"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Εισαγωγή PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Εισαγάγετε το μοτίβο σας"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Σχεδίαση μοτίβου"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Εισαγάγετε κωδικό πρόσβασης"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Εισαγωγή κωδικού πρόσβασης"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Μη έγκυρη κάρτα."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Φορτίστηκε"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ασύρματη φόρτιση"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Δεν είναι δυνατή η απενεργοποίηση της eSIM, εξαιτίας κάποιου σφάλματος."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Λανθασμένο μοτίβο"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Λάθος μοτίβο. Δοκ. ξανά."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Λανθασμένος κωδικός πρόσβασης"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Λάθ. κωδ. πρόσ. Δοκ. ξανά."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Λανθασμένο PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Λάθος PIN. Δοκιμάστε ξανά."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Εναλλακτικά, ξεκλειδώστε με δακτυλικό αποτύπωμα"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Δεν αναγν. το δακτ. αποτ."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Το πρόσωπο δεν αναγνωρίστ."</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Δοκιμάστε ξανά ή εισαγάγετε το PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Δοκιμάστε ξανά ή εισαγάγετε τον κωδικό πρόσβασης"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Δοκιμάστε ξανά ή σχεδιάστε το μοτίβο"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Απαιτείται PIN μετά από πολλές προσπάθειες"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Απαιτείται κωδ. πρόσβ. μετά από πολλές προσπάθειες"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Απαιτείται μοτίβο μετά από πολλές προσπάθειες"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Ξεκλ. με PIN ή δακτ. αποτ."</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Ξεκλ. με κωδ. πρόσβ. ή δακτ. αποτ."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Ξεκλ. με μοτίβο ή δακτ. αποτ."</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Για πρόσθ. ασφάλ. η συσκ. κλειδ. από πολιτ. εργασίας"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Απαιτείται PIN μετά από κλείδωμα"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Απαιτείται κωδικός πρόσβασης μετά από κλείδωμα"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Απαιτείται μοτίβο μετά από κλείδωμα"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Η ενημέρωση θα εγκατασταθεί κατά τις ανενεργές ώρες"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Απαιτ. πρόσθ. ασφάλ. Το PIN έχει καιρό να χρησιμοπ."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Απαιτ. πρόσθ. ασφάλ. Ο κωδ. πρ. έχει καιρό να χρησ."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Απαιτ. πρόσθ. ασφάλ. Το μοτίβο έχει καιρό να χρησιμ."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Απαιτ. πρόσθ. ασφάλ. Η συσκ. έχει καιρό να ξεκλειδ."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Αδυναμία ξεκλ. με πρόσωπο Υπερβ. πολλές προσπάθειες."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Αδυν. ξεκ. με δακ. αποτ. Υπερβ. πολλές προσπάθειες."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Ο παράγοντας εμπιστοσύνης δεν είναι διαθέσιμος"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Υπερβολικά πολλές προσπάθειες με εσφαλμένο PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Υπερβολικά πολλές προσπάθειες με εσφαλμένο μοτίβο"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Υπερβολικά πολλές προσπάθειες με εσφαλ. κωδ. πρόσβ."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Δοκιμάστε ξανά σε # δευτερόλεπτο.}other{Δοκιμάστε ξανά σε # δευτερόλεπτα.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Εισαγωγή αριθμού PIN κάρτας SIM"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Εισαγάγετε τον αριθμό PIN της κάρτας SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Αποτυχία λειτουργίας κωδικού PUK κάρτας SIM!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Εναλλαγή μεθόδου εισαγωγής"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Λειτουργία πτήσης"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Απαιτείται μοτίβο μετά την επανεκκίνηση της συσκευής"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Απαιτείται PIN μετά την επανεκκίνηση της συσκευής"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Απαιτείται κωδ. πρόσβ. μετά την επανεκ. της συσκευής"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά μοτίβο"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Για πρόσθετη ασφάλεια, χρησιμοποιήστε εναλλακτικά κωδικό πρόσβασης"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
index 389f94f..10b82a4 100644
--- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
@@ -21,14 +21,11 @@
<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">"Enter your PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Enter PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Enter your pattern"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Draw pattern"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Enter your password"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Enter password"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Invalid card."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Charged"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Charging wirelessly"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"The eSIM can’t be disabled due to an error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Wrong pattern"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Wrong pattern. Try again."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Wrong password"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Wrong password. Try again."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Wrong PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Wrong PIN. Try again."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Or unlock with fingerprint"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingerprint not recognised"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Face not recognised"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Try again or enter PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Try again or enter password"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Try again or draw pattern"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Password is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pattern is required after too many attempts"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Unlock with PIN or fingerprint"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Unlock with password or fingerprint"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Unlock with pattern or fingerprint"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"For added security, device was locked by work policy"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Added security required. Device hasn\'t been unlocked for a while."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Can\'t unlock with face. Too many attempts."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Can\'t unlock with fingerprint. Too many attempts."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent is unavailable"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Too many attempts with incorrect PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Too many attempts with incorrect pattern"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Too many attempts with incorrect password"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Try again in # second.}other{Try again in # seconds.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Enter SIM PIN."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Enter SIM PIN for \'<xliff:g id="CARRIER">%1$s</xliff:g>\'."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK operation failed!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Switch input method"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Aeroplane mode"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pattern is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Password is required after the device restarts"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
index 389f94f..10b82a4 100644
--- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
@@ -21,14 +21,11 @@
<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">"Enter your PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Enter PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Enter your pattern"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Draw pattern"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Enter your password"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Enter password"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Invalid card."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Charged"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Charging wirelessly"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"The eSIM can’t be disabled due to an error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Wrong pattern"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Wrong pattern. Try again."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Wrong password"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Wrong password. Try again."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Wrong PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Wrong PIN. Try again."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Or unlock with fingerprint"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingerprint not recognised"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Face not recognised"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Try again or enter PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Try again or enter password"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Try again or draw pattern"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Password is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pattern is required after too many attempts"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Unlock with PIN or fingerprint"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Unlock with password or fingerprint"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Unlock with pattern or fingerprint"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"For added security, device was locked by work policy"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Added security required. Device hasn\'t been unlocked for a while."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Can\'t unlock with face. Too many attempts."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Can\'t unlock with fingerprint. Too many attempts."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent is unavailable"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Too many attempts with incorrect PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Too many attempts with incorrect pattern"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Too many attempts with incorrect password"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Try again in # second.}other{Try again in # seconds.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Enter SIM PIN."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Enter SIM PIN for \'<xliff:g id="CARRIER">%1$s</xliff:g>\'."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK operation failed!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Switch input method"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Aeroplane mode"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pattern is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Password is required after the device restarts"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
index 389f94f..10b82a4 100644
--- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
@@ -21,14 +21,11 @@
<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">"Enter your PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Enter PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Enter your pattern"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Draw pattern"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Enter your password"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Enter password"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Invalid card."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Charged"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Charging wirelessly"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"The eSIM can’t be disabled due to an error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Wrong pattern"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Wrong pattern. Try again."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Wrong password"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Wrong password. Try again."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Wrong PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Wrong PIN. Try again."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Or unlock with fingerprint"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingerprint not recognised"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Face not recognised"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Try again or enter PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Try again or enter password"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Try again or draw pattern"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Password is required after too many attempts"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pattern is required after too many attempts"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Unlock with PIN or fingerprint"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Unlock with password or fingerprint"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Unlock with pattern or fingerprint"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"For added security, device was locked by work policy"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Added security required. Device hasn\'t been unlocked for a while."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Can\'t unlock with face. Too many attempts."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Can\'t unlock with fingerprint. Too many attempts."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent is unavailable"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Too many attempts with incorrect PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Too many attempts with incorrect pattern"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Too many attempts with incorrect password"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Try again in # second.}other{Try again in # seconds.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Enter SIM PIN."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Enter SIM PIN for \'<xliff:g id="CARRIER">%1$s</xliff:g>\'."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK operation failed!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Switch input method"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Aeroplane mode"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pattern is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN is required after the device restarts"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Password is required after the device restarts"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"For additional security, use pattern instead"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"For additional security, use PIN instead"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"For additional security, use password instead"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
index df37e61..be1c44f 100644
--- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
@@ -21,14 +21,11 @@
<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">"Ingresa tu PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ingresar PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Ingresa tu patrón"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dibujar patrón"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Ingresa tu contraseña"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Ingresar contraseña"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Tarjeta no válida"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Cargada"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando de manera inalámbrica"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"No se puede inhabilitar la eSIM debido a un error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Intro"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Patrón incorrecto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Incorrecto. Reintenta."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Contraseña incorrecta"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Incorrecto. Reintenta."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorrecto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN incorrecto. Reintenta."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"O desbloquear con huella dactilar"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"No se reconoce la huella"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"No se reconoció el rostro"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Vuelve a intentarlo o ingresa el PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Vuelve a intentarlo o ingresa la contraseña"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Vuelve a intentarlo o dibuja el patrón"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Se requiere PIN luego de demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Se requiere contraseña luego de demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Se requiere patrón luego de demasiados intentos"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloq. PIN/huella"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloq. contraseña/huella"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloq. patrón/huella"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Dispositivo bloqueado con la política del trabajo"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Se requiere el PIN después del bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Se requiere la contraseña después del bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Se requiere el patrón después del bloqueo"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La actualización se instala en horas de inactividad"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Reforzar seguridad. PIN sin uso mucho tiempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Reforzar seguridad. Contraseña sin uso mucho tiempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Reforzar seguridad. Patrón sin uso mucho tiempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Reforzar seguridad. Mucho tiempo sin desbloquear."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Error de desbloqueo con rostro. Demasiados intentos."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Error de desbloqueo con huella. Demasiados intentos."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"El agente de confianza no está disponible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Demasiados intentos con PIN incorrecto"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Demasiados intentos con patrón incorrecto"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Demasiados intentos con contraseña incorrecta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Vuelve a intentarlo en # segundo.}many{Vuelve a intentarlo en # segundos.}other{Vuelve a intentarlo en # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Ingresa el PIN de la tarjeta SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Ingresa el PIN de la tarjeta SIM de \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Se produjo un error al desbloquear la tarjeta SIM con el PUK."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Cambiar método de entrada"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo de avión"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Se requiere patrón tras reiniciar dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Se requiere PIN tras reiniciar dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Se requiere contraseña tras reiniciar dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para seguridad adicional, usa un patrón"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para seguridad adicional, usa un PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para seguridad adicional, usa una contraseña"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml
index 49a2b1f..aa09cf9 100644
--- a/packages/SystemUI/res-keyguard/values-es/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es/strings.xml
@@ -21,14 +21,11 @@
<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 tu PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Introduce el PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduce tu patrón"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dibuja el patrón"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introduce tu contraseña"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Escribe la contraseña"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Tarjeta no válida."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Cargado"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando sin cables"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"No se puede mostrar la tarjeta eSIM debido a un error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Intro"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Patrón incorrecto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Patrón incorrecto. Inténtalo de nuevo."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Contraseña incorrecta"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Contraseña incorrecta. Inténtalo de nuevo."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorrecto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN incorrecto. Inténtalo de nuevo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"O desbloquea con la huella digital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Huella digital no reconocida"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Cara no reconocida"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Vuelve a intentarlo o introduce el PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Vuelve a intentarlo o escribe la contraseña"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Vuelve a intentarlo o dibuja el patrón"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Demasiados intentos, se necesita el PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Demasiados intentos, se necesita la contraseña"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Demasiados intentos, se necesita el patrón"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloquea con PIN o huella digital"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloquea con contraseña o huella digital"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloquea con patrón o huella digital"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Por política del trabajo, se ha bloqueado el dispositivo para mayor seguridad"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Se necesita el PIN después del bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Se necesita la contraseña después del bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Se necesita el patrón después del bloqueo"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La actualización se instalará en horas de inactividad"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Se debe reforzar la seguridad. PIN no usado en mucho tiempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Se debe reforzar la seguridad. Contraseña no usada en mucho tiempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Se debe reforzar la seguridad. Patrón no usado en mucho tiempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Se debe reforzar la seguridad. Dispositivo no desbloqueado en mucho tiempo."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Desbloqueo facial no disponible. Demasiados intentos."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Desbloqueo con huella digital no disponible. Demasiados intentos."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agente de confianza no disponible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Demasiados intentos con un PIN incorrecto"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Demasiados intentos con un patrón incorrecto"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Demasiados intentos con una contraseña incorrecta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Vuelve a intentarlo en # segundo.}many{Vuelve a intentarlo en # segundos.}other{Vuelve a intentarlo en # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introduce el PIN de la tarjeta SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introduce el PIN de la tarjeta SIM de <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"No se ha podido desbloquear la tarjeta SIM con el código PUK."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Cambiar método de introducción"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo Avión"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Se necesita el patrón tras el reinicio"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Se necesita el PIN tras el reinicio"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Se necesita la contraseña tras el reinicio"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para mayor seguridad, usa el patrón"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para mayor seguridad, usa el PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para mayor seguridad, usa la contraseña"</string>
diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml
index d260c13..d6c7f3f 100644
--- a/packages/SystemUI/res-keyguard/values-et/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-et/strings.xml
@@ -21,14 +21,11 @@
<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">"Sisestage PIN-kood"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Sisestage PIN-kood"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Sisestage muster"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Joonistage muster"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Sisestage parool"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Sisestage parool"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Kehtetu kaart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Laetud"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Juhtmeta laadimine"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Vea tõttu ei saa eSIM-kaarte keelata."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Sisesta"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Vale muster"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Vale muster. Proovige uuesti."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Vale parool"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Vale parool. Proovige uuesti."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Vale PIN-kood"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Vale PIN-kood. Proovige uuesti."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Või avage sõrmejäljega"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Sõrmejälge ei tuvastatud"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Nägu ei saanud tuvastada"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Proovige uuesti või sisestage PIN-kood"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Proovige uuesti või sisestage parool"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Proovige uuesti või joonistage muster"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN-koodi nõutakse pärast liiga paljusid katseid"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Parool on nõutav pärast liiga paljusid katseid"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Muster on nõutav pärast liiga paljusid katseid"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Avage PIN-koodi või sõrmejäljega"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Avage parooli või sõrmejäljega"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Avage mustri või sõrmejäljega"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Turvalisuse suurendamiseks lukustati seade töökoha eeskirjadega"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pärast lukustamist on PIN-kood nõutav"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pärast lukustamist on parool nõutav"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pärast lukustamist on muster nõutav"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Värskendus installitakse mitteaktiivsete tundide ajal"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Turvalisuse suurendamine on nõutav. PIN-koodi ei ole mõnda aega kasutatud."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Turvalisuse suurendamine on nõutav. Parooli ei ole mõnda aega kasutatud."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Turvalisuse suurendamine on nõutav. Mustrit ei ole mõnda aega kasutatud."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Turvalisuse suurendamine on nõutav. Seadet ei ole mõnda aega avatud."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Näoga ei saa avada. Liiga palju katseid."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Sõrmejäljega ei saa avada. Liiga palju katseid."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Usaldusväärne agent pole saadaval"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Liiga palju vale PIN-koodiga katseid"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Liiga palju vale mustriga katseid"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Liiga palju vale parooliga katseid"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Proovige uuesti # sekundi pärast.}other{Proovige uuesti # sekundi pärast.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Sisestage SIM-kaardi PIN-kood."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Sisestage operaatori „<xliff:g id="CARRIER">%1$s</xliff:g>” SIM-kaardi PIN-kood."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-kaardi PUK-koodi toiming ebaõnnestus."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Vaheta sisestusmeetodit"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Lennukirežiim"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pärast seadme taaskäivitamist on muster nõutav"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pärast seadme taaskäivitamist on PIN-kood nõutav"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Pärast seadme taaskäivitamist on parool nõutav"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Kasutage tugevama turvalisuse huvides hoopis mustrit"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Kasutage tugevama turvalisuse huvides hoopis PIN-koodi"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Kasutage tugevama turvalisuse huvides hoopis parooli"</string>
diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml
index 7786ae6..be03ec4 100644
--- a/packages/SystemUI/res-keyguard/values-eu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml
@@ -21,14 +21,11 @@
<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">"Idatzi PINa"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Idatzi PINa"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Marraztu eredua"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Marraztu eredua"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Idatzi pasahitza"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Idatzi pasahitza"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Txartelak ez du balio."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Kargatuta"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Hari gabe kargatzen"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Errore bat gertatu da eta ezin da desgaitu eSIM txartela."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Sartu"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Eredua ez da zuzena"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Eredua ez da zuzena. Saiatu berriro."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Pasahitza ez da zuzena"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Pasahitza ez da zuzena. Saiatu berriro."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN hori ez da zuzena"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PINa ez da zuzena. Saiatu berriro."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Bestela, desblokeatu hatz-marka bidez"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Ez da ezagutu hatz-marka"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Ez da ezagutu aurpegia"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Saiatu berriro edo idatzi PINa"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Saiatu berriro edo idatzi pasahitza"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Saiatu berriro edo marraztu eredua"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PINa behar da saiakera gehiegi egin ostean"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Pasahitza behar da saiakera gehiegi egin ostean"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Eredua behar da saiakera gehiegi egin ostean"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desblokeatu PIN edo hatz-marka bidez"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desblokeatu pasahitz edo hatz-marka bidez"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desblokeatu eredu edo hatz-marka bidez"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Segurtasuna bermatzeko, laneko gidalerroek gailua blokeatu dute"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PINa behar da blokeoa desgaitu ostean"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pasahitza behar da blokeoa desgaitu ostean"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Eredua behar da blokeoa desgaitu ostean"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Inaktibo egon ohi den tarte batean instalatuko da eguneratzea"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurtasuna areagotu behar da. PINa ez da erabili aldi batez."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurtasuna areagotu behar da. Pasahitza ez da erabili aldi batez."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurtasuna areagotu behar da. Eredua ez da erabili aldi batez."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Segurtasuna areagotu behar da. Gailua ez da desblokeatu aldi batez."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Ezin da desblokeatu aurpegi bidez. Saiakera gehiegi egin dira."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Ezin da desblokeatu hatz-marka bidez. Saiakera gehiegi egin dira."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Fidagarritasun-agentea ez dago erabilgarri"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Saiakera gehiegi egin dira okerreko PINarekin"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Saiakera gehiegi egin dira okerreko ereduarekin"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Saiakera gehiegi egin dira okerreko pasahitzarekin"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Saiatu berriro # segundo barru.}other{Saiatu berriro # segundo barru.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Idatzi SIMaren PINa."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Idatzi \"<xliff:g id="CARRIER">%1$s</xliff:g>\" operadorearen SIM txartelaren PINa."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Huts egin du SIM txartelaren PUK kodearen eragiketak!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Aldatu idazketa-metodoa"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Hegaldi modua"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Eredua behar da gailua berrabiarazi ostean"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PINa behar da gailua berrabiarazi ostean"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Pasahitza behar da gailua berrabiarazi ostean"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Babestuago egoteko, erabili eredua"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Babestuago egoteko, erabili PINa"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Babestuago egoteko, erabili pasahitza"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml
index 1383baf..91a15a4 100644
--- a/packages/SystemUI/res-keyguard/values-fa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml
@@ -21,14 +21,11 @@
<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">"پین را وارد کنید"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"پین را وارد کنید"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"الگویتان را وارد کنید"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"الگو را رسم کنید"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"گذرواژهتان را وارد کنید"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"گذرواژه را وارد کنید"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"کارت نامعتبر"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"شارژ کامل شد"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • درحال شارژ بیسیم"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"به دلیل بروز خطا، سیمکارت داخلی غیرفعال نشد."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"الگو اشتباه است"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"الگو اشتباه. تلاش مجدد."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"گذرواژه اشتباه است"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"گذرواژه اشتباه. تلاش مجدد."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"پین اشتباه"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"پین اشتباه. مجدد سعی کنید."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"یا با اثر انگشت باز کنید"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"اثر انگشت تشخیص داده نشد"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"چهره شناسایی نشد"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"دوباره امتحان کنید یا پین را وارد کنید"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"دوباره امتحان کنید یا گذرواژه را وارد کنید"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"دوباره امتحان کنید یا الگو را رسم کنید"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"بعداز دفعات زیادی تلاش ناموفق، پین لازم است"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"بعداز دفعات زیادی تلاش ناموفق، گذرواژه لازم است"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"بعداز دفعات زیادی تلاش ناموفق، الگو لازم است"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"قفلگشایی با پین یا اثر انگشت"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"قفلگشایی با گذرواژه یا اثر انگشت"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"قفلگشایی با الگو یا اثر انگشت"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"برای امنیت بیشتر، دستگاه با خطمشی کاری قفل شده است"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"بعداز قفل همه باید از پین استفاده کرد"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"بعداز قفل همه باید از گذرواژه استفاده کرد"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"بعداز قفل همه باید از الگو استفاده کرد"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"بهروزرسانی درطول ساعات غیرفعال نصب خواهد شد"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"امنیت بیشتر لازم است. مدتی از پین استفاده نشده است."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"امنیت بیشتر لازم است. گذرواژه مدتی استفاده نشده است."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"امنیت بیشتر لازم است. مدتی از الگو استفاده نشده است."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"امنیت بیشتر لازم است. قفل دستگاه مدتی باز نشده است."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"قفلگشایی با چهره ممکن نیست. دفعات زیادی تلاش ناموفق"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"قفل با اثرانگشت باز نمیشود. دفعات زیادی تلاش ناموفق"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"عامل معتبر دردسترس نیست"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"تلاشهای بسیار زیادی با پین اشتباه انجام شده است"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"تلاشهای بسیار زیادی با الگوی اشتباه انجام شده است"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"تلاشهای بسیار زیادی با گذرواژه اشتباه انجام شده است"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ثانیه دیگر دوباره امتحان کنید.}one{# ثانیه دیگر دوباره امتحان کنید.}other{# ثانیه دیگر دوباره امتحان کنید.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"پین سیمکارت را وارد کنید."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"پین سیمکارت «<xliff:g id="CARRIER">%1$s</xliff:g>» را وارد کنید."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"عملیات PUK سیمکارت ناموفق بود!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"تغییر روش ورودی"</string>
<string name="airplane_mode" msgid="2528005343938497866">"حالت هواپیما"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"بعداز بازراهاندازی دستگاه باید الگو رسم شود"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"بعداز بازراهاندازی دستگاه باید پین وارد شود"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"بعداز بازراهاندازی دستگاه باید گذرواژه وارد شود"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"برای امنیت بیشتر، بهجای آن از الگو استفاده کنید"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"برای امنیت بیشتر، بهجای آن از پین استفاده کنید"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"برای امنیت بیشتر، بهجای آن از گذرواژه استفاده کنید"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml
index 4b4843c..7db4fea 100644
--- a/packages/SystemUI/res-keyguard/values-fi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml
@@ -21,14 +21,11 @@
<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">"Syötä PIN-koodi"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Lisää PIN-koodi"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Piirrä kuvio"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Piirrä kuvio"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Kirjoita salasana"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Anna salasana"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Virheellinen kortti"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Ladattu"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ladataan langattomasti"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Tapahtui virhe, eikä eSIMiä voitu poistaa käytöstä."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Väärä kuvio"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Väärä kuvio. Yritä uud."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Väärä salasana"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Väärä salasana. Yritä uud."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Väärä PIN-koodi"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Väärä PIN. Yritä uud."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Voit avata lukituksen myös sormenjäljellä"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Tunnistamaton sormenjälki"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Kasvoja ei tunnistettu"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Yritä uudelleen tai lisää PIN-koodi"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Yritä uudelleen tai lisää salasana"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Yritä uudelleen tai piirrä kuvio"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN-koodia kysytään usean yrityksen jälkeen"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Salasanaa kysytään usean yrityksen jälkeen"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Kuviota kysytään usean yrityksen jälkeen"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Avaa: PIN/sormenjälki"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Avaa: salasana/sormenjälki"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Avaa: kuvio/sormenjälki"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Laite lukittiin työkäytännöllä sen suojaamiseksi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-koodi tarvitaan lukitustilan jälkeen"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Salasana tarvitaan lukitustilan jälkeen"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kuvio tarvitaan lukitustilan jälkeen"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Päivitys asennetaan käyttöajan ulkopuolella"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Lisäsuojausta tarvitaan. PIN-koodia ei ole käytetty."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Lisäsuojausta tarvitaan. Salasanaa ei ole käytetty."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Lisäsuojausta tarvitaan. Kuviota ei ole käytetty."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Lisäsuojausta tarvitaan. Laitetta ei ole avattu."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Avaus kasvoilla ei onnistu. Liikaa yrityksiä."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Avaus sormenjäljellä ei onnistu. Liikaa yrityksiä."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Luotettava taho ei ole käytettävissä"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Liian monta yritystä väärällä PIN-koodilla"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Liian monta yritystä väärällä kuviolla"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Liian monta yritystä väärällä salasanalla"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Yritä uudelleen # sekunnin kuluttua.}other{Yritä uudelleen # sekunnin kuluttua.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Anna SIM-kortin PIN-koodi."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Anna operaattorin <xliff:g id="CARRIER">%1$s</xliff:g> SIM-kortin PIN-koodi."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-kortin PUK-toiminto epäonnistui."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Vaihda syöttötapaa."</string>
<string name="airplane_mode" msgid="2528005343938497866">"Lentokonetila"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Kuvio tarvitaan uudelleenkäynnistyksen jälkeen"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN-koodi tarvitaan uudelleenkäynnistyksen jälkeen"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Salasana tarvitaan uudelleenkäynnistyksen jälkeen"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Lisäsuojaa saat, kun käytät sen sijaan kuviota"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Lisäsuojaa saat, kun käytät sen sijaan PIN-koodia"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Lisäsuojaa saat, kun käytät sen sijaan salasanaa"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
index 127588c..4eec915 100644
--- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
@@ -21,14 +21,11 @@
<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">"Entrez votre NIP"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Entrez le NIP"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Entrez votre schéma"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dessinez le schéma"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Entrez votre mot de passe"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Entrez le mot de passe"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Cette carte n\'est pas valide."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Chargé"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • En recharge sans fil"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"La carte eSIM ne peut pas être réinitialisée à cause d\'une erreur."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Entrée"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Schéma incorrect"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Schéma incorrect. Réessayez."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Mot de passe incorrect"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"MDP incorrect. Réessayez."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"NIP incorrect"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"NIP erroné. Réessayez."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ou déverrouillez avec l\'empreinte digitale"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Emp. digitale non reconnue"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Visage non reconnu"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Réessayez ou entrez le NIP"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Réessayez ou entrez le mot de passe"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Réessayez ou dessinez le schéma"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Le NIP est requis (trop de tentatives)"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Le mot de passe est requis (trop de tentatives)"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Le schéma est requis (trop de tentatives)"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Déverr. par NIP ou empr. dig."</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Déverr. par MDP ou empr. dig."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Déverr. par schéma ou empr. dig."</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Verr. pour plus de sécurité (politique de travail)"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Le NIP est requis après le verrouillage"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Le mot de passe est requis après le verrouillage"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Le schéma est requis après le verrouillage"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La MAJ sera installée durant les heures d\'inactivité"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Plus de sécurité requise. NIP non utilisé pour un temps."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Plus de sécurité requise. MDP non utilisé pour un temps."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Plus de sécurité requise. Schéma non utilisé pour un temps."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Plus de sécurité requise. Non déverr. pour un temps."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Déverr. facial impossible. Trop de tentatives."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Déverr. digital impossible. Trop de tentatives."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"L\'agent de confiance n\'est pas accessible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Trop de tentatives avec un NIP incorrect"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Trop de tentatives avec un schéma incorrect"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Trop de tentatives avec un mot de passe incorrect"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Réessayez dans # seconde.}one{Réessayez dans # seconde.}many{Réessayez dans # secondes.}other{Réessayez dans # secondes.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Entrez le NIP de la carte SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Entrez le NIP de la carte SIM pour « <xliff:g id="CARRIER">%1$s</xliff:g> »."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Le déverrouillage de la carte SIM par code PUK a échoué."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Changer de méthode d\'entrée"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mode Avion"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Schéma requis après le redémarrage de l\'appareil"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"NIP requis après le redémarrage de l\'appareil"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"MDP requis après le redémarrage de l\'appareil"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Pour plus de sécurité, utilisez plutôt un schéma"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Pour plus de sécurité, utilisez plutôt un NIP"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Pour plus de sécurité, utilisez plutôt un mot de passe"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml
index 41037515..bef6105 100644
--- a/packages/SystemUI/res-keyguard/values-fr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml
@@ -21,14 +21,11 @@
<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">"Saisissez le code d\'accès"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Saisissez le code"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Tracez le schéma"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dessinez un schéma"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Saisissez votre mot de passe"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Saisissez le mot de passe"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Carte non valide."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Chargé"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • En charge sans fil"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Impossible de désactiver la carte eSIM en raison d\'une erreur."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Entrée"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Schéma incorrect"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Schéma incorrect. Réessayez."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Mot de passe incorrect"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Mot de passe incorrect. Réessayez."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Code incorrect"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Code incorrect. Réessayez."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ou déverrouillez avec votre empreinte digitale"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Empreinte non reconnue"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Visage non reconnu"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Réessayez ou saisissez le code"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Réessayez ou saisissez votre mot de passe"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Réessayez ou dessinez un schéma"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Code requis après trop de tentatives"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Mot de passe requis après trop de tentatives"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Schéma requis après trop de tentatives"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Déverrouillez avec code ou empreinte"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Déverrouillez avec mot de passe ou empreinte"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Déverrouillez avec schéma ou empreinte"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Appareil verrouillé par règle pro pour plus de sécurité"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Code requis après un blocage"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Mot de passe requis après un blocage"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Schéma requis après un blocage"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La mise à jour sera installée pendant les heures d\'inactivité"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Code inutilisé depuis un moment. Renforcez la sécurité."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mot de passe inutilisé depuis un moment. Renforcez la sécurité."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Schéma inutilisé depuis un moment. Renforcez la sécurité."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Appareil non déverrouillé depuis un moment. Renforcez la sécurité."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Déverrouillage facial impossible. Trop de tentatives."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Déverrouillage digital impossible. Trop de tentatives."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agent de confiance non disponible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Trop de tentatives avec un code incorrect"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Trop de tentatives avec un schéma incorrect"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Trop de tentatives avec un mot de passe incorrect"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Réessayez dans # seconde.}one{Réessayez dans # seconde.}many{Réessayez dans # secondes.}other{Réessayez dans # secondes.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Saisissez le code PIN de la carte SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Saisissez le code PIN de la carte SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Échec du déverrouillage à l\'aide de la clé PUK de la carte SIM."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Changer le mode de saisie"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mode Avion"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Schéma requis après redémarrage de l\'appareil"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Code requis après redémarrage de l\'appareil"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Mot de passe requis après redémarrage de l\'appareil"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Pour plus de sécurité, utilisez plutôt un schéma"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Pour plus de sécurité, utilisez plutôt un code"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Pour plus de sécurité, utilisez plutôt un mot de passe"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml
index 9496eab..6f4b667 100644
--- a/packages/SystemUI/res-keyguard/values-gl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml
@@ -21,14 +21,11 @@
<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 o teu PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Insire un PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduce o padrón"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Debuxa o padrón"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introduce o contrasinal"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Insire un contrasinal"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"A tarxeta non é válida."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Cargado"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando sen fíos"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"A eSIM non se puido desactivar debido a un erro."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Intro"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"O padrón é incorrecto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Padrón incorrecto. Téntao."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"O contrasinal é incorrecto"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Contrasinal incorrecto."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorrecto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN incorrecto. Téntao."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Tamén podes desbloquealo coa impresión dixital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Impr. dixital non recoñec."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"A cara non se recoñeceu"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Téntao de novo ou pon o PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Téntao de novo ou pon o contrasinal"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Téntao de novo ou debuxa o contrasinal"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Requírese o PIN tras realizar demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Requírese o contrasinal tras demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Requírese o padrón tras realizar demasiados intentos"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloquea co PIN ou a impresión dixital"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloquea co contrasinal ou a impresión dixital"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloquea co padrón ou a impresión dixital"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"O dispositivo bloqueouse cunha política do traballo"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Requírese o PIN tras o bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Requírese o contrasinal tras o bloqueo"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Requírese o padrón tras o bloqueo"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A actualización instalarase durante a inactividade"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Requírese seguranza adicional. O PIN non se usou desde hai tempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Requírese seguranza adicional. O contrasinal non se usou desde hai tempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Requírese seguranza adicional. O padrón non se usou desde hai tempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Requírese seguranza adicional. O dispositivo non se desbloqueou desde hai tempo."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Imposible desbloquear coa cara. Demasiados intentos."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Imposible des. impresión dix. Demasiados intentos."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"O axente de confianza non está dispoñible"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Puxeches un PIN incorrecto demasiadas veces"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Debuxaches un padrón incorrecto demasiadas veces"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Puxeches un contrasinal incorrecto demasiadas veces"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Téntao de novo dentro de # segundo.}other{Téntao de novo dentro de # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introduce o PIN da SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introduce o PIN da SIM para \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Produciuse un erro ao tentar desbloquear a tarxeta SIM co código PUK."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Cambia o método de introdución"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo avión"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Requírese o padrón tras reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Requírese o PIN tras reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Requírese o contrasinal tras reiniciar o dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Utiliza un padrón para obter maior seguranza"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Utiliza un PIN para obter maior seguranza"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Utiliza un contrasinal para obter maior seguranza"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml
index c66ba19..5c2d09b 100644
--- a/packages/SystemUI/res-keyguard/values-gu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml
@@ -21,14 +21,11 @@
<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">"તમારો પિન દાખલ કરો"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"પિન દાખલ કરો"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"તમારી પૅટર્ન દાખલ કરો"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"પૅટર્ન દોરો"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"તમારો પાસવર્ડ દાખલ કરો"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"પાસવર્ડ દાખલ કરો"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"અમાન્ય કાર્ડ."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ચાર્જ થઈ ગયું"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • વાયરલેસથી ચાર્જિંગ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"એક ભૂલને લીધે ઇ-સિમ બંધ કરી શકાતું નથી."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"દાખલ કરો"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ખોટી પૅટર્ન"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ખોટી પૅટર્ન. ફરી પ્રયાસ કરો."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ખોટો પાસવર્ડ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ખોટો પાસવર્ડ. ફરી પ્રયાસ કરો."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ખોટો પિન"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ખોટો પિન. ફરી પ્રયાસ કરો."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"અથવા ફિંગરપ્રિન્ટ વડે અનલૉક કરો"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ચહેરો ન ઓળખાયો"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ફરી પ્રયાસ કરો અથવા પિન દાખલ કરો"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ફરી પ્રયાસ કરો અથવા પાસવર્ડ દાખલ કરો"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ફરી પ્રયાસ કરો અથવા પૅટર્ન દોરો"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"અનેક પ્રયાસો પછી પિન આવશ્યક છે"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"અનેક પ્રયાસો પછી પાસવર્ડ આવશ્યક છે"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"અનેક પ્રયાસો પછી પૅટર્ન આવશ્યક છે"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"પિન અથવા ફિંગરપ્રિન્ટ વડે અનલૉક કરો"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"પાસવર્ડ અથવા ફિંગરપ્રિન્ટ વડે અનલૉક કરો"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"પૅટર્ન અથવા ફિંગરપ્રિન્ટ વડે અનલૉક કરો"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"વધારાની સુરક્ષા માટે, ઑફિસની પૉલિસી અનુસાર ડિવાઇસ લૉક કરવામાં આવ્યું"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"પિન પછી પાસવર્ડ આવશ્યક છે"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"લૉકડાઉન પછી પાસવર્ડ આવશ્યક છે"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"પૅટર્ન પછી પાસવર્ડ આવશ્યક છે"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"નિષ્ક્રિયતાના સમય દરમિયાન અપડેટ ઇન્સ્ટૉલ થશે"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પિનનો ઉપયોગ થયો નથી."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પાસવર્ડનો ઉપયોગ થયો નથી."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પૅટર્નનો ઉપયોગ થયો નથી."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે ડિવાઇસ અનલૉક થયું નથી."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ફેસ વડે અનલૉક કરી શકાતું નથી. ઘણા બધા પ્રયાસો કર્યા."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ફિંગરપ્રિન્ટ વડે અનલૉક કરી શકાતું નથી. ઘણા બધા પ્રયાસો કર્યા."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ટ્રસ્ટ એજન્ટ ઉપલબ્ધ નથી"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ખોટા પિન વડે ઘણા બધા પ્રયાસો કર્યા"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ખોટી પૅટર્ન વડે ઘણા બધા પ્રયાસો કર્યા"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ખોટા પાસવર્ડ વડે ઘણા બધા પ્રયાસો કર્યા"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# સેકન્ડમાં ફરી પ્રયાસ કરો.}one{# સેકન્ડમાં ફરી પ્રયાસ કરો.}other{# સેકન્ડમાં ફરી પ્રયાસ કરો.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"સિમ પિન દાખલ કરો"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" માટે સિમ પિન દાખલ કરો."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"સિમ PUK ઓપરેશન નિષ્ફળ થયું!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ઇનપુટ પદ્ધતિ સ્વિચ કરો"</string>
<string name="airplane_mode" msgid="2528005343938497866">"એરપ્લેન મોડ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ડિવાઇસ ફરી ચાલુ થયા પછી પૅટર્ન આવશ્યક છે"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ડિવાઇસ ફરી ચાલુ થયા પછી પિન આવશ્યક છે"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ડિવાઇસ ફરી ચાલુ થયા પછી પાસવર્ડ આવશ્યક છે"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"વધારાની સુરક્ષા માટે, તેના બદલે પૅટર્નનો ઉપયોગ કરો"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"વધારાની સુરક્ષા માટે, તેના બદલે પિનનો ઉપયોગ કરો"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"વધારાની સુરક્ષા માટે, તેના બદલે પાસવર્ડનો ઉપયોગ કરો"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index acd49dd..52b204f 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -21,14 +21,11 @@
<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">"अपना पिन डालें"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"पिन डालें"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"अपना पैटर्न डालें"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"पैटर्न ड्रॉ करें"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"अपना पासवर्ड डालें"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"पासवर्ड डालें"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"गलत कार्ड."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"चार्ज हो गई है"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • वायरलेस तरीके से चार्ज हो रहा है"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"किसी गड़बड़ी की वजह से ई-सिम बंद नहीं किया जा सकता."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"डाला गया पैटर्न गलत है"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"गलत पैटर्न. दोबारा डालें."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"डाला गया पासवर्ड गलत है"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"गलत पासवर्ड. दोबारा डालें."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"गलत पिन"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"गलत पिन. दोबारा डालें."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"फ़िंगरप्रिंट से अनलॉक करें"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"फ़िंगरप्रिंट गलत है"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"चेहरा नहीं पहचाना गया"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"फिर से कोशिश करें या पिन डालें"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"फिर से कोशिश करें या पासवर्ड डालें"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"फिर से कोशिश करें या पैटर्न ड्रा करें"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"कई बार कोशिश की जा चुकी है, इसलिए पिन डालें"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"कई बार कोशिश की जा चुकी है, इसलिए पासवर्ड डालें"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"कई बार कोशिश की जा चुकी है, इसलिए पैटर्न ड्रा करें"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"पिन/फ़िंगरप्रिंट से अनलॉक करें"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"पासवर्ड/फ़िंगरप्रिंट से अनलॉक करें"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"पैटर्न/फ़िंगरप्रिंट से अनलॉक करें"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"सुरक्षा के लिए, ऑफ़िस की नीति के तहत डिवाइस लॉक था"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लॉकडाउन के बाद, पिन डालना ज़रूरी है"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लॉकडाउन के बाद, पासवर्ड डालना ज़रूरी है"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लॉकडाउन के बाद, पैटर्न ड्रॉ करना ज़रूरी है"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"इनऐक्टिव रहने के दौरान, अपडेट इंस्टॉल किया जाएगा"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पिन नहीं डाला गया."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पासवर्ड नहीं डाला गया."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पैटर्न ड्रॉ नहीं किया गया."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से डिवाइस अनलॉक नहीं हुआ."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"चेहरे से अनलॉक नहीं हुआ. कई बार कोशिश की गई."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"फ़िंगरप्रिंट से अनलॉक नहीं हुआ. कई बार कोशिश की गई."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"भरोसेमंद एजेंट की सुविधा उपलब्ध नहीं है"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"कई बार गलत पिन डाला जा चुका है"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"कई बार गलत पैटर्न ड्रॉ किया जा चुका है"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"कई बार गलत पासवर्ड डाला जा चुका है"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# सेकंड बाद फिर से कोशिश करें.}one{# सेकंड बाद फिर से कोशिश करें.}other{# सेकंड बाद फिर से कोशिश करें.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"सिम पिन डालें."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" के लिए सिम पिन डालें"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK की कार्यवाही विफल रही!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"इनपुट का तरीका बदलें"</string>
<string name="airplane_mode" msgid="2528005343938497866">"हवाई जहाज़ मोड"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"डिवाइस रीस्टार्ट करने पर, पैटर्न ड्रॉ करना ज़रूरी है"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"डिवाइस रीस्टार्ट करने पर, पिन डालना ज़रूरी है"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"डिवाइस रीस्टार्ट करने पर, पासवर्ड डालना ज़रूरी है"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ज़्यादा सुरक्षा के लिए, इसके बजाय पैटर्न का इस्तेमाल करें"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ज़्यादा सुरक्षा के लिए, इसके बजाय पिन का इस्तेमाल करें"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ज़्यादा सुरक्षा के लिए, इसके बजाय पासवर्ड का इस्तेमाल करें"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml
index 8c71227..b5034d8 100644
--- a/packages/SystemUI/res-keyguard/values-hr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml
@@ -21,14 +21,11 @@
<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">"Unesite PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Unesite PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Unesite uzorak"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nacrtajte uzorak"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Unesite zaporku"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Unesite zaporku"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nevažeća kartica."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Napunjeno"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • bežično punjenje"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Onemogućivanje eSIM-a nije uspjelo zbog pogreške."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Unos"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Pogrešan uzorak"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Pogrešan uzorak Pokušajte ponovo."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Pogrešna zaporka"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Pogrešna zaporka. Pokušajte ponovo."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Pogrešan PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Pogrešan PIN. Pokušajte ponovo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ili otključajte otiskom prsta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Otisak prsta nije prepoznat"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Lice nije prepoznato"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Pokušajte ponovno ili unesite PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Pokušajte ponovno ili unesite zaporku"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Pokušajte ponovno ili izradite uzorak"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN je obavezan nakon previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Zaporka je obavezna nakon previše pokušaja"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Uzorak je obavezan nakon previše pokušaja"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Otključajte PIN-om ili otiskom prsta"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Otključajte zaporkom ili otiskom prsta"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Otključajte uzorkom ili otiskom prsta"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Za više sigurnosti uređaj je zaključan prema pravilima za poslovne uređaje"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je obavezan nakon zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Zaporka je obavezna nakon zaključavanja"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Uzorak je obavezan nakon zaključavanja"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje će se instalirati tijekom neaktivnosti"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna sigurnost. PIN nije upotrijebljen duže vrijeme."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna sigurnost. Zaporka nije upotrijebljena duže vrijeme."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna sigurnost. Uzorak nije upotrijebljen duže vrijeme."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Potrebna je dodatna sigurnost. Uređaj nije otključan duže vrijeme."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nije moguće otključati licem. Previše pokušaja."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nije moguće otključati otiskom prsta. Previše pokušaja."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agent za pouzdanost nije pouzdan"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Previše pokušaja s netočnim PIN-om"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Previše pokušaja s netočnim uzorkom"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Previše pokušaja s netočnom zaporkom"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Pokušajte ponovo za # s.}one{Pokušajte ponovo za # s.}few{Pokušajte ponovo za # s.}other{Pokušajte ponovo za # s.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Unesite PIN za SIM"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Unesite PIN za SIM mobilnog operatera \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operacija PUK-a SIM kartice nije uspjela!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Promjena načina unosa"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Način rada u zrakoplovu"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Uzorak je obavezan nakon ponovnog pokretanja uređaja"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN je obavezan nakon ponovnog pokretanja uređaja"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Zaporka je obavezna nakon ponovnog pokretanja uređaja"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatnu sigurnost upotrijebite uzorak"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatnu sigurnost upotrijebite PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatnu sigurnost upotrijebite zaporku"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml
index c1ca187..a98408c 100644
--- a/packages/SystemUI/res-keyguard/values-hu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml
@@ -21,14 +21,11 @@
<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">"Adja meg PIN-kódját"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Adja meg a PIN-kódot"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Adja meg a mintáját"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Rajzolja le a mintát"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Adja meg jelszavát"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Adja meg a jelszót"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Érvénytelen kártya."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Feltöltve"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Vezeték nélküli töltés"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Hiba történt, így az eSIM-et nem lehet letiltani."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Helytelen minta"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Hibás minta. Próbálja újra."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Helytelen jelszó"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Hibás jelszó. Próbálja újra."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Helytelen PIN-kód"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Hibás PIN. Próbálja újra."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Vagy feloldás ujjlenyomattal"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Ismeretlen ujjlenyomat"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Sikertelen arcfelismerés"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Próbálja újra, vagy adja meg a PIN-kódot"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Próbálja újra, vagy adja meg a jelszót"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Próbálja újra, vagy rajzolja le a mintát"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Túl sok próbálkozás után PIN-kód megadása szükséges"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Túl sok próbálkozás után jelszó megadása szükséges"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Túl sok próbálkozás után minta megadása szükséges"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Feloldás PIN-kóddal vagy ujjlenyomattal"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Feloldás jelszóval vagy ujjlenyomattal"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Feloldás mintával vagy ujjlenyomattal"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"A fokozott biztonságért zárolta az eszközt a munkahelyi házirend"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-kód megadása szükséges a zárolás után"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Jelszó megadása szükséges a zárolás után"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Minta megadása szükséges a zárolás után"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A frissítést inaktív időben telepíti a rendszer"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Fokozott biztonság szükséges. Régóta nem használta a PIN-t."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Fokozott biztonság szükséges. Régóta nem használta jelszavát."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Fokozott biztonság szükséges. Régóta nem használta a mintát."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Fokozott biztonság szükséges. Az eszköz régóta nem volt feloldva."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Sikertelen arccal való feloldás. Túl sok kísérlet."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Sikertelen feloldás ujjlenyomattal. Túl sok kísérlet."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"A trust agent komponens nem áll rendelkezésre"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Túl sok próbálkozás helytelen PIN-kóddal"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Túl sok próbálkozás helytelen mintával"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Túl sok próbálkozás helytelen jelszóval"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Próbálja újra # másodperc múlva.}other{Próbálja újra # másodperc múlva.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Adja meg a SIM-kártya PIN-kódját."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Adja meg a(z) „<xliff:g id="CARRIER">%1$s</xliff:g>” SIM-kártya PIN-kódját."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"A SIM-kártya PUK-művelete sikertelen!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Beviteli módszer váltása"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Repülős üzemmód"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Minta megadása szükséges az újraindítás után"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN-kód megadása szükséges az zújraindítás után"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Jelszó megadása szükséges az újraindítás után"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"A nagyobb biztonság érdekében használjon inkább mintát"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"A nagyobb biztonság érdekében használjon inkább PIN-kódot"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"A nagyobb biztonság érdekében használjon inkább jelszót"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml
index c4936c5f..9aa47a7 100644
--- a/packages/SystemUI/res-keyguard/values-hy/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml
@@ -21,14 +21,11 @@
<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">"Մուտքագրեք PIN կոդը"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Մուտքագրեք PIN կոդը"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Մուտքագրեք նախշը"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Գծեք նախշը"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Մուտքագրեք գաղտնաբառը"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Մուտքագրեք գաղտնաբառը"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Սխալ քարտ"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Լիցքավորված է"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Անլար լիցքավորում"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Սխալի պատճառով չհաջողվեց անջատել eSIM-ը։"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Մուտքի ստեղն"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Նախշը սխալ է"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Նախշը սխալ է։ Կրկնեք։"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Գաղտնաբառը սխալ է"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Գաղտնաբառը սխալ է։ Կրկնեք։"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN կոդը սխալ է"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN-ը սխալ է: Կրկնեք։"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Կամ ապակողպեք մատնահետքով"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Մատնահետքը չի ճանաչվել"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Դեմքը չի ճանաչվել"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Նորից փորձեք կամ մուտքագրեք PIN կոդը"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Նորից փորձեք կամ մուտքագրեք գաղտնաբառը"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Նորից փորձեք կամ գծեք նախշը"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Չափազանց շատ փորձեր են արվել․ մուտքագրեք PIN կոդը"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Չափազանց շատ փորձեր են արվել․ մուտքագրեք գաղտնաբառը"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Չափազանց շատ փորձեր են արվել․ գծեք նախշը"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Ապակողպեք PIN-ով/մատնահետքով"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Ապակողպեք գաղտնաբառով/մատնահետքով"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Ապակողպեք նախշով/մատնահետքով"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Լրացուցիչ պաշտպանության համար սարքը կողպվել է"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Արգելափակումից հետո հարկավոր է մուտքագրել PIN կոդը"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Արգելափակումից հետո հարկավոր է մուտքագրել գաղտնաբառը"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Արգելափակումից հետո հարկավոր է գծել նախշը"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Թարմացումը կտեղադրվի ոչ ակտիվ ժամերին"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"PIN կոդը որոշ ժամանակ չի օգտագործվել։"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Գաղտնաբառը որոշ ժամանակ չի օգտագործվել։"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Նախշը որոշ ժամանակ չի օգտագործվել։"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Սարքը որոշ ժամանակ չի ապակողպվել։"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Դեմքով ապակողպումը հասանելի չէ։ Շատ փորձեր են արվել։"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Մատնահետքով ապակողպման փորձերի սահմանաչափը լրացել է։"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent-ն անհասանելի է"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Չափից շատ փորձեր են արվել սխալ PIN կոդով"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Չափից շատ փորձեր են արվել սխալ նախշով"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Չափից շատ փորձեր են արվել սխալ գաղտնաբառով"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Նորից փորձեք # վայրկյանից։}one{Նորից փորձեք # վայրկյանից։}other{Նորից փորձեք # վայրկյանից։}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Մուտքագրեք SIM քարտի PIN կոդը։"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Մուտքագրեք SIM քարտի PIN կոդը «<xliff:g id="CARRIER">%1$s</xliff:g>»-ի համար:"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK կոդի գործողությունը ձախողվեց:"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Փոխել ներածման եղանակը"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Ավիառեժիմ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Սարքը վերագործարկելուց հետո գծեք նախշը"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Սարքը վերագործարկելուց հետո մուտքագրեք PIN կոդը"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Սարքը վերագործարկելուց հետո մուտքագրեք գաղտնաբառը"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Լրացուցիչ անվտանգության համար օգտագործեք նախշ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Լրացուցիչ անվտանգության համար օգտագործեք PIN կոդ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Լրացուցիչ անվտանգության համար օգտագործեք գաղտնաբառ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml
index 5b2b98c..7af5eac 100644
--- a/packages/SystemUI/res-keyguard/values-in/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-in/strings.xml
@@ -21,14 +21,11 @@
<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">"Masukkan PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Masukkan PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Masukkan pola"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Gambar pola"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Masukkan sandi"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Masukkan sandi"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Kartu Tidak Valid"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Terisi penuh"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Mengisi daya secara nirkabel"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM tidak dapat dinonaktifkan karena terjadi error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Masukkan"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Pola salah"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Pola salah. Coba lagi."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Sandi salah"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Sandi salah. Coba lagi."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN Salah"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN salah. Coba lagi."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Atau buka kunci dengan sidik jari"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Sidik jari tidak dikenali"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Wajah tidak dikenali"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Coba lagi atau masukkan PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Coba lagi atau masukkan sandi"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Coba lagi atau gambar pola"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN diperlukan setelah terlalu banyak upaya gagal"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Sandi diperlukan setelah terlalu banyak upaya gagal"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pola diperlukan setelah terlalu banyak upaya gagal"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Buka kunci dengan PIN atau sidik jari"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Buka kunci dengan sandi atau sidik jari"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Buka kunci dengan pola atau sidik jari"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Untuk keamanan tambahan, perangkat dikunci oleh kebijakan kantor"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN diperlukan setelah kunci total"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Sandi diperlukan setelah kunci total"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pola diperlukan setelah kunci total"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update akan diinstal selama jam tidak aktif"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Perlu keamanan tambahan. PIN tidak digunakan selama beberapa waktu."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Perlu keamanan tambahan. Sandi tidak digunakan selama beberapa waktu."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Perlu keamanan tambahan. Pola tidak digunakan selama beberapa waktu."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Perlu keamanan tambahan. Kunci perangkat tidak dibuka selama beberapa waktu."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Tidak dapat membuka kunci dengan wajah. Terlalu banyak upaya gagal."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Tidak dapat membuka kunci dengan sidik jari. Terlalu banyak upaya gagal."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Perangkat dipercaya tidak tersedia"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Terlalu banyak upaya dengan PIN yang salah"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Terlalu banyak upaya dengan pola yang salah"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Terlalu banyak upaya dengan sandi yang salah"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Coba lagi dalam # detik.}other{Coba lagi dalam # detik.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Masukkan PIN SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Masukkan PIN SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operasi PUK SIM gagal!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Beralih metode input"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mode pesawat"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pola diperlukan setelah perangkat dimulai ulang"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN diperlukan setelah perangkat dimulai ulang"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Sandi diperlukan setelah perangkat dimulai ulang"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Untuk keamanan tambahan, gunakan pola"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Untuk keamanan tambahan, gunakan PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Untuk keamanan tambahan, gunakan sandi"</string>
diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml
index 0428316..1f8687f 100644
--- a/packages/SystemUI/res-keyguard/values-is/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-is/strings.xml
@@ -21,14 +21,11 @@
<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">"Sláðu inn PIN-númer"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Sláðu inn PIN-númer"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Færðu inn mynstrið þitt"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Teiknaðu mynstur"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Sláðu inn aðgangsorðið þitt"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Sláðu inn aðgangsorð"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ógilt kort."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Fullhlaðin"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Í þráðlausri hleðslu"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Villa kom í veg fyrir að hægt væri að gera eSIM-kortið óvirkt."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Færa inn"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Rangt mynstur"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Rangt mynstur. Reyndu aftur."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Rangt aðgangsorð"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Rangt aðgangsorð. Reyndu aftur."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Rangt PIN-númer"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Rangt PIN-númer. Reyndu aftur."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Eða opnaðu með fingrafari"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingrafar þekkist ekki"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Andlit þekkist ekki"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Reyndu aftur eða sláðu inn PIN-númer"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Reyndu aftur eða sláðu inn aðgangsorð"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Reyndu aftur eða teiknaðu mynstur"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN-númers er krafist eftir of margar tilraunir"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Aðgangsorðs er krafist eftir of margar tilraunir"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Mynsturs er krafist eftir of margar tilraunir"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Opnaðu með PIN-númeri eða fingrafari"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Opnaðu með aðgangsorði eða fingrafari"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Opnaðu með mynstri eða fingrafari"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Tækinu var læst af vinnureglum til að auka öryggi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-númers er krafist eftir læsingu"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Aðgangsorðs er krafist eftir læsingu"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mynsturs er krafist eftir læsingu"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Uppfærslan verður sett upp í aðgerðaleysi"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Viðbótaröryggis krafist. PIN-númer var ekki notað um hríð."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Viðbótaröryggis krafist. Aðgangsorð var ekki notað um hríð."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Viðbótaröryggis krafist. Mynstur var ekki notað um hríð."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Viðbótaröryggis krafist. Tækið var ekki tekið úr lás um hríð."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Ekki tókst að opna með andliti. Of margar tilraunir."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Ekki tókst að opna með fingrafari. Of margar tilraunir."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Traustfulltrúi er ekki tiltækur"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Of margar tilraunir með röngu PIN-númeri"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Of margar tilraunir með röngu mynstri"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Of margar tilraunir með röngu aðgangsorði"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Reyndu aftur eftir # sekúndu.}one{Reyndu aftur eftir # sekúndu.}other{Reyndu aftur eftir # sekúndur.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Sláðu inn PIN-númer SIM-kortsins."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Sláðu inn PIN-númer SIM-korts fyrir „<xliff:g id="CARRIER">%1$s</xliff:g>“."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK-aðgerð SIM-korts mistókst!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Skipta um innsláttaraðferð"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Flugstilling"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Mynsturs er krafist eftir að tækið er endurræst"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN-númers er krafist eftir að tækið er endurræst"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Aðgangsorðs er krafist eftir að tækið er endurræst"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Fyrir aukið öryggi skaltu nota mynstur í staðinn"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Fyrir aukið öryggi skaltu nota PIN-númer í staðinn"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Fyrir aukið öryggi skaltu nota aðgangsorð í staðinn"</string>
diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml
index 848d095..bdfeda7 100644
--- a/packages/SystemUI/res-keyguard/values-it/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-it/strings.xml
@@ -21,14 +21,11 @@
<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">"Inserisci il PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Inserisci il PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Inserisci la sequenza"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Inserisci la sequenza"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Inserisci la password"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Inserisci la password"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Scheda non valida."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Carico"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • In carica wireless"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Impossibile disattivare la eSIM a causa di un errore."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Invio"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Sequenza errata"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Sequenza errata. Riprova."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Password errata"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Password errata. Riprova."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN errato"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN errato. Riprova."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"In alternativa, sblocca con l\'impronta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Impronta non riconosciuta"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Volto non riconosciuto"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Riprova o inserisci il PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Riprova o inserisci la password"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Riprova o inserisci la sequenza"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN richiesto dopo troppi tentativi"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Password richiesta dopo troppi tentativi"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Sequenza richiesta dopo troppi tentativi"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Sblocca con PIN o impronta"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Sblocca con password o impronta"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Sblocca con sequenza o impronta"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Disposit. bloccato da norme di lavoro per sicurezza"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN richiesto dopo il blocco"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password richiesta dopo il blocco"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Sequenza richiesta dopo il blocco"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aggiornamento installato durante ore di inattività"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Occorre maggiore sicurezza. PIN non usato per un po\' di tempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Occorre maggiore sicurezza. Password non usata per un po\' di tempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Occorre maggiore sicurezza. Sequenza non usata per un po\' di tempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Occorre maggiore sicurezza. Dispositivo non sbloccato per un po\' di tempo."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Impossibile sbloccare con volto. Troppi tentativi."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Impossib. sbloccare con impronta. Troppi tentativi."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"L\'agente di attendibilità non è disponibile"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Troppi tentativi con il PIN errato"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Troppi tentativi con la sequenza errata"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Troppi tentativi con la password errata"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Riprova fra # secondo.}many{Riprova fra # secondi.}other{Riprova fra # secondi.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Inserisci il PIN della SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Inserisci il PIN della SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operazione con PUK della SIM non riuscita."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Cambia metodo di immissione"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modalità aereo"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Sequenza richiesta dopo il riavvio del dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN richiesto dopo il riavvio del dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Password richiesta dopo il riavvio del dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Per maggior sicurezza, usa invece la sequenza"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Per maggior sicurezza, usa invece il PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Per maggior sicurezza, usa invece la password"</string>
diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml
index 1307ff5..08cdd79 100644
--- a/packages/SystemUI/res-keyguard/values-iw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml
@@ -21,14 +21,11 @@
<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">"צריך להזין קוד אימות"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"צריך להזין קוד אימות"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"יש להזין קו ביטול נעילה"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"צריך לצייר קו ביטול נעילה"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"יש להזין סיסמה"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"צריך להזין סיסמה"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"כרטיס לא חוקי."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"הסוללה טעונה"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • בטעינה אלחוטית"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"לא ניתן להשבית את כרטיס ה-eSIM עקב שגיאה."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"קו ביטול נעילה שגוי"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"קו ביטול נעילה שגוי. יש לנסות שוב."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"סיסמה שגויה"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"סיסמה שגויה. יש לנסות שוב."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"קוד האימות שגוי"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"קוד אימות שגוי. יש לנסות שוב."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"אפשר לבטל נעילה באמצעות טביעת אצבע"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"טביעת האצבע לא זוהתה"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"הפנים לא זוהו"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"יש לנסות שוב או להזין קוד אימות"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"יש לנסות שוב או להזין סיסמה"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"יש לנסות שוב או לצייר קו ביטול נעילה"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"אחרי יותר מדי ניסיונות נדרש קוד אימות"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"אחרי יותר מדי ניסיונות נדרשת סיסמה"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"אחרי יותר מדי ניסיונות נדרש קו ביטול נעילה"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"פתיחה בקוד אימות או טביעת אצבע"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"פתיחה בסיסמה או טביעת אצבע"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"פתיחה בקו ביטול נעילה או טביעת אצבע"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"לאבטחה מוגברת, המכשיר ננעל כחלק ממדיניות מקום העבודה"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"נדרש קוד אימות לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"נדרשת סיסמה לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"נדרש קו ביטול נעילה לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"העדכון יותקן במהלך השעות שבהן אתם לא משתמשים במכשיר"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"נדרשת אבטחה מוגברת. לא השתמשת בקוד אימות זמן מה."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"נדרשת אבטחה מוגברת. לא השתמשת בסיסמה זמן מה."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"נדרשת אבטחה מוגברת. לא השתמשת בקו ביטול נעילה זמן מה."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"נדרשת אבטחה מוגברת. המכשיר לא היה נעול לזמן מה."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"לא ניתן לפתוח בזיהוי פנים. בוצעו יותר מדי ניסיונות."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"לא ניתן לפתוח בטביעת אצבע. בוצעו יותר מדי ניסיונות."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"התכונה \'סביבה אמינה\' לא זמינה"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"בוצעו יותר מדי ניסיונות עם קוד אימות שגוי"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"בוצעו יותר מדי ניסיונות עם קו ביטול נעילה שגוי"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"בוצעו יותר מדי ניסיונות עם סיסמה שגויה"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{אפשר לנסות שוב בעוד שנייה אחת.}one{אפשר לנסות שוב בעוד # שניות.}two{אפשר לנסות שוב בעוד # שניות.}other{אפשר לנסות שוב בעוד # שניות.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"יש להזין את קוד האימות של כרטיס ה-SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"יש להזין את קוד האימות של כרטיס ה-SIM של <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"הניסיון לביטול הנעילה של כרטיס ה-SIM באמצעות קוד PUK נכשל!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"החלפת שיטת קלט"</string>
<string name="airplane_mode" msgid="2528005343938497866">"מצב טיסה"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"נדרש קו ביטול נעילה אחרי שהמכשיר מופעל מחדש"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"נדרש קוד אימות אחרי שהמכשיר מופעל מחדש"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"נדרשת סיסמה אחרי שהמכשיר מופעל מחדש"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"כדי להגביר את רמת האבטחה, כדאי להשתמש בקו ביטול נעילה במקום זאת"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"כדי להגביר את רמת האבטחה, כדאי להשתמש בקוד אימות במקום זאת"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"כדי להגביר את רמת האבטחה, כדאי להשתמש בסיסמה במקום זאת"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml
index 6bc5055..05bd2ba 100644
--- a/packages/SystemUI/res-keyguard/values-ja/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN を入力してください"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN を入力"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"パターンを入力してください"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"パターンを入力"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"パスワードを入力してください"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"パスワードを入力"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"無効なカードです。"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"充電が完了しました"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ワイヤレス充電中"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"エラーのため、eSIM を無効にできません。"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"入力"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"パターンが正しくありません"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"パターンが違います。やり直してください。"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"パスワードが正しくありません"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"パスワードが違います。やり直してください。"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN が正しくありません"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN が違います。やり直してください。"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"指紋でも解除できます"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"指紋を認識できません"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"顔を認識できません"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"もう一度試すか、PIN を入力してください"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"もう一度試すか、パスワードを入力してください"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"もう一度試すか、パターンを入力してください"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"試行回数の上限を超えると PIN が必要になります"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"試行回数の上限を超えるとパスワードが必要になります"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"試行回数の上限を超えるとパターンが必要になります"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN か指紋で解除"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"パスワードか指紋で解除"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"パターンか指紋で解除"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"仕事用ポリシーに基づきデバイスがロックされました"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ロックダウン後は PIN の入力が必要になります"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ロックダウン後はパスワードの入力が必要になります"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ロックダウン後はパターンの入力が必要になります"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"アップデートはアクティブでない時間帯にインストールされます"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"セキュリティ強化が必要: PIN がしばらく未使用です。"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"セキュリティ強化が必要: パスワードがしばらく未使用です。"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"セキュリティ強化が必要: パターンがしばらく未使用です。"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"セキュリティ強化が必要: デバイスがしばらくロック解除されていません。"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"顔認証でロックを解除できません。何度もログインに失敗したためログインできません。"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"指紋でロックを解除できません。何度もログインに失敗したためログインできません。"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"信頼エージェントは利用できません"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"間違った PIN による試行回数が上限を超えました"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"間違ったパターンによる試行回数が上限を超えました"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"間違ったパスワードによる試行回数が上限を超えました"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# 秒後にもう一度お試しください。}other{# 秒後にもう一度お試しください。}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN を入力してください。"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"「<xliff:g id="CARRIER">%1$s</xliff:g>」の SIM PIN を入力してください。"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK 操作に失敗しました。"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"入力方法の切り替え"</string>
<string name="airplane_mode" msgid="2528005343938497866">"機内モード"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"デバイスの再起動後はパターンの入力が必要になります"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"デバイスの再起動後は PIN の入力が必要になります"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"デバイスの再起動後はパスワードの入力が必要になります"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"セキュリティを強化するには代わりにパターンを使用してください"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"セキュリティを強化するには代わりに PIN を使用してください"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"セキュリティを強化するには代わりにパスワードを使用してください"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml
index 4687606..3060cb2 100644
--- a/packages/SystemUI/res-keyguard/values-ka/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml
@@ -21,14 +21,11 @@
<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">"შეიყვანეთ PIN-კოდი"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"შეიყვანეთ PIN-კოდი"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"შეიყვანეთ განმბლოკავი ნიმუში"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"დახატეთ ნიმუში"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"შეიყვანეთ პაროლი"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"შეიყვანეთ პაროლი"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ბარათი არასწორია."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"დატენილია"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • იტენება უსადენოდ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM-ის გათიშვა ვერ ხერხდება წარმოქმნილი შეცდომის გამო."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"შეყვანა"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ნიმუში არასწორია"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ნიმ. არასწ. ცადეთ ხელახლა."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"პაროლი არასწორია"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"პარ. არასწ. ცადეთ ხელახლა."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN-კოდი არასწორია"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN არასწ. ცადეთ ხელახლა."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ან თითის ანაბეჭდით განბლოკვა"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ანაბ. ამოცნ. ვერ მოხერხდა"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"სახის ამოცნ. ვერ მოხერხდა"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ცადეთ ხელახლა ან შეიყვანეთ PIN-კოდი"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ცადეთ ხელახლა ან შეიყვანეთ პაროლი"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ცადეთ ხელახლა ან დახატეთ ნიმუში"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ძალიან ბევრი მცდელობის შემდეგ საჭიროა PIN-კოდი"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ძალიან ბევრი მცდელობის შემდეგ საჭიროა პაროლი"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ძალიან ბევრი მცდელობის შემდეგ საჭიროა ნიმუში"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN-კოდ. ან თითის ან. გან."</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"პაროლ. ან თითის ან. განბლ."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ნიმუშით ან თითის ან. განბ."</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"დამატ. უსაფრთხ. მოწყობ. დაიბლ. სამსახ. წეს. თანახმად"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"დაბლოკვის შემდეგ საჭიროა PIN-კოდი"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"დაბლოკვის შემდეგ საჭიროა პაროლი"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"დაბლოკვის შემდეგ საჭიროა ნიმუში"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"განახლება დაყენდება არასამუშაო საათებში"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"საჭიროა დამ. უსაფრთ. PIN-კოდი ერთხანს არ გამოიყენ."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"საჭ. დამ. უსაფრთ. პაროლი ერთხანს არ გამოიყენება."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"საჭიროა დამ. უსაფრთ. ნიმუში ერთხანს არ გამოიყენება."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"საჭიროა დამ. უსაფრთ. მოწყობ. ერთხანს არ განიბლოკება."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"სახით განბლ. ვერ მოხ. მეტისმეტად ბევრი მცდელობა იყო."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ანაბ. განბლ. ვერ მოხ. მეტისმეტად ბევრი მცდელობა იყო."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ნდობის აგენტი მიუწვდომელია"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ძალიან ბევრი მცდელობა არასწორი PIN-კოდით"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ძალიან ბევრი მცდელობა არასწორი ნიმუშით"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ძალიან ბევრი მცდელობა არასწორი პაროლით"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# წამში ისევ ცადეთ.}other{# წამში ისევ ცადეთ.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"შეიყვანეთ SIM ბარათის PIN-კოდი."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"შეიყვანეთ SIM ბარათის PIN-კოდი „<xliff:g id="CARRIER">%1$s</xliff:g>“-ისთვის."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM ბარათის PUK-კოდით განბლოკვა ვერ მოხერხდა!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"შეყვანის მეთოდის გადართვა"</string>
<string name="airplane_mode" msgid="2528005343938497866">"თვითმფრინავის რეჟიმი"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა ნიმუში"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა PIN-კოდი"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"მოწყობილობის გადატვირთვის შემდეგ საჭიროა პაროლი"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ ნიმუში"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"დამატებითი უსაფრთხოებისთვის გამოიყენეთ პაროლი"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml
index 79e28ef..ecf8350 100644
--- a/packages/SystemUI/res-keyguard/values-kk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN кодын енгізіңіз"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN кодын енгізіңіз."</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Өрнекті енгізіңіз"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Өрнекті салыңыз."</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Құпия сөзді енгізіңіз"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Құпия сөзді енгізіңіз."</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Жарамсыз карта."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Зарядталды"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Сымсыз зарядталуда"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Қатеге байланысты eSIM картасы өшірілмеді."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Енгізу"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Өрнек дұрыс емес"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Өрнек қате. Қайталап көріңіз."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Құпия сөз дұрыс емес"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Құпия сөз қате. Қайталап көріңіз."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN коды қате"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN коды қате. Қайталап көріңіз."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Не болмаса құлыпты саусақ ізімен ашыңыз."</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Саусақ ізі танылмады."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Бет танылмады."</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Қайталап көріңіз не PIN кодын енгізіңіз."</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Қайталап көріңіз не құпия сөзді енгізіңіз."</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Қайталап көріңіз не өрнекті салыңыз."</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Тым көп әрекет жасалған соң, PIN коды сұралады."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Тым көп әрекет жасалған соң, құпия сөз сұралады."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Тым көп әрекет жасалған соң, өрнек сұралады."</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Құлыпты PIN кодымен не саусақ ізімен ашыңыз."</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Құлыпты құпия сөзбен не саусақ ізімен ашыңыз."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Құлыпты өрнекпен не саусақ ізімен ашыңыз."</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Қауіпсіздікті күшейту үшін құрылғы жұмыс саясатына сай құлыпталды."</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Құлыпталғаннан кейін PIN кодын енгізу қажет."</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Құлыпталғаннан кейін құпия сөз енгізу қажет."</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Құлыпталғаннан кейін өрнек енгізу қажет."</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Пайдаланылмаған кезде жаңартылады."</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Қауіпсіздікті күшейту қажет. PIN коды біраз уақыт қолданылмаған."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Қауіпсіздікті күшейту қажет. Құпия сөз біраз уақыт қолданылмаған."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Қауіпсіздікті күшейту қажет. Өрнек біраз уақыт қолданылмаған."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Қауіпсіздікті күшейту қажет. Құрылғы құлпы біраз уақыт ашылмаған."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Құлып бетпен ашылмайды. Тым көп әрекет жасалды."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Құлып саусақ ізімен ашылмайды. Тым көп әрекет жасалды."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Сенімді агент функциясы істемейді."</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"PIN коды тым көп рет қате енгізілді."</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Өрнек тым көп рет қате енгізілді."</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Құпия сөз тым көп рет қате енгізілді."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# секундтан соң қайталап көріңіз.}other{# секундтан соң қайталап көріңіз.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN кодын енгізіңіз."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" үшін SIM PIN кодын енгізіңіз."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK кодымен құлпы ашылмады!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Енгізу әдісін ауыстыру"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Ұшақ режимі"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Құрылғы өшіп қосылған соң, өрнек енгізу қажет."</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Құрылғы өшіп қосылған соң, PIN кодын енгізу қажет."</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Құрылғы өшіп қосылған соң, құпия сөз енгізу қажет."</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Қосымша қауіпсіздік үшін өрнекті пайдаланыңыз."</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Қосымша қауіпсіздік үшін PIN кодын пайдаланыңыз."</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Қосымша қауіпсіздік үшін құпия сөзді пайдаланыңыз."</string>
diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml
index 8936c2a..4aa4798 100644
--- a/packages/SystemUI/res-keyguard/values-km/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-km/strings.xml
@@ -21,14 +21,11 @@
<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">"បញ្ចូលកូដ PIN របស់អ្នក"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"បញ្ចូលកូដ PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"បញ្ចូលលំនាំរបស់អ្នក"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"គូរលំនាំ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"បញ្ចូលពាក្យសម្ងាត់របស់អ្នក"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"បញ្ចូលពាក្យសម្ងាត់"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"បណ្ណមិនត្រឹមត្រូវទេ។"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"បានសាកថ្មពេញ"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • កំពុងសាកថ្មឥតខ្សែ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"មិនអាចបិទ eSIM បានទេ ដោយសារមានបញ្ហា។"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"លំនាំមិនត្រឹមត្រូវ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"លំនាំខុស។ ព្យាយាមម្ដងទៀត។"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ពាក្យសម្ងាត់មិនត្រឹមត្រូវ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ពាក្យសម្ងាត់ខុស។ ព្យាយាមម្ដងទៀត។"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"កូដ PIN មិនត្រឹមត្រូវទេ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"កូដ PIN ខុស។ ព្យាយាមម្ដងទៀត។"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ឬដោះសោដោយប្រើស្នាមម្រាមដៃ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"មិនស្គាល់ស្នាមម្រាមដៃទេ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"មិនស្គាល់មុខ"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ព្យាយាមម្ដងទៀត ឬបញ្ចូលកូដ PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ព្យាយាមម្ដងទៀត ឬបញ្ចូលពាក្យសម្ងាត់"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ព្យាយាមម្ដងទៀត ឬគូរលំនាំ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ត្រូវការកូដ PIN បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ត្រូវការពាក្យសម្ងាត់ បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ត្រូវការលំនាំ បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ដោះសោដោយប្រើកូដ PIN ឬស្នាមម្រាមដៃ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ដោះសោដោយប្រើពាក្យសម្ងាត់ ឬស្នាមម្រាមដៃ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ដោះសោដោយប្រើលំនាំ ឬស្នាមម្រាមដៃ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ដើម្បីសុវត្ថិភាពបន្ថែម ឧបករណ៍ត្រូវបានចាក់សោដោយគោលការណ៍ការងារ"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ត្រូវការកូដ PIN បន្ទាប់ពីការចាក់សោ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ត្រូវការពាក្យសម្ងាត់បន្ទាប់ពីការចាក់សោ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ត្រូវការលំនាំបន្ទាប់ពីការចាក់សោ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"នឹងដំឡើងកំណែថ្មីអំឡុងម៉ោងអសកម្ម"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើកូដ PIN មួយរយៈ។"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើពាក្យសម្ងាត់មួយរយៈ។"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើលំនាំមួយរយៈ។"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានដោះសោឧបករណ៍មួយរយៈ។"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"មិនអាចដោះសោដោយប្រើមុខទេ។ ព្យាយាមច្រើនដងពេក។"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"មិនអាចដោះសោដោយប្រើស្នាមម្រាមដៃទេ។ ព្យាយាមច្រើនដងពេក។"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ភ្នាក់ងារទុកចិត្តមិនទំនេរទេ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ព្យាយាមច្រើនដងពេកដោយប្រើកូដ PIN មិនត្រឹមត្រូវ"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ព្យាយាមច្រើនដងពេកដោយប្រើលំនាំមិនត្រឹមត្រូវ"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ព្យាយាមច្រើនដងពេកដោយប្រើពាក្យសម្ងាត់មិនត្រឹមត្រូវ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{ព្យាយាមម្តងទៀតក្នុងរយៈពេល # វិនាទីទៀត។}other{ព្យាយាមម្តងទៀតក្នុងរយៈពេល # វិនាទីទៀត។}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"បញ្ចូលកូដ PIN របស់ស៊ីម។"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"បញ្ចូលកូដ PIN របស់ស៊ីមសម្រាប់ \"<xliff:g id="CARRIER">%1$s</xliff:g>\"។"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"មិនអាចដោះសោដោយប្រើកូដ PUK របស់ស៊ីមបានទេ!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ប្ដូរវិធីបញ្ចូល"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ពេលជិះយន្តហោះ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ត្រូវការលំនាំក្រោយពេលឧបករណ៍ចាប់ផ្ដើមឡើងវិញ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ត្រូវការកូដ PIN ក្រោយពេលឧបករណ៍ចាប់ផ្ដើមឡើងវិញ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ត្រូវការពាក្យសម្ងាត់ក្រោយពេលឧបករណ៍ចាប់ផ្ដើមឡើងវិញ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើលំនាំជំនួសវិញ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើកូដ PIN ជំនួសវិញ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ដើម្បីសុវត្ថិភាពបន្ថែម សូមប្រើពាក្យសម្ងាត់ជំនួសវិញ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml
index cb6cdcc..86a85ab 100644
--- a/packages/SystemUI/res-keyguard/values-kn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml
@@ -21,14 +21,11 @@
<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">"ನಿಮ್ಮ ಪಿನ್ ನಮೂದಿಸಿ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ಪಿನ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ನಿಮ್ಮ ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಿಡಿಸಿ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ಅಮಾನ್ಯ ಕಾರ್ಡ್."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ವೈರ್ಲೆಸ್ ಆಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ದೋಷದ ಕಾರಣದಿಂದಾಗಿ eSIM ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"ನಮೂದಿಸಿ"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ಪ್ಯಾಟರ್ನ್ ತಪ್ಪಾಗಿದೆ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ಪ್ಯಾಟರ್ನ್ ತಪ್ಪಾಗಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ತಪ್ಪು ಪಾಸ್ವರ್ಡ್"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ಪಾಸ್ವರ್ಡ್ ತಪ್ಪಾಗಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ಪಿನ್ ತಪ್ಪಾಗಿದೆ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ಪಿನ್ ತಪ್ಪಾಗಿದೆ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ಅಥವಾ ಫಿಂಗರ್ಪ್ರಿಂಟ್ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ಮುಖವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಿಡಿಸಿ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ಹಲವಾರು ಪ್ರಯತ್ನಗಳ ನಂತರ ಪಿನ್ನ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ಹಲವಾರು ಪ್ರಯತ್ನಗಳ ನಂತರ ಪಾಸ್ವರ್ಡ್ನ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ಹಲವಾರು ಪ್ರಯತ್ನಗಳ ನಂತರ ಪ್ಯಾಟರ್ನ್ನ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ಪಿನ್ ಅಥವಾ ಫಿಂಗರ್ಪ್ರಿಂಟ್ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ಪಾಸ್ವರ್ಡ್ ಅಥವಾ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಫಿಂಗರ್ಪ್ರಿಂಟ್ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಗಾಗಿ, ಉದ್ಯೋಗ ನೀತಿಯ ಮೂಲಕ ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ಲಾಕ್ಡೌನ್ ಮಾಡಿದ ನಂತರ ಪಿನ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ಲಾಕ್ಡೌನ್ನ ನಂತರ ಪಾಸ್ವರ್ಡ್ನ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ಲಾಕ್ಡೌನ್ ಮಾಡಿದ ನಂತರ ಪ್ಯಾಟರ್ನ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ನಿಷ್ಕ್ರಿಯ ಸಮಯದಲ್ಲಿ ಅಪ್ಡೇಟ್ ಇನ್ಸ್ಟಾಲ್ ಆಗುತ್ತದೆ"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪಿನ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿಲ್ಲ."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ಮುಖದೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ನೊಂದಿಗೆ ಅನ್ಲಾಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ವಿಶ್ವಾಸಾರ್ಹ ಏಜೆಂಟ್ ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ತಪ್ಪಾದ ಪಿನ್ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ತಪ್ಪಾದ ಪ್ಯಾಟರ್ನ್ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ತಪ್ಪಾದ ಪಾಸ್ವರ್ಡ್ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ಸೆಕೆಂಡಿನಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}one{# ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}other{# ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ಗಾಗಿ ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"ಸಿಮ್ PUK ಕಾರ್ಯಾಚರಣೆ ವಿಫಲಗೊಂಡಿದೆ!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ಇನ್ಪುಟ್ ವಿಧಾನ ಬದಲಿಸಿ"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದ ನಂತರ ಪ್ಯಾಟರ್ನ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದ ನಂತರ ಪಿನ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದ ನಂತರ ಪಾಸ್ವರ್ಡ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪಿನ್ ಬಳಸಿ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, ಬದಲಿಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml
index 953773d..0dec961 100644
--- a/packages/SystemUI/res-keyguard/values-ko/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN을 입력해 주세요."</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN 입력"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"패턴 입력"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"패턴 그리기"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"비밀번호 입력"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"비밀번호 입력"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"유효하지 않은 카드"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"충전됨"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 무선 충전 중"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"오류로 인해 eSIM을 사용 중지할 수 없습니다."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter 키"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"잘못된 패턴"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"잘못된 패턴입니다. 다시 시도해 주세요."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"잘못된 비밀번호"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"잘못된 비밀번호입니다. 다시 시도해 주세요."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN 오류"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"잘못된 PIN입니다. 다시 시도해 주세요."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"또는 지문으로 잠금 해제하세요."</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"지문이 인식되지 않았습니다."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"얼굴을 인식할 수 없습니다."</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"다시 시도하거나 PIN을 입력하세요."</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"다시 시도하거나 비밀번호를 입력하세요."</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"다시 시도하거나 패턴을 그리세요."</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"시도 횟수가 너무 많아 PIN을 입력해야 합니다."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"시도 횟수가 너무 많아 비밀번호를 입력해야 합니다."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"시도 횟수가 너무 많아 패턴을 입력해야 합니다."</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN 또는 지문으로 잠금 해제"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"비밀번호 또는 지문으로 잠금 해제"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"패턴 또는 지문으로 잠금 해제"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"보안 강화를 위해 업무 정책에 따라 기기가 잠겼습니다."</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"기기가 잠겨 PIN을 입력해야 합니다."</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"기기가 잠겨 비밀번호를 입력해야 합니다."</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"기기가 잠겨 패턴을 입력해야 합니다."</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"미사용 시간에 업데이트가 설치됩니다."</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"보안을 강화해야 합니다. 한동안 PIN이 사용되지 않았습니다."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"보안을 강화해야 합니다. 한동안 비밀번호가 사용되지 않았습니다."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"보안을 강화해야 합니다. 한동안 패턴이 사용되지 않았습니다."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"보안을 강화해야 합니다. 한동안 기기가 잠금 해제되지 않았습니다."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"얼굴로 잠금 해제할 수 없습니다. 시도 횟수가 너무 많습니다."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"지문으로 잠금 해제할 수 없습니다. 시도 횟수가 너무 많습니다."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust Agent를 사용할 수 없습니다."</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"잘못된 PIN을 사용한 시도 횟수가 너무 많습니다."</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"잘못된 패턴을 사용한 시도 횟수가 너무 많습니다."</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"잘못된 비밀번호를 사용한 시도 횟수가 너무 많습니다."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{#초 후에 다시 시도하세요.}other{#초 후에 다시 시도하세요.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN을 입력하세요."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\'<xliff:g id="CARRIER">%1$s</xliff:g>\'의 SIM PIN을 입력하세요."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK 작업이 실패했습니다."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"입력 방법 전환"</string>
<string name="airplane_mode" msgid="2528005343938497866">"비행기 모드"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"기기가 다시 시작되어 패턴을 입력해야 합니다."</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"기기가 다시 시작되어 PIN을 입력해야 합니다."</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"기기가 다시 시작되어 비밀번호를 입력해야 합니다."</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"보안 강화를 위해 대신 패턴 사용"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"보안 강화를 위해 대신 PIN 사용"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"보안 강화를 위해 대신 비밀번호 사용"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml
index 7e095de..79ef007 100644
--- a/packages/SystemUI/res-keyguard/values-ky/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN кодуңузду киргизиңиз"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN кодду киргизиңиз"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Графикалык ачкычты киргизиңиз"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Графикалык ачкчты тартңыз"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Сырсөзүңүздү киргизиңиз"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Сырсөздү киргизиңиз"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"SIM-карта жараксыз."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Кубатталды"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зымсыз кубатталууда"</string>
@@ -52,74 +49,44 @@
<string name="keyguard_accessibility_password" msgid="3524161948484801450">"Түзмөктүн сырсөзү"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"SIM-картанын PIN-кодунун аймагы"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"SIM-картанын PUK-кодунун аймагы"</string>
- <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"Жок кылуу"</string>
+ <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"Өчүрүү"</string>
<string name="disable_carrier_button_text" msgid="7153361131709275746">"eSIM-картаны өчүрүү"</string>
<string name="error_disable_esim_title" msgid="3802652622784813119">"eSIM-картаны өчүрүүгө болбойт"</string>
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Катадан улам eSIM-картаны өчүрүүгө болбойт."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Киргизүү"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Графикалык ачкыч туура эмес"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Графклк ачкч тура эмс. Кайтлап крүңз."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Сырсөз туура эмес"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Сырсөз туура эмес. Кайтлап крүңз."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN-код туура эмес"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN кд тура эмс. Кайтлап крүңз."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Болбосо манжа изи менен кулпусун ачыңыз"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Манжа изи таанылган жок"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Жүзү таанылбайт"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Кайталап көрүңүз же PIN кодду киргизиңиз"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Кайра аракет кылыңыз же сырсөздү киргизиңиз"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Кайра аракет кылыңыз же графикалык ачкычты тартыңыз"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Өтө көп аракеттен кийин PIN код талап кылынат"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Өтө көп аракеттен кийин сырсөз талап кылынат"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Өтө көп аракеттен кийин графикалык ачкыч талап клынт"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN кд же мнжа изи мнен клпусн ачңыз"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Срсөз же мнжа изи мнен клпусн ачңз"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Грфиклык ачкч же мнжа изи менн клпусн ачңз"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Кошумча коопсуздук үчүн түзмөк жумуш саясатына ылайык кулпуланган"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Бекем кулпулангандан кийин PIN код талап кылынат"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Бекем кулпулангандан кийин сырсөз талап кылынат"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Бекем кулпулангандан кийн грфикалык ачкыч талп клынт"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Жигердүү эмес сааттарда жаңыртылат"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Кошмча кпсуздук тлап клнат. PIN код бир нче убкыт бою клднулгн эмeс."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Кошмча кпсуздук тлап клнат. Сырсз бир нче убкыт бою клднулгн эмeс."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Кошмча кпсуздук тлап клнат. Грфиклык ачкч бир нче убкыт бою клднулгн эмeс."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Кошмча кпсуздук тлап клнат. Түзмктн клпсу бир нче убкт бю ачлгн эмс."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Жүз менен кулпусу ачылбай жатат. Өтө көп жолу аракет кылдыңыз."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Манжа изи менен кулпусу ачылбай жатат. Өтө көп жолу аракет кылдыңыз."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Ишеним агенти жеткиликсиз"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Туура эмес PIN код менен өтө көп аракет"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Туура эмес графикалык ачкыч менен өтө көп аракет"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Туура эмес сырсөз менен өтө көп аракет"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# секунддан кийин кайталаңыз.}other{# секунддан кийин кайталаңыз.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM-картанын PIN-кодун киргизиңиз."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" SIM-картасынын PIN-кодун киргизиңиз."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-картанын PUK-кодун ачуу кыйрады!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Киргизүү ыкмасын өзгөртүү"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Учак режими"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Түзмк өчрүп кйгүзлгндн кйин графклык ачкч талп клнат"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Түзмөк өчүрүп күйгүзлгндн кийин PIN код талап кылнат"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Түзмөк өчүрүп күйгүзүлгөндөн кийин срсөз талп кылынт"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Кошумча коопсуздук үчүн анын ордуна графикалык ачкычты колдонуңуз"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Кошумча коопсуздук үчүн анын ордуна PIN кодду колдонуңуз"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Кошумча коопсуздук үчүн анын ордуна сырсөздү колдонуңуз"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml
index f5e438b..9e64abe6 100644
--- a/packages/SystemUI/res-keyguard/values-lo/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml
@@ -21,14 +21,11 @@
<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">"ໃສ່ລະຫັດ PIN ຂອງທ່ານ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ໃສ່ລະຫັດ PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ໃສ່ຮູບແບບປົດລັອກຂອງທ່ານ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ແຕ້ມຮູບແບບ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ປ້ອນລະຫັດຜ່ານຂອງທ່ານ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"ໃສ່ລະຫັດຜ່ານ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ບັດບໍ່ຖືກຕ້ອງ."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ສາກເຕັມແລ້ວ."</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກໄຟໄຮ້ສາຍ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ບໍ່ສາມາດປິດການນຳໃຊ້ eSIM ໄດ້ເນື່ອງຈາກມີຂໍ້ຜິດພາດ."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"ປ້ອນເຂົ້າ"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ຮູບແບບບໍ່ຖືກຕ້ອງ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ຮູບແບບບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງໃໝ່."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງໃໝ່."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ລະຫັດ PIN ບໍ່ຖືກຕ້ອງ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN ບໍ່ຖືກຕ້ອງ. ກະລຸນາລອງໃໝ່."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ຫຼື ປົດລັອກດ້ວຍລາຍນິ້ວມື"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ບໍ່ສາມາດຈຳແນກລາຍນິ້ວມືໄດ້"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ບໍ່ສາມາດຈຳແນກໜ້າໄດ້"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ລອງໃໝ່ ຫຼື ໃສ່ PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ລອງໃໝ່ ຫຼື ໃສ່ລະຫັດຜ່ານ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ລອງໃໝ່ ຫຼື ແຕ້ມຮູບແບບ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ຕ້ອງໃສ່ PIN ຫຼັງຈາກທີ່ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ຕ້ອງໃສ່ລະຫັດຜ່ານຫຼັງຈາກທີ່ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ຕ້ອງແຕ້ມຮູບແບບຫຼັງຈາກທີ່ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ປົດລັອກດ້ວຍ PIN ຫຼື ລາຍນິ້ວມື"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ປົດລັອກດ້ວຍລະຫັດຜ່ານ ຫຼື ລາຍນິ້ວມື"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ປົດລັອກດ້ວຍຮູບແບບ ຫຼື ລາຍນິ້ວມື"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ເພື່ອເພີ່ມຄວາມປອດໄພ, ອຸປະກອນໄດ້ຖືກລັອກໂດຍນະໂຍບາຍບ່ອນເຮັດວຽກ"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ຕ້ອງໃສ່ PIN ຫຼັງຈາກທີ່ລັອກໄວ້"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ຕ້ອງໃສ່ລະຫັດຜ່ານຫຼັງຈາກທີ່ລັອກໄວ້"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ຕ້ອງແຕ້ມຮູບແບບຫຼັງຈາກທີ່ລັອກໄວ້"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ການອັບເດດຈະຕິດຕັ້ງໃນລະຫວ່າງຊົ່ວໂມງທີ່ບໍ່ມີການນຳໃຊ້"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ PIN ມາໄລຍະໜຶ່ງແລ້ວ."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ລະຫັດຜ່ານມາໄລຍະໜຶ່ງແລ້ວ."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ຮູບແບບມາໄລຍະໜຶ່ງແລ້ວ."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ປົດລັອກອຸປະກອນມາໄລຍະໜຶ່ງແລ້ວ."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ບໍ່ສາມາດປົດລັອກດ້ວຍໃບໜ້າໄດ້. ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ບໍ່ສາມາດປົດລັອກດ້ວຍລາຍນິ້ວມືໄດ້. ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ຕົວແທນທີ່ເຊື່ອຖືໄດ້ບໍ່ພ້ອມໃຫ້ບໍລິການ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປດ້ວຍ PIN ທີ່ບໍ່ຖືກຕ້ອງ"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປດ້ວຍຮູບແບບທີ່ບໍ່ຖືກຕ້ອງ"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປດ້ວຍລະຫັດຜ່ານທີ່ບໍ່ຖືກຕ້ອງ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{ກະລຸນາລອງໃໝ່ໃນ # ວິນາທີ.}other{ກະລຸນາລອງໃໝ່ໃນ # ວິນາທີ.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ໃສ່ລະຫັດ PIN ຂອງຊິມ."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"ໃສ່ລະຫັດ PIN ຂອງຊິມສຳລັບ \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -141,13 +108,10 @@
<string name="kg_password_pin_failed" msgid="5136259126330604009">"PIN ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string>
<string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ສະລັບຮູບແບບການປ້ອນຂໍ້ມູນ"</string>
- <string name="airplane_mode" msgid="2528005343938497866">"ໂໝດໃນຍົນ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="airplane_mode" msgid="2528005343938497866">"ໂໝດຢູ່ໃນຍົນ"</string>
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ຕ້ອງແຕ້ມຮູບແບບຫຼັງຈາກຣີສະຕາດອຸປະກອນ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ຕ້ອງໃສ່ PIN ຫຼັງຈາກຣີສະຕາດອຸປະກອນ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ຕ້ອງໃສ່ລະຫັດຜ່ານຫຼັງຈາກຣີສະຕາດອຸປະກອນ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ຮູບແບບແທນ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ PIN ແທນ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ໃຊ້ລະຫັດຜ່ານແທນ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml
index c173905..d2f7f08 100644
--- a/packages/SystemUI/res-keyguard/values-lt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml
@@ -21,14 +21,11 @@
<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">"Įveskite PIN kodą"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Įveskite PIN kodą"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Nubrėžkite atrakinimo piešinį"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nupieškite atrakinimo piešinį"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Įveskite slaptažodį"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Įveskite slaptažodį"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Netinkama kortelė."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Įkrauta"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Kraunama be laidų"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Dėl klaidos nepavyko išjungti „eSIM“ kortelės."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Netinkamas atrakinimo piešinys"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Netinkamas atrakinimo piešinys. Bandykite dar kartą."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Netinkamas slaptažodis"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Netinkamas slaptažodis. Bandykite dar kartą."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Netinkamas PIN kodas"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Netinkamas PIN kodas. Bandykite dar kartą."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Arba atrakinkite piršto atspaudu"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Piršto atspaudas neatpažintas"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Veidas neatpažintas"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Bandykite dar kartą arba įveskite PIN kodą"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Bandykite dar kartą arba įveskite slaptažodį"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Bandykite dar kartą arba nupieškite atrakinimo piešinį"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Po per daug bandymų reikia įvesti PIN kodą"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Po per daug bandymų reikia įvesti slaptažodį"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Po per daug bandymų reikia nupiešti atrakinimo piešinį"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Atrakinkite PIN kodu arba piršto atspaudu"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Atrakinkite slaptažodžiu arba piršto atspaudu"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Atrakinkite atrakinimo piešiniu arba piršto atspaudu"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Norint apsaugoti įrenginys užrakintas pagal darbo politiką"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po užrakinimo reikalingas PIN kodas"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po užrakinimo reikalingas slaptažodis"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po užrakinimo reikalingas atrakinimo piešinys"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Naujinys bus įdiegtas neaktyvumo valandomis"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Reikalinga papildoma sauga. PIN kodas nebuvo naudojamas kurį laiką."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Reikalinga papildoma sauga. Slaptažodis nebuvo naudojamas kurį laiką."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Reikalinga papildoma sauga. Atrakinimo piešinys nebuvo naudojamas kurį laiką."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Reikalinga papildoma sauga. Įrenginys nebuvo užrakintas kurį laiką."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nepavyko atrakinti pagal veidą. Per daug bandymų."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nepavyko atrakinti piršto atspaudu. Per daug bandymų."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Patikima priemonė nepasiekiama"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Per daug bandymų naudojant netinkamą PIN kodą"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Per daug bandymų naudojant netinkamą atrakinimo piešinį"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Per daug bandymų naudojant netinkamą slaptažodį"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Bandykite dar kartą po # sekundės.}one{Bandykite dar kartą po # sekundės.}few{Bandykite dar kartą po # sekundžių.}many{Bandykite dar kartą po # sekundės.}other{Bandykite dar kartą po # sekundžių.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Įveskite SIM kortelės PIN kodą."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Įveskite „<xliff:g id="CARRIER">%1$s</xliff:g>“ SIM kortelės PIN kodą"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Nepavyko atlikti SIM kortelės PUK kodo operacijos."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Perjungti įvesties metodą"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Lėktuvo režimas"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Iš naujo paleidus įrenginį reikalingas atrakinimo piešinys"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Iš naujo paleidus įrenginį reikalingas PIN kodas"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Iš naujo paleidus įrenginį reikalingas slaptažodis"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Papildomai saugai užtikrinti geriau naudokite atrakinimo piešinį"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Papildomai saugai užtikrinti geriau naudokite PIN kodą"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Papildomai saugai užtikrinti geriau naudokite slaptažodį"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml
index 40b6b3f..5d992f8 100644
--- a/packages/SystemUI/res-keyguard/values-lv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml
@@ -21,14 +21,11 @@
<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">"Ievadiet savu PIN kodu"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ievadiet PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Ievadiet savu kombināciju"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Uzzīmējiet kombināciju"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Ievadiet paroli"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Ievadiet paroli"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nederīga karte."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Akumulators uzlādēts"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Notiek bezvadu uzlāde"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Kļūdas dēļ nevar atspējot eSIM karti."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Ievadīšanas taustiņš"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Nepareiza kombinācija"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Nepareiza kombinācija. Mēģiniet vēlreiz."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Nepareiza parole"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Nepareiza parole. Mēģiniet vēlreiz."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Nepareizs PIN kods."</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Nepareizs PIN. Mēģiniet vēlreiz."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Vai atbloķējiet, izmantojot pirksta nospiedumu"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Pirksta nospiedums netika atpazīts"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Seja netika atpazīta"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Mēģiniet vēlreiz vai ievadiet PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Mēģiniet vēlreiz vai ievadiet paroli"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Mēģiniet vēlreiz vai uzzīmējiet kombināciju"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Pārsniedzot mēģinājumu skaitu, jāievada PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Pārsniedzot mēģinājumu skaitu, jāievada parole"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pārsniedzot mēģinājumu skaitu, jāzīmē kombinācija"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Atbloķējiet ar PIN vai pirksta nospiedumu"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Atbloķējiet ar paroli vai pirksta nospiedumu"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Atbloķējiet ar kombināciju vai pirksta nospiedumu"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Saskaņā ar darbavietas politiku papildu drošībai ierīce ir bloķēta"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pēc bloķēšanas ir jāievada PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pēc bloķēšanas ir jāievada parole"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pēc bloķēšanas ir jāzīmē kombinācija"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Atjauninājums tiks instalēts neaktīvajā laikā"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Jāveic papildu drošības darbība. PIN ilgu laiku nav lietots."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Jāveic papildu drošības darbība. Parole ilgu laiku nav lietota."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Jāveic papildu drošības darbība. Kombinācija ilgu laiku nav lietota."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Jāveic papildu drošības darbība. Ierīce ilgu laiku netika atbloķēta."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nevar autorizēt pēc sejas. Pārāk daudz mēģinājumu."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nevar autorizēt ar pirksta nospiedumu. Pārāk daudz mēģinājumu."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Uzticamības pārbaudes programma nav pieejama"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Pārāk daudz mēģinājumu ar nepareizu PIN."</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Pārāk daudz mēģinājumu ar nepareizu kombināciju."</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Pārāk daudz mēģinājumu ar nepareizu paroli."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Mēģiniet vēlreiz pēc # sekundes.}zero{Mēģiniet vēlreiz pēc # sekundēm.}one{Mēģiniet vēlreiz pēc # sekundes.}other{Mēģiniet vēlreiz pēc # sekundēm.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Ievadiet SIM kartes PIN kodu."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Ievadiet SIM kartes “<xliff:g id="CARRIER">%1$s</xliff:g>” PIN kodu."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM kartes PUK koda ievadīšana neizdevās!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Pārslēgt ievades metodi"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Lidojuma režīms"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pēc ierīces restartēšanas ir jāuzzīmē kombinācija"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pēc ierīces restartēšanas ir jāievada PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Pēc ierīces restartēšanas ir jāievada parole"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Papildu drošībai izmantojiet kombināciju"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Papildu drošībai izmantojiet PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Papildu drošībai izmantojiet paroli"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml
index 1a2513c..99e35f9 100644
--- a/packages/SystemUI/res-keyguard/values-mk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml
@@ -21,14 +21,11 @@
<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">"Внесете го PIN-кодот"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Внесете PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Внесете ја шемата"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Нацртај шема"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Внесете ја лозинката"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Внесете лозинка"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Неважечка картичка."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Полна"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Се полни безжично"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM-картичката не може да се оневозможи поради грешка."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Внеси"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Погрешна шема"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Погрешна шема. Обидете се повторно."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Погрешна лозинка"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Погрешна лозинка. Обидете се повторно."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Погрешен PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Погрешен PIN-код. Обидете се повторно."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Или отклучете со отпечаток"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Отпечатокот не е препознаен"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Ликот не е препознаен"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Обидете се повторно или внесете PIN-код"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Обидете се повторно или внесете лозинка"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Обидете се повторно или нацртајте шема"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Потребен е PIN-код по премногу обиди"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Потребна е лозинка по премногу обиди"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Потребна е шема по премногу обиди"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Отклучете со PIN-код или отпечаток"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Отклучете со лозинка или отпечаток"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Отклучете со шема или отпечаток"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"За дополнителна безбедност, уредот беше заклучен со работно правило"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Потребен е PIN-код по заклучување"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Потребна е лозинка по заклучување"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Потребна е шема по заклучување"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ажурирањето ќе се инсталира за време на неактивни часови"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потребна е дополнителна безбедност. PIN-кодот не бил користен некое време."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потребна е дополнителна безбедност. Лозинката не била користена некое време."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потребна е дополнителна безбедност. Шемата не била користена некое време."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Потребна е дополнителна безбедност. Уредот не бил отклучен некое време."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Не може да се отклучи со лик. Премногу обиди."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Не може да се отклучи со отпечаток. Премногу обиди."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Не е достапен aгент од доверба"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Премногу обиди со погрешен PIN-код"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Премногу обиди со погрешна шема"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Премногу обиди со погрешна лозинка"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Обидете се повторно по # секунда.}one{Обидете се повторно по # секунда.}other{Обидете се повторно по # секунди.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Внесете PIN на SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Внесете PIN на SIM за „<xliff:g id="CARRIER">%1$s</xliff:g>“."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-картичката не се отклучи со PUK-кодот!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Префрли метод за внесување"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Авионски режим"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Потребна е шема по рестартирање на уредот"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Потребен е PIN-код по рестартирање на уредот"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Потребна е лозинка по рестартирање на уредот"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"За дополнителна безбедност, користете шема"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"За дополнителна безбедност, користете PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"За дополнителна безбедност, користете лозинка"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml
index a223fd1..8181357 100644
--- a/packages/SystemUI/res-keyguard/values-ml/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml
@@ -21,14 +21,11 @@
<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">"പിൻ നൽകുക"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"പിൻ നൽകുക"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"നിങ്ങളുടെ പാറ്റേൺ നൽകുക"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"പാറ്റേൺ വരയ്ക്കുക"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"നിങ്ങളുടെ പാസ്വേഡ് നല്കുക"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"പാസ്വേഡ് നൽകുക"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"അസാധുവായ കാർഡ്."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ചാർജായി"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • വയർലെസ്സ് ആയി ചാർജ് ചെയ്യുന്നു"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"പിശക് കാരണം ഇ-സിം പ്രവർത്തനരഹിതമാക്കാനാകുന്നില്ല"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"എന്റർ"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"പാറ്റേൺ തെറ്റാണ്"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"പാറ്റേൺ തെറ്റ്. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"പാസ്വേഡ് തെറ്റാണ്"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"പാസ്വേഡ് തെറ്റ്. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"പിൻ തെറ്റാണ്"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"പിൻ തെറ്റ്. വീണ്ടും ശ്രമിക്കൂ."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"അല്ലെങ്കിൽ വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യൂ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"വിരലടയാളം തിരിച്ചറിഞ്ഞില്ല"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"മുഖം തിരിച്ചറിഞ്ഞിട്ടില്ല"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"വീണ്ടും ശ്രമിക്കുക അല്ലെങ്കിൽ പിൻ നൽകുക"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"വീണ്ടും ശ്രമിക്കുക അല്ലെങ്കിൽ പാസ്വേഡ് നൽകുക"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"വീണ്ടും ശ്രമിക്കുക അല്ലെങ്കിൽ പാറ്റേൺ വരയ്ക്കുക"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"നിരവധി ശ്രമങ്ങൾ നടത്തിയാൽ പിൻ നൽകേണ്ടതുണ്ട്"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"നിരവധി ശ്രമങ്ങൾ നടത്തിയാൽ പാസ്വേഡ് നൽകേണ്ടതുണ്ട്"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"നിരവധി ശ്രമങ്ങൾ നടത്തിയാൽ പാറ്റേൺ വരയ്ക്കേണ്ടതുണ്ട്"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"പിൻ/വിരലടയാളം കൊണ്ട് അൺലോക്ക് ചെയ്യൂ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"പാസ്വേഡ്/വിരലടയാളം കൊണ്ട് അൺലോക്ക് ചെയ്യൂ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"പാറ്റേൺ/വിരലടയാളം കൊണ്ട് അൺലോക്ക് ചെയ്യൂ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"അധിക സുരക്ഷയ്ക്ക്, ഔദ്യോഗിക നയം ഉപകരണം ലോക്ക് ചെയ്തു"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ലോക്ക്ഡൗണിന് ശേഷം പിൻ നൽകേണ്ടതുണ്ട്"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ലോക്ക്ഡൗണിന് ശേഷം പാസ്വേഡ് നൽകേണ്ടതുണ്ട്"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ലോക്ക്ഡൗണിന് ശേഷം പാറ്റേൺ വരയ്ക്കേണ്ടതുണ്ട്"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"സജീവമല്ലാത്ത സമയത്ത് അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യും"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"അധിക സുരക്ഷ വേണം. അൽപകാലം പിൻ ഉപയോഗിച്ചില്ല."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"അധിക സുരക്ഷ വേണം. അൽപകാലം പാസ്വേഡ് ഉപയോഗിച്ചില്ല."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"അധിക സുരക്ഷ വേണം. അൽപകാലം പാറ്റേൺ ഉപയോഗിച്ചില്ല."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"അധിക സുരക്ഷ വേണം. ഡിവൈസ് അൽപകാലം അൺലോക്ക് ചെയ്തില്ല."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് സാധ്യമല്ല. നിരവധി ശ്രമങ്ങൾ."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് സാധ്യമല്ല. നിരവധി ശ്രമങ്ങൾ."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"വിശ്വസ്ത ഏജന്റ് ലഭ്യമല്ല"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"തെറ്റായ പിൻ ഉപയോഗിച്ച് നിരവധി ശ്രമങ്ങൾ"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"തെറ്റായ പാറ്റേൺ ഉപയോഗിച്ച് നിരവധി ശ്രമങ്ങൾ"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"തെറ്റായ പാസ്വേഡ് ഉപയോഗിച്ച് നിരവധി ശ്രമങ്ങൾ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# സെക്കൻഡിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.}other{# സെക്കൻഡിനുള്ളിൽ വീണ്ടും ശ്രമിക്കുക.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"സിം പിൻ നൽകുക."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" എന്ന കാരിയർക്കുള്ള സിം പിൻ നൽകുക."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK ഉപയോഗിച്ച് സിം അൺലോക്കുചെയ്യാനുള്ള ശ്രമം പരാജയപ്പെട്ടു!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ഇൻപുട്ട് രീതി മാറുക"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ഫ്ലൈറ്റ് മോഡ്"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്ത ശേഷം പാറ്റേൺ വരയ്ക്കണം"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്ത ശേഷം പിൻ നൽകണം"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്ത ശേഷം പാസ്വേഡ് നൽകണം"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"അധിക സുരക്ഷയ്ക്കായി, പകരം പാറ്റേൺ ഉപയോഗിക്കുക"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"അധിക സുരക്ഷയ്ക്കായി, പകരം പിൻ ഉപയോഗിക്കുക"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"അധിക സുരക്ഷയ്ക്കായി, പകരം പാസ്വേഡ് ഉപയോഗിക്കുക"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml
index d4d84b0..eefc491 100644
--- a/packages/SystemUI/res-keyguard/values-mn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml
@@ -21,14 +21,11 @@
<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">"ПИН-ээ оруулна уу"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ПИН оруулах"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Хээгээ оруулна уу"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Хээ зурах"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Нууц үгээ оруулна уу"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Нууц үг оруулах"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Карт хүчингүй байна."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Цэнэглэсэн"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Утасгүй цэнэглэж байна"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Алдаа гарсан тул eSIM-г идэвхгүй болгох боломжгүй байна."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Оруулах"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Хээ буруу байна"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Хээ буруу. Ахин оролд."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Нууц үг буруу байна"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Нууц үг буруу. Ахин оролд."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ПИН код буруу байна"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ПИН буруу. Ахин оролд."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Эсвэл хурууны хээгээр түгжээг тайл"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Хурууны хээг таньсангүй"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Царайг таньсангүй"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Дахин оролдох эсвэл ПИН оруулна уу"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Дахин оролдох эсвэл нууц үг оруулна уу"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Дахин оролдох эсвэл хээ зурна уу"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Хэт олон оролдлогын дараа ПИН шаардлагатай"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Хэт олон оролдлогын дараа нууц үг шаардлагатай"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Хэт олон оролдлогын дараа хээ шаардлагатай"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ПИН эсвэл хурууны хээгээр түгжээ тайл"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Нууц үг эсвэл хурууны хээгээр түгжээ тайл"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Хээ эсвэл хурууны хээгээр түгжээ тайл"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Нэмэлт аюулгүй байдлын үүднээс төхөөрөмжийг ажлын бодлогын дагуу түгжсэн"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Түгжсэний дараа ПИН шаардлагатай"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Түгжсэний дараа нууц үг шаардлагатай"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Түгжсэний дараа хээ шаардлагатай"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Шинэчлэлтийг идэвхгүй цагуудаар суулгана"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Нэмэлт аюулгүй байдал шаардлагатай. ПИН-г хэсэг хугацаанд ашиглаагүй."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Нэмэлт аюулгүй байдал шаардлагатай. Нууц үгийг хэсэг хугацаанд ашиглаагүй."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Нэмэлт аюулгүй байдал шаардлагатай. Хээг хэсэг хугацаанд ашиглаагүй."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Нэмэлт аюулгүй байдал шаардлагатай. Төхөөрөмжийн түгжээг хэсэг хугацаанд тайлаагүй."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Царайгаар түгжээг тайлах боломжгүй. Хэт олон оролдлоо"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Хурууны хээгээр түгжээг тайлах боломжгүй. Хэт олон оролдлоо"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Итгэмжлэгдсэн агент боломжгүй байна"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Буруу ПИН-ээр хэт олон удаа оролдсон"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Буруу хээгээр хэт олон удаа оролдсон"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Буруу нууц үгээр хэт олон удаа оролдсон"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# секундийн дараа дахин оролдоно уу.}other{# секундийн дараа дахин оролдоно уу.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM-н ПИН-г оруулна уу."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\"-н SIM-н ПИН-г оруулна уу."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-н PUK-г буруу орууллаа!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Оруулах аргыг сэлгэх"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Нислэгийн горим"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Төхөөрөмжийг дахин эхлүүлсний дараа хээ шаардлагатай"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Төхөөрөмжийг дахин эхлүүлсний дараа ПИН шаардлагатай"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Төхөөрөмжийг дахин эхлүүлсний дараа нууц үг шаардлагатай"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Нэмэлт аюулгүй байдлын үүднээс оронд нь хээ ашиглана уу"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Нэмэлт аюулгүй байдлын үүднээс оронд нь ПИН ашиглана уу"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Нэмэлт аюулгүй байдлын үүднээс оронд нь нууц үг ашиглана уу"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml
index 8f9d4a0..76494f0 100644
--- a/packages/SystemUI/res-keyguard/values-mr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml
@@ -21,14 +21,11 @@
<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">"तुमचा पिन एंटर करा"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"पिन एंटर करा"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"तुमचा पॅटर्न एंटर करा"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"पॅटर्न ड्रॉ करा"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"तुमचा पासवर्ड एंटर करा"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"पासवर्ड एंटर करा"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"अवैध कार्ड."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"चार्ज झाली"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • वायरलेस पद्धतीने चार्ज करत आहे"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"एका एररमुळे eSIM बंद होऊ शकत नाही."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"एंटर करा"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"चुकीचा पॅटर्न"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"पॅटर्न चुकीचा आहे. पुन्हा प्रयत्न करा."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"चुकीचा पासवर्ड"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"पासवर्ड चुकीचा आहे. पुन्हा प्रयत्न करा."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"चुकीचा पिन"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"पिन चुकीचा आहे. पुन्हा प्रयत्न करा."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"किंवा फिंगरप्रिंट वापरून अनलॉक करा"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"फिंगरप्रिंट ओळखले नाही"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"चेहरा ओळखता आला नाही"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"पुन्हा प्रयत्न करा किंवा पिन एंटर करा"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"पुन्हा प्रयत्न करा किंवा पासवर्ड एंटर करा"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"पुन्हा प्रयत्न करा किंवा पॅटर्न ड्रॉ करा"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"अनेक वेळा प्रयत्न केल्यानंतर पिन आवश्यक आहे"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"अनेक वेळा प्रयत्न केल्यानंतर पासवर्ड आवश्यक आहे"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"अनेक वेळा प्रयत्न केल्यानंतर पॅटर्न आवश्यक आहे"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"पिन किंवा फिंगरप्रिंट वापरून अनलॉक करा"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"पासवर्ड किंवा फिंगरप्रिंट वापरून अनलॉक करा"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"पॅटर्न किंवा फिंगरप्रिंट वापरून अनलॉक करा"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"अतिरिक्त सुरक्षेसाठी, कामाशी संबंधित धोरणाद्वारे डिव्हाइस लॉक केला होता"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लॉकडाउननंतर पिन आवश्यक आहे"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लॉकडाउननंतर पासवर्ड आवश्यक आहे"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लॉकडाउननंतर पॅटर्न आवश्यक आहे"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"अपडेट हे इनॅक्टिव्ह तासांदरम्यान इंस्टॉल होईल"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"अतिरिक्त सुरक्षा आवश्यक आहे. काही वेळेसाठी पिन अनलॉक केला गेला नव्हता."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"अतिरिक्त सुरक्षा आवश्यक आहे. काही वेळेसाठी पासवर्ड अनलॉक केला गेला नव्हता."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"अतिरिक्त सुरक्षा आवश्यक आहे. काही वेळेसाठी पॅटर्न अनलॉक केला गेला नव्हता."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"अतिरिक्त सुरक्षा आवश्यक आहे. काही वेळेसाठी डिव्हाइस अनलॉक केले गेले नव्हते."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"चेहरा वापरून अनलॉक करू शकत नाही. खूप जास्त प्रयत्न."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"फिंगरप्रिंट वापरून अनलॉक करू शकत नाही. खूप जास्त प्रयत्न."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"विश्वसनीय एजंट उपलब्ध नाही"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"चुकीचा पिन वापरून खूप जास्त प्रयत्न केले"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"चुकीचा पॅटर्न वापरून खूप जास्त प्रयत्न केले"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"चुकीचा पासवर्ड वापरून खूप जास्त प्रयत्न केले"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# सेकंदामध्ये पुन्हा प्रयत्न करा.}other{# सेकंदांमध्ये पुन्हा प्रयत्न करा.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"सिम पिन एंटर करा"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" साठी सिम पिन एंटर करा"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"सिम PUK कार्य अयशस्वी झाले!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"इनपुट पद्धत स्विच करा"</string>
<string name="airplane_mode" msgid="2528005343938497866">"विमान मोड"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"डिव्हाइस रीस्टार्ट झाल्यानंतर पॅटर्न आवश्यक आहे"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"डिव्हाइस रीस्टार्ट झाल्यानंतर पिन आवश्यक आहे"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"डिव्हाइस रीस्टार्ट झाल्यानंतर पासवर्ड आवश्यक आहे"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पॅटर्न वापरा"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पिन वापरा"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"अतिरिक्त सुरक्षेसाठी, त्याऐवजी पासवर्ड वापरा"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml
index c0ebce2..b063471 100644
--- a/packages/SystemUI/res-keyguard/values-ms/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml
@@ -21,14 +21,11 @@
<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">"Masukkan PIN anda"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Masukkan PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Masukkan corak anda"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Lukis corak"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Masukkan kata laluan anda"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Masukkan kata laluan"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Kad Tidak Sah."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Sudah dicas"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Mengecas secara wayarles"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM tidak dapat dilumpuhkan kerana ralat."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Kekunci Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Corak salah"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Corak salah. Cuba lagi."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Kata laluan salah"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Kata laluan salah. Cuba lagi."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN salah"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN salah. Cuba lagi."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Atau buka kunci dengan cap jari"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Cap jari tidak dikenali"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Wajah tidak dikenali"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Cuba lagi atau masukkan PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Cuba lagi atau masukkan kata laluan"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Cuba lagi atau lukis corak"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN diperlukan selepas terlalu banyak percubaan"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Kata laluan diperlukan selepas terlalu banyak percubaan"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Corak diperlukan selepas terlalu banyak percubaan"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Buka kunci dengan PIN/cap jari"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Buka kunci dengan kata laluan atau cap jari"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Buka kunci dengan corak/cap jari"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Untuk keselamatan, peranti dikunci oleh dasar kerja"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN diperlukan selepas kunci semua"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kata laluan diperlukan selepas kunci semua"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Corak diperlukan selepas kunci semua"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Kemaskinian akan dipasang semasa waktu tidak aktif"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Keselamatan tambahan diperlukan. PIN tidak digunakan."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Keselamatan tambahan diperlukan. Kata laluan tidak digunakan."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Keselamatan tambahan diperlukan. Corak tidak digunakan."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Keselamatan tambahan diperlukan. Peranti berkunci untuk seketika."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Gagal membuka dengan wajah. Terlalu banyak percubaan."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Gagal membuka dengan cap jari. Terlalu banyak percubaan."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Ejen amanah tidak tersedia"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Terlalu banyak percubaan dengan PIN yang salah"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Terlalu banyak percubaan dengan corak yang salah"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Terlalu banyak percubaan dengan kata laluan yang salah"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Cuba lagi dalam # saat.}other{Cuba lagi dalam # saat.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Masukkan PIN SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Masukkan PIN SIM untuk \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Pengendalian PUK SIM gagal!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Tukar kaedah masukan"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mod Pesawat"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Corak diperlukan selepas peranti mula semula"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN diperlukan selepas peranti mula semula"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Kata laluan diperlukan selepas peranti mula semula"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Untuk keselamatan tambahan, gunakan corak"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Untuk keselamatan tambahan, gunakan PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Untuk keselamatan tambahan, gunakan kata laluan"</string>
diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml
index 53035a4..de1da84 100644
--- a/packages/SystemUI/res-keyguard/values-my/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-my/strings.xml
@@ -21,14 +21,11 @@
<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">"သင့်ပင်နံပါတ် ထည့်ပါ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ပင်နံပါတ်ထည့်ပါ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"သင့်လော့ခ်ဖွင့်ပုံစံ ထည့်ပါ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ပုံစံဆွဲပါ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"သင့်စကားဝှက် ထည့်ပါ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"စကားဝှက် ထည့်ပါ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ကတ် မမှန်ကန်ပါ။"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"အားသွင်းပြီးပါပြီ"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ကြိုးမဲ့ အားသွင်းနေသည်"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"အမှားအယွင်းရှိနေသောကြောင့် eSIM ကို ပိတ်၍မရပါ။"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter ခလုတ်"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"လော့ခ်ဖွင့်ပုံစံ မှားနေသည်"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ပုံစံအမှား။ ထပ်စမ်းပါ။"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"စကားဝှက် မှားနေသည်"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"စကားဝှက်အမှား။ ထပ်စမ်းပါ။"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ပင်နံပါတ် မမှန်ကန်ပါ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ပင်နံပါတ်အမှား။ ထပ်စမ်းပါ။"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"သို့မဟုတ် လက်ဗွေဖြင့် ဖွင့်ပါ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"လက်ဗွေကို မသိရှိပါ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"မျက်နှာကို မသိရှိပါ"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ထပ်စမ်းကြည့်ပါ (သို့) ပင်နံပါတ်ထည့်ပါ"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ထပ်စမ်းကြည့်ပါ (သို့) စကားဝှက်ထည့်ပါ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ထပ်စမ်းကြည့်ပါ (သို့) ပုံစံဆွဲပါ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်း၍ ပင်နံပါတ်လိုအပ်သည်"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်း၍ စကားဝှက်လိုအပ်သည်"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်း၍ ပုံဖော်ခြင်းလိုအပ်သည်"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ပင်နံပါတ် (သို့) လက်ဗွေဖြင့် ဖွင့်ပါ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"စကားဝှက် (သို့) လက်ဗွေဖြင့် ဖွင့်ပါ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ပုံဖော်ခြင်း (သို့) လက်ဗွေဖြင့် ဖွင့်ပါ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ထပ်ဆောင်းလုံခြုံရေးအတွက် စက်ကို အလုပ်ခွင်မူဝါဒက ပိတ်လိုက်သည်"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် ပင်နံပါတ်လိုအပ်သည်"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် စကားဝှက်လိုအပ်သည်"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် ပုံဖော်ခြင်းလိုအပ်သည်"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"မသုံးသည့်အချိန်အတွင်း အပ်ဒိတ်ထည့်သွင်းမည်"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ ပင်နံပါတ်မသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ စကားဝှက်မသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ ပုံဖော်ခြင်းမသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ စက်မဖွင့်သည်မှာ အနည်းငယ်ကြာပြီ။"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"မျက်နှာဖြင့် ဖွင့်၍မရပါ။ ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"လက်ဗွေဖြင့် ဖွင့်၍မရပါ။ ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ယုံကြည်မှု အေးဂျင့်ကို မရနိုင်ပါ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ပင်နံပါတ် မှားသည့်အကြိမ်ရေ များလွန်းသည်"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ပုံဖော်ခြင်း မှားသည့်အကြိမ်ရေ များလွန်းသည်"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"စကားဝှက် မှားသည့်အကြိမ်ရေ များလွန်းသည်"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်နိုင်သည်။}other{# စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်နိုင်သည်။}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ဆင်းမ်ကတ် ပင်နံပါတ်ကို ထည့်ပါ။"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" အတွက် ဆင်းမ်ကဒ်ပင်နံပါတ်ကို ထည့်ပါ။"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"ဆင်းမ်ကတ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် လုပ်ဆောင်ချက် မအောင်မြင်ပါ။"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"စာရိုက်စနစ်ပြောင်းရန်"</string>
<string name="airplane_mode" msgid="2528005343938497866">"လေယာဉ်ပျံမုဒ်"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"စက်ကို ပြန်စပြီးနောက် ပုံဖော်ခြင်းလိုအပ်သည်"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"စက်ကို ပြန်စပြီးနောက် ပင်နံပါတ်လိုအပ်သည်"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"စက်ကို ပြန်စပြီးနောက် စကားဝှက်လိုအပ်သည်"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား ပုံစံသုံးပါ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား ပင်နံပါတ်သုံးပါ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ထပ်ဆောင်းလုံခြုံရေးအတွက် ၎င်းအစား စကားဝှက်သုံးပါ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml
index 13e5ffa..501d836 100644
--- a/packages/SystemUI/res-keyguard/values-nb/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml
@@ -21,14 +21,11 @@
<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">"Skriv inn PIN-koden din"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Skriv inn PIN-koden"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Legg inn mønsteret ditt"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Tegn mønsteret"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Skriv inn passordet ditt"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Skriv inn passordet"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ugyldig kort."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Oppladet"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Lader trådløst"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"E-SIM-kortet kan ikke deaktiveres på grunn av en feil."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Feil mønster"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Feil mønster. Prøv igjen."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Feil passord"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Feil passord. Prøv igjen."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Feil PIN-kode"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Feil PIN-kode. Prøv igjen."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Eller lås opp med fingeravtrykk"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Gjenkjenner ikke avtrykket"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Gjenkjenner ikke ansiktet"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Prøv på nytt eller skriv inn PIN-koden"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Prøv på nytt eller skriv inn passordet"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Prøv på nytt eller tegn mønsteret"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN-koden kreves etter for mange forsøk"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Passordet kreves etter for mange forsøk"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Mønsteret kreves etter for mange forsøk"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Lås opp med PIN-kode eller fingeravtrykk"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Lås opp med passord eller fingeravtrykk"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Lås opp med mønster eller fingeravtrykk"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"For økt sikkerhet ble enheten låst med jobbregler"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-koden kreves etter låsing"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Passordet kreves etter låsing"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mønsteret kreves etter låsing"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Oppdateringen installeres når enheten er inaktiv"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Økt sikkerhet kreves. Har ikke brukt PIN-koden nylig"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Økt sikkerhet kreves. Har ikke brukt passordet nylig"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Økt sikkerhet kreves. Har ikke brukt mønsteret nylig"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Økt sikkerhet kreves. Har ikke låst opp enhet nylig."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Kan ikke låse opp med ansiktet. For mange forsøk."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Kan ikke låse opp med fingeravtrykk For mange forsøk"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Den pålitelige agenten er utilgjengelig"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"For mange forsøk med feil PIN-kode"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"For mange forsøk med feil mønster"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"For mange forsøk med feil passord"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Prøv på nytt om # sekund.}other{Prøv på nytt om # sekunder.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Skriv inn PIN-koden for SIM-kortet."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Skriv inn PIN-koden for SIM-kortet «<xliff:g id="CARRIER">%1$s</xliff:g>»."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK-koden for SIM-kortet ble avvist."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Bytt inndatametode"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Flymodus"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Mønsteret kreves etter at enheten startes på nytt"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN-koden kreves etter at enheten startes på nytt"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Passordet kreves etter at enheten startes på nytt"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Bruk mønster i stedet, for å øke sikkerheten"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Bruk PIN-kode i stedet, for å øke sikkerheten"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Bruk passord i stedet, for å øke sikkerheten"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index 8dc8ff0..4b215ae 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -21,14 +21,11 @@
<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">"आफ्नो PIN प्रविष्टि गर्नुहोस्"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN हाल्नुहोस्"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"आफ्नो ढाँचा प्रविष्टि गर्नुहोस्"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"प्याटर्न कोर्नुहोस्"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"आफ्नो पासवर्ड प्रविष्ट गर्नु…"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"पासवर्ड हाल्नुहोस्"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"अमान्य कार्ड।"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"चार्ज भयो"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • तारविनै चार्ज गर्दै"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"कुनै त्रुटिका कारण यो eSIM लाई असक्षम पार्न सकिएन।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"प्रविष्टि गर्नुहोस्"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"प्याटर्न मिलेन"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"प्याटर्न मिलेन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"गलत पासवर्ड"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"पासवर्ड मिलेन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"गलत PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN मिलेन। फेरि प्रयास गर्नुहोस्।"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"वा फिंगरप्रिन्ट प्रयोग गरी अनलक गर्नुहोस्"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"फिंगरप्रिन्ट पहिचान गर्न सकिएन"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"अनुहार पहिचान गर्न सकिएन"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"फेरि प्रयास गर्नुहोस् वा PIN हाल्नुहोस्"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"फेरि प्रयास गर्नुहोस् वा पासवर्ड हाल्नुहोस्"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"फेरि प्रयास गर्नुहोस् वा प्याटर्न कोर्नुहोस्"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"अत्यन्तै धेरै पटक प्रयास गरिसकेपछि PIN हाल्नु पर्ने हुन्छ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"अत्यन्तै धेरै पटक प्रयास गरिसकेपछि पासवर्ड हाल्नु पर्ने हुन्छ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"अत्यन्तै धेरै पटक प्रयास गरिसकेपछि प्याटर्न कोर्नु पर्ने हुन्छ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN वा फिंगरप्रिन्ट प्रयोग गरी अनलक गर्नुहोस्"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"पासवर्ड वा फिंगरप्रिन्ट प्रयोग गरी अनलक गर्नुहोस्"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"प्याटर्न वा फिंगरप्रिन्ट प्रयोग गरी अनलक गर्नुहोस्"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"थप सुरक्षाका लागि कामसम्बन्धी नीतिका अनुसार डिभाइस लक गरियो"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लकडाउन गरेपछि PIN हाल्नु पर्ने हुन्छ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लकडाउन गरेपछि पासवर्ड हाल्नु पर्ने हुन्छ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लकडाउन गरेपछि प्याटर्न कोर्नु पर्ने हुन्छ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"डिभाइस प्रयोग नभएका बेला अपडेट इन्स्टल हुने छ"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि PIN प्रयोग गरिएको छैन।"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि पासवर्ड प्रयोग गरिएको छैन।"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि प्याटर्न प्रयोग गरिएको छैन।"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि डिभाइस अनलक गरिएको छैन।"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"अनुहार प्रयोग गरी अनलक गर्न सकिएन। अत्यन्तै धेरै पटक प्रयास गरिसकियो।"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"फिंगरप्रिन्ट प्रयोग गरी अनलक गर्न सकिएन। अत्यन्तै धेरै पटक प्रयास गरिसकियो।"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ट्रस्ट एजेन्ट उपलब्ध छैन"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"अत्यन्तै धेरै पटक गलत PIN हालियो"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"अत्यन्तै धेरै पटक गलत प्याटर्न कोरियो"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"अत्यन्तै धेरै पटक गलत पासवर्ड हालियो"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# सेकेन्डपछि फेरि प्रयास गर्नुहोस्।}other{# सेकेन्डपछि फेरि प्रयास गर्नुहोस्।}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM को PIN प्रविष्टि गर्नुहोस्।"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" को SIM को PIN प्रविष्टि गर्नुहोस्।"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM को PUK कोड राखेर अनलक गर्ने कार्य असफल भयो!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"इनपुट विधिलाई स्विच गर्नुहोस्"</string>
<string name="airplane_mode" msgid="2528005343938497866">"हवाइजहाज मोड"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"डिभाइस रिस्टार्ट भएपछि प्याटर्न कोर्नु पर्ने हुन्छ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"डिभाइस रिस्टार्ट भएपछि PIN हाल्नु पर्ने हुन्छ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"डिभाइस रिस्टार्ट भएपछि पासवर्ड हाल्नु पर्ने हुन्छ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो प्याटर्न प्रयोग गर्नुहोस्"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो पिन प्रयोग गर्नुहोस्"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"अतिरिक्त सुरक्षाका लागि यो प्रमाणीकरण विधिको साटो पासवर्ड प्रयोग गर्नुहोस्"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index af6d477..9b8b72d 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -21,14 +21,11 @@
<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">"Geef je pincode op"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Geef de pincode op"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Geef je patroon op"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Teken het patroon"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Geef je wachtwoord op"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Geef het wachtwoord op"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ongeldige kaart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Opgeladen"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Draadloos opladen"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"De e-simkaart kan niet worden uitgezet vanwege een fout."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Onjuist patroon"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Onjuist patroon. Probeer het opnieuw."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Onjuist wachtwoord"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Onjuist wachtwoord. Probeer het opnieuw."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Onjuiste pincode"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Onjuiste pincode. Probeer het opnieuw."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Of ontgrendel met vingerafdruk"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Vingerafdruk niet herkend"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Gezicht niet herkend"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Probeer het opnieuw of geef de pincode op"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Probeer het opnieuw of geef het wachtwoord op"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Probeer het opnieuw of teken het patroon"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Na te veel pogingen is de pincode vereist"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Na te veel pogingen is het wachtwoord vereist"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Na te veel pogingen is het patroon vereist"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Ontgrendel met pincode/vingerafdruk"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Ontgrendel met wachtwoord/vingerafdruk"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Ontgrendel met patroon/vingerafdruk"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Vergrendeld door werkbeleid voor extra beveiliging"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Na lockdown is de pincode vereist"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Na lockdown is het wachtwoord vereist"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Na lockdown is het patroon vereist"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update wordt geïnstalleerd tijdens inactieve uren"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Extra beveiliging. Pincode is lang niet gebruikt."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Extra beveiliging. Wachtwoord is lang niet gebruikt."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Extra beveiliging. Patroon is lang niet gebruikt."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Extra beveiliging vereist. Apparaat is lang niet ontgrendeld."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Kan niet ontgrendelen met gezicht. Te veel pogingen."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Niet ontgrendeld met vingerafdruk. Te veel pogingen."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust agent is niet beschikbaar"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Te veel pogingen met onjuiste pincode"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Te veel pogingen met onjuist patroon"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Te veel pogingen met onjuist wachtwoord"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Probeer het over # seconde opnieuw.}other{Probeer het over # seconden opnieuw.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Geef de pincode van de simkaart op."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Geef de pincode voor de simkaart van \'<xliff:g id="CARRIER">%1$s</xliff:g>\' op."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Bewerking met pukcode voor simkaart is mislukt."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Invoermethode wijzigen"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Vliegtuigmodus"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Patroon is vereist na opnieuw opstarten apparaat"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pincode is vereist na opnieuw opstarten apparaat"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Wachtwoord is vereist na opnieuw opstarten apparaat"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Gebruik in plaats daarvan het patroon voor extra beveiliging"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik in plaats daarvan de pincode voor extra beveiliging"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Gebruik in plaats daarvan het wachtwoord voor extra beveiliging"</string>
diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml
index a1a6ab2..3e381d2 100644
--- a/packages/SystemUI/res-keyguard/values-or/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-or/strings.xml
@@ -21,14 +21,11 @@
<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">"ନିଜର PIN ଲେଖନ୍ତୁ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN ଲେଖନ୍ତୁ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ନିଜର ପାଟର୍ନ ଆଙ୍କନ୍ତୁ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ପାଟର୍ନ ଡ୍ର କରନ୍ତୁ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ନିଜ ପାସ୍ୱର୍ଡ ଲେଖନ୍ତୁ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ଅମାନ୍ୟ କାର୍ଡ।"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ଚାର୍ଜ ହୋଇଗଲା"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"ୱାୟାର୍ଲେସ୍ଭାବରେ <xliff:g id="PERCENTAGE">%s</xliff:g> • ଚାର୍ଜ ହୋଇଛି"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ଗୋଟିଏ ତ୍ରୁଟି କାରଣରୁ eSIMକୁ ଅକ୍ଷମ କରାଯାଇପାରିବ ନାହିଁ।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"ଏଣ୍ଟର୍"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ଭୁଲ ପାଟର୍ନ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ଭୁଲ ପାଟର୍ନ। ପୁଣିଚେଷ୍ଟା କର।"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ଭୁଲ ପାସ୍ୱର୍ଡ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ଭୁଲ ପାସୱାର୍ଡ। ପୁଣି ଚେଷ୍ଟା କର।"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ଭୁଲ PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ଭୁଲ PIN। ପୁଣି ଚେଷ୍ଟା କର।"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"କିମ୍ବା ଟିପଚିହ୍ନ ମାଧ୍ୟମରେ ଅନଲକ କରନ୍ତୁ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ଟିପଚିହ୍ନ ଚିହ୍ନଟ ହେଲା ନାହିଁ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ଫେସ ଚିହ୍ନଟ କରାଯାଇନାହିଁ"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା PIN ଲେଖନ୍ତୁ"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା ପାଟର୍ନ ଡ୍ର କରନ୍ତୁ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା ପରେ PIN ଆବଶ୍ୟକ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା ପରେ ପାସୱାର୍ଡ ଆବଶ୍ୟକ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN ବା ଟିପଚିହ୍ନ ଜରିଆରେ ଅନଲକ କର"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ପାସୱାର୍ଡ ବା ଟିପଚିହ୍ନ ଜରିଆରେ ଅନଲକ କର"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ପାଟର୍ନ ବା ଟିପଚିହ୍ନ ଜରିଆରେ ଅନଲକ କର"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ସୁରକ୍ଷା ପାଇଁ କାର୍ଯ୍ୟ ନୀତି ଅନୁସାରେ ଡିଭାଇସ ଲକ ହୋଇଛି"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ଲକଡାଉନ ହେବା ପରେ PIN ଆବଶ୍ୟକ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ଲକଡାଉନ ହେବା ପରେ ପାସୱାର୍ଡ ଆବଶ୍ୟକ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ଲକଡାଉନ ହେବା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ନିଷ୍କ୍ରିୟ ସମୟରେ ଅପଡେଟ ଇନଷ୍ଟଲ ହେବ"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ PIN ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ ପାସୱାର୍ଡ ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ ପାଟର୍ନ ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ ଡିଭାଇସ ଅନଲକ କରାଯାଇନାହିଁ।"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ଫେସ ଜରିଆରେ ଅନଲକ କରିହେବ ନାହିଁ। ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା।"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ଟିପଚିହ୍ନ ସହ ଅନଲକ କରିହେବ ନାହିଁ। ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା।"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ଟ୍ରଷ୍ଟ ଏଜେଣ୍ଟ ଉପଲବ୍ଧ ନାହିଁ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ଭୁଲ PIN ସହ ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ଭୁଲ ପାଟର୍ନ ସହ ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ଭୁଲ ପାସୱାର୍ଡ ସହ ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା କରାଯାଇଛି"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।}other{# ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIMର PIN ଲେଖନ୍ତୁ।"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ପାଇଁ SIMର PIN ଲେଖନ୍ତୁ।"</string>
@@ -141,13 +108,10 @@
<string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN କାମ ବିଫଳ ହେଲା!"</string>
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUKର କାମ ବିଫଳ ହେଲା!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ଇନପୁଟ୍ ପଦ୍ଧତି ବଦଳାନ୍ତୁ"</string>
- <string name="airplane_mode" msgid="2528005343938497866">"ଏରୋପ୍ଲେନ୍ ମୋଡ୍"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="airplane_mode" msgid="2528005343938497866">"ଏରୋପ୍ଲେନ ମୋଡ"</string>
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ PIN ଆବଶ୍ୟକ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାସୱାର୍ଡ ଆବଶ୍ୟକ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ, ଏହା ପରିବର୍ତ୍ତେ ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ, ଏହା ପରିବର୍ତ୍ତେ PIN ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ, ଏହା ପରିବର୍ତ୍ତେ ପାସୱାର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 61eeb49..67ba3ef 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -21,14 +21,11 @@
<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">"ਆਪਣਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ਆਪਣਾ ਪੈਟਰਨ ਦਾਖਲ ਕਰੋ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ਪੈਟਰਨ ਬਣਾਓ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ਅਵੈਧ ਕਾਰਡ।"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ਚਾਰਜ ਹੋ ਗਿਆ"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ਬਿਨਾਂ ਤਾਰ ਤੋਂ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ਕੋਈ ਗੜਬੜ ਹੋਣ ਕਰਕੇ ਈ-ਸਿਮ ਬੰਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"ਦਾਖਲ ਕਰੋ"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"ਗਲਤ ਪੈਟਰਨ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ਗਲਤ ਪੈਟਰਨ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"ਗਲਤ ਪਾਸਵਰਡ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"ਗਲਤ ਪਾਸਵਰਡ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"ਗਲਤ ਪਿੰਨ"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ਗਲਤ ਪਿੰਨ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਪੈਟਰਨ ਬਣਾਓ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪਿੰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ਪਿੰਨ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ਪਾਸਵਰਡ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ਪੈਟਰਨ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਲਈ, ਡੀਵਾਈਸ ਕਾਰਜ ਨੀਤੀ ਵੱਲੋਂ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪਿੰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ਅੱਪਡੇਟ ਅਕਿਰਿਆਸ਼ੀਲ ਘੰਟਿਆਂ ਦੌਰਾਨ ਸਥਾਪਤ ਹੋਵੇਗਾ"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪਿੰਨ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪਾਸਵਰਡ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪੈਟਰਨ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਡੀਵਾਈਸ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਸੀ।"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ਚਿਹਰੇ ਨਾਲ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ।"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ।"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ਭਰੋਸੇਯੋਗ ਏਜੰਟ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ਗਲਤ ਪਿੰਨ ਨਾਲ ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ਗਲਤ ਪੈਟਰਨ ਨਾਲ ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ਗਲਤ ਪਾਸਵਰਡ ਨਾਲ ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ਸਕਿੰਟ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}one{# ਸਕਿੰਟ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}other{# ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ।"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ਲਈ ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ।"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK ਕਾਰਵਾਈ ਅਸਫਲ ਰਹੀ!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ਇਨਪੁੱਟ ਵਿਧੀ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ਡੀਵਾਈਸ ਮੁੜ-ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ਡੀਵਾਈਸ ਮੁੜ-ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਪਿੰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ਡੀਵਾਈਸ ਮੁੜ-ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪੈਟਰਨ ਵਰਤੋ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪਿੰਨ ਵਰਤੋ"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ਵਧੀਕ ਸੁਰੱਖਿਆ ਲਈ, ਇਸਦੀ ਬਜਾਏ ਪਾਸਵਰਡ ਵਰਤੋ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml
index 6ebc809..1fcde86 100644
--- a/packages/SystemUI/res-keyguard/values-pl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml
@@ -21,14 +21,11 @@
<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">"Wpisz kod PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Wpisz kod PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Narysuj wzór"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Narysuj wzór"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Wpisz hasło"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Wpisz hasło"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nieprawidłowa karta."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Naładowana"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Ładowanie bezprzewodowe"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Nie można wyłączyć karty eSIM z powodu błędu."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Nieprawidłowy wzór"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Błędny wzór. Spróbuj ponownie."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Nieprawidłowe hasło"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Błędne hasło. Spróbuj ponownie."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Nieprawidłowy kod PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Błędny kod PIN. Spróbuj ponownie."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Lub odblokuj odciskiem palca"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Nie rozpoznano odcisku palca"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Nie rozpoznano twarzy"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Spróbuj ponownie lub wpisz kod PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Spróbuj ponownie lub wpisz hasło"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Spróbuj ponownie lub narysuj wzór"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Po zbyt wielu próbach wymagany jest kod PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Po zbyt wielu próbach wymagane jest hasło"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Po zbyt wielu próbach wymagany jest wzór"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Odblokuj kodem PIN lub odciskiem palca"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Odblokuj hasłem lub odciskiem palca"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Odblokuj wzorem lub odciskiem palca"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Dla bezpieczeństwa zablokowano urządzenie z powodu zasad obowiązujących w firmie"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po zablokowaniu wymagany jest kod PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po zablokowaniu wymagane jest hasło"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po zablokowaniu wymagany jest wzór"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizacja zainstaluje się w czasie bezczynności"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Wzmocnij ochronę. Od dawna nie używano kodu PIN."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Wzmocnij ochronę. Od dawna nie używano hasła."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Wzmocnij ochronę. Od dawna nie używano wzoru."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Wzmocnij ochronę. Urządzenie było długo nie używane."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nie można odblokować twarzą. Zbyt wiele prób."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nie można odblokować odciskiem palca. Zbyt wiele prób."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agent zaufania jest niedostępny"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Zbyt wiele nieudanych prób wpisania kodu PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Zbyt wiele nieudanych prób narysowania wzoru"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Zbyt wiele nieudanych prób wpisania hasła"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Spróbuj ponownie za # sekundę.}few{Spróbuj ponownie za # sekundy.}many{Spróbuj ponownie za # sekund.}other{Spróbuj ponownie za # sekundy.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Wpisz kod PIN karty SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Wpisz kod PIN karty SIM „<xliff:g id="CARRIER">%1$s</xliff:g>”."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operacja z kodem PUK karty SIM nie udała się."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Przełączanie metody wprowadzania"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Tryb samolotowy"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Po ponownym uruchomieniu wymagany jest wzór"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Po ponownym uruchomieniu wymagany jest kod PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Po ponownym uruchomieniu wymagane jest hasło"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ze względów bezpieczeństwa użyj wzoru"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ze względów bezpieczeństwa użyj kodu PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ze względów bezpieczeństwa użyj hasła"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
index a958741..15b3fc0 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
@@ -21,14 +21,11 @@
<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">"Digite seu PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Insira o PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Digite seu padrão"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desenhe o padrão"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Digite sua senha"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Digite a senha"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Carregado"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Carregando sem fio"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Não é possível desativar o eSIM devido a um erro."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Inserir"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Padrão incorreto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Padrão errado."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Senha incorreta"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Senha errada."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorreto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN errado. Tente de novo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ou desbloqueie com a impressão digital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Impr. dig. não reconhecida"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Rosto não reconhecido"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Tente de novo ou insira o PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Tente de novo ou digite a senha"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Tente de novo ou desenhe o padrão"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"O PIN é obrigatório depois de muitas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"A senha é obrigatória depois de muitas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"O padrão é obrigatório depois de muitas tentativas"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloq. c/ PIN ou digital"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Dsblq. c/ senha ou digital"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloq. c/ padrão/digital"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Bloqueado por segurança pela política de trabalho"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é obrigatório após o Bloqueio total"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A senha é obrigatória após o Bloqueio total"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é obrigatório após o Bloqueio total"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização será feita no período de inatividade"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurança necessária. PIN não usado há um tempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurança necessária. Senha não usada há um tempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurança necessária. Padrão não usado há um tempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Segurança necessária. Disp. não desbloq. faz tempo."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"O desbloqueio com o rosto falhou. Muitas tentativas."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Desbloq. c/ impr. digital falhou. Muitas tentativas."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"O agente de confiança não está disponível"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Muitas tentativas com o PIN incorreto"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Muitas tentativas com o padrão incorreto"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Muitas tentativas com a senha incorreta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Tente novamente em # segundo.}one{Tente novamente em # segundo.}many{Tente novamente em # segundos.}other{Tente novamente em # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Informe o PIN do chip."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Informe o PIN do chip para \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Falha na operação de PUK do chip."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Alterar o método de entrada"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo avião"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"O padrão é necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"O PIN é necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"A senha é necessária após reiniciar o dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para ter mais segurança, use o padrão"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para ter mais segurança, use o PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para ter mais segurança, use a senha"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
index 77db3f7..ae0c284 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
@@ -21,14 +21,11 @@
<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">"Introduza o PIN."</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Introduza o PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduza o padrão."</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desenhe o padrão"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introduza a palavra-passe."</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Introduza a palavra-passe"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Carregada"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • A carregar sem fios"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Não é possível desativar o eSIM devido a um erro."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Tecla Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Padrão incorreto."</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Padrão errado. Repita."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Palavra-passe incorreta."</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Pal.-passe errada. Repita."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorreto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN errado. Tente de novo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ou desbloqueie com a impressão digital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Impr. dig. não reconhecida"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Rosto não reconhecido"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Tente novamente ou introduza o PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Tente novamente ou introduza a palavra-passe"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Tente novamente ou desenhe o padrão"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN necessário após demasiadas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Palavra-passe necessária após demasiadas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Padrão necessário após demasiadas tentativas"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbl. com PIN ou imp. digital"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbl. c/ palavra-passe/impr. dig."</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbl. c/ padrão/impressão digital"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Dispositivo bloqueado pela Política de Trabalho"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é necessário após o bloqueio"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A palavra-passe é necessária após o bloqueio"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é necessário após o bloqueio"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização vai ser instalada nas horas inativas"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mais segurança necessária. PIN não usado há muito."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mais segurança necessária. Não usada há muito."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"+ segurança necessária. Padrão não usado há muito."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Mais segurança necessária. Não desbloqueia há muito."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Imposs. desbloquear c/ rosto. Demasiadas tentativas."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Imposs. desbl. c/ impr. digital. Muitas tentativas."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"O agente fidedigno está indisponível"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Demasiadas tentativas com um PIN incorreto"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Demasiadas tentativas com um padrão incorreto"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Demasiadas tentativas com palavra-passe incorreta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Tente novamente dentro de # segundo.}many{Tente novamente dentro de # segundos.}other{Tente novamente dentro de # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Introduza o PIN do cartão SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Introduza o PIN do cartão SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Falha ao introduzir o PUK do cartão SIM!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Alternar o método de introdução"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo de avião"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Padrão necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Palavra-passe necessária após reiniciar dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para uma segurança adicional, use antes o padrão"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para uma segurança adicional, use antes o PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para uma segurança adicional, use antes a palavra-passe"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml
index a958741..15b3fc0 100644
--- a/packages/SystemUI/res-keyguard/values-pt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml
@@ -21,14 +21,11 @@
<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">"Digite seu PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Insira o PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Digite seu padrão"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desenhe o padrão"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Digite sua senha"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Digite a senha"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Cartão inválido."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Carregado"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Carregando sem fio"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Não é possível desativar o eSIM devido a um erro."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Inserir"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Padrão incorreto"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Padrão errado."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Senha incorreta"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Senha errada."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN incorreto"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN errado. Tente de novo."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ou desbloqueie com a impressão digital"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Impr. dig. não reconhecida"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Rosto não reconhecido"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Tente de novo ou insira o PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Tente de novo ou digite a senha"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Tente de novo ou desenhe o padrão"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"O PIN é obrigatório depois de muitas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"A senha é obrigatória depois de muitas tentativas"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"O padrão é obrigatório depois de muitas tentativas"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloq. c/ PIN ou digital"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Dsblq. c/ senha ou digital"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloq. c/ padrão/digital"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Bloqueado por segurança pela política de trabalho"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é obrigatório após o Bloqueio total"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A senha é obrigatória após o Bloqueio total"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é obrigatório após o Bloqueio total"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização será feita no período de inatividade"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurança necessária. PIN não usado há um tempo."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurança necessária. Senha não usada há um tempo."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurança necessária. Padrão não usado há um tempo."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Segurança necessária. Disp. não desbloq. faz tempo."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"O desbloqueio com o rosto falhou. Muitas tentativas."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Desbloq. c/ impr. digital falhou. Muitas tentativas."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"O agente de confiança não está disponível"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Muitas tentativas com o PIN incorreto"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Muitas tentativas com o padrão incorreto"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Muitas tentativas com a senha incorreta"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Tente novamente em # segundo.}one{Tente novamente em # segundo.}many{Tente novamente em # segundos.}other{Tente novamente em # segundos.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Informe o PIN do chip."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Informe o PIN do chip para \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Falha na operação de PUK do chip."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Alterar o método de entrada"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modo avião"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"O padrão é necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"O PIN é necessário após reiniciar o dispositivo"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"A senha é necessária após reiniciar o dispositivo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para ter mais segurança, use o padrão"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para ter mais segurança, use o PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para ter mais segurança, use a senha"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml
index 683901f..9f568cc 100644
--- a/packages/SystemUI/res-keyguard/values-ro/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml
@@ -21,14 +21,11 @@
<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">"Introdu codul PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Introdu codul PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introdu modelul"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desenează modelul"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introdu parola"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"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>
@@ -58,68 +55,38 @@
<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">"Introdu"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Model greșit"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Model greșit. Reîncearcă."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Parolă greșită"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Parolă greșită. Reîncearcă"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Cod PIN greșit"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN greșit. Reîncearcă."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Sau deblochează folosind amprenta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Amprentă nerecunoscută"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Fața nu a fost recunoscută"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Încearcă din nou sau introdu codul PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Încearcă din nou sau introdu parola"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Încearcă din nou sau desenează modelul"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Codul PIN este solicitat după prea multe încercări"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Parola este solicitată după prea multe încercări"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Modelul este solicitat după prea multe încercări"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Deblochează cu PIN-ul sau amprenta"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Deblochează cu parola sau amprenta"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Deblochează cu modelul sau amprenta"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Pentru securitate, dispozitivul a fost blocat conform politicii privind activitatea"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Codul PIN este solicitat după blocarea strictă"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Parola este solicitată după blocarea strictă"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Modelul este solicitat după blocarea strictă"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Actualizarea se va instala în perioada de inactivitate"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mai multă securitate necesară. PIN-ul nu a fost folosit de ceva timp."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mai multă securitate necesară. Parola nu a fost folosită de ceva timp."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Mai multă securitate necesară. Modelul nu a fost folosit de ceva timp."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Mai multă securitate necesară. Dispozitivul nu a fost deblocat de ceva timp."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nu se poate debloca folosind fața. Prea multe încercări."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nu se poate debloca folosind amprenta. Prea multe încercări."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agentul de încredere nu este disponibil"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Prea multe încercări cu un cod PIN incorect"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Prea multe încercări cu un model incorect"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Prea multe încercări cu o parolă incorectă"</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>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Deblocarea cu ajutorul codului PUK pentru cardul SIM nu a reușit!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Schimbă metoda de introducere"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Mod Avion"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Modelul e solicitat după repornirea dispozitivului"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN-ul e solicitat după repornirea dispozitivului"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Parola e solicitată după repornirea dispozitivului"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Pentru mai multă securitate, folosește modelul"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Pentru mai multă securitate, folosește codul PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Pentru mai multă securitate, folosește parola"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml
index 01499c8..bae5255 100644
--- a/packages/SystemUI/res-keyguard/values-ru/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml
@@ -21,14 +21,11 @@
<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">"Введите PIN-код"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Введите PIN-код"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Введите графический ключ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Введите графический ключ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Введите пароль"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Введите пароль"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ошибка SIM-карты."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Батарея заряжена"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Беспроводная зарядка"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Не удалось отключить eSIM."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Клавиша ввода"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Неверный графический ключ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Неверный графический ключ."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Неверный пароль"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Неверный пароль."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Неверный PIN-код"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Неверный PIN-код."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Повторите попытку или используйте отпечаток пальца."</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Отпечаток не распознан."</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Лицо не распознано."</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Повторите попытку или введите PIN-код."</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Повторите попытку или введите пароль."</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Повторите попытку или введите графический ключ."</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Слишком много попыток. Необходимо ввести PIN-код."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Слишком много попыток. Необходимо ввести пароль."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Слишком много попыток. Необходимо ввести граф. ключ."</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Используйте PIN-код или отпечаток пальца"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Используйте пароль или отпечаток пальца"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Используйте граф. ключ или отпечаток пальца"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Устройство заблокировано правилами организации."</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"После блокировки необходимо ввести PIN-код."</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"После блокировки необходимо ввести пароль."</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"После блокировки необходимо ввести графический ключ."</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Обновление установится, когда устройство неактивно."</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"PIN-код давно не использовался. Усильте защиту."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Пароль давно не использовался. Усильте защиту."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Граф. ключ давно не использовался. Усильте защиту."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Устройство давно не использовалось. Усильте защиту."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Превышен лимит попыток разблокировки фейсконтролем."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Превышен лимит попыток разблокировки отпечатком."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Агент доверия недоступен."</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Слишком много неудачных попыток ввести PIN-код."</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Слишком много неудачных попыток ввести граф. ключ."</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Слишком много неудачных попыток ввести пароль."</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Повторите попытку через # секунду.}one{Повторите попытку через # секунду.}few{Повторите попытку через # секунды.}many{Повторите попытку через # секунд.}other{Повторите попытку через # секунды.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Введите PIN-код SIM-карты."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Введите PIN-код SIM-карты \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Не удалось разблокировать SIM-карту"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Сменить способ ввода"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Режим полета"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"После перезапуска необходимо ввести графический ключ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"После перезапуска необходимо ввести PIN-код"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"После перезапуска необходимо ввести пароль"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"В целях дополнительной безопасности используйте графический ключ"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"В целях дополнительной безопасности используйте PIN-код"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"В целях дополнительной безопасности используйте пароль"</string>
diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml
index 6cacbf2..4bb8aeb 100644
--- a/packages/SystemUI/res-keyguard/values-si/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-si/strings.xml
@@ -21,14 +21,11 @@
<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">"ඔබේ PIN ඇතුළු කරන්න"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN ඇතුළු කරන්න"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ඔබගේ රටාව ඇතුළු කරන්න"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"රටාව අඳින්න"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ඔබේ මුරපදය ඇතුළු කරන්න"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"මුරපදය ඇතුළු කරන්න"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"වලංගු නොවන කාඩ්පත."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"අරෝපිතයි"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • නොරැහැන්ව ආරෝපණ කෙරේ"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"දෝෂයක් හේතුවෙන් eSIM අබල කළ නොහැකිය."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"ඇතුල් කරන්න"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"වැරදි රටාවකි"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"වැරදි රටාවකි. නැවත උත්සාහ කරන්න."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"වැරදි මුරපදයකි"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"මුරපදය වැරදියි. නැවත උත්සාහ කරන්න."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN එක වැරදියි"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN වැරදියි. නැවත උත්සාහ කරන්න."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"නැතහොත් ඇඟිලි සලකුණ සමග අගුළු හරින්න"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ඇඟිලි සලකුණ හඳුනා නොගැනිණි"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"මුහුණ හඳුනා නොගන්නා ලදි"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"නැවත උත්සාහ කරන්න හෝ PIN ඇතුළු කරන්න"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"නැවත උත්සාහ කරන්න හෝ මුරපදය ඇතුළු කරන්න"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"නැවත උත්සාහ කරන්න හෝ රටාව අඳින්න"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"බොහෝ උත්සාහයන්ට පසුව PIN අවශ්ය වේ"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"බොහෝ උත්සාහයන්ගෙන් පසුව මුරපදය අවශ්ය වේ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"බොහෝ උත්සාහයන්ගෙන් පසුව රටාව අවශ්ය වේ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN හෝ ඇඟිලි සලකුණ සමග අගුළු හරින්න"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"මුරපදය හෝ ඇඟිලි සලකුණ සමග අගුළු හරින්න"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"රටාව හෝ ඇඟිලි සලකුණ සමග අගුළු හරින්න"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"අමතර ආරක්ෂාව සඳහා, වැඩ ප්රතිපත්තියෙන් උපාංගය අගුළු දමා ඇත"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"අගුළු දැමීමෙන් පසු PIN අවශ්ය වේ"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"අගුළු දැමීමෙන් පසු මුරපදය අවශ්ය වේ"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"අගුළු දැමීමෙන් පසු රටාව අවශ්ය වේ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"යාවත්කාලීනය අක්රිය පැය තුළ ස්ථාපනය වනු ඇත"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"අමතර ආරක්ෂාවක් අවශ්යයි. PIN ටික කලකට භාවිතා කර නැත."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"අමතර ආරක්ෂාවක් අවශ්යයි. මුරපදය ටික කලකට භාවිතා කර නැත."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"අමතර ආරක්ෂාවක් අවශ්යයි. රටාව ටික කලකට භාවිතා කර නැත."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"අමතර ආරක්ෂාවක් අවශ්යයි. උපාංගය ටික කලකට අගුළු හරිනු ලැබුවේ නැත."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"මුහුණ සමග අගුළු හැරිය නොහැක. උත්සාහ ගණන ඉතා වැඩියි."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ඇඟිලි සලකුණ සමග අගුළු හැරිය නොහැක. උත්සාහ ගණන ඉතා වැඩියි."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"විශ්වාස නියෝජිතයා නොමැත"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"වැරදි PIN එකක් සමග බොහෝ උත්සාහයන් ගණනකි"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"වැරදි රටාවක් සමග බොහෝ උත්සාහයන් ගණනකි"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"වැරදි මුරපදයක් සමග බොහෝ උත්සාහයන් ගණනකි"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{තත්පර #කින් නැවත උත්සාහ කරන්න.}one{තත්පර #කින් නැවත උත්සාහ කරන්න.}other{තත්පර #කින් නැවත උත්සාහ කරන්න.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN ඇතුළු කරන්න"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" සඳහා SIM PIN ඇතුළු කරන්න"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK මෙහෙයුම අසාර්ථක විය!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ආදාන ක්රමය මාරු කිරීම"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ගුවන් යානා ප්රකාරය"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"උපාංගය යළි ඇරඹීමෙන් පසු රටාව අවශ්ය වේ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"උපාංගය යළි ඇරඹීමෙන් පසු PIN අවශ්ය වේ"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"උපාංගය යළි ඇරඹීමෙන් පසු මුරපදය අවශ්ය වේ"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට රටාව භාවිතා කරන්න"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට PIN භාවිතා කරන්න"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"අතිරේක ආරක්ෂාව සඳහා, ඒ වෙනුවට මුරපදය භාවිතා කරන්න"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml
index f2f92cb..b12c9d3 100644
--- a/packages/SystemUI/res-keyguard/values-sk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml
@@ -21,14 +21,11 @@
<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">"Zadajte PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Zadajte PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Zadajte vzor"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nakreslite vzor"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Zadajte heslo"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Zadajte heslo"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Neplatná karta."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Nabité"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Nabíja sa bezdrôtovo"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM karta sa nedá deaktivovať, pretože sa vyskytla chyba."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Nesprávny vzor"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Nesprávny vzor. Zopakujte."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Nesprávne heslo"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Chybné heslo. Zopakujte."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Nesprávny kód PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Nesprávny kód PIN. Zopakujte."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Alebo odomknite odtlačkom prsta"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Nerozpoz. odtlačok prsta"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Tvár nebola rozpoznaná"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Skúste to znova alebo zadajte PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Skúste to znova alebo zadajte heslo"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Skúste to znova alebo nakreslite vzor"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Príliš veľký počet pokusov. Vyžaduje sa PIN."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Príliš veľký počet pokusov. Vyžaduje sa heslo."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Príliš veľký počet pokusov. Vyžaduje sa vzor."</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Odomknúť kódom PIN/odtlačkom"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Odomknúť heslom/odtlačkom"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Odomknúť vzorom/odtlačkom"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Zar. bolo uzamk. prac. pravid. na zvýš. zabezpečenia"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po silnej zámke sa vyžaduje PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po silnej zámke sa vyžaduje heslo"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po silnej zámke sa vyžaduje vzor"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizácia sa nainštaluje počas nečinnosti"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Treba lepšie zabezp. Kód PIN nebol dlhšie použitý."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Treba lepšie zabezp. Heslo nebolo dlhšie použité."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Treba lepšie zabezp. Vzor nebol dlhšie použitý."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Treba lepšie zabezpeč. Zar. nebolo dlhšie odomknuté."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nedá sa odomknúť tvárou. Priveľa pokusov."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nedá sa odomknúť odtlačkom prsta. Priveľa pokusov."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agent dôvery nie je k dispozícii"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Priveľa pokusov s nesprávnym kódom PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Priveľa pokusov s nesprávnym vzorom"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Priveľa pokusov s nesprávnym heslom"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Skúste to znova o # sekundu.}few{Skúste to znova o # sekundy.}many{Skúste to znova o # sekundy.}other{Skúste to znova o # sekúnd.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Zadajte PIN pre SIM kartu"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Zadajte kód PIN pre SIM kartu operátora <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operácia kódu PUK SIM karty zlyhala!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Prepnúť metódu vstupu"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Režim v lietadle"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Po reštarte zariadenia sa vyžaduje vzor"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Po reštarte zariadenia sa vyžaduje kód PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Po reštarte zariadenia sa vyžaduje heslo"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"V rámci zvýšenia zabezpečenia použite radšej vzor"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"V rámci zvýšenia zabezpečenia použite radšej PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"V rámci zvýšenia zabezpečenia použite radšej heslo"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml
index 8b14411..3f29688 100644
--- a/packages/SystemUI/res-keyguard/values-sl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml
@@ -21,14 +21,11 @@
<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">"Vnesite kodo PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Vnesite kodo PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Vnesite vzorec"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Narišite vzorec"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Vnesite geslo"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Vnesite geslo"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Neveljavna kartica"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Baterija napolnjena"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • brezžično polnjenje"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Digitalne kartice e-SIM zaradi napake ni mogoče onemogočiti."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Tipka Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Napačen vzorec"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Napačen vzorec. Poskusite znova."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Napačno geslo"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Napačno geslo. Poskusite znova."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Napačna koda PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Napačna koda PIN. Poskusite znova."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ali odklenite s prstnim odtisom"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Prstni odtis ni prepoznan"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Obraz ni prepoznan"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Poskusite znova ali vnesite kodo PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Poskusite znova ali vnesite geslo"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Poskusite znova ali narišite vzorec"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Po preveč poskusih se zahteva vnos kode PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Po preveč poskusih se zahteva vnos gesla"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Po preveč poskusih se zahteva vnos vzorca"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Odklenite s kodo PIN ali prstnim odtisom"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Odklenite z geslom ali prstnim odtisom"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Odklenite z vzorcem ali prstnim odtisom"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Za dodatno varnost je bila naprava zaklenjena s službenim pravilnikom"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po zaklepu se zahteva vnos kode PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po zaklepu se zahteva vnos gesla"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po zaklepu se zahteva vnos vzorca"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Posodobitev bo nameščena v času nedejavnosti"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Zahtevana je dodatna varnost. Koda PIN nekaj časa ni bila uporabljena."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Zahtevana je dodatna varnost. Geslo nekaj časa ni bilo uporabljeno."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Zahtevana je dodatna varnost. Vzorec nekaj časa ni bil uporabljen."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Zahtevana je dodatna varnost. Naprava nekaj časa ni bila odklenjena."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Ni mogoče odkleniti z obrazom. Preveč poskusov."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Ni mogoče odkleniti s prstnim odtisom. Preveč poskusov."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Posrednik zaupanja ni na voljo"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Preveč poskusov z nepravilno kodo PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Preveč poskusov z nepravilnim vzorcem"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Preveč poskusov z nepravilnim geslom"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Poskusite znova čez # sekundo.}one{Poskusite znova čez # sekundo.}two{Poskusite znova čez # sekundi.}few{Poskusite znova čez # sekunde.}other{Poskusite znova čez # sekund.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Vnesite kodo PIN kartice SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Vnesite kodo PIN kartice SIM operaterja »<xliff:g id="CARRIER">%1$s</xliff:g>«."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Postopek za odklepanje s kodo PUK kartice SIM ni uspel."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Preklop načina vnosa"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Način za letalo"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Po vnovičnem zagonu naprave se zahteva vnos vzorca"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Po vnovičnem zagonu naprave se zahteva vnos kode PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Po vnovičnem zagonu naprave se zahteva vnos gesla"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Za dodatno varnost raje uporabite vzorec."</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Za dodatno varnost raje uporabite kodo PIN."</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Za dodatno varnost raje uporabite geslo."</string>
diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml
index 646d660..149207c 100644
--- a/packages/SystemUI/res-keyguard/values-sq/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml
@@ -21,14 +21,11 @@
<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">"Fut kodin PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Fut PIN-in"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Fut motivin"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Vizato motivin"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Fut fjalëkalimin"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Fut fjalëkalimin"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Karta e pavlefshme."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"I karikuar"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Po karikohet me valë"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Karta eSIM nuk mund të çaktivizohet për shkak të një gabimi."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Dërgo"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Motiv i gabuar"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Motiv i gabuar. Provo përsëri."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Fjalëkalim i gabuar"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Fjalëkalim i gabuar. Provo përsëri."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Kod PIN i gabuar"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Kod PIN i gabuar. Provo përsëri."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ose shkyçe me gjurmën e gishtit"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Gjurma e gishtit nuk njihet"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Fytyra nuk njihet"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Provo përsëri ose fut kodin PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Provo përsëri ose fut fjalëkalimin"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Provo përsëri ose vizato motivin"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Pas shumë përpjekjeve kërkohet kodi PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Pas shumë përpjekjeve kërkohet fjalëkalimi"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Pas shumë përpjekjeve kërkohet motivi"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Shkyçe me kodin PIN ose me gjurmën e gishtit"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Shkyçe me fjalëkalimin ose gjurmën e gishtit"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Shkyçe me motivin ose gjurmën e gishtit"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Për më shumë siguri, pajisja është kyçur nga politika e punës"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pas bllokimit kërkohet kodi PIN"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pas bllokimit kërkohet fjalëkalimi"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pas bllokimit kërkohet motivi"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Përditësimi do të instalohet gjatë kohës joaktive"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Kërkohet një siguri më e lartë. Kodi PIN nuk është përdorur për njëfarë kohe."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Kërkohet një siguri më e lartë. Fjalëkalimi nuk është përdorur për njëfarë kohe."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Kërkohet një siguri më e lartë. Motivi nuk është përdorur për njëfarë kohe."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Kërkohet një siguri më e lartë. Pajisja nuk është shkyçur për njëfarë kohe."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Nuk mund të shkyçet me fytyrën. Shumë përpjekje."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Nuk mund të shkyçet me gjurmën e gishtit. Shumë përpjekje."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Agjenti i besimit nuk ofrohet"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Shumë përpjekje me kod PIN të pasaktë"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Shumë përpjekje me motiv të pasaktë"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Shumë përpjekje me fjalëkalim të pasaktë"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Provo sërish pas # sekonde.}other{Provo sërish pas # sekondash.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Fut kodin PIN të kartës SIM"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Fut kodin PIN të kartës SIM për \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Operacioni i kodit PUK të kartës SIM dështoi!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Ndërro metodën e hyrjes"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Modaliteti i aeroplanit"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Pas rinisjes së pajisjes kërkohet motivi"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pas rinisjes së pajisjes kërkohet kodi PIN"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Pas rinisjes së pajisjes kërkohet fjalëkalimi"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Për më shumë siguri, përdor motivin më mirë"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Për më shumë siguri, përdor kodin PIN më mirë"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Për më shumë siguri, përdor fjalëkalimin më mirë"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml
index 1fcd4c3..bded34a 100644
--- a/packages/SystemUI/res-keyguard/values-sr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml
@@ -21,14 +21,11 @@
<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">"Унесите PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Унесите PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Унесите шаблон"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Нацртајте шаблон"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Унесите лозинку"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Унесите лозинку"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Неважећа картица."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Напуњена је"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Бежично пуњење"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"eSIM не може да се онемогући због грешке."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Погрешан шаблон"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Погрешан шаблон. Пробајте поново."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Погрешна лозинка"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Погрешна лозинка. Пробајте поново."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Погрешан PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Погрешан PIN. Пробајте поново."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Или откључајте отиском прста"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Отисак прста непрепознат"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Лице није препознато"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Пробајте поново или унесите PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Пробајте поново или унесите лозинку"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Пробајте поново или нацртајте шаблон"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN је обавезан после превише покушаја"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Лозинка је обавезна после превише покушаја"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Шаблон је обавезан после превише покушаја"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Откључајте PIN-ом или отиском прста"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Откључајте лозинком или отиском прста"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Откључајте шаблоном или отиском прста"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Ради безбедности смернице за посао су закључ. уређај"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN је обавезан после закључавања"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Лозинка је обавезна после закључавања"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Шаблон је обавезан после закључавања"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ажурирање се инсталира током неактивности"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потребна је додатна заштита. PIN дуго није коришћен."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потребна је додатна заштита. Лозинка дуго није коришћена."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потребна је додатна заштита. Шаблон дуго није коришћен."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Потребна је додатна заштита. Уређај дуго није откључан."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Откључавање лицем није успело. Превише покушаја."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Откључавање отиском није успело. Превише покушаја."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Поуздани агент је недоступан"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Превише покушаја са нетачним PIN-ом"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Превише покушаја са нетачним шаблоном"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Превише покушаја са нетачном лозинком"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Пробајте поново за # секунду.}one{Пробајте поново за # секунду.}few{Пробајте поново за # секунде.}other{Пробајте поново за # секунди.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Унесите PIN за SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Унесите PIN за SIM „<xliff:g id="CARRIER">%1$s</xliff:g>“."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Радња са PUK кодом за SIM није успела!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Промени метод уноса"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Режим рада у авиону"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Шаблон је обавезан после рестарта уређаја"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN је обавезан после рестарта уређаја"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Лозинка је обавезна после рестарта уређаја"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"За додатну безбедност користите шаблон"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"За додатну безбедност користите PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"За додатну безбедност користите лозинку"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml
index 69553d9..c11e0f1 100644
--- a/packages/SystemUI/res-keyguard/values-sv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml
@@ -21,14 +21,11 @@
<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">"Ange pinkoden"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ange PIN-kod"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Ange mönstret"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Rita mönster"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Ange ditt lösenord"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Ange lösenord"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ogiltigt kort."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Laddat"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Laddas trådlöst"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Det gick inte att inaktivera eSIM-kortet på grund av ett fel."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Retur"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Fel mönster"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Fel mönster Försök igen."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Fel lösenord"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Fel lösenord. Försök igen."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Fel pinkod"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Fel pinkod. Försök igen."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Eller lås upp med fingeravtryck"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingeravtrycket känns inte igen"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Ansiktet känns inte igen"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Försök igen eller ange pinkoden"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Försök igen eller ange lösenordet"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Försök igen eller rita mönstret"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Pinkoden krävs efter för många försök"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Lösenordet krävs efter för många försök"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Mönstret krävs efter för många försök"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Lås upp med pinkod eller fingeravtryck"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Lås upp med lösenord eller fingeravtryck"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Lås upp med mönster eller fingeravtryck"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"För ökad säkerhet låstes enheten av jobbprincipen"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pinkod krävs efter låsning"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lösenord krävs efter låsning"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mönster krävs efter låsning"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Uppdateringen installeras under inaktiva timmar"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Ökad säkerhet krävs. Pinkoden har inte använts på länge."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Ökad säkerhet krävs. Lösenordet har inte använts på länge."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Ökad säkerhet krävs. Mönstret har inte använts på länge."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Ökad säkerhet krävs. Enheten var inte olåst ett tag."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Ansiktet kunde inte låsa upp. För många försök."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Fingeravtrycket kunde inte låsa upp. För många försök."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Betrodd agent är inte tillgänglig"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"För många försök med fel pinkod"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"För många försök med fel mönster"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"För många försök med fel lösenord"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Försök igen om # sekund.}other{Försök igen om # sekunder.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Ange pinkod för SIM-kortet."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Ange pinkod för SIM-kortet för <xliff:g id="CARRIER">%1$s</xliff:g>."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Det gick inte att låsa upp med PUK-koden för SIM-kortet."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Byt inmatningsmetod"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Flygplansläge"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Mönstret krävs efter att enheten omstartas"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pinkoden krävs efter att enheten omstartas"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Lösenordet krävs efter att enheten omstartas"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"För ytterligare säkerhet använder du mönstret i stället"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"För ytterligare säkerhet använder du pinkoden i stället"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"För ytterligare säkerhet använder du lösenordet i stället"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml
index be383eb..943c76b 100644
--- a/packages/SystemUI/res-keyguard/values-sw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml
@@ -21,14 +21,11 @@
<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">"Weka PIN yako"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Weka PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Weka mchoro wako"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Chora mchoro"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Weka nenosiri lako"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Weka nenosiri"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Kadi si Sahihi."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Betri imejaa"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Inachaji bila kutumia waya"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Hitilafu imetokea wakati wa kuzima eSIM."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Weka"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Mchoro si sahihi"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Mchoro si sahihi. Jaribu tena."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Nenosiri si sahihi"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Nenosiri si sahihi. Jaribu tena."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Nambari ya PIN si sahihi"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN si sahihi. Jaribu tena."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Au fungua kwa alama ya kidole"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Alama ya kidole haijatambuliwa"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Sura haikutambulika"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Jaribu tena au uweke PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Jaribu tena au uweke nenosiri"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Jaribu tena au uchore mchoro"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"PIN inahitajika baada ya majaribio mengi mno"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Nenosiri linahitajika baada ya majaribio mengi mno"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Mchoro unahitajika baada ya majaribio mengi mno"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Fungua kwa PIN au alama ya kidole"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Fungua kwa nenosiri au alama ya kidole"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Fungua kwa mchoro au alama ya kidole"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Kwa usalama zaidi, kifaa kilifungwa kwa sera ya kazi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN inahitajika baada ya kufunga"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Nenosiri linahitajika baada ya kufunga"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mchoro unahitajika baada ya kufunga"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Sasisho litasakinishwa wakati kifaa hakitumiki"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Usalama wa ziada unahitajika. PIN haikutumika kwa muda."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Usalama wa ziada unahitajika. Nenosiri halikutumika kwa muda."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Usalama wa ziada unahitajika. Mchoro haukutumika kwa muda."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Usalama wa ziada unahitajika. Kifaa hakikufunguliwa kwa muda."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Huwezi kufungua kwa uso. Umejaribu mara nyingi mno."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Huwezi kufungua kwa alama ya kidole. Umejaribu mara nyingi mno."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Kipengele cha kutathmini hali ya kuaminika hakipatikani"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Umejaribu mara nyingi mno kwa PIN isiyo sahihi"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Umejaribu mara nyingi mno kwa mchoro usio sahihi"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Umejaribu mara nyingi mno kwa nenosiri lisilo sahihi"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Jaribu tena baada ya sekunde #.}other{Jaribu tena baada ya sekunde #.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Weka PIN ya SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Weka PIN ya SIM ya \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Utendakazi wa PUK ya SIM haujafanikiwa!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Kubadili mbinu ya kuingiza data"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Hali ya ndegeni"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Mchoro unahitajika kifaa kikizimwa kisha kiwashwe"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"PIN inahitajika kifaa kikizimwa kisha kiwashwe"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Nenosiri linahitajika kifaa kikizimwa kisha kiwashwe"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Kwa usalama wa ziada, tumia mchoro badala yake"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Kwa usalama wa ziada, tumia PIN badala yake"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Kwa usalama wa ziada, tumia nenosiri badala yake"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml
index db8b8f8..3e64755 100644
--- a/packages/SystemUI/res-keyguard/values-ta/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml
@@ -21,14 +21,11 @@
<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">"பின்னை உள்ளிடுக"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"பின்னை உள்ளிடவும்"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"பேட்டர்னை உள்ளிடுக"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"பேட்டர்னை வரையவும்"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"கடவுச்சொல்லை உள்ளிடுக"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"செல்லாத சிம் கார்டு."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"சார்ஜ் செய்யப்பட்டது"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • வயர்லெஸ் முறையில் சார்ஜாகிறது"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"பிழை ஏற்பட்டதால் eSIMஐ முடக்க முடியவில்லை."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"என்டர் பட்டன்"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"தவறான பேட்டர்ன்"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"தவறு. மீண்டும் முயலவும்."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"தவறான கடவுச்சொல்"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"தவறு. மீண்டும் முயலவும்."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"தவறான பின்"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"தவறு. மீண்டும் முயலவும்."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"இல்லையெனில் கைரேகை மூலம் அன்லாக் செய்யவும்"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"கைரேகை அடையாளம் இல்லை"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"முகம் கண்டறிய முடியவில்லை"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"மீண்டும் முயலவும் அல்லது பின்னை உள்ளிடவும்"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"மீண்டும் முயலவும் அல்லது கடவுச்சொல்லை உள்ளிடவும்"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"மீண்டும் முயலவும் அல்லது பேட்டர்னை வரையவும்"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"பலமுறை முயன்றதால் பின் தேவை"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"பலமுறை முயன்றதால் கடவுச்சொல் தேவை"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"பலமுறை முயன்றதால் பேட்டர்ன் தேவை"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"பின்/கைரேகையை முயலவும்"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"கடவுச்சொல்/கைரேகை முயலவும்"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"பேட்டர்ன்/கைரேகை முயலவும்"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"பாதுகாப்பிற்காக, பணிக்கொள்கை மூலம் இது பூட்டப்பட்டது"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"முழுப் பூட்டு காரணமாகப் பின் தேவை"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"முழுப் பூட்டு காரணமாகக் கடவுச்சொல் தேவை"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"முழுப் பூட்டு காரணமாகப் பேட்டர்ன் தேவை"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"செயல்பாடில்லாத நேரத்தில் புதுப்பிப்பு நிறுவப்படும்"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"சேர்த்த பாதுகாப்பு தேவை. பின் உபயோகிக்கவில்லை."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"சேர்த்த பாதுகாப்பு தேவை. கடவுச்சொல் உபயோகிக்கவில்லை."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"சேர்த்த பாதுகாப்பு தேவை. பேட்டர்ன் உபயோகிக்கவில்லை."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"சேர்த்த பாதுகாப்பு தேவை. சாதனம் அன்லாக்கில் இல்லை."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"முக அன்லாக் முடியாது. பலமுறை முயன்றுவிட்டீர்கள்."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"கைரேகை அன்லாக் முடியாது. பலமுறை முயன்றுவிட்டீர்கள்."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"நம்பகமான ஏஜெண்ட் கிடைக்கவில்லை"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"தவறான பின் மூலம் பலமுறை முயன்றுவிட்டீர்கள்"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"தவறான பேட்டர்ன் மூலம் பலமுறை முயன்றுவிட்டீர்கள்"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"தவறான கடவுச்சொல் மூலம் பலமுறை முயன்றுவிட்டீர்கள்"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# வினாடியில் மீண்டும் முயலவும்.}other{# வினாடிகளில் மீண்டும் முயலவும்.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"சிம் பின்னை உள்ளிடவும்."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\"க்கான சிம் பின்னை உள்ளிடவும்."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"சிம் PUK செயல்பாடு தோல்வியடைந்தது!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"உள்ளீட்டு முறையை மாற்றும்"</string>
<string name="airplane_mode" msgid="2528005343938497866">"விமானப் பயன்முறை"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"சாதனம் மீண்டும் தொடங்கியதால் பேட்டர்ன் தேவை"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"சாதனம் மீண்டும் தொடங்கியதால் பின் தேவை"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"சாதனம் மீண்டும் தொடங்கியதால் கடவுச்சொல் தேவை"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"கூடுதல் பாதுகாப்பிற்குப் பேட்டர்னைப் பயன்படுத்தவும்"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"கூடுதல் பாதுகாப்பிற்குப் பின்னை (PIN) பயன்படுத்தவும்"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"கூடுதல் பாதுகாப்பிற்குக் கடவுச்சொல்லைப் பயன்படுத்தவும்"</string>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 798a89a..f1bcf9c 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -21,14 +21,11 @@
<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">"మీ పిన్ని నమోదు చేయండి"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PINను ఎంటర్ చేయండి"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"మీ నమూనాను నమోదు చేయండి"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ఆకృతిని గీయండి"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"మీ పాస్వర్డ్ను ఎంటర్ చేయండి"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"పాస్వర్డ్ను ఎంటర్ చేయండి"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"చెల్లని కార్డ్."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ఛార్జ్ చేయబడింది"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • వైర్ లేకుండా ఛార్జ్ అవుతోంది"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ఎర్రర్ కారణంగా eSIMని నిలపడం సాధ్యపడదు."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"నమూనా తప్పు"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ఆకృతి తప్పు. మళ్లీ గీయండి."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"పాస్వర్డ్ తప్పు"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"పాస్వర్డ్ తప్పు. రీట్రై."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"పిన్ తప్పు"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN తప్పు. రీట్రై చేయండి."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"లేదా వేలిముద్రతో అన్లాక్ చేయండి"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"వేలిముద్ర గుర్తించబడలేదు"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ముఖం గుర్తించబడలేదు"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"మళ్లీ ట్రై చేయండి లేదా PINని ఎంటర్ చేయండి"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"మళ్లీ ట్రై చేయండి లేదా పాస్వర్డ్ను ఎంటర్ చేయండి"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"మళ్లీ ట్రై చేయండి లేదా ఆకృతిని గీయండి"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"చాలా సార్లు ట్రై చేసిన తర్వాత PIN అవసరం అవుతుంది"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"చాలా సార్లు ట్రై చేసిన తర్వాత పాస్వర్డ్ అవసరం"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"చాలా సార్లు ట్రై చేసిన తర్వాత ఆకృతి అవసరం అవుతుంది"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN/వేలిముద్రతో తెరవండి"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"పాస్వర్డ్/వేలిముద్రతో తెరవండి"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ఆకృతి/వేలిముద్రతో తెరవండి"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"మరింత సెక్యూరిటీకై, వర్క్ పాలసీతో డివైజ్ లాక్ చేశారు"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"లాక్డౌన్ తర్వాత PIN అవసరం"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"లాక్డౌన్ తర్వాత పాస్వర్డ్ అవసరం"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"లాక్డౌన్ తర్వాత ఆకృతి అవసరం"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ఇన్యాక్టివ్ వేళల్లో అప్డేట్ ఇన్స్టాల్ చేయబడుతుంది"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"మరింత సెక్యూరిటీ యాడ్ చెయ్యాలి. PINని ఈమధ్య వాడలేదు."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"యాడెడ్ సెక్యూరిటీ కావాలి. పాస్వర్డ్ ఈ మధ్య వాడలేదు."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"మరింత సెక్యూరిటీ కావాలి. ఆకృతిని ఈ మధ్య వాడలేదు."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"మరింత సెక్యూరిటీ కావాలి. పరికరాన్ని ఈమధ్య తెరవలేదు."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ఫేస్తో అన్లాక్ అవ్వదు. ఎక్కువ సార్లు ట్రై చేశారు."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"వేలిముద్రతో అన్లాకవదు. మరీ ఎక్కువ ట్రైలు చేశారు."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"విశ్వసనీయ ఏజెంట్ అందుబాటులో లేదు"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"తప్పు PINతో చాలా ఎక్కువ సార్లు ట్రై చేయడం జరిగింది"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"తప్పు ఆకృతితో చాలా ఎక్కువ సార్లు ట్రై చేయడం జరిగింది"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"తప్పు పాస్వర్డ్తో చాలా ఎక్కువ సార్లు ట్రై చేశారు"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# సెకనులో మళ్లీ ట్రై చేయండి.}other{# సెకన్లలో మళ్లీ ట్రై చేయండి.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM పిన్ని నమోదు చేయండి."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" కోసం SIM పిన్ని నమోదు చేయండి."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK చర్య విఫలమైంది!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ఇన్పుట్ పద్ధతిని మార్చు"</string>
<string name="airplane_mode" msgid="2528005343938497866">"విమానం మోడ్"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"పరికరాన్ని రీస్టార్ట్ చేశాక ఆకృతి అవసరం"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"పరికరాన్ని రీస్టార్ట్ చేశాక PIN అవసరం"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"పరికరాన్ని రీస్టార్ట్ చేశాక పాస్వర్డ్ అవసరం"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"అదనపు సెక్యూరిటీ కోసం, బదులుగా ఆకృతిని ఉపయోగించండి"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"అదనపు సెక్యూరిటీ కోసం, బదులుగా PINను ఉపయోగించండి"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"అదనపు సెక్యూరిటీ కోసం, బదులుగా పాస్వర్డ్ను ఉపయోగించండి"</string>
diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml
index dc16bb6..e8c7ef9 100644
--- a/packages/SystemUI/res-keyguard/values-th/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-th/strings.xml
@@ -21,14 +21,11 @@
<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">"ป้อน PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"ป้อน PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ป้อนรูปแบบ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"วาดรูปแบบ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ป้อนรหัสผ่าน"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"ป้อนรหัสผ่าน"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"การ์ดไม่ถูกต้อง"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"ชาร์จแล้ว"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • กำลังชาร์จแบบไร้สาย"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ปิดใช้ eSIM ไม่ได้เนื่องจากมีข้อผิดพลาด"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"รูปแบบไม่ถูกต้อง"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"รูปแบบไม่ถูกต้อง ลองใหม่"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"รหัสผ่านไม่ถูกต้อง"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"รหัสผ่านไม่ถูกต้อง ลองใหม่"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN ไม่ถูกต้อง"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN ไม่ถูกต้อง ลองใหม่"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"หรือปลดล็อกด้วยลายนิ้วมือ"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ไม่รู้จักลายนิ้วมือ"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ไม่รู้จักใบหน้า"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ลองอีกครั้งหรือป้อน PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ลองอีกครั้งหรือป้อนรหัสผ่าน"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ลองอีกครั้งหรือวาดรูปแบบ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ต้องป้อน PIN หลังจากลองหลายครั้งเกินไป"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ต้องป้อนรหัสผ่านหลังจากลองหลายครั้งเกินไป"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ต้องวาดรูปแบบหลังจากลองหลายครั้งเกินไป"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ปลดล็อกด้วย PIN หรือลายนิ้วมือ"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ปลดล็อกด้วยรหัสผ่านหรือลายนิ้วมือ"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ปลดล็อกด้วยรูปแบบหรือลายนิ้วมือ"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"อุปกรณ์ถูกล็อกโดยนโยบายการทำงานเพื่อเพิ่มความปลอดภัย"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ต้องป้อน PIN หลังจากการปิดล็อก"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ต้องป้อนรหัสผ่านหลังจากการปิดล็อก"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ต้องวาดรูปแบบหลังจากการปิดล็อก"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"การอัปเดตจะติดตั้งในระหว่างชั่วโมงที่ไม่ได้ใช้งาน"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้ PIN มาระยะหนึ่ง"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้รหัสผ่านมาระยะหนึ่ง"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้รูปแบบมาระยะหนึ่ง"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"ต้องเพิ่มความปลอดภัย ไม่ได้ปลดล็อกอุปกรณ์มาระยะหนึ่ง"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"ปลดล็อกด้วยใบหน้าไม่ได้ ลองหลายครั้งเกินไป"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"ปลดล็อกด้วยลายนิ้วมือไม่ได้ ลองหลายครั้งเกินไป"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"เอเจนต์ความน่าเชื่อถือไม่พร้อมใช้งาน"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ลองโดยใช้ PIN ที่ไม่ถูกต้องหลายครั้งเกินไป"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ลองโดยใช้รูปแบบที่ไม่ถูกต้องหลายครั้งเกินไป"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ลองโดยใช้รหัสผ่านที่ไม่ถูกต้องหลายครั้งเกินไป"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{ลองอีกครั้งใน # วินาที}other{ลองอีกครั้งใน # วินาที}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ป้อน PIN ของซิม"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"ป้อน PIN ของซิมสำหรับ \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"การปลดล็อกด้วย PUK ของซิมล้มเหลว!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"สลับวิธีการป้อนข้อมูล"</string>
<string name="airplane_mode" msgid="2528005343938497866">"โหมดบนเครื่องบิน"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ต้องวาดรูปแบบหลังจากรีสตาร์ทอุปกรณ์"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ต้องป้อน PIN หลังจากรีสตาร์ทอุปกรณ์"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ต้องป้อนรหัสผ่านหลังจากรีสตาร์ทอุปกรณ์"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"ใช้รูปแบบแทนเพื่อเพิ่มความปลอดภัย"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"ใช้ PIN แทนเพื่อเพิ่มความปลอดภัย"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ใช้รหัสผ่านแทนเพื่อเพิ่มความปลอดภัย"</string>
diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml
index 4df08f5..4d9102c 100644
--- a/packages/SystemUI/res-keyguard/values-tl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml
@@ -21,14 +21,11 @@
<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">"Ilagay ang iyong PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ilagay ang PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Ilagay ang iyong pattern"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Iguhit ang pattern"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Ilagay ang iyong password"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Ilagay ang password"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Di-wasto ang Card."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Tapos nang mag-charge"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Wireless na nagcha-charge"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Hindi ma-disable ang eSIM dahil sa isang error."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Mali ang pattern"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Maling pattern. Subukan ulit."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Mali ang password"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Mali ang password. Subukan ulit."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Mali ang PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Maling PIN. Subukan ulit."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"O i-unlock gamit ang fingerprint"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Hindi nakilala ang fingerprint"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Hindi nakilala ang mukha"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Subukan ulit o ilagay ang PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Subukan ulit o ilagay ang password"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Subukan ulit o iguhit ang pattern"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Kailangan ang PIN pagkasubok nang napakarami"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Kailangan ang password pagkasubok nang napakarami"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Kailangan ang pattern pagkasubok nang napakarami"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"I-unlock gamit ang PIN o fingerprint"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"I-unlock gamit ang password o fingerprint"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"I-unlock gamit ang pattern o fingerprint"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Na-lock ng work policy ang device para sa seguridad"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Kailangan ang PIN pagkatapos ng lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kailangan ang password pagkatapos ng lockdown"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kailangan ang pattern pagkatapos ng lockdown"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Mag-i-install ang update sa mga hindi aktibong oras"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang PIN."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang password."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang pattern."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Kailangan pa ng seguridad. Matagal na hindi naka-unlock ang device."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Hindi ma-face unlock. Napakaraming pagsubok."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Hindi ma-fingerprint unlock. Napakaraming pagsubok."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Hindi available ang trust agent"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Napakaraming pagsubok gamit ang maling PIN"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Napakaraming pagsubok gamit ang maling pattern"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Napakaraming pagsubok gamit ang maling password"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Subukan ulit sa # segundo.}one{Subukan ulit sa # segundo.}other{Subukan ulit sa # na segundo.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Ilagay ang PIN ng SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Ilagay ang PIN ng SIM para sa \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Nabigo ang operasyon ng PUK ng SIM!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Magpalit ng pamamaraan ng pag-input"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Airplane mode"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Kailangan ang pattern pagka-restart ng device"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Kailangan ang PIN pagka-restart ng device"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Kailangan ang password pagka-restart ng device"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Para sa karagdagang seguridad, gumamit na lang ng pattern"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Para sa karagdagang seguridad, gumamit na lang ng PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Para sa karagdagang seguridad, gumamit na lang ng password"</string>
diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml
index 2aca8ad..a2268ef 100644
--- a/packages/SystemUI/res-keyguard/values-tr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN kodunuzu girin"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN girin"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Deseninizi girin"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desen çizin"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Şifrenizi girin"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Şifre girin"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Geçersiz Kart."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Şarj oldu"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Kablosuz olarak şarj ediliyor"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Bir hata nedeniyle eSIM devre dışı bırakılamıyor."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Yanlış desen"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Yanlış desen. Tekrar deneyin."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Yanlış şifre"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Yanlış şifre. Tekrar deneyin."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Yanlış PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Yanlış PIN. Tekrar deneyin."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Ya da parmak iziyle kilidi açın"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Parmak izi tanınmadı"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Yüz tanınmadı"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Tekrar deneyin veya PIN girin"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Tekrar deneyin veya şifre girin"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Tekrar deneyin veya desen çizin"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Çok fazla deneme yaptığınızdan PIN girmeniz gerek"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Çok fazla deneme yaptığınızdan şifre girmeniz gerek"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Çok fazla deneme yaptığınızdan desen çizmeniz gerek"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN veya parmak iziyle kilidi açın"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Şifre veya parmak iziyle kilidi açın"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desen veya parmak iziyle kilidi açın"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Daha fazla güvenlik için cihaz, işletme politikası gereği kilitlendi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Tam kilitlemenin ardından PIN gerekli"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Tam kilitlemenin ardından şifre gerekli"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Tam kilitlemenin ardından desen gerekli"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Güncelleme, etkin olmayan saatlerde yüklenecek"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Daha fazla güvenlik gerekli. PIN bir süredir kullanılmamış."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Daha fazla güvenlik gerekli. Şifre bir süredir kullanılmamış."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Daha fazla güvenlik gerekli. Desen bir süredir kullanılmamış."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Daha fazla güvenlik gerekli. Cihazın kilidi bir süredir açılmamış."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Yüzle kilit açılamıyor. Çok deneme yapıldı."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Parmak iziyle kilit açılamıyor. Çok deneme yapıldı."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Güven aracısı kullanılamıyor"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Yanlış PIN\'le çok fazla deneme yapıldı"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Yanlış desenle çok fazla deneme yapıldı"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Yanlış şifreyle çok fazla deneme yapıldı"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# saniye içinde tekrar deneyin.}other{# saniye içinde tekrar deneyin.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN kodunu girin."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" için SIM PIN kodunu girin."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK işlemi başarısız oldu!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Giriş yöntemini değiştir"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Uçak modu"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Cihaz yeniden başlatıldıktan sonra desen gerekir"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Cihaz yeniden başlatıldıktan sonra PIN gerekir"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Cihaz yeniden başlatıldıktan sonra şifre gerekir"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ek güvenlik için bunun yerine desen kullanın"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ek güvenlik için bunun yerine PIN kullanın"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ek güvenlik için bunun yerine şifre kullanın"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml
index 7da9b98..2fd1934 100644
--- a/packages/SystemUI/res-keyguard/values-uk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml
@@ -21,14 +21,11 @@
<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">"Введіть PIN-код"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Введіть PIN-код"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Введіть ключ"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Намалюйте ключ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Введіть пароль"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Введіть пароль"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Недійсна картка."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Заряджено"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Бездротове заряджання"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Не вдається вимкнути eSIM-карту через помилку."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Ввести"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Неправильний ключ"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Не той ключ. Спробуйте ще."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Неправильний пароль"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Не той пароль. Спробуйте ще."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Неправильний PIN-код"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Не той PIN. Спробуйте ще."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Або розблокуйте відбитком пальця"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Відбиток не розпізнано"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Обличчя не розпізнано"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Повторіть спробу або введіть PIN-код"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Повторіть спробу або введіть пароль"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Повторіть спробу або намалюйте ключ"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Після кількох невдалих спроб потрібно ввести PIN-код"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Після кількох невдалих спроб потрібно ввести пароль"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Після кількох невдалих спроб потрібно ввести ключ"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Розблокування PIN-кодом або відбитком пальця"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Розблокування паролем або відбитком пальця"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Розблокування ключем або відбитком пальця"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Пристрій заблоковано згідно з правилами організації"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Після блокування входу потрібно ввести PIN-код"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Після блокування входу потрібно ввести пароль"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Після блокування входу потрібно намалювати ключ"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Оновлення встановиться під час годин неактивності"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потрібен додатковий захист. PIN-код довго не використовувався."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потрібен додатковий захист. Пароль довго не використовувався."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потрібен додатковий захист. Ключ довго не використовувався."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Потрібен додатковий захист. Пристрій довго не розблоковувався."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Не розблоковано (фейсконтроль). Забагато спроб."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Не розблоковано (відбиток пальця). Забагато спроб."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Довірчий агент недоступний"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Неправильний PIN-код введено забагато разів"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Неправильний ключ намальовано забагато разів"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Неправильний пароль введено забагато разів"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Повторіть спробу через # секунду.}one{Повторіть спробу через # секунду.}few{Повторіть спробу через # секунди.}many{Повторіть спробу через # секунд.}other{Повторіть спробу через # секунди.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Введіть PIN-код SIM-карти."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Введіть PIN-код SIM-карти для оператора \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Помилка введення PUK-коду SIM-карти."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Змінити метод введення"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Режим польоту"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Після перезапуску пристрою потрібно намалювати ключ"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Після перезапуску пристрою потрібно ввести PIN-код"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Після перезапуску пристрою потрібно ввести пароль"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"З міркувань додаткової безпеки скористайтеся ключем"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"З міркувань додаткової безпеки скористайтеся PIN-кодом"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"З міркувань додаткової безпеки скористайтеся паролем"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml
index 4a75afc..596e4776 100644
--- a/packages/SystemUI/res-keyguard/values-ur/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml
@@ -21,14 +21,11 @@
<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">"اپنا PIN درج کریں"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN درج کریں"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"اپنا پیٹرن درج کریں"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"پیٹرن ڈرا کریں"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"اپنا پاس ورڈ درج کریں"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"پاس ورڈ درج کریں"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"غلط کارڈ۔"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"چارج ہوگئی"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • وائرلیس طریقے سے چارج ہو رہا ہے"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"ایک خرابی کی وجہ سے eSIM کو غیر فعال نہیں کیا جا سکتا۔"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"درج کریں"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"غلط پیٹرن"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"غلط پیٹرن۔ پھر کوشش کریں۔"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"غلط پاس ورڈ"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"غلط پاس ورڈ۔ پھر کوشش کریں۔"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"غلط PIN"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"غلط PIN۔ پھر کوشش کریں۔"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"یا فنگر پرنٹ کے ذریعے غیر مقفل کریں"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"فنگر پرنٹ نہیں پہچانا گيا"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"چہرے کی شناخت نہیں ہو سکی"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"دوبارہ کوشش کریں یا PIN درج کریں"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"دوبارہ کوشش کریں یا پاس ورڈ درج کریں"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"دوبارہ کوشش کریں یا پیٹرن ڈرا کریں"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"کئی بار کوشش کر لینے کے بعد PIN کی ضرورت ہوتی ہے"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"کئی بار کوشش کر لینے کے بعد پاس ورڈ کی ضرورت ہوتی ہے"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"کئی بار کوشش کر لینے کے بعد پیٹرن کی ضرورت ہوتی ہے"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN یا فنگر پرنٹ سے غیر مقفل کریں"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"پاس ورڈ یا فنگر پرنٹ سے غیر مقفل کریں"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"پیٹرن یا فنگر پرنٹ سے غیر مقفل کریں"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"اضافی سیکیورٹی کے لیے، آلہ کام سے متعلق پالیسی کے ذریعے مقفل ہوگیا ہے"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"لاک ڈاؤن کے بعد PIN کی ضرورت ہوتی ہے"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"لاک ڈاؤن کے بعد پاس ورڈ کی ضرورت ہوتی ہے"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"لاک ڈاؤن کے بعد پیٹرن کی ضرورت ہوتی ہے"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"اپ ڈیٹ غیر فعال اوقات کے دوران انسٹال ہوگی"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"مزید سیکیورٹی چاہیے۔ PIN کچھ عرصے اسے استعمال نہیں ہوا ہے۔"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"مزید سیکیورٹی چاہیے۔ پاس ورڈ کچھ عرصے سے استعمال نہیں ہوا ہے۔"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"مزید سیکیورٹی چاہیے۔ پیٹرن کچھ عرصے سے استعمال نہیں ہوا ہے۔"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"مزید سیکیورٹی چاہیے۔ آلہ کچھ عرصے سے غیر مقفل نہیں ہوا ہے۔"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"چہرے سے غیر مقفل نہیں ہو سکا۔ کافی زیادہ کوششیں۔"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"فنگر پرنٹ سے غیر مقفل نہیں ہو سکا۔ کافی زیادہ کوششیں۔"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"ٹرسٹ ایجنٹ دستیاب نہیں ہے"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"غلط PIN کے ساتھ کافی زیادہ کوششیں"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"غلط پیٹرن کے ساتھ کافی زیادہ کوششیں"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"غلط پاس ورڈ کے ساتھ کافی زیادہ کوششیں"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# سیکنڈ میں دوبارہ کوشش کریں۔}other{# سیکنڈ میں دوبارہ کوشش کریں۔}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM PIN درج کریں۔"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" کیلئے SIM PIN درج کریں۔"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK کارروائی ناکام ہو گئی!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"اندراج کا طریقہ سوئچ کریں"</string>
<string name="airplane_mode" msgid="2528005343938497866">"ہوائی جہاز وضع"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"آلہ ری سٹارٹ ہونے کے بعد پیٹرن کی ضرورت ہوتی ہے"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"آلہ ری سٹارٹ ہونے کے بعد PIN کی ضرورت ہوتی ہے"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"آلہ ری سٹارٹ ہونے کے بعد پاس ورڈ کی ضرورت ہوتی ہے"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"اضافی سیکیورٹی کے لئے، اس کے بجائے پیٹرن استعمال کریں"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"اضافی سیکیورٹی کے لئے، اس کے بجائے PIN استعمال کریں"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"اضافی سیکیورٹی کے لئے، اس کے بجائے پاس ورڈ استعمال کریں"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml
index 4c5f476..0e2a6cf 100644
--- a/packages/SystemUI/res-keyguard/values-uz/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml
@@ -21,14 +21,11 @@
<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">"PIN kodni kiriting"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN kodni kiriting"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Grafik kalitni chizing"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Grafik kalitni chizing"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Parolni kiriting"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Parolni kiriting"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"SIM karta yaroqsiz."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Quvvat oldi"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Simsiz quvvatlanyapti"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Xatolik tufayli eSIM faolsizlantirilmadi."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter tugmasi"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Grafik kalit xato"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Grafik kalit xato. Qayta urining."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Parol xato"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Parol xato. Qayta urining."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN kod xato"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN xato. Qayta urining."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Yoki barmoq izi bilan oching"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Barmoq izi aniqlanmadi"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Yuz aniqlanmadi"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Qayta urining yoki PIN kodni kiriting"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Qayta urining yoki parolni kiriting"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Qayta urining yoki grafik kalitni chizing"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Koʻp marta urindindiz. Pin kodni kiriting"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Koʻp marta urindindiz. Parolni kiriting"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Koʻp marta urindindiz. Grafik kalitni chizing"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN/barmoq izi bilan oching"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Parol/barmoq izi bilan oching"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Grafik kalit/barmoq izi bilan oching"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Qurilma tashkilot qoidalari asosida bloklangan."</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Bloklangandan keyin PIN kodni kiritish kerak"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Bloklangandan keyin parolni kiritish kerak"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Bloklangandan keyin grafik kalitni chizish kerak"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Yangilanish qurilma nofaol boʻlganda oʻrnatiladi"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Xavfsizlikni oshiring. PIN kod ancha vaqt ishlatilmadi."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Xavfsizlikni oshiring. Parol ancha vaqt ishlatilmadi."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Xavfsizlikni oshiring. Grafik kalit ancha vaqt chizilmadi"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Xavfsizlikni oshiring. Qurilma ancha vaqt ochilmadi."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Yuz bilan ochilmadi. Juda koʻp urinildi."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Barmoq izi bilan ochilmadi. Juda koʻp urinildi."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Ishonchli agent mavjud emas"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"PIN kod koʻp marta xato kiritildi"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Grafik kalit koʻp marta xato chizildi"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Parol koʻp marta xato kiritildi"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# soniyadan keyin qaytadan urining.}other{# soniyadan keyin qayta urining.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM karta PIN kodini kiriting."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi PIN kodini kiriting."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM kartani qulfdan chiqarib bo‘lmadi!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Matn kiritish usulini almashtirish"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Parvoz rejimi"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Qayta yongandan keyin grafik kalit talab etiladi"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Qayta yongandan keyin PIN kod talab etiladi"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Qayta yongandan keyin parol talab etiladi"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Qoʻshimcha xavfsizlik maqsadida oʻrniga grafik kalitdan foydalaning"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Qoʻshimcha xavfsizlik maqsadida oʻrniga PIN koddan foydalaning"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Qoʻshimcha xavfsizlik maqsadida oʻrniga paroldan foydalaning"</string>
diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml
index 49abeb6..e2d2525 100644
--- a/packages/SystemUI/res-keyguard/values-vi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml
@@ -21,14 +21,11 @@
<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">"Nhập mã PIN của bạn"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Nhập mã PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Nhập hình mở khóa của bạn"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Vẽ hình mở khoá"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Nhập mật khẩu của bạn"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Nhập mật khẩu"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Thẻ không hợp lệ."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Đã sạc đầy"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Đang sạc không dây"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"Không thể tắt eSIM do lỗi."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Nhập"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Hình mở khóa không chính xác"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Sai hình. Hãy thử lại."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Mật khẩu sai"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Sai mật khẩu. Hãy thử lại."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Mã PIN sai"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"Sai mã PIN. Hãy thử lại."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Hoặc mở khoá bằng vân tay"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Không nhận dạng được vân tay"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Không nhận dạng được khuôn mặt"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Thử lại hoặc nhập mã PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Thử lại hoặc nhập mật khẩu"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Thử lại hoặc vẽ hình mở khoá"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Bạn đã thử quá nhiều lần, hãy nhập mã PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Bạn đã thử quá nhiều lần, hãy nhập mật khẩu"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Bạn đã thử quá nhiều lần, hãy vẽ hình mở khoá"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Mở khoá bằng mã PIN hoặc vân tay"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Mở khoá bằng mật khẩu hoặc vân tay"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Mở khoá bằng hình mở khoá hoặc vân tay"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Để bảo mật, chính sách nơi làm việc đã khoá thiết bị"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Cần nhập mã PIN sau khi hết thời gian khoá"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Cần nhập mật khẩu sau khi hết thời gian khoá"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Cần vẽ hình mở khoá sau khi hết thời gian khoá"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Bản cập nhật sẽ cài đặt vào các giờ không hoạt động"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Cần tăng cường bảo mật. Đã lâu chưa dùng mã PIN."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Cần tăng cường bảo mật. Đã lâu chưa dùng mật khẩu"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Cần tăng cường bảo mật. Đã lâu chưa dùng hình mở khoá."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Cần tăng cường bảo mật. Đã lâu thiết bị chưa được mở khoá."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Không mở được bằng khuôn mặt. Đã thử quá nhiều lần."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Không mở được bằng vân tay. Đã thử quá nhiều lần."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Không dùng được tác nhân tin cậy"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Bạn đã nhập sai mã PIN quá nhiều lần"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Bạn đã vẽ sai hình mở khoá quá nhiều lần"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Bạn đã nhập sai mật khẩu quá nhiều lần"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Hãy thử lại sau # giây.}other{Hãy thử lại sau # giây.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Nhập mã PIN của SIM."</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Nhập mã PIN của SIM dành cho \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Thao tác mã PUK của SIM không thành công!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Chuyển phương thức nhập"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Chế độ trên máy bay"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Cần vẽ hình mở khoá sau khi khởi động lại thiết bị"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Cần nhập mã PIN sau khi khởi động lại thiết bị"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Cần nhập mật khẩu sau khi khởi động lại thiết bị"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Để tăng cường bảo mật, hãy sử dụng hình mở khoá"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Để tăng cường bảo mật, hãy sử dụng mã PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Để tăng cường bảo mật, hãy sử dụng mật khẩu"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
index 685f835..2888c37 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
@@ -21,14 +21,11 @@
<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">"输入您的 PIN 码"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"输入 PIN 码"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"绘制您的图案"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"绘制图案"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"输入您的密码"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"输入密码"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"SIM 卡无效。"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"已充满电"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 正在无线充电"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"出现错误,无法停用 eSIM 卡。"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"输入"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"图案错误"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"图案有误。请重试。"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"密码错误"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"密码有误。请重试。"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN 码错误"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN 码有误。请重试。"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"或使用指纹解锁"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"未能识别指纹"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"无法识别面孔"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"请重试,或输入 PIN 码"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"请重试,或输入密码"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"请重试,或绘制图案"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"如果出错的尝试次数太多,必须输入 PIN 码才能解锁"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"如果出错的尝试次数太多,必须输入密码才能解锁"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"如果出错的尝试次数太多,必须绘制图案才能解锁"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"请使用 PIN 码或指纹解锁"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"请使用密码或指纹解锁"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"请使用图案或指纹解锁"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"为提高安全性,工作政策已锁定设备"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"一旦设备被锁定,必须输入 PIN 码才能解锁"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"一旦设备被锁定,必须输入密码才能解锁"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"一旦设备被锁定,必须绘制图案才能解锁"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"可用更新会在设备闲置期间安装"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"需要锁定设备以提高安全性。已有一段时间未使用 PIN 码了。"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"需要锁定设备以提高安全性。已有一段时间未使用密码了。"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"需要锁定设备以提高安全性。已有一段时间未使用图案了。"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"需要锁定设备以提高安全性。设备处于未锁定状态已有一段时间了。"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"无法使用面孔解锁。尝试次数太多。"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"无法使用指纹解锁。尝试次数太多。"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"可信代理已被停用"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"输错 PIN 码的尝试次数太多"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"绘错图案的尝试次数太多"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"输错密码的尝试次数太多"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{请在 # 秒后重试。}other{请在 # 秒后重试。}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"请输入 SIM 卡 PIN 码。"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"请输入“<xliff:g id="CARRIER">%1$s</xliff:g>”的 SIM 卡 PIN 码。"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM 卡 PUK 码操作失败!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"切换输入法"</string>
<string name="airplane_mode" msgid="2528005343938497866">"飞行模式"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"设备重启后,必须绘制图案才能解锁"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"设备重启后,必须输入 PIN 码才能解锁"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"设备重启后,必须输入密码才能解锁"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"为增强安全性,请改用图案"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"为增强安全性,请改用 PIN 码"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"为增强安全性,请改用密码"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
index e36f294..20a0360 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
@@ -21,14 +21,11 @@
<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">"請輸入 PIN"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"輸入 PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"請畫出圖案"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"畫出解鎖圖案"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"請輸入密碼"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"輸入密碼"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"SIM 卡無效。"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"已完成充電"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 無線充電中"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"發生錯誤,因此無法停用此 eSIM 卡。"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter 鍵 (輸入)"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"圖案錯誤"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"圖案錯誤,請再試一次。"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"密碼錯誤"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"密碼錯誤,請再試一次。"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN 碼錯誤"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN 錯誤,請再試一次。"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"或使用指紋解鎖"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"無法辨識指紋"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"無法辨識面孔"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"請再試一次或輸入 PIN"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"請再試一次或輸入密碼"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"請再試一次或畫出解鎖圖案"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"如果嘗試次數太多,需要輸入 PIN 才能解鎖"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"如果嘗試次數太多,需要輸入密碼才能解鎖"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"如果嘗試次數太多,需要畫出解鎖圖案才能解鎖"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"使用 PIN 或指紋解鎖"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"使用密碼或指紋解鎖"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"使用解鎖圖案或指紋解鎖"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"為提高安全性,公司政策已鎖定裝置"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"需要輸入 PIN 才能解除禁閉模式"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"需要輸入密碼解才能解除禁閉模式"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"需要畫出解鎖圖案才能解除禁閉模式"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"裝置會在閒置時安裝更新"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"需要加強安全設定:已有一段時間沒有使用 PIN。"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"需要加強安全設定:已有一段時間沒有使用密碼。"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"需要加強安全設定:已有一段時間沒有使用解鎖圖案。"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"需要加強安全設定:裝置已有一段時間沒有解鎖。"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"嘗試次數太多,因此無法使用面孔解鎖。"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"嘗試次數太多,因此無法使用面孔解鎖。"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"信任代理程式無法使用"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"PIN 錯誤且嘗試次數過多"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"解鎖圖案錯誤且嘗試次數過多"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"密碼錯誤且嘗試次數過多"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{請在 # 秒後再試一次。}other{請在 # 秒後再試一次。}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"輸入 SIM 卡的 PIN 碼。"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"輸入「<xliff:g id="CARRIER">%1$s</xliff:g>」SIM 卡的 PIN 碼。"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"無法使用 SIM 卡 PUK 碼解鎖!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"轉換輸入方法"</string>
<string name="airplane_mode" msgid="2528005343938497866">"飛行模式"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"裝置重新啟動後,需要畫出解鎖圖案才能解鎖"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"裝置重新啟動後,需要輸入 PIN 才能解鎖"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"裝置重新啟動後,需要輸入密碼才能解鎖"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"為提升安全性,請改用圖案"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"為提升安全性,請改用 PIN"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"為提升安全性,請改用密碼"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
index cd3e7a4..b73e803c 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
@@ -21,14 +21,11 @@
<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">"輸入 PIN 碼"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"輸入 PIN 碼"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"畫出解鎖圖案"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"畫出解鎖圖案"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"輸入密碼"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"輸入密碼"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"卡片無效。"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"充電完成"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • 無線充電"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"發生錯誤,因此無法停用 eSIM 卡。"</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter 鍵"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"圖案錯誤"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"解鎖圖案錯誤,請再試一次。"</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"密碼錯誤"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"密碼錯誤,請再試一次。"</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN 碼錯誤"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN 碼錯誤,請再試一次。"</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"或使用指紋解鎖"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"無法辨識指紋"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"無法辨識臉孔"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"請再試一次或輸入 PIN 碼"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"請再試一次或輸入密碼"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"請再試一次或畫出解鎖圖案"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"如果錯誤次數過多,必須輸入 PIN 碼才能解鎖"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"如果錯誤次數過多,必須輸入密碼才能解鎖"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"如果錯誤數過多,必須畫出解鎖圖案才能解鎖"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"使用 PIN 碼或指紋解鎖"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"使用密碼或指紋解鎖"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"使用解鎖圖案或指紋解鎖"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"為提高安全性,公司政策已鎖定裝置"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"裝置鎖定後,必須輸入 PIN 碼才能解鎖"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"裝置鎖定後,必須輸入密碼才能解鎖"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"裝置鎖定後,必須畫出解鎖圖案才能解鎖"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"裝置會在閒置時安裝更新"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"裝置已有一段時間未鎖定,請使用 PIN 碼鎖定裝置以策安全。"</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"裝置已有一段時間未鎖定,請使用密碼鎖定裝置以策安全。"</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"裝置已有一段時間未鎖定,請使用解鎖圖案鎖定裝置以策安全。"</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"裝置已有一段時間未鎖定,請鎖定裝置以策安全。"</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"錯誤次數過多,因此無法使用臉孔解鎖。"</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"錯誤次數過多,因此無法使用指紋解鎖。"</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"信任的代理程式無法使用"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"PIN 碼錯誤次數過多"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"解鎖圖案錯誤次數過多"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"密碼錯誤次數過多"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{請於 # 秒後再試一次。}other{請於 # 秒後再試一次。}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"輸入 SIM 卡的 PIN 碼。"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"輸入「<xliff:g id="CARRIER">%1$s</xliff:g>」SIM 卡的 PIN 碼。"</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM 卡 PUK 碼解鎖失敗!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"切換輸入法"</string>
<string name="airplane_mode" msgid="2528005343938497866">"飛航模式"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"裝置重新啟動後,必須畫出解鎖圖案才能解鎖"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"裝置重新啟動後,必須輸入 PIN 碼才能解鎖"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"裝置重新啟動後,必須輸入密碼才能解鎖"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"為強化安全性,請改用解鎖圖案"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"為強化安全性,請改用 PIN 碼"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"為強化安全性,請改用密碼"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml
index 01cf8cf..6a2d368 100644
--- a/packages/SystemUI/res-keyguard/values-zu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml
@@ -21,14 +21,11 @@
<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">"Faka iPHINIKHODI yakho"</string>
- <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
- <skip />
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Faka i-PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Faka iphethini yakho"</string>
- <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
- <skip />
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dweba iphethini"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Faka iphasiwedi yakho"</string>
- <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
- <skip />
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Faka iphasiwedi"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ikhadi elingavumelekile."</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Kushajiwe"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Iyashaja ngaphandle kwentambo"</string>
@@ -58,68 +55,38 @@
<string name="error_disable_esim_msg" msgid="2441188596467999327">"I-eSIM ayikwakhi ukukhutshazwa ngenxa yephutha."</string>
<string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Faka"</string>
<string name="kg_wrong_pattern" msgid="5907301342430102842">"Iphethini engalungile"</string>
- <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
- <skip />
+ <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Iphethini engalungile. Zama futhi."</string>
<string name="kg_wrong_password" msgid="4143127991071670512">"Iphasiwedi engalungile"</string>
- <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
- <skip />
+ <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Iphasiwedi engalungile. Zama futhi."</string>
<string name="kg_wrong_pin" msgid="4160978845968732624">"Iphinikhodi engalungile"</string>
- <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
- <skip />
- <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
- <skip />
- <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
- <skip />
- <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
- <skip />
- <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
- <skip />
- <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
- <skip />
- <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
- <skip />
- <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
- <skip />
- <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
- <skip />
- <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
- <skip />
- <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
- <skip />
- <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
- <skip />
- <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
- <skip />
- <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
- <skip />
- <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
- <skip />
- <!-- no translation found for kg_face_locked_out (2751559491287575) -->
- <skip />
- <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
- <skip />
- <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
- <skip />
- <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
- <skip />
+ <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"I-PIN okungeyona. Zama futhi."</string>
+ <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Noma vula ngezigxivizo zeminwe"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Isigxivizo somunwe asaziwa"</string>
+ <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Ubuso abaziwa"</string>
+ <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Zama futhi noma faka iphinikhodi"</string>
+ <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Zama futhi noma faka iphasiwedi"</string>
+ <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Zama futhi noma dweba iphethini"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Iphinikhodi iyadingeka ngemva kwemizamo eminingi kakhulu"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Iphasiwedi iyadingeka ngemva kwemizamo eminingi kakhulu"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Iphethini iyadingeka ngemva kwemizamo eminingi kakhulu"</string>
+ <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Vula ngephethini noma izigxivizo zeminwe"</string>
+ <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Vula ngephasiwedi noma ngezigxivizo zeminwe"</string>
+ <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Vula ngephethini noma isigxivizo somunwe"</string>
+ <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Ngokuphepha okungeziwe, idivayisi ikhiyiwe ngenqubomgomo yomsebenzi"</string>
+ <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Iphinikhodi iyadingeka ngemva kokukhiya"</string>
+ <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Iphasiwedi iyadingeka ngemuva kokukhiya"</string>
+ <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Iphethini iyadingeka ngemva kokukhiya"</string>
+ <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Isibuyekezo sizongena phakathi namahora okungasebenzi"</string>
+ <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Ukuphepha okwengeziwe kuyadingeka. Iphinikhodi ayisetshenziswanga isikhathi eside."</string>
+ <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Ukuphepha okwengeziwe kuyadingeka. Iphasiwedi ayisetshenziswanga isikhathi eside."</string>
+ <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Ukuphepha okwengeziwe kuyadingeka. Iphethini ayisetshenziswanga isikhathi eside."</string>
+ <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Ukuphepha okwengeziwe kuyadingeka. Idivayisi ayizange ivulwe isikhathi eside."</string>
+ <string name="kg_face_locked_out" msgid="2751559491287575">"Ayikwazi ukuvula ngobuso. Imizamo eminingi kakhulu."</string>
+ <string name="kg_fp_locked_out" msgid="6228277682396768830">"Ayikwazi ukuvula ngesigxivizo somunwe. Imizamo eminingi kakhulu."</string>
+ <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Umenzeli othembekile akatholakali"</string>
+ <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Imizamo eminingi kakhulu Ngephinikhodi engalungile"</string>
+ <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Imizamo eminingi kakhulu enephethini engalungile"</string>
+ <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Imizamo eminingi kakhulu enephasiwedi engalungile"</string>
<string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{Zama futhi kumzuzwana ongu-#.}one{Zama futhi kumizuzwana engu-#.}other{Zama futhi kumizuzwana engu-#.}}"</string>
<string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Faka i-PIN ye-SIM"</string>
<string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Faka i-PIN ye-SIM ye-\"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string>
@@ -142,12 +109,9 @@
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Umsebenzi we-PUK ye-SIM wehlulekile!"</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Shintsha indlela yokufaka"</string>
<string name="airplane_mode" msgid="2528005343938497866">"Imodi yendiza"</string>
- <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
- <skip />
- <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
- <skip />
+ <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Iphethini iyadingeka ngemva kokuthi idivayisi iqale kabusha"</string>
+ <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Iphinikhodi iyadingeka ngemva kokuthi idivayisi iqale kabusha"</string>
+ <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Iphasiwedi iyadingeka ngemuva kokuthi idivayisi iqale kabusha"</string>
<string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa iphetheni esikhundleni salokho"</string>
<string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa i-PIN esikhundleni salokho"</string>
<string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Ukuze uthole ukuvikeleka okwengeziwe, sebenzisa iphasiwedi esikhundleni salokho"</string>
diff --git a/packages/SystemUI/res-product/values-es/strings.xml b/packages/SystemUI/res-product/values-es/strings.xml
index 84ebe29..b13018b 100644
--- a/packages/SystemUI/res-product/values-es/strings.xml
+++ b/packages/SystemUI/res-product/values-es/strings.xml
@@ -40,7 +40,7 @@
<string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Has intentado desbloquear el teléfono de forma incorrecta <xliff:g id="NUMBER">%d</xliff:g> veces. Se quitará este perfil de trabajo y se eliminarán todos sus datos."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Has dibujado un patrón de desbloqueo incorrecto <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. Si se producen <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te pedirá que desbloquees el tablet con una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Has dibujado un patrón de desbloqueo incorrecto <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. Si se producen <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te pedirá que desbloquees el teléfono con una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
- <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve en el lateral de la tablet."</string>
+ <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve cerca de una de la esquinas de la tablet."</string>
<string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve en el lateral del dispositivo."</string>
<string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve en el lateral del teléfono."</string>
<string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Desbloquea el teléfono para ver más opciones"</string>
diff --git a/packages/SystemUI/res-product/values-hy/strings.xml b/packages/SystemUI/res-product/values-hy/strings.xml
index 3ebc72f..acee335 100644
--- a/packages/SystemUI/res-product/values-hy/strings.xml
+++ b/packages/SystemUI/res-product/values-hy/strings.xml
@@ -40,9 +40,9 @@
<string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Դուք կատարել եք հեռախոսն ապակողպելու <xliff:g id="NUMBER">%d</xliff:g> անհաջող փորձ: Աշխատանքային պրոֆիլը կհեռացվի, և պրոֆիլի բոլոր տվյալները կջնջվեն:"</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Դուք կատարել եք ապակողպման նախշը մուտքագրելու <xliff:g id="NUMBER_0">%1$d</xliff:g> անհաջող փորձ: Եվս <xliff:g id="NUMBER_1">%2$d</xliff:g> անհաջող փորձից հետո ձեզանից կպահանջվի ապակողպել պլանշետը էլփոստի հաշվի միջոցով։\n\n Խնդրում ենք կրկին փորձել <xliff:g id="NUMBER_2">%3$d</xliff:g> վայրկյանից:"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Դուք <xliff:g id="NUMBER_0">%1$d</xliff:g> անգամ սխալ եք հավաքել ձեր ապակողպման նմուշը: Եվս <xliff:g id="NUMBER_1">%2$d</xliff:g> անհաջող փորձից հետո ձեզ կառաջարկվի ապակողպել հեռախոսը` օգտագործելով էլփոստի հաշիվ:\n\n Կրկին փորձեք <xliff:g id="NUMBER_2">%3$d</xliff:g> վայրկյանից:"</string>
- <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ պլանշետի եզրային մասում։"</string>
- <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ սարքի եզրային մասում։"</string>
- <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ հեռախոսի եզրային մասում։"</string>
+ <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ պլանշետի կողային մասում։"</string>
+ <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ սարքի կողային մասում։"</string>
+ <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ հեռախոսի կողային մասում։"</string>
<string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Ապակողպեք ձեր հեռախոսը՝ լրացուցիչ կարգավորումները տեսնելու համար"</string>
<string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Ապակողպեք ձեր պլանշետը՝ լրացուցիչ կարգավորումները տեսնելու համար"</string>
<string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Ապակողպեք ձեր սարքը՝ լրացուցիչ կարգավորումները տեսնելու համար"</string>
diff --git a/packages/SystemUI/res/layout/qs_paged_page.xml b/packages/SystemUI/res/layout/qs_paged_page.xml
index c366ceb..822b496 100644
--- a/packages/SystemUI/res/layout/qs_paged_page.xml
+++ b/packages/SystemUI/res/layout/qs_paged_page.xml
@@ -21,5 +21,6 @@
android:layout_height="match_parent"
android:paddingStart="@dimen/qs_tiles_page_horizontal_margin"
android:paddingEnd="@dimen/qs_tiles_page_horizontal_margin"
+ android:focusable="false"
android:clipChildren="false"
android:clipToPadding="false" />
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 752346a..4d43b19 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Begin"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Eenhandmodus"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontras"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standaard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoog"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokkeer toestelmikrofoon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokkeer toestelkamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokkeer toestelkamera en mikrofoon?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiveer"</string>
<string name="sound_settings" msgid="8874581353127418308">"Klank en vibrasie"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Instellings"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Verlaag na veiliger volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Die volume was langer as wat aanbeveel word hoog"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Program is vasgespeld"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Oorsig om dit te ontspeld."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Tuis om dit te ontspeld."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ontmerk as gunsteling"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Skuif na posisie <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroles"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Kies kontroles om toegang vanaf Kitsinstellings te kry"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hou en sleep om kontroles te herrangskik"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroles is verwyder"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Veranderinge is nie gestoor nie"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Sien ander programme"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Herrangskik"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Voeg kontroles by"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Terug na wysiging"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontroles kon nie gelaai word nie. Gaan die <xliff:g id="APP">%s</xliff:g>-program na om seker te maak dat die programinstellings nie verander het nie."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Versoenbare kontroles is nie beskikbaar nie"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Ander"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Jou werkbeleid laat jou toe om slegs van die werkprofiel af foonoproepe te maak"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Skakel oor na werkprofiel"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Maak toe"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Sluitskerminstellings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Pasmaak sluitskerm"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-fi is nie beskikbaar nie"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera is geblokkeer"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera en mikrofoon is geblokkeer"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoon is geblokkeer"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteitmodus is aan"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent-aandag is aan"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 10c7c44..8adb782 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ጀምር"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"አቁም"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"የአንድ እጅ ሁነታ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ንጽጽር"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"መደበኛ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"መካከለኛ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ከፍተኛ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"የመሣሪያ ማይክሮፎን እገዳ ይነሳ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"የመሣሪያ ካሜራ እገዳ ይነሳ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"የመሣሪያ ካሜራ እና ማይክሮፎን እገዳ ይነሳ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"አሰናክል"</string>
<string name="sound_settings" msgid="8874581353127418308">"ድምፅ እና ንዝረት"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ቅንብሮች"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ደህንነቱ ወደ የተጠበቀ ድምፅ ተቀንሷል"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ድምፁ ከሚመከረው በላይ ረዘም ላለ ጊዜ ከፍተኛ ነበር"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"መተግበሪያ ተሰክቷል"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"ይሄ እስኪነቅሉት ድረስ በእይታ ውስጥ ያስቀምጠዋል። ለመንቀል ተመለስ እና አጠቃላይ ዕይታ የሚለውን ይጫኑ እና ይያዙ።"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ይሄ እስኪነቅሉት ድረስ በእይታ ውስጥ ያስቀምጠዋል። ለመንቀል ተመለስ እና መነሻ የሚለውን ይንኩ እና ይያዙ።"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ተወዳጅ አታድርግ"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ወደ ቦታ <xliff:g id="NUMBER">%d</xliff:g> ውሰድ"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"መቆጣጠሪያዎች"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ከፈጣን ቅንብሮች ለመድረስ መቆጣጠሪያዎችን ይምረጡ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"መቆጣጠሪያዎችን ዳግም ለማስተካከል ይያዙ እና ይጎትቱ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ሁሉም መቆጣጠሪያዎች ተወግደዋል"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ለውጦች አልተቀመጡም"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ሌሎች መተግበሪያዎች ይመልከቱ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ዳግም ደርድር"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"መቆጣጠሪያዎችን አክል"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ወደ አርትዖት ተመለስ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"መቆጣጠሪያዎች ሊጫኑ አልቻሉም። የመተግበሪያው ቅንብሮች እንዳልተቀየሩ ለማረጋገጥ <xliff:g id="APP">%s</xliff:g> መተግበሪያን ይፈትሹ።"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ተኳዃኝ መቆጣጠሪያዎች አይገኙም"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ሌላ"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"የሥራ መመሪያዎ እርስዎ ከሥራ መገለጫው ብቻ ጥሪ እንዲያደርጉ ይፈቅድልዎታል"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ወደ የሥራ መገለጫ ቀይር"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ዝጋ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"የማያ ገጽ ቁልፍ ቅንብሮች"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ማያ ገጽ ቁልፍን አብጅ"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi አይገኝም"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ካሜራ ታግዷል"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ካሜራ እና ማይክሮፎን ታግደዋል"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ማይክሮፎን ታግዷል"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"የቅድሚያ ሁነታ በርቷል"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"የረዳት ትኩረት በርቷል"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 1fa13d5..29a7c50 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -238,8 +238,8 @@
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"التدوير التلقائي للشاشة"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"الموقع الجغرافي"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"شاشة الاستراحة"</string>
- <string name="quick_settings_camera_label" msgid="5612076679385269339">"الكاميرا"</string>
- <string name="quick_settings_mic_label" msgid="8392773746295266375">"الميكروفون"</string>
+ <string name="quick_settings_camera_label" msgid="5612076679385269339">"الوصول إلى الكاميرا"</string>
+ <string name="quick_settings_mic_label" msgid="8392773746295266375">"الوصول إلى الميكروفون"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"متاح"</string>
<string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"محظور"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"جهاز الوسائط"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"بدء"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"إيقاف"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"وضع \"التصفح بيد واحدة\""</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"التباين"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"عادي"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"متوسط"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"مرتفع"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"هل تريد إزالة حظر ميكروفون الجهاز؟"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"هل تريد إزالة حظر كاميرا الجهاز؟"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"هل تريد إزالة حظر الكاميرا والميكروفون؟"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"إيقاف"</string>
<string name="sound_settings" msgid="8874581353127418308">"الصوت والاهتزاز"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"الإعدادات"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"تم خفض الصوت إلى المستوى الآمن"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"كان مستوى الصوت مرتفعًا لمدة أطول مما يُنصَح به."</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"تم تثبيت الشاشة على التطبيق"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار الزرين \"رجوع\" و\"نظرة عامة\" لإزالة التثبيت."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار الزرين \"رجوع\" و\"الشاشة الرئيسية\" لإزالة التثبيت."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"إزالة من المفضّلة"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"نقل إلى الموضع <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"عناصر التحكّم"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"اختَر عناصر التحكّم التي يتم الوصول إليها من \"الإعدادات السريعة\"."</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"اضغط مع الاستمرار واسحب لإعادة ترتيب عناصر التحكّم."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"تمت إزالة كل عناصر التحكّم."</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"لم يتم حفظ التغييرات."</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"عرض التطبيقات الأخرى"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"إعادة الترتيب"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"إضافة عناصر تحكّم"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"الرجوع إلى التعديل"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"تعذَّر تحميل عناصر التحكّم. تحقّق من تطبيق <xliff:g id="APP">%s</xliff:g> للتأكّد من أنه لم يتم تغيير إعدادات التطبيق."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"عناصر التحكّم المتوافقة غير متوفّرة"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"غير ذلك"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"تسمح لك سياسة العمل بإجراء المكالمات الهاتفية من الملف الشخصي للعمل فقط."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"التبديل إلى الملف الشخصي للعمل"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"إغلاق"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"إعدادات شاشة القفل"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"تخصيص شاشة القفل"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"لا يتوفّر اتصال Wi-Fi."</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"استخدام الكاميرا محظور."</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"استخدام الكاميرا والميكروفون محظور."</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"استخدام الميكروفون محظور."</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"وضع الأولوية مفعّل."</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"ميزة لفت انتباه \"مساعد Google\" مفعّلة."</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index b42dbeb..775c8d4 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"আৰম্ভ কৰক"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"বন্ধ কৰক"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"এখন হাতেৰে ব্যৱহাৰ কৰা ম’ড"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"কনট্ৰাষ্ট"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"মানক"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"মধ্যমীয়া"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"উচ্চ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ডিভাইচৰ মাইক্ৰ\'ফ\'ন অৱৰোধৰ পৰা আঁতৰাবনে?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ডিভাইচৰ কেমেৰা অৱৰোধৰ পৰা আঁতৰাবনে?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ডিভাইচৰ কেমেৰা আৰু মাইক্ৰ\'ফ\'ন অৱৰোধৰ পৰা আঁতৰাবনে?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"অক্ষম কৰক"</string>
<string name="sound_settings" msgid="8874581353127418308">"ধ্বনি আৰু কম্পন"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ছেটিং"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"নিৰাপদ ভলিউমলৈ কমোৱা হৈছে"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"চুপাৰিছ কৰাতকৈ দীঘলীয়া সময়ৰ বাবে ভলিউম উচ্চ হৈ আছিল"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"এপ্টো পিন কৰা আছে"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ \'পিছলৈ যাওক\' আৰু \'অৱলোকন\'-ত স্পৰ্শ কৰি থাকক।"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ পিছলৈ যাওক আৰু হ\'মত স্পৰ্শ কৰি সেঁচি ধৰক।"</string>
@@ -739,7 +741,7 @@
<string name="tuner_lock_screen" msgid="2267383813241144544">"লক স্ক্ৰীন"</string>
<string name="thermal_shutdown_title" msgid="2702966892682930264">"আপোনাৰ ফ\'নটো গৰম হোৱাৰ কাৰণে অফ কৰা হৈছিল"</string>
<string name="thermal_shutdown_message" msgid="6142269839066172984">"আপোনাৰ ফ’নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\nঅধিক তথ্যৰ বাবে টিপক"</string>
- <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"আপোনাৰ ফ\'নটো অত্যধিক গৰম হোৱাৰ বাবে ইয়াক ঠাণ্ডা কৰিবলৈ অফ কৰা হৈছিল। আপোনাৰ ফ\'নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ ফ\'নটো গৰম হ\'ব পাৰে, যদিহে আপুনি:\n • ফ\'নটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপসমূহ চলালে (যেনে, ভিডিঅ\' গেইম, ভিডিঅ\', দিক্-নিৰ্দেশনা এপসমূহ)\n • খুউব ডাঙৰ আকাৰৰ ফাইল আপল\'ড বা ডাউনল’ড কৰিলে\n • আপোনাৰ ফ\'নটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰিলে"</string>
+ <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"আপোনাৰ ফ\'নটো অত্যধিক গৰম হোৱাৰ বাবে ইয়াক ঠাণ্ডা কৰিবলৈ অফ কৰা হৈছিল। আপোনাৰ ফ\'নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ ফ\'নটো গৰম হ\'ব পাৰে, যদিহে আপুনি:\n • ফ\'নটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপ্সমূহ চলালে (যেনে, ভিডিঅ\' গেইম, ভিডিঅ\', দিক্-নিৰ্দেশনা এপ্সমূহ)\n • খুউব ডাঙৰ আকাৰৰ ফাইল আপল\'ড বা ডাউনল’ড কৰিলে\n • আপোনাৰ ফ\'নটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰিলে"</string>
<string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"যত্ন লোৱাৰ পদক্ষেপসমূহ চাওক"</string>
<string name="high_temp_title" msgid="2218333576838496100">"ফ\'নটো গৰম হ\'বলৈ ধৰিছে"</string>
<string name="high_temp_notif_message" msgid="1277346543068257549">"ফ’নটো ঠাণ্ডা হৈ থকাৰ সময়ত কিছুমান সুবিধা উপলব্ধ নহয়।\nঅধিক তথ্যৰ বাবে টিপক"</string>
@@ -754,7 +756,7 @@
<string name="lockscreen_unlock_right" msgid="4658008735541075346">"সোঁ শ্বৰ্টকাটটোৱেও আনলক কৰিব"</string>
<string name="lockscreen_none" msgid="4710862479308909198">"একো বাছনি কৰা হোৱা নাই"</string>
<string name="tuner_launch_app" msgid="3906265365971743305">"<xliff:g id="APP">%1$s</xliff:g>ক লঞ্চ কৰক"</string>
- <string name="tuner_other_apps" msgid="7767462881742291204">"অন্যান্য এপসমূহ"</string>
+ <string name="tuner_other_apps" msgid="7767462881742291204">"অন্যান্য এপ্সমূহ"</string>
<string name="tuner_circle" msgid="5270591778160525693">"পৰিচিত মানুহৰ গোট"</string>
<string name="tuner_plus" msgid="4130366441154416484">"যোগ চিহ্ন"</string>
<string name="tuner_minus" msgid="5258518368944598545">"বিয়োগ চিহ্ন"</string>
@@ -785,7 +787,7 @@
<string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"অসুবিধা নিদিব-ক এটা স্বয়ংক্ৰিয় নিয়ম (<xliff:g id="ID_1">%s</xliff:g>)এ অন কৰিলে।"</string>
<string name="qs_dnd_prompt_app" msgid="4027984447935396820">"অসুবিধা নিদিব-ক কোনো এপ্ (<xliff:g id="ID_1">%s</xliff:g>)এ অন কৰিলে।"</string>
<string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"অসুবিধা নিদিব-ক এটা স্বয়ংক্ৰিয় নিয়ম বা এপে অন কৰিলে।"</string>
- <string name="running_foreground_services_title" msgid="5137313173431186685">"নেপথ্যত চলি থকা এপসমূহ"</string>
+ <string name="running_foreground_services_title" msgid="5137313173431186685">"নেপথ্যত চলি থকা এপ্সমূহ"</string>
<string name="running_foreground_services_msg" msgid="3009459259222695385">"বেটাৰী আৰু ডেটাৰ ব্যৱহাৰৰ বিষয়ে সবিশেষ জানিবলৈ টিপক"</string>
<string name="mobile_data_disable_title" msgid="5366476131671617790">"ম’বাইল ডেটা অফ কৰিবনে?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"আপুনি <xliff:g id="CARRIER">%s</xliff:g>ৰ জৰিয়তে ডেটা সংযোগ বা ইণ্টাৰনেট সংযোগ নাপাব। কেৱল ৱাই-ফাইৰ যোগেৰে ইণ্টাৰনেট উপলব্ধ হ\'ব।"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"অপ্ৰিয়"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> নম্বৰ অৱস্থানলৈ স্থানান্তৰিত কৰক"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্ৰণসমূহ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ক্ষিপ্ৰ ছেটিঙৰ পৰা এক্সেছ কৰিবলৈ নিয়ন্ত্ৰণসমূহ বাছনি কৰক"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"নিয়ন্ত্ৰণসমূহ পুনৰ সজাবলৈ ধৰি ৰাখক আৰু টানি আনি এৰক"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"আটাইবোৰ নিয়ন্ত্ৰণ আঁতৰোৱা হৈছে"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"সালসলনিসমূহ ছেভ নহ’ল"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"অন্য এপ্সমূহ চাওক"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"পুনৰ সজাওক"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"নিয়ন্ত্ৰণ যোগ দিয়ক"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"সম্পাদনালৈ উভতি যাওক"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"নিয়ন্ত্ৰণসমূহ ল’ড কৰিবপৰা নগ’ল। এপ্টোৰ ছেটিং সলনি কৰা হোৱা নাই বুলি নিশ্চিত কৰিবলৈ <xliff:g id="APP">%s</xliff:g> এপ্টো পৰীক্ষা কৰক।"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"সমিল নিয়ন্ত্ৰণসমূহ উপলব্ধ নহয়"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string>
@@ -1055,7 +1055,7 @@
<string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# টা এপ্ সক্ৰিয় হৈ আছে}one{# টা এপ্ সক্ৰিয় হৈ আছে}other{# টা এপ্ সক্ৰিয় হৈ আছে}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"নতুন তথ্য"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"সক্ৰিয় এপ্"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"এই এপ্সমূহ সক্ৰিয় আৰু আনকি আপুনি এইসমূহ ব্যৱহাৰ নকৰাৰ সময়তো চলি থাকে। ই সেইসমূহৰ কাৰ্য্যক্ষমতা উন্নত কৰে, কিন্তু ই বেটাৰীৰ জীৱনকালতো প্ৰভাৱ পেলাব পাৰে।"</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"আপুনি এপ্সমূহ ব্যৱহাৰ নকৰাৰ সময়তো এইসমূহ সক্ৰিয় হৈ থাকে আৰু চলি থাকে। ই সেইসমূহৰ কাৰ্যক্ষমতা উন্নত কৰে, কিন্তু ই বেটাৰীৰ জীৱনকালতো প্ৰভাৱ পেলাব পাৰে।"</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"বন্ধ কৰক"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"বন্ধ হ’ল"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"হ’ল"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"আপোনাৰ কৰ্মস্থানৰ নীতিয়ে আপোনাক কেৱল কৰ্মস্থানৰ প্ৰ’ফাইলৰ পৰা ফ’ন কল কৰিবলৈ দিয়ে"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"বন্ধ কৰক"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"লক স্ক্ৰীনৰ ছেটিং"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"লক স্ক্ৰীন কাষ্টমাইজ কৰক"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"লক স্ক্ৰীন কাষ্টমাইজ কৰিবলৈ আনলক কৰক"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ৱাই-ফাই উপলব্ধ নহয়"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"কেমেৰা অৱৰোধ কৰা আছে"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"কেমেৰা আৰু মাইক্ৰ’ফ’ন অৱৰোধ কৰা আছে"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"মাইক্ৰ’ফ’ন অৱৰোধ কৰা আছে"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"অগ্ৰাধিকাৰ দিয়া ম’ড অন আছে"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistantএ আপোনাৰ কথা শুনি আছে"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ছেটিঙত টোকাৰ ডিফ’ল্ট এপ্ ছেট কৰক"</string>
</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 8c9af86..c30b283 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -53,7 +53,7 @@
<string name="usb_debugging_allow" msgid="1722643858015321328">"İcazə verin"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB ilə sazlama qadağandır"</string>
<string name="usb_debugging_secondary_user_message" msgid="1888835696965417845">"Hazırda bu cihaza daxil olmuş istifadəçi USB sazlama prosesini aktiv edə bilməz. Bu funksiyadan istifadə etmək üçün admin istifadəçiyə keçin."</string>
- <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Sistem dili <xliff:g id="LANGUAGE">%1$s</xliff:g> dilinə dəyişdirilsin?"</string>
+ <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Sistem dili <xliff:g id="LANGUAGE">%1$s</xliff:g> olsun?"</string>
<string name="hdmi_cec_set_menu_language_description" msgid="8176716678074126619">"Sistem dilinin dəyişdirilməsi başqa cihaz tərəfindən tələb olunur"</string>
<string name="hdmi_cec_set_menu_language_accept" msgid="2513689457281009578">"Dili dəyişin"</string>
<string name="hdmi_cec_set_menu_language_decline" msgid="7650721096558646011">"Cari dili saxlayın"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlayın"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dayandırın"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Birəlli rejim"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standart"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Orta"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Yüksək"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonu blokdan çıxarılsın?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerası blokdan çıxarılsın?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası və mikrofonu blokdan çıxarılsın?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiv edin"</string>
<string name="sound_settings" msgid="8874581353127418308">"Səs və vibrasiya"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ayarlar"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Təhlükəsiz səs səviyyəsinə azaldıldı"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Səs səviyyəsi tövsiyə ediləndən uzun müddət yüksək olub"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Tətbiq bərkidilib"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Sancaq götürülənə qədər bu görünəcək. Sancağı götürmək üçün Geri və İcmal düymələrinə basıb saxlayın."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"\"Geri\" və \"Əsas ekran\" düymələrinin davamlı basılması ilə çıxarılana qədər tətbiq göz önündə qalır."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"sevimlilərdən silin"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> mövqeyinə keçirin"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Nizamlayıcılar"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Sürətli Ayarlardan giriş üçün nizamlayıcıları seçin"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Vidcetləri daşıyaraq yerini dəyişin"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Kontrol vidcetləri silindi"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Dəyişikliklər yadda saxlanmadı"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Digər tətbiqlərə baxın"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Yenidən nizamlayın"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Nizamlayıcılar əlavə edin"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Redaktəyə qayıdın"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Nizamlayıcıları yükləmək mümkün olmadı. <xliff:g id="APP">%s</xliff:g> tətbiqinə toxunaraq tətbiq ayarlarının dəyişmədiyinə əmin olun."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Uyğun nizamlayıcılar əlçatan deyil"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Digər"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"İş siyasətiniz yalnız iş profilindən telefon zəngləri etməyə imkan verir"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"İş profilinə keçin"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Bağlayın"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Kilid ekranı ayarları"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Kilid ekranını fərdiləşdirin"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi əlçatan deyil"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera bloklanıb"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera və mikrofon bloklanıb"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon bloklanıb"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritet rejimi aktivdir"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent aktivdir"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index fd56a3e..81e2eff 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Počnite"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavite"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Režim jednom rukom"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardno"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Srednje"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoko"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite da odblokirate mikrofon uređaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite da odblokirate kameru uređaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite da odblokirate kameru i mikrofon uređaja?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogućite"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibriranje"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Podešavanja"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Zvuk je smanjen na bezbednu jačinu"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Zvuk je bio glasan duže nego što se preporučuje"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je zakačena"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Na ovaj način se ovo stalno prikazuje dok ga ne otkačite. Dodirnite i zadržite Nazad i Pregled da biste ga otkačili."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Na ovaj način se ovo stalno prikazuje dok ga ne otkačite. Dodirnite i zadržite Nazad i Početna da biste ga otkačili."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonili iz omiljenih"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Premestite na <xliff:g id="NUMBER">%d</xliff:g>. poziciju"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Odaberite kontrole da biste im pristupili iz Brzih podešavanja"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i prevucite da biste promenili raspored kontrola"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promene nisu sačuvane"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Pogledajte druge aplikacije"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Prerasporedi"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj kontrole"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Nazad na izmene"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Učitavanje kontrola nije uspelo. Pogledajte aplikaciju <xliff:g id="APP">%s</xliff:g> da biste se uverili da se podešavanja aplikacije nisu promenila."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilne kontrole nisu dostupne"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
@@ -1047,7 +1047,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Pogledajte sve"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Da biste promenili mrežu, prekinite eternet vezu"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"Radi boljeg doživljaja uređaja, aplikacije i usluge i dalje mogu da traže WiFi mreže u bilo kom trenutku, čak i kada je WiFi isključen. To možete da promenite u podešavanjima WiFi skeniranja. "<annotation id="link">"Promenite"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Isključite režim rada u avionu"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Isključi režim rada u avionu"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> želi da doda sledeću pločicu u Brza podešavanja"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj pločicu"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ne dodaj pločicu"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Smernice za posao vam omogućavaju da telefonirate samo sa poslovnog profila"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Pređi na poslovni profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Podešavanja zaključanog ekrana"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključani ekran"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi nije dostupan"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokirana"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera i mikrofon su blokirani"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetni režim je uključen"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Pomoćnik je u aktivnom stanju"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 80a07f4..e742c01 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Пачаць"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Спыніць"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Рэжым кіравання адной рукой"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Кантрастнасць"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартная"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Сярэдняя"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Высокая"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Разблакіраваць мікрафон прылады?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Разблакіраваць камеру прылады?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Разблакіраваць камеру і мікрафон прылады?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"адключыць"</string>
<string name="sound_settings" msgid="8874581353127418308">"Гук і вібрацыя"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Налады"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Гук паменшаны да бяспечнага ўзроўню"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Гучнасць была моцнай больш часу, чым рэкамендавана"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Праграма замацавана"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Будзе паказвацца, пакуль не адмацуеце. Каб адмацаваць, краніце і ўтрымлівайце кнопкі \"Назад\" і \"Агляд\"."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Будзе паказвацца, пакуль не адмацуеце. Каб адмацаваць, націсніце і ўтрымлівайце кнопкі \"Назад\" і \"Галоўны экран\"."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"выдаліць з абранага"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Перамясціць у пазіцыю <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Сродкі кіравання"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Выберыце элементы кіравання, да якіх вы хочаце мець доступ з хуткіх налад"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Каб змяніць парадак элементаў кіравання, утрымлівайце і перацягвайце іх"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Усе элементы кіравання выдалены"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Змяненні не захаваны"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Паказаць іншыя праграмы"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Змяніць парадак"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Дадаць элементы кіравання"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Вярнуцца да рэдагавання"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Не ўдалося загрузіць элементы кіравання. Праверце, ці не змяніліся налады праграмы \"<xliff:g id="APP">%s</xliff:g>\"."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Сумяшчальныя элементы кіравання недаступныя"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Іншае"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Згодна з палітыкай вашай арганізацыі, рабіць тэлефонныя выклікі дазволена толькі з працоўнага профілю"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Пераключыцца на працоўны профіль"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрыць"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Налады экрана блакіроўкі"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Наладзіць экран блакіроўкі"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Сетка Wi-Fi недаступная"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера заблакіравана"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера і мікрафон заблакіраваны"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Мікрафон заблакіраваны"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Прыярытэтны рэжым уключаны"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Памочнік гатовы выконваць каманды"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 585902f..910ecfc 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -254,9 +254,9 @@
<string name="quick_settings_casting" msgid="1435880708719268055">"Предава се"</string>
<string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"Устройство без име"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"Няма налични устройства"</string>
- <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"не е установена връзка с Wi-Fi"</string>
+ <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Не е установена връзка с Wi-Fi"</string>
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Яркост"</string>
- <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Цветове: инверт."</string>
+ <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инвертиране на цветовете"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекция на цветове"</string>
<string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Размер на шрифта"</string>
<string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Управление на потребителите"</string>
@@ -279,7 +279,7 @@
<string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"Ограничение от <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6440531507319809121">"Служебни приложения"</string>
- <string name="quick_settings_night_display_label" msgid="8180030659141778180">"Нощно осветл."</string>
+ <string name="quick_settings_night_display_label" msgid="8180030659141778180">"Нощно осветление"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"Ще се вкл. по залез"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"До изгрев"</string>
<string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"Ще се включи в <xliff:g id="TIME">%s</xliff:g>"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Старт"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Стоп"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Режим за работа с една ръка"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартен"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Среден"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Висок"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Да се отблокира ли микрофонът на устройството?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Да се отблокира ли камерата на устройството?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Да се отблокират ли камерата и микрофонът на устройството?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"деактивиране"</string>
<string name="sound_settings" msgid="8874581353127418308">"Звук и вибриране"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Настройки"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Силата на звука е намалена до по-безопасно ниво"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Нивото на силата на звука е било високо по-дълго, отколкото е препоръчително"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Приложението е фиксирано"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Екранът ще се показва, докато не го освободите с докосване и задържане на бутона за връщане назад и този за общ преглед."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Екранът ще се показва, докато не го освободите с докосване и задържане на бутона за връщане назад и „Начало“."</string>
@@ -515,7 +517,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Отключване с цел използване"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"При извличането на картите ви възникна проблем. Моля, опитайте отново по-късно"</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Настройки за заключения екран"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"скенер за QR кодове"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"Скенер за QR кодове"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Актуализира се"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Потребителски профил в Work"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Самолетен режим"</string>
@@ -667,7 +669,7 @@
<string name="accessibility_long_click_tile" msgid="210472753156768705">"Отваряне на настройките"</string>
<string name="accessibility_status_bar_headphones" msgid="1304082414912647414">"Слушалките (без микрофон) са свързани"</string>
<string name="accessibility_status_bar_headset" msgid="2699275863720926104">"Слушалките са свързани"</string>
- <string name="data_saver" msgid="3484013368530820763">"Данни: икономия"</string>
+ <string name="data_saver" msgid="3484013368530820763">"Икономия на данни"</string>
<string name="accessibility_data_saver_on" msgid="5394743820189757731">"Функцията „Икономия на данни“ е включена"</string>
<string name="switch_bar_on" msgid="1770868129120096114">"Вкл."</string>
<string name="switch_bar_off" msgid="5669805115416379556">"Изкл."</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Да се изключат ли мобилните данни?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Няма да можете да използвате данни или интернет чрез <xliff:g id="CARRIER">%s</xliff:g>. Ще имате достъп до интернет само през Wi-Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"оператора си"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Искате ли да се върнете към <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Искате ли да превключите обратно към <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Мрежата за мобилни данни няма да се превключва автоматично въз основа на наличността"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Не, благодаря"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Да, превключване"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"за премахване на означаването като любимо"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Преместете на позиция <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Изберете контролите, до които да осъществявате достъп от бързите настройки"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задръжте и плъзнете, за да пренаредите контролите"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Всички контроли са премахнати"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промените не са запазени"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Преглед на други приложения"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Пренареждане"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Добавяне на контроли"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Назад към редактирането"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Контролите не се заредиха. Отворете приложението <xliff:g id="APP">%s</xliff:g> и проверете дали настройките му не са променени."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Не са налице съвместими контроли"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string>
@@ -1047,7 +1047,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Вижте всички"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"За да превключите мрежите, прекъснете връзката с Ethernet"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"С цел подобряване на практическата работа с устройството приложенията и услугите пак могат да сканират за Wi‑Fi мрежи по всяко време дори когато функцията за Wi‑Fi e изключена. Можете да промените съответното поведение от настройките за сканиране за Wi‑Fi. "<annotation id="link">"Промяна"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Изключване на самолетния режим"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Изключване на режима"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> иска да добави следния панел към бързите настройки"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Добавяне на панел"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Отмяна на добавянето"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Служебните правила ви дават възможност да извършвате телефонни обаждания само от служебния потребителски профил"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Превключване към служебния потребителски профил"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Затваряне"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Настройки за заключения екран"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Персонализ. на заключения екран"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi не е налице"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Достъпът до камерата е блокиран"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Достъпът до камерата и микрофона е блокиран"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Достъпът до микрофона е блокиран"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетният режим е включен"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Функцията за активиране на Асистент е включена"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 76e657d..9e029dc 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"শুরু করুন"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"বন্ধ করুন"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"এক হাতে ব্যবহার করার মোড"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"কনট্রাস্ট"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"স্ট্যান্ডার্ড"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"মিডিয়াম"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"হাই"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ডিভাইসের মাইক্রোফোন আনব্লক করতে চান?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ডিভাইসের ক্যামেরা আনব্লক করতে চান?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ডিভাইসের ক্যামেরা এবং মাইক্রোফোন আনব্লক করতে চান?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"বন্ধ হবে"</string>
<string name="sound_settings" msgid="8874581353127418308">"সাউন্ড ও ভাইব্রেশন"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"সেটিংস"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"নিরাপদ ভলিউমে কমানো হয়েছে"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"যতক্ষণ সাজেস্ট করা হয়েছে তার থেকে বেশি সময় ভলিউম হাই ছিল"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"অ্যাপ পিন করা হয়েছে"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"এটি আপনি আনপিন না করা পর্যন্ত এটিকে প্রদর্শিত করবে৷ আনপিন করতে ফিরুন এবং ওভারভিউ স্পর্শ করে ধরে থাকুন।"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"এর ফলে আপনি এটি আনপিন না করা পর্যন্ত এটি দেখানো হতে থাকবে। আনপিন করতে \"ফিরে যান\" এবং \"হোম\" বোতামদুটি ট্যাপ করে ধরে রাখুন।"</string>
@@ -701,7 +703,7 @@
<string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"টাইলগুলি আবার সাজানোর জন্য ধরে থেকে টেনে আনুন"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"সরানোর জন্য এখানে টেনে আনুন"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"আপনাকে কমপক্ষে <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>টি টাইল রাখতে হবে"</string>
- <string name="qs_edit" msgid="5583565172803472437">"সম্পাদনা করুন"</string>
+ <string name="qs_edit" msgid="5583565172803472437">"এডিট করুন"</string>
<string name="tuner_time" msgid="2450785840990529997">"সময়"</string>
<string-array name="clock_options">
<item msgid="3986445361435142273">"ঘণ্টা, মিনিট, এবং সেকেন্ড দেখান"</item>
@@ -778,7 +780,7 @@
<string name="mobile_data" msgid="4564407557775397216">"মোবাইল ডেটা"</string>
<string name="mobile_data_text_format" msgid="6806501540022589786">"<xliff:g id="ID_1">%1$s</xliff:g> — <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="mobile_carrier_text_format" msgid="8912204177152950766">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>, <xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>"</string>
- <string name="wifi_is_off" msgid="5389597396308001471">"ওয়াই ফাই বন্ধ আছে"</string>
+ <string name="wifi_is_off" msgid="5389597396308001471">"ওয়াই-ফাই বন্ধ আছে"</string>
<string name="bt_is_off" msgid="7436344904889461591">"ব্লুটুথ বন্ধ আছে"</string>
<string name="dnd_is_off" msgid="3185706903793094463">"বিরক্ত করবে না বিকল্পটি বন্ধ আছে"</string>
<string name="dnd_is_on" msgid="7009368176361546279">"\'বিরক্ত করবে না\' মোড চালু আছে"</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"মোবাইল ডেটা বন্ধ করবেন?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"আপনি \'<xliff:g id="CARRIER">%s</xliff:g>\'-এর মাধ্যমে ডেটা অথবা ইন্টারনেট অ্যাক্সেস করতে পারবেন না। শুধুমাত্র ওয়াই-ফাইয়ের মাধ্যমেই ইন্টারনেট অ্যাক্সেস করা যাবে।"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"আপনার পরিষেবা প্রদানকারী"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"আবার <xliff:g id="CARRIER">%s</xliff:g>-এর ডেটায় পরিবর্তন করবেন?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"আবার <xliff:g id="CARRIER">%s</xliff:g>-এ পাল্টাবেন?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"উপলভ্যতার উপরে ভিত্তি করে অটোমেটিক মোবাইল ডেটায় পরিবর্তন করা হবে না"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"না থাক"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"হ্যাঁ, পাল্টান"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"পছন্দসই থেকে সরান"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> অবস্থানে সরান"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্রণ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"যে কন্ট্রোল অ্যাক্সেস করতে চান তা \'দ্রুত সেটিংস\' থেকে বেছে নিন"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"কন্ট্রোলগুলিকে আবার সাজানোর জন্য ধরে রেখে টেনে আনুন"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"সমস্ত কন্ট্রোল সরানো হয়েছে"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"পরিবর্তন সেভ করা হয়নি"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"অন্যান্য অ্যাপ দেখুন"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"আবার সাজান"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"কন্ট্রোল যোগ করুন"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"’এডিট করুন’ বোতামে ফিরে যান"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"কন্ট্রোল লোড করা যায়নি। অ্যাপ সেটিংসে কোনও পরিবর্তন করা হয়েছে কিনা তা ভাল করে দেখে নিতে <xliff:g id="APP">%s</xliff:g> অ্যাপ চেক করুন।"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"মানানসই কন্ট্রোল উপলভ্য নেই"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"কাজ সংক্রান্ত নীতি, আপনাকে শুধুমাত্র অফিস প্রোফাইল থেকে কল করার অনুমতি দেয়"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"অফিস প্রোফাইলে পাল্টে নিন"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"বন্ধ করুন"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"লক স্ক্রিন সেটিংস"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"লক স্ক্রিন কাস্টমাইজ করুন"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ওয়াই-ফাই উপলভ্য নয়"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ক্যামেরার অ্যাক্সেস ব্লক করা আছে"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ক্যামেরা এবং মাইক্রোফোনের অ্যাক্সেস ব্লক করা আছে"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"মাইক্রোফোনের অ্যাক্সেস ব্লক করা আছে"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"\'প্রায়োরিটি\' মোড চালু করা আছে"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"অ্যাসিস্ট্যান্ট আপনার কথা শোনার জন্য চালু করা আছে"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 4ce0baf..34dc7f5 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -48,7 +48,7 @@
<string name="always_use_device" msgid="210535878779644679">"Uvijek otvori aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g> kada se poveže <xliff:g id="USB_DEVICE">%2$s</xliff:g>"</string>
<string name="always_use_accessory" msgid="1977225429341838444">"Uvijek otvori aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g> kada se poveže <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>"</string>
<string name="usb_debugging_title" msgid="8274884945238642726">"Omogućiti otklanjanje grešaka putem USB-a?"</string>
- <string name="usb_debugging_message" msgid="5794616114463921773">"RSA otisak prsta za otključavanje računara je: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_message" msgid="5794616114463921773">"Digitalni otisak RSA ključa računara je: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="4003121804294739548">"Uvijek dozvoli sa ovog računara"</string>
<string name="usb_debugging_allow" msgid="1722643858015321328">"Dozvoli"</string>
<string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Otklanjanje grešaka putem USB-a nije dozvoljeno"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Započnite"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavite"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Način rada jednom rukom"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardno"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Srednje"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoko"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokirati mikrofon uređaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokirati kameru uređaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokirati kameru i mikrofon uređaja?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogući"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibracija"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Postavke"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Stišano je na sigurniju jačinu zvuka"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Jačina zvuka je bila glasna duže nego što se preporučuje"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je zakačena"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ekran ostaje prikazan ovako dok ga ne otkačite. Da ga otkačite, dodirnite i držite dugme Nazad."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Na ovaj način ekran ostaje prikazan dok ga ne otkačite. Da otkačite ekran, dodirnite i držite dugme Nazad i Početna."</string>
@@ -517,13 +519,13 @@
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Postavke zaključavanja ekrana"</string>
<string name="qr_code_scanner_title" msgid="1938155688725760702">"Skener QR koda"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Ažuriranje"</string>
- <string name="status_bar_work" msgid="5238641949837091056">"Profil za posao"</string>
+ <string name="status_bar_work" msgid="5238641949837091056">"Radni profil"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Način rada u avionu"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"Nećete čuti sljedeći alarm u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template" msgid="2234991538018805736">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="accessibility_status_bar_hotspot" msgid="2888479317489131669">"Pristupna tačka"</string>
- <string name="accessibility_managed_profile" msgid="4703836746209377356">"Profil za posao"</string>
+ <string name="accessibility_managed_profile" msgid="4703836746209377356">"Radni profil"</string>
<string name="tuner_warning_title" msgid="7721976098452135267">"Zabava za neke, ali ne za sve"</string>
<string name="tuner_warning" msgid="1861736288458481650">"Podešavač za korisnički interfejs sistema vam omogućava dodatne načine da podesite i prilagodite Androidov interfejs. Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
<string name="tuner_persistent_warning" msgid="230466285569307806">"Ove eksperimentalne funkcije se u budućim verzijama mogu mijenjati, kvariti ili nestati. Budite oprezni."</string>
@@ -883,23 +885,21 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonite iz omiljenog"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Premjesti na poziciju <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Odaberite kontrole kojim želite pristupati iz Brzih postavki"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite i prevucite da preuredite kontrole"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promjene nisu sačuvane"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Prikaži druge aplikacije"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Preuređivanje"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj kontrole"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Nazad na uređivanje"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Učitavanje kontrola nije uspjelo. Provjerite aplikaciju <xliff:g id="APP">%s</xliff:g> da se uvjerite da postavke aplikacije nisu izmijenjene."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilne kontrole nisu dostupne"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
<string name="controls_dialog_title" msgid="2343565267424406202">"Dodajte u kontrole uređaja"</string>
<string name="controls_dialog_ok" msgid="2770230012857881822">"Dodaj"</string>
- <string name="controls_dialog_remove" msgid="3775288002711561936">"Uklanjanje"</string>
+ <string name="controls_dialog_remove" msgid="3775288002711561936">"Ukloni"</string>
<string name="controls_dialog_message" msgid="342066938390663844">"Predlaže <xliff:g id="APP">%s</xliff:g>"</string>
<string name="controls_tile_locked" msgid="731547768182831938">"Uređaj je zaključan"</string>
<string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"Prikazati uređaje i kontrolirati njima sa zaključanog ekrana?"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"WiFi se trenutno ne može automatski povezati"</string>
<string name="see_all_networks" msgid="3773666844913168122">"Prikaži sve"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Da promijenite mrežu, isključite ethernet"</string>
- <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Radi poboljšanja iskustva s uređajem aplikacije i usluge i dalje mogu bilo kada skenirati WiFi mreže, čak i kada je WiFi isključen. Ovo možete promijeniti u Postavkama skeniranja WiFi mreže. "<annotation id="link">"Promijeni"</annotation></string>
+ <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Radi poboljšanja iskustva s uređajem aplikacije i usluge i dalje mogu tražiti WiFi mreže bilo kada, čak i kada je WiFi isključen. Ovo možete promijeniti u Postavkama traženja WiFi mreže. "<annotation id="link">"Promijeni"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"Isključi način rada u avionu"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> želi dodati sljedeću karticu u Brze postavke"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj karticu"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Radna pravila vam dozvoljavaju upućivanje telefonskih poziva samo s radnog profila"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Pređite na radni profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Postavke zaključavanja ekrana"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključavanje ekrana"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Otključajte da prilagodite zaključavanje ekrana"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi mreža nije dostupna"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokirana"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera i mikrofon su blokirani"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Način rada Prioriteti je uključen"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Pažnja Asistenta je uključena"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Postavite zadanu aplikaciju za bilješke u Postavkama"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index c08858a..1a8239b 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -239,7 +239,7 @@
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicació"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Estalvi de pantalla"</string>
<string name="quick_settings_camera_label" msgid="5612076679385269339">"Accés a la càmera"</string>
- <string name="quick_settings_mic_label" msgid="8392773746295266375">"Accés al micro"</string>
+ <string name="quick_settings_mic_label" msgid="8392773746295266375">"Accés al micròfon"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
<string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"Bloquejat"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"Dispositiu multimèdia"</string>
@@ -250,7 +250,7 @@
<string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"Xarxes no disponibles"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"No hi ha cap xarxa Wi-Fi disponible"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"S\'està activant…"</string>
- <string name="quick_settings_cast_title" msgid="2279220930629235211">"Emet pantalla"</string>
+ <string name="quick_settings_cast_title" msgid="2279220930629235211">"Emet la pantalla"</string>
<string name="quick_settings_casting" msgid="1435880708719268055">"En emissió"</string>
<string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"Dispositiu sense nom"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"No hi ha cap dispositiu disponible."</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inicia"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Atura"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Mode d\'una mà"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Estàndard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Mitjà"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alt"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vols desbloquejar el micròfon del dispositiu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vols desbloquejar la càmera del dispositiu?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vols desbloquejar la càmera i el micròfon del dispositiu?"</string>
@@ -378,8 +382,8 @@
<string name="user_remove_user_title" msgid="9124124694835811874">"Vols suprimir l\'usuari?"</string>
<string name="user_remove_user_message" msgid="6702834122128031833">"Totes les aplicacions i les dades d\'aquest usuari se suprimiran."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Suprimeix"</string>
- <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tindrà accés a tota la informació que es veu en pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servei que ofereix aquesta funció tindrà accés a tota la informació visible a la teva pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio que reprodueixis."</string>
+ <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tindrà accés a tota la informació que es mostri a la pantalla o que es reprodueixi al dispositiu mentre graves o emets contingut. Això inclou contrasenyes, dades de pagament, fotos, missatges i àudio."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servei que ofereix aquesta funció tindrà accés a tota la informació que es mostri a la pantalla o que es reprodueixi al dispositiu mentre graves o emets contingut. Això inclou contrasenyes, dades de pagament, fotos, missatges i àudio."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vols començar a gravar o emetre contingut?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Vols començar a gravar o emetre contingut amb <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vols permetre que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparteixi o gravi contingut?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactivar"</string>
<string name="sound_settings" msgid="8874581353127418308">"So i vibració"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuració"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"El volum s\'ha abaixat a un nivell més segur"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volum ha estat elevat durant més temps del recomanat"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"L\'aplicació està fixada"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Aquest element es continuarà mostrant fins que deixis de fixar-lo. Per fer-ho, toca i mantén premudes els botons Enrere i Aplicacions recents."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Aquest element es continuarà mostrant fins que deixis de fixar-lo. Per fer-ho, mantén premuts els botons Enrere i Inici."</string>
@@ -515,7 +517,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Desbloqueja per utilitzar"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"Hi ha hagut un problema en obtenir les teves targetes; torna-ho a provar més tard"</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Configuració de la pantalla de bloqueig"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"escàner de codis QR"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"Escàner de codis QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"S\'està actualitzant"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Perfil de treball"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Mode d\'avió"</string>
@@ -697,8 +699,8 @@
<string name="right_keycode" msgid="2480715509844798438">"Codi de tecla de la dreta"</string>
<string name="left_icon" msgid="5036278531966897006">"Icona de l\'esquerra"</string>
<string name="right_icon" msgid="1103955040645237425">"Icona de la dreta"</string>
- <string name="drag_to_add_tiles" msgid="8933270127508303672">"Mantén premut i arrossega per afegir icones"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén premut i arrossega per reorganitzar els mosaics"</string>
+ <string name="drag_to_add_tiles" msgid="8933270127508303672">"Mantén premudes les icones i arrossega-les per afegir-les"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén premudes les icones i arrossega-les per reordenar-les"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrossega aquí per suprimir"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Necessites com a mínim <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> mosaics"</string>
<string name="qs_edit" msgid="5583565172803472437">"Edita"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"suprimir dels preferits"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mou a la posició <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Tria els controls a què vols accedir des de la configuració ràpida"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén premut i arrossega per reorganitzar els controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"S\'han suprimit tots els controls"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Els canvis no s\'han desat"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Mostra altres aplicacions"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reordena"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Afegeix controls"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Torna a l\'edició"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"No s\'han pogut carregar els controls. Consulta l\'aplicació <xliff:g id="APP">%s</xliff:g> per assegurar-te que la configuració de l\'aplicació no hagi canviat."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Els controls compatibles no estan disponibles"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altres"</string>
@@ -1022,7 +1022,7 @@
<string name="person_available" msgid="2318599327472755472">"Disponible"</string>
<string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Hi ha hagut un problema en llegir el mesurador de la bateria"</string>
<string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toca per obtenir més informació"</string>
- <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Cap alarma configurada"</string>
+ <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Cap alarma definida"</string>
<string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor d\'empremtes digitals"</string>
<string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
<string name="accessibility_enter_hint" msgid="2617864063504824834">"accedir al dispositiu"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"La teva política de treball et permet fer trucades només des del perfil de treball"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Canvia al perfil de treball"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Tanca"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Configuració pantalla de bloqueig"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalitza pantalla de bloqueig"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"No hi ha cap Wi‑Fi disponible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"La càmera està bloquejada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"La càmera i el micròfon estan bloquejats"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"El micròfon està bloquejat"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"El mode Prioritat està activat"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"L\'Assistent està activat"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index a63025f..c26bd88 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Spustit"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončit"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Režim jedné ruky"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardní"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Střední"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Vysoká"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Odblokovat mikrofon zařízení?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Odblokovat fotoaparát zařízení?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Odblokovat fotoaparát a mikrofon zařízení?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktivovat"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvuk a vibrace"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavení"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ztišeno na bezpečnější hlasitost"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hlasitost byla vysoká déle, než je doporučeno"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikace je připnutá"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Uvolníte jej stisknutím a podržením tlačítek Zpět a Přehled."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Obsah bude připnut v zobrazení, dokud ho neuvolníte. Uvolníte ho podržením tlačítek Zpět a Plocha."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odeberete z oblíbených"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Přesunout na pozici <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládací prvky"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Vyberte ovládací prvky, které chcete mít v Rychlém nastavení"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ovládací prvky můžete uspořádat podržením a přetažením"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Všechny ovládací prvky byly odstraněny"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Změny nebyly uloženy"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Zobrazit další aplikace"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Uspořádání"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Přidat ovládací prvky"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Zpět k úpravám"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Ovládací prvky se nepodařilo načíst. V aplikaci <xliff:g id="APP">%s</xliff:g> zkontrolujte, zda se nezměnilo nastavení."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilní ovládání není k dispozici"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Jiné"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Vaše pracovní zásady vám umožňují telefonovat pouze z pracovního profilu"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Přepnout na pracovní profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zavřít"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Nastavení obrazovky uzamčení"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Přizpůsobit zámek obrazovky"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Síť Wi-Fi není dostupná"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokována"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera a mikrofon jsou blokovány"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokován"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Režim priority je zapnutý"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Pozornost Asistenta je zapnutá"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index e0e1a24..bb3841d 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Enhåndstilstand"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Middel"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Høj"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du fjerne blokeringen af enhedens mikrofon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du fjerne blokeringen af enhedens kamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du fjerne blokeringen af enhedens kamera og mikrofon?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiver"</string>
<string name="sound_settings" msgid="8874581353127418308">"Lyd og vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Indstillinger"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Der blev skruet ned til en mere sikker lydstyrke"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Lydstyrken har været for høj i længere tid end anbefalet"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Appen er fastgjort"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Dette fastholder skærmen i visningen, indtil du frigør den. Tryk på Tilbage og Overblik, og hold fingeren nede for at frigøre skærmen."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Dette fastholder skærmen i visningen, indtil du frigør den. Hold Tilbage og Startskærm nede for at frigøre skærmen."</string>
@@ -794,7 +796,7 @@
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobildata skifter ikke automatisk på baggrund af tilgængelighed"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Nej tak"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ja, skift"</string>
- <string name="touch_filtered_warning" msgid="8119511393338714836">"Indstillinger kan ikke bekræfte dit svar, da en app dækker for en anmodning om tilladelse."</string>
+ <string name="touch_filtered_warning" msgid="8119511393338714836">"Indstillinger kan ikke verificere dit svar, da en app dækker for en anmodning om tilladelse."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"Vil du give <xliff:g id="APP_0">%1$s</xliff:g> tilladelse til at vise eksempler fra <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- Den kan læse oplysninger fra <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="slice_permission_text_2" msgid="6758906940360746983">"- Den kan foretage handlinger i <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjern fra favoritter"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Flyt til position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Betjeningselementer"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Vælg, hvilke styringselementer du vil have adgang til i kvikmenuen"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Flyt et felt ved at holde det nede og trække"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alle styringselementerne blev fjernet"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ændringerne blev ikke gemt"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Se andre apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Omorganiser"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Tilføj styringselementer"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Tilbage til redigering"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Betjeningselementerne kunne ikke indlæses. Tjek <xliff:g id="APP">%s</xliff:g>-appen for at sikre, at dine appindstillinger ikke er blevet ændret."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatible betjeningselementer er ikke tilgængelige"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andre"</string>
@@ -909,7 +909,7 @@
<string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"Nej tak"</string>
<string name="controls_settings_dialog_positive_button" msgid="436070672551674863">"Ja"</string>
<string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"Pinkoden indeholder bogstaver eller symboler"</string>
- <string name="controls_pin_verify" msgid="3452778292918877662">"Bekræft <xliff:g id="DEVICE">%s</xliff:g>"</string>
+ <string name="controls_pin_verify" msgid="3452778292918877662">"Verificer <xliff:g id="DEVICE">%s</xliff:g>"</string>
<string name="controls_pin_wrong" msgid="6162694056042164211">"Forkert pinkode"</string>
<string name="controls_pin_instructions" msgid="6363309783822475238">"Angiv pinkode"</string>
<string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prøv en anden pinkode"</string>
@@ -1020,7 +1020,7 @@
<string name="new_notification_image_content_description" msgid="6017506886810813123">"<xliff:g id="NAME">%1$s</xliff:g> har sendt et billede"</string>
<string name="new_status_content_description" msgid="6046637888641308327">"<xliff:g id="NAME">%1$s</xliff:g> har opdateret sin status: <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="person_available" msgid="2318599327472755472">"Tilgængelig"</string>
- <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Der er problemer med at aflæse dit batteriniveau"</string>
+ <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Der er problemer med at læse dit batteriniveau"</string>
<string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tryk for at få flere oplysninger"</string>
<string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ingen alarm er indstillet"</string>
<string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingeraftrykssensor"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Din arbejdspolitik tillader kun, at du kan foretage telefonopkald fra arbejdsprofilen"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Skift til arbejdsprofil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Luk"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Indstillinger for låseskærm"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Tilpas låseskærm"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi er ikke tilgængeligt"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameraet er blokeret"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Der er blokeret for kameraet og mikrofonen"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen er blokeret"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetstilstand er aktiveret"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent lytter"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 662393c..23ba2fe 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starten"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Beenden"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Einhandmodus"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Mittel"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoch"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Blockierung des Gerätemikrofons aufheben?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Blockierung der Gerätekamera aufheben?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blockierung von Gerätekamera und Gerätemikrofon aufheben?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktivieren"</string>
<string name="sound_settings" msgid="8874581353127418308">"Ton & Vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Einstellungen"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lautstärke zur Sicherheit verringert"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Die Lautstärke war länger als empfohlen hoch eingestellt"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"App ist auf dem Bildschirm fixiert"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Die App bleibt so lange auf dem Bildschirm fixiert, bis du die Fixierung aufhebst. Berühre und halte dazu \"Zurück\" und \"Übersicht\"."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Die App bleibt so lange auf dem Bildschirm fixiert, bis du die Fixierung aufhebst. Berühre und halte dazu \"Zurück\" und \"Startbildschirm\"."</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Du kannst dann nicht mehr über <xliff:g id="CARRIER">%s</xliff:g> auf Daten und das Internet zugreifen. Das Internet ist nur noch über WLAN verfügbar."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"deinen Mobilfunkanbieter"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Zurück zu <xliff:g id="CARRIER">%s</xliff:g> wechseln?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobile Daten werden nicht je nach Verfügbarkeit automatisch gewechselt"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Je nach Verfügbarkeit wechseln mobile Daten möglicherweise nicht automatisch"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Nein danke"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ja, wechseln"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Deine Eingabe wird von \"Einstellungen\" nicht erkannt, weil die Berechtigungsanfrage von einer App verdeckt wird."</string>
@@ -883,7 +885,8 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"Entfernen aus Favoriten"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Auf Position <xliff:g id="NUMBER">%d</xliff:g> verschieben"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Steuerelemente"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Wähle die Steuerelemente aus, die du über die Schnelleinstellungen aufrufen möchtest"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zum Verschieben von Steuerelementen halten und ziehen"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alle Steuerelemente entfernt"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Änderungen nicht gespeichert"</string>
@@ -1123,11 +1126,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Gemäß den Arbeitsrichtlinien darfst du nur über dein Arbeitsprofil telefonieren"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Zum Arbeitsprofil wechseln"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Schließen"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Sperrbildschirm-Einstellungen"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Sperrbildschirm personalisieren"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Kein WLAN verfügbar"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera blockiert"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera und Mikrofon blockiert"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon blockiert"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritätsmodus an"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant-Aktivierung an"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 50b0b49..b7ad7b9 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Έναρξη"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Διακοπή"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Λειτουργία ενός χεριού"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Αντίθεση"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Τυπική"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Μέτρια"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Υψηλή"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Κατάργηση αποκλεισμού μικροφώνου συσκευής;"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Κατάργηση αποκλεισμού κάμερας συσκευής;"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Κατάργηση αποκλεισμού κάμερας και μικροφώνου συσκευής;"</string>
@@ -881,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"μη αγαπημένο"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Μετακίνηση στη θέση <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Στοιχεία ελέγχου"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Επιλέξτε στοιχεία ελέγχου στα οποία θα έχετε πρόσβαση από τις Γρήγορες ρυθμίσεις"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Κρατήστε και σύρετε για αναδιάταξη των στοιχείων ελέγχου"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Όλα τα στοιχεία ελέγχου καταργήθηκαν"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Οι αλλαγές δεν αποθηκεύτηκαν"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Εμφάνιση άλλων εφαρμογών"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Αναδιάταξη"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Προσθήκη στοιχείων ελέγχου"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Επιστροφή στην επεξεργασία"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Δεν ήταν δυνατή η φόρτωση των στοιχείων ελέγχου. Ελέγξτε την εφαρμογή <xliff:g id="APP">%s</xliff:g> για να βεβαιωθείτε ότι δεν έχουν αλλάξει οι ρυθμίσεις της εφαρμογής."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Μη διαθέσιμα συμβατά στοιχεία ελέγχου"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Άλλο"</string>
@@ -1121,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Η πολιτική εργασίας σάς επιτρέπει να πραγματοποιείτε τηλεφωνικές κλήσεις μόνο από το προφίλ εργασίας σας."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Εναλλαγή σε προφίλ εργασίας"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Κλείσιμο"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Ρυθμίσεις κλειδώματος οθόνης"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Προσαρμογή οθόνης κλειδώματος"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Δεν υπάρχει διαθέσιμο δίκτυο Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Η κάμερα έχει αποκλειστεί"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Η κάμερα και το μικρόφωνο έχουν αποκλειστεί"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Το μικρόφωνο έχει αποκλειστεί"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Η λειτουργία προτεραιότητας είναι ενεργοποιημένη"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Ο Βοηθός βρίσκεται σε αναμονή"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 6913b2d..bed2089 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-handed mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch & hold Back and Home to unpin."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choose controls to access from Quick Settings"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"See other apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Rearrange"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Add controls"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Back to editing"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Controls could not be loaded. Check the <xliff:g id="APP">%s</xliff:g> app to make sure that the app settings haven’t changed."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Compatible controls unavailable"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lock screen settings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera is blocked"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera and microphone blocked"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone is blocked"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 5e3f6ae..01cccac 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-handed mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -456,7 +460,7 @@
<string name="volume_odi_captions_content_description" msgid="4172765742046013630">"Captions overlay"</string>
<string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"enable"</string>
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
- <string name="sound_settings" msgid="8874581353127418308">"Sound & vibration"</string>
+ <string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
<string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
<string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
@@ -881,7 +885,8 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavorite"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choose controls to access from Quick Settings"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold & drag to rearrange controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -1118,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lock screen settings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customize lock screen"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customize lock screen"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera blocked"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera and microphone blocked"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone blocked"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 6913b2d..bed2089 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-handed mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch & hold Back and Home to unpin."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choose controls to access from Quick Settings"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"See other apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Rearrange"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Add controls"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Back to editing"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Controls could not be loaded. Check the <xliff:g id="APP">%s</xliff:g> app to make sure that the app settings haven’t changed."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Compatible controls unavailable"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lock screen settings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera is blocked"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera and microphone blocked"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone is blocked"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 6913b2d..bed2089 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-handed mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch & hold Back and Overview to unpin."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch & hold Back and Home to unpin."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choose controls to access from Quick Settings"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"See other apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Rearrange"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Add controls"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Back to editing"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Controls could not be loaded. Check the <xliff:g id="APP">%s</xliff:g> app to make sure that the app settings haven’t changed."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Compatible controls unavailable"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Other"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lock screen settings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera is blocked"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera and microphone blocked"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone is blocked"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index fd6a292..885acd1 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stop"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-handed mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medium"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"High"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -881,7 +885,8 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavorite"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choose controls to access from Quick Settings"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold & drag to rearrange controls"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -1118,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lock screen settings"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customize lock screen"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customize lock screen"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera blocked"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera and microphone blocked"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone blocked"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index e067d94..f63abf2 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo una mano"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Estándar"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Quieres desbloquear el micrófono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Quieres desbloquear la cámara del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Quieres desbloquear la cámara y el micrófono del dispositivo?"</string>
@@ -379,7 +383,7 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"Se borrarán todas las aplicaciones y los datos de este usuario."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Quitar"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en tu dispositivo durante una grabación o transmisión. Se incluyen las contraseñas, los detalles del pago, las fotos, los mensajes y el audio que reproduzcas."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que brinda esta función tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en tu dispositivo durante una grabación o transmisión. Se incluyen las contraseñas, los detalles del pago, las fotos, los mensajes y el audio que reproduzcas."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que brinda esta función tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en tu dispositivo durante una grabación o transmisión. Se incluyen contraseñas, detalles de pago, fotos, mensajes y audios que reproduzcas."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"¿Deseas comenzar a grabar o transmitir contenido?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"¿Deseas iniciar una grabación o transmisión con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"¿Quieres permitir que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparta o grabe contenido?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"inhabilitar"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sonido y vibración"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuración"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Se bajó el volumen a un nivel seguro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volumen se mantuvo elevado por más tiempo del recomendado"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"La app está fijada"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Esta función mantiene la pantalla visible hasta que dejes de fijarla. Para ello, mantén presionados los botones Atrás y Recientes."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Esta función mantiene la pantalla visible hasta que dejes de fijarla. Para ello, mantén presionados los botones de inicio y Atrás."</string>
@@ -698,7 +700,7 @@
<string name="left_icon" msgid="5036278531966897006">"Ícono izquierdo"</string>
<string name="right_icon" msgid="1103955040645237425">"Ícono derecho"</string>
<string name="drag_to_add_tiles" msgid="8933270127508303672">"Mantén presionado y arrastra para agregar tarjetas"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén presionado y arrastra para reorganizar los mosaicos"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén presionado y arrastra para reorganizar las tarjetas"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastra aquí para quitar"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Necesitas al menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tarjetas"</string>
<string name="qs_edit" msgid="5583565172803472437">"Editar"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar de favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover a la posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Elige a qué controles accederás desde la Configuración rápida"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén presionado y arrastra un control para reubicarlo"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Se quitaron todos los controles"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"No se guardaron los cambios"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver otras apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Agregar controles"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Volver a la edición"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"No se pudieron cargar los controles. Revisa la app de <xliff:g id="APP">%s</xliff:g> para asegurarte de que su configuración no haya cambiado."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"No hay ningún control compatible disponible"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Tu política del trabajo te permite hacer llamadas telefónicas solo desde el perfil de trabajo"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar al perfil de trabajo"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Cerrar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Config. de pantalla de bloqueo"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi no disponible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"La cámara está bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"La cámara y el micrófono están bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"El micrófono está bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"El modo de prioridad está activado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistente está prestando atención"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 5ba337e..3714253 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Detener"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo Una mano"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Estándar"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Desbloquear el micrófono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Desbloquear la cámara del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Desbloquear la cámara y el micrófono del dispositivo?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactivar"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sonido y vibración"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ajustes"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Se ha bajado el volumen a un nivel más seguro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volumen ha sido elevado durante más tiempo del recomendado"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplicación fijada"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"La aplicación se mantendrá visible hasta que dejes de fijarla. Para dejar de fijarla, mantén pulsados los botones Atrás y Aplicaciones recientes."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"La aplicación se mantendrá visible hasta que dejes de fijarla. Para dejar de fijarla, mantén pulsados los botones Atrás e Inicio."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar de favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover a la posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Selecciona controles a los que quieras acceder desde los ajustes rápidos"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén pulsado un control y arrástralo para reubicarlo"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Todos los controles quitados"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"No se han guardado los cambios"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver otras aplicaciones"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Añadir controles"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Volver a editar"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"No se han podido cargar los controles. Comprueba que no hayan cambiado los ajustes de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Los controles compatibles no están disponibles"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Tu política del trabajo solo te permite hacer llamadas telefónicas desde el perfil de trabajo"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar al perfil de trabajo"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Cerrar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Ajustes de pantalla de bloqueo"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Red Wi-Fi no disponible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Cámara bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Cámara y micrófono bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micrófono bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo Prioridad activado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"El Asistente está activado"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 7db471a..bb9b4fc 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Alustage"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Peatage"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Ühekäerežiim"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrastsus"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Tavaline"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Keskmine"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Kõrge"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kas tühistada seadme mikrofoni blokeerimine?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kas tühistada seadme kaamera blokeerimine?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kas tühistada seadme kaamera ja mikrofoni blokeerimine?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"keela"</string>
<string name="sound_settings" msgid="8874581353127418308">"Heli ja vibreerimine"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Seaded"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ohutuma helitugevuse huvides vähendatud"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Heli on olnud vali soovitatavast ajast kauem"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Rakendus on kinnitatud"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"See hoitakse kuval, kuni selle vabastate. Vabastamiseks puudutage pikalt nuppe Tagasi ja Ülevaade."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"See hoitakse kuval, kuni selle vabastate. Vabastamiseks puudutage pikalt nuppe Tagasi ja Avakuva."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"eemalda lemmikute hulgast"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Teisalda asendisse <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Juhtnupud"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Valige juhtelemendid, millele kiirseadete kaudu juurde pääseda"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Juhtelementide ümberpaigutamiseks hoidke neid all ja lohistage"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Kõik juhtelemendid eemaldati"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Muudatusi ei salvestatud"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Kuva muud rakendused"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Korralda ümber"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Lisa juhtelemente"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Tagasi muutmise juurde"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Juhtelemente ei õnnestunud laadida. Kontrollige rakendust <xliff:g id="APP">%s</xliff:g> ja veenduge, et rakenduse seaded poleks muutunud."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Ühilduvaid juhtelemente pole saadaval"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Teie töökoha eeskirjad lubavad teil helistada ainult tööprofiililt"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Lülitu tööprofiilile"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Sule"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lukustuskuva seaded"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Kohanda lukustuskuva"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Lukustuskuva kohandamiseks avage"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi pole saadaval"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kaamera on blokeeritud"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kaamera ja mikrofon on blokeeritud"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon on blokeeritud"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteetne režiim on sisse lülitatud"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent on aktiveeritud"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Määrake seadetes märkmete vaikerakendus."</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 492bb6f..7a6b8f8 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hasi"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Gelditu"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Esku bakarreko modua"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrastea"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Arrunta"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Tartekoa"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Altua"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Gailuaren mikrofonoa desblokeatu nahi duzu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Gailuaren kamera desblokeatu nahi duzu?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Gailuaren kamera eta mikrofonoa desblokeatu nahi dituzu?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desgaitu"</string>
<string name="sound_settings" msgid="8874581353127418308">"Audioa eta dardara"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ezarpenak"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Bolumena jaitsi da entzumena babesteko"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Gomendatutakoa baino denbora gehiagoan eduki da bolumena ozen"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikazioa ainguratuta dago"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta \"Atzera\" eta \"Ikuspegi orokorra\" botoiak."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta Atzera eta Hasiera botoiak."</string>
@@ -517,13 +519,13 @@
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Pantaila blokeatuaren ezarpenak"</string>
<string name="qr_code_scanner_title" msgid="1938155688725760702">"QR kodeen eskanerra"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Eguneratzen"</string>
- <string name="status_bar_work" msgid="5238641949837091056">"Work profila"</string>
+ <string name="status_bar_work" msgid="5238641949837091056">"Laneko profila"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Hegaldi modua"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"Ez duzu entzungo hurrengo alarma (<xliff:g id="WHEN">%1$s</xliff:g>)"</string>
<string name="alarm_template" msgid="2234991538018805736">"ordua: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"data: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="accessibility_status_bar_hotspot" msgid="2888479317489131669">"Wifi-gunea"</string>
- <string name="accessibility_managed_profile" msgid="4703836746209377356">"Work profila"</string>
+ <string name="accessibility_managed_profile" msgid="4703836746209377356">"Laneko profila"</string>
<string name="tuner_warning_title" msgid="7721976098452135267">"Dibertsioa batzuentzat, baina ez guztientzat"</string>
<string name="tuner_warning" msgid="1861736288458481650">"Sistemaren erabiltzaile-interfazearen konfiguratzaileak Android erabiltzaile-interfazea moldatzeko eta pertsonalizatzeko modu gehiago eskaintzen dizkizu. Baliteke eginbide esperimental horiek hurrengo kaleratzeetan aldatuta, etenda edo desagertuta egotea. Kontuz erabili."</string>
<string name="tuner_persistent_warning" msgid="230466285569307806">"Baliteke eginbide esperimental horiek hurrengo kaleratzeetan aldatuta, etenda edo desagertuta egotea. Kontuz erabili."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"kendu gogokoetatik"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Eraman <xliff:g id="NUMBER">%d</xliff:g>garren postura"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolatzeko aukerak"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Aukeratu Ezarpen bizkorrak menutik atzitu nahi dituzunak"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Kontrolatzeko aukerak antolatzeko, eduki itzazu sakatuta, eta arrastatu"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Kendu dira kontrolatzeko aukera guztiak"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ez dira gorde aldaketak"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ikusi beste aplikazio batzuk"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Berrantolatu"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Gehitu kontrolatzeko aukerak"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Itzuli editatzeko pantailara"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Ezin izan dira kargatu kontrolatzeko aukerak. Joan <xliff:g id="APP">%s</xliff:g> aplikaziora, eta ziurtatu aplikazioaren ezarpenak ez direla aldatu."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Ez dago erabilgarri kontrolatzeko aukera bateragarririk"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Beste bat"</string>
@@ -1055,7 +1055,7 @@
<string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikazio aktibo dago}other{# aplikazio aktibo daude}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"Informazio berria"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktibo dauden aplikazioak"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aplikazio hauek aktibo daude eta funtzionatzen ari dira, nahiz eta zu haiek erabiltzen ez aritu. Aukera honek haien funtzioa hobetzen du, baina baliteke bateriaren iraupenari ere eragitea."</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aplikazio hauek aktibo daude eta funtzionatzen ari dira, nahiz eta zu haiek erabiltzen ez aritu. Aukera honek haien funtzionamendua hobetzen du, baina baliteke bateriaren iraupenari ere eragitea."</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Gelditu"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Geldituta"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"Eginda"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Deiak laneko profiletik soilik egiteko baimena ematen dizute laneko gidalerroek"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Aldatu laneko profilera"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Itxi"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Pantaila blokeatuaren ezarpenak"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Pertsonalizatu pantaila blokeatua"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi-konexioa ez dago erabilgarri"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera blokeatuta dago"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera eta mikrofonoa blokeatuta daude"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonoa blokeatuta dago"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Lehentasun modua aktibatuta dago"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Laguntzailea zerbitzuak arreta jarrita dauka"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index b8bf0c9..f12ca75 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"شروع"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"متوقف کردن"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"حالت یکدستی"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"تضاد"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"استاندارد"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"متوسط"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"بالا"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"میکروفون دستگاه لغو انسداد شود؟"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"دوربین دستگاه لغو انسداد شود؟"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"دوربین و میکروفون دستگاه لغو انسداد شود؟"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"غیرفعال کردن"</string>
<string name="sound_settings" msgid="8874581353127418308">"صدا و لرزش"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"تنظیمات"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"به میزان صدای ایمنتر کاهش یافت"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"صدا برای مدتی طولانیتر از حد توصیهشده بلند بوده است"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"برنامه سنجاق شده است"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"تا زمانی که سنجاق را برندارید، در نما نگهداشته میشود. برای برداشتن سنجاق، «برگشت» و «نمای کلی» را لمس کنید و نگهدارید."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"تا برداشتن سنجاق، در نما نگهداشته میشود. برای برداشتن سنجاق، «برگشت» و «صفحه اصلی» را لمس کنید و نگهدارید."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"حذف کردن از موارد دلخواه"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"انتقال به موقعیت <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"کنترلها"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"برای دسترس از «تنظیمات سریع»، کنترلها را انتخاب کنید"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"برای تغییر دادن ترتیب کنترلها، آنها را نگه دارید و بکشید"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"همه کنترلها برداشته شدهاند"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"تغییرات ذخیره نشد"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"دیدن برنامههای دیگر"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"مرتبسازی مجدد"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"افزودن کنترلها"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"برگشتن به ویرایش"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"کنترلها بار نشدند. برنامه <xliff:g id="APP">%s</xliff:g> را بررسی کنید تا مطمئن شوید تنظیمات برنامه تغییر نکرده باشد."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"کنترلهای سازگار دردسترس نیستند"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"موارد دیگر"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"خطمشی کاری شما فقط به برقراری تماس ازطریق نمایه کاری اجازه میدهد"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"رفتن به نمایه کاری"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"بستن"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"تنظیمات صفحه قفل"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"سفارشیسازی صفحه قفل"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi دردسترس نیست"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"دوربین مسدود شده است"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"دوربین و میکروفون مسدود شدهاند"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"میکروفون مسدود شده است"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"حالت اولویت روشن است"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"توجه «دستیار» روشن است"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index d7d2117..435cfc9 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Aloita"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Lopeta"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Yhden käden moodi"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrasti"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Tavallinen"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Keskitaso"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Suuri"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kumotaanko laitteen mikrofonin esto?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kumotaanko laitteen kameran esto?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kumotaanko laitteen kameran ja mikrofonin esto?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"poista käytöstä"</string>
<string name="sound_settings" msgid="8874581353127418308">"Ääni ja värinä"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Asetukset"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Äänenvoimakkuutta vähennetty turvallisemmalle tasolle"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Äänenvoimakkuus on ollut suuri yli suositellun ajan"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Sovellus on kiinnitetty"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Pysyy näkyvissä, kunnes irrotat sen. Irrota painamalla pitkään Edellinen ja Viimeisimmät."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Pysyy näkyvissä, kunnes irrotat sen. Irrota painamalla pitkään Edellinen ja Aloitusnäyttö."</string>
@@ -793,7 +795,7 @@
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Palauta käyttöön <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobiilidata ei vaihdu automaattisesti saatavuuden perusteella"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Ei kiitos"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Kyllä, vaihda"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Kyllä, palauta"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Sovellus peittää käyttöoikeuspyynnön, joten Asetukset ei voi vahvistaa valintaasi."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"Saako <xliff:g id="APP_0">%1$s</xliff:g> näyttää osia sovelluksesta <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"– Se voi lukea tietoja sovelluksesta <xliff:g id="APP">%1$s</xliff:g>."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"poista suosikeista"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Siirrä kohtaan <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Säätimet"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Valitse säätimet, joita käytetään pika-asetuksista"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Järjestele säätimiä koskettamalla pitkään ja vetämällä"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Kaikki säätimet poistettu"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Muutoksia ei tallennettu"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Katso muita sovelluksia"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Järjestä uudelleen"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Lisää asetuksia"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Palaa muokkaukseen"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Säätimiä ei voitu ladata. Avaa <xliff:g id="APP">%s</xliff:g> ja tarkista, että sovelluksen asetukset eivät ole muuttuneet."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Yhteensopivat säätimet eivät käytettävissä"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Muu"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Työkäytäntö sallii sinun soittaa puheluita vain työprofiilista"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Vaihda työprofiiliin"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Sulje"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lukitusnäytön asetukset"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Customize lukitusnäyttöä"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi-yhteys ei ole käytettävissä"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera estetty"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera ja mikrofoni estetty"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoni estetty"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Tärkeät-tila on päällä"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant on aktiivinen"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 4abf838..71b6ad8 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Démarrer"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Arrêter"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Mode Une main"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Moyen"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Élevé"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le microphone de l\'appareil?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer l\'appareil photo de l\'appareil?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le microphone?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"désactiver"</string>
<string name="sound_settings" msgid="8874581353127418308">"Son et vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Paramètres"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Réduction du volume à un niveau moins dangereux"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Le niveau du volume est resté élevé au-delà de la durée recommandée"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"L\'application est épinglée"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Retour » et « Aperçu »."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur les touches Retour et Accueil."</string>
@@ -515,7 +517,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Déverrouiller pour utiliser"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"Un problème est survenu lors de la récupération de vos cartes, veuillez réessayer plus tard"</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Paramètres de l\'écran de verrouillage"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"lecteur de code QR"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"Lecteur de code QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Mise à jour en cours…"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Profil professionnel"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Mode Avion"</string>
@@ -852,8 +854,7 @@
<string name="accessibility_magnification_medium" msgid="6994632616884562625">"Moyenne"</string>
<string name="accessibility_magnification_small" msgid="8144502090651099970">"Petite"</string>
<string name="accessibility_magnification_large" msgid="6602944330021308774">"Grande"</string>
- <!-- no translation found for accessibility_magnification_fullscreen (5043514702759201964) -->
- <skip />
+ <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"Plein écran"</string>
<string name="accessibility_magnification_done" msgid="263349129937348512">"OK"</string>
<string name="accessibility_magnifier_edit" msgid="1522877239671820636">"Modifier"</string>
<string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Paramètres de la fenêtre de loupe"</string>
@@ -884,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"supprimer des favoris"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Déplacer l\'élément à la position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Choisissez les commandes à inclure dans le menu Paramètres rapides"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Maintenez le doigt sur l\'écran, puis glissez-le pour réorganiser les commandes"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modifications non enregistrées"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Afficher autres applications"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Réorganiser"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Ajouter des commandes"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Retour à la modification"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Impossible de charger les commandes. Vérifiez l\'application <xliff:g id="APP">%s</xliff:g> pour vous assurer que les paramètres de l\'application n\'ont pas changé."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Les commandes compatibles ne sont pas accessibles"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string>
@@ -1124,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Votre politique de l\'entreprise vous autorise à passer des appels téléphoniques uniquement à partir de votre profil professionnel"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Passer au profil professionnel"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Fermer"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Paramètres écran de verrouillage"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personn. l\'écran de verrouillage"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non accessible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Appareil photo bloqué"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Appareil photo et microphone bloqués"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone bloqué"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode Priorité activé"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant à l\'écoute"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index fa48b7a..8f96d2c 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -238,7 +238,7 @@
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotation automatique de l\'écran"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localisation"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Économiseur d\'écran"</string>
- <string name="quick_settings_camera_label" msgid="5612076679385269339">"Accès à l\'appareil photo"</string>
+ <string name="quick_settings_camera_label" msgid="5612076679385269339">"Accès à la caméra"</string>
<string name="quick_settings_mic_label" msgid="8392773746295266375">"Accès au micro"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
<string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"Bloqué"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Démarrer"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Arrêter"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Mode une main"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Moyen"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Élevé"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le micro de l\'appareil ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer l\'appareil photo de l\'appareil ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le micro de l\'appareil ?"</string>
@@ -398,7 +402,7 @@
<string name="manage_notifications_text" msgid="6885645344647733116">"Gérer"</string>
<string name="manage_notifications_history_text" msgid="57055985396576230">"Historique"</string>
<string name="notification_section_header_incoming" msgid="850925217908095197">"Nouvelles notifications"</string>
- <string name="notification_section_header_gentle" msgid="6804099527336337197">"Notifications silencieuses"</string>
+ <string name="notification_section_header_gentle" msgid="6804099527336337197">"Silencieux"</string>
<string name="notification_section_header_alerting" msgid="5581175033680477651">"Notifications"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"Conversations"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Effacer toutes les notifications silencieuses"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"désactiver"</string>
<string name="sound_settings" msgid="8874581353127418308">"Son et vibreur"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Paramètres"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume réduit à un niveau plus sûr"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"La période pendant laquelle le volume est resté élevé est supérieure à celle recommandée"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"L\'application est épinglée"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Récents."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Accueil."</string>
@@ -822,7 +824,7 @@
<string name="privacy_type_media_projection" msgid="8136723828804251547">"enregistrement écran"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Sans titre"</string>
<string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"Mode Veille imminent"</string>
- <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Taille de police"</string>
+ <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Taille de la police"</string>
<string name="font_scaling_smaller" msgid="1012032217622008232">"Réduire"</string>
<string name="font_scaling_larger" msgid="5476242157436806760">"Agrandir"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Fenêtre d\'agrandissement"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"supprimer des favoris"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Déplacer l\'élément à la position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Sélectionnez les commandes qui seront accessibles depuis Réglages rapides"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Faites glisser les commandes pour les réorganiser"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Les modifications n\'ont pas été enregistrées"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Afficher d\'autres applications"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Réorganiser"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Ajouter des commandes"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Retour à l\'édition"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Impossible de charger les commandes. Vérifiez l\'application <xliff:g id="APP">%s</xliff:g> pour vous assurer que les paramètres n\'ont pas changé."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Commandes compatibles indisponibles"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Autre"</string>
@@ -953,7 +953,7 @@
<string name="controls_menu_add" msgid="4447246119229920050">"Ajouter des commandes"</string>
<string name="controls_menu_edit" msgid="890623986951347062">"Modifier des commandes"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Ajouter une appli"</string>
- <string name="controls_menu_remove" msgid="3006525275966023468">"Supprimer l\'application"</string>
+ <string name="controls_menu_remove" msgid="3006525275966023468">"Supprimer l\'appli"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Ajouter des sorties"</string>
<string name="media_output_dialog_group" msgid="5571251347877452212">"Groupe"</string>
<string name="media_output_dialog_single_device" msgid="3102758980643351058">"1 appareil sélectionné"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Votre règle professionnelle ne vous permet de passer des appels que depuis le profil professionnel"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Passer au profil professionnel"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Fermer"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Paramètres écran de verrouillage"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personnaliser écran verrouillage"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non disponible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Caméra bloquée"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Caméra et micro bloqués"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micro bloqué"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode Prioritaire activé"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant à l\'écoute"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-fr/tiles_states_strings.xml b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
index ce39cd2..12fa44d 100644
--- a/packages/SystemUI/res/values-fr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
@@ -58,7 +58,7 @@
</string-array>
<string-array name="tile_states_flashlight">
<item msgid="3465257127433353857">"Indisponible"</item>
- <item msgid="5044688398303285224">"Désactivée"</item>
+ <item msgid="5044688398303285224">"Désactivé"</item>
<item msgid="8527389108867454098">"Activée"</item>
</string-array>
<string-array name="tile_states_rotation">
@@ -78,8 +78,8 @@
</string-array>
<string-array name="tile_states_location">
<item msgid="3316542218706374405">"Indisponible"</item>
- <item msgid="4813655083852587017">"Désactivée"</item>
- <item msgid="6744077414775180687">"Activée"</item>
+ <item msgid="4813655083852587017">"Désactivé"</item>
+ <item msgid="6744077414775180687">"Activé"</item>
</string-array>
<string-array name="tile_states_hotspot">
<item msgid="3145597331197351214">"Indisponible"</item>
@@ -88,12 +88,12 @@
</string-array>
<string-array name="tile_states_color_correction">
<item msgid="2840507878437297682">"Indisponible"</item>
- <item msgid="1909756493418256167">"Désactivée"</item>
+ <item msgid="1909756493418256167">"Désactivé"</item>
<item msgid="4531508423703413340">"Activée"</item>
</string-array>
<string-array name="tile_states_inversion">
<item msgid="3638187931191394628">"Indisponible"</item>
- <item msgid="9103697205127645916">"Désactivée"</item>
+ <item msgid="9103697205127645916">"Désactivé"</item>
<item msgid="8067744885820618230">"Activée"</item>
</string-array>
<string-array name="tile_states_saver">
@@ -133,7 +133,7 @@
</string-array>
<string-array name="tile_states_reduce_brightness">
<item msgid="1839836132729571766">"Indisponible"</item>
- <item msgid="4572245614982283078">"Désactivée"</item>
+ <item msgid="4572245614982283078">"Désactivé"</item>
<item msgid="6536448410252185664">"Activée"</item>
</string-array>
<string-array name="tile_states_cameratoggle">
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 7828b20..e2f625d 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Deter"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo dunha soa man"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Nivel estándar"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Nivel medio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Nivel alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Queres desbloquear o micrófono do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Queres desbloquear a cámara do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Queres desbloquear a cámara e o micrófono do dispositivo?"</string>
@@ -401,7 +405,7 @@
<string name="notification_section_header_gentle" msgid="6804099527336337197">"Silenciadas"</string>
<string name="notification_section_header_alerting" msgid="5581175033680477651">"Notificacións"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"Conversas"</string>
- <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borra todas as notificacións silenciadas"</string>
+ <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Borrar todas as notificacións silenciadas"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"O modo Non molestar puxo en pausa as notificacións"</string>
<string name="media_projection_action_text" msgid="3634906766918186440">"Iniciar agora"</string>
<string name="empty_shade_text" msgid="8935967157319717412">"Non hai notificacións"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactiva"</string>
<string name="sound_settings" msgid="8874581353127418308">"Son e vibración"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuración"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"O volume baixouse a un nivel máis seguro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume estivo a un nivel alto durante máis tempo do recomendado"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"A aplicación está fixada"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"A pantalla manterase visible ata que deixes de fixala. Para facelo, mantén premido Atrás e Visión xeral."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"A pantalla manterase visible ata que deixes de fixala. Para facelo, mantén premido Atrás e Inicio."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar dos controis favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover á posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controis"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Escolle os controis aos que queiras acceder desde Configuración rápida"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Para reorganizar os controis, mantenos premidos e arrástraos"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Quitáronse todos os controis"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Non se gardaron os cambios"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outras aplicacións"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reordenar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Engadir controis"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Seguir editando"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Non se puideron cargar os controis. Comproba a aplicación <xliff:g id="APP">%s</xliff:g> para asegurarte de que non se modificase a súa configuración."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Non hai controis compatibles que estean dispoñibles"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outra"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"A política do teu traballo só che permite facer chamadas de teléfono desde o perfil de traballo"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar ao perfil de traballo"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Pechar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Configuración pantalla bloqueo"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi non dispoñible"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"A cámara está bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"A cámara e o micrófono están bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"O micrófono está bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"O modo de prioridade está activado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"A atención do Asistente está activada"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 012607e..b78d852 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -236,12 +236,12 @@
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ચાલુ કરી રહ્યાં છીએ…"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ઑટો રોટેટ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ઑટો રોટેટ સ્ક્રીન"</string>
- <string name="quick_settings_location_label" msgid="2621868789013389163">"સ્થાન"</string>
+ <string name="quick_settings_location_label" msgid="2621868789013389163">"લોકેશન"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"સ્ક્રીન સેવર"</string>
<string name="quick_settings_camera_label" msgid="5612076679385269339">"કૅમેરાનો ઍક્સેસ"</string>
<string name="quick_settings_mic_label" msgid="8392773746295266375">"માઇકનો ઍક્સેસ"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ઉપલબ્ધ છે"</string>
- <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"બ્લૉક કરેલું છે"</string>
+ <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"બ્લૉક કરેલો છે"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"મીડિયા ઉપકરણ"</string>
<string name="quick_settings_user_title" msgid="8673045967216204537">"વપરાશકર્તા"</string>
<string name="quick_settings_wifi_label" msgid="2879507532983487244">"વાઇ-ફાઇ"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"શરૂ કરો"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"રોકો"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"એક-હાથે વાપરો મોડ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"કોન્ટ્રાસ્ટ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"સ્ટૅન્ડર્ડ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"મધ્યમ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"વધુ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ડિવાઇસના માઇક્રોફોનને અનબ્લૉક કરીએ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ડિવાઇસના કૅમેરાને અનબ્લૉક કરીએ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ડિવાઇસના કૅમેરા અને માઇક્રોફોનને અનબ્લૉક કરીએ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"બંધ કરો"</string>
<string name="sound_settings" msgid="8874581353127418308">"સાઉન્ડ અને વાઇબ્રેશન"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"સેટિંગ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"વૉલ્યૂમ ઘટાડીને સલામત વૉલ્યૂમ જેટલું કર્યું"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"સુઝાવ આપેલા સમય કરતાં વધુ સમય સુધી વૉલ્યૂમ વધારે રહ્યું છે"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ઍપને પિન કરેલી છે"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને વ્યૂમાં રાખે છે. અનપિન કરવા માટે પાછળ અને ઓવરવ્યૂને સ્પર્શ કરી રાખો."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને વ્યૂમાં રાખે છે. અનપિન કરવા માટે પાછળ અને હોમને સ્પર્શ કરી રાખો."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"મનપસંદમાંથી કાઢી નાખો"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"સ્થાન <xliff:g id="NUMBER">%d</xliff:g> પર ખસેડો"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"નિયંત્રણો"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ઝડપી સેટિંગમાંથી ઍક્સેસ કરવાના નિયંત્રણો પસંદ કરો"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"નિયંત્રણોને ફરીથી ગોઠવવા માટે તેમને હોલ્ડ કરીને ખેંચો"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"બધા નિયંત્રણો કાઢી નાખ્યા"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ફેરફારો સાચવ્યા નથી"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"અન્ય બધી ઍપ જુઓ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ફરીથી ગોઠવો"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"નિયંત્રણો ઉમેરો"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ફેરફાર કરવા માટે પાછા જાઓ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"નિયંત્રણો લોડ કરી શકાયા નથી. ઍપના સેટિંગ બદલાયા નથી તેની ખાતરી કરવા માટે <xliff:g id="APP">%s</xliff:g> ઍપ ચેક કરો."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"સુસંગત નિયંત્રણો ઉપલબ્ધ નથી"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"અન્ય"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"તમારી ઑફિસની પૉલિસી તમને માત્ર ઑફિસની પ્રોફાઇલ પરથી જ ફોન કૉલ કરવાની મંજૂરી આપે છે"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ઑફિસની પ્રોફાઇલ પર સ્વિચ કરો"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"બંધ કરો"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"લૉક સ્ક્રીનના સેટિંગ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"લૉક સ્ક્રીન કસ્ટમાઇઝ કરો"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"વાઇ-ફાઇ ઉપલબ્ધ નથી"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"કૅમેરા બ્લૉક કરેલો છે"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"કૅમેરા અને માઇક્રોફોન બ્લૉક કરેલા છે"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"માઇક્રોફોન બ્લૉક કરેલો છે"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"પ્રાધાન્યતા મોડ ચાલુ છે"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant સક્રિય છે"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 4728ea1..946b193 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -236,7 +236,7 @@
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ब्लूटूथ चालू हो रहा है…"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रीन का अपने-आप दिशा बदलना (ऑटो-रोटेट)"</string>
- <string name="quick_settings_location_label" msgid="2621868789013389163">"जगह"</string>
+ <string name="quick_settings_location_label" msgid="2621868789013389163">"जगह की जानकारी"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"स्क्रीन सेवर"</string>
<string name="quick_settings_camera_label" msgid="5612076679385269339">"कैमरे का ऐक्सेस"</string>
<string name="quick_settings_mic_label" msgid="8392773746295266375">"माइक्रोफ़ोन का ऐक्सेस"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"शुरू करें"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"रोकें"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"वन-हैंडेड मोड"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"कंट्रास्ट"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"स्टैंडर्ड"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"सामान्य"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ज़्यादा"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"क्या आपको डिवाइस का माइक्रोफ़ोन अनब्लॉक करना है?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"क्या आपको डिवाइस का कैमरा अनब्लॉक करना है?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"क्या आप डिवाइस का कैमरा और माइक्रोफ़ोन अनब्लॉक करना चाहते हैं?"</string>
@@ -379,7 +383,7 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"इस उपयोगकर्ता के सभी ऐप और डेटा को हटा दिया जाएगा."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"हटाएं"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपकी स्क्रीन पर दिख रही या आपके डिवाइस पर चलाई जा रही जानकारी ऐक्सेस कर सकता है. इसमें पासवर्ड, पैसे चुकाने का ब्यौरा, फ़ोटो, मैसेज, और चलाए गए ऑडियो जैसी जानकारी शामिल है."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"इस फ़ंक्शन को उपलब्ध कराने वाली सेवा, रिकॉर्ड या कास्ट करते समय, आपकी स्क्रीन पर दिखने वाली या चलाई जाने वाली जानकारी को ऐक्सेस कर सकती है. इसमें पासवर्ड, पैसे चुकाने से जुड़ी जानकारी, फ़ोटो, मैसेज, और चलाए जाने वाले ऑडियो शामिल हैं."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"इस फ़ंक्शन को उपलब्ध कराने वाली सेवा, रिकॉर्ड या कास्ट करते समय, आपकी स्क्रीन पर दिखने वाली या चलाई जाने वाली जानकारी को ऐक्सेस कर सकती है. इसमें पासवर्ड, पेमेंट के तरीके की जानकारी, फ़ोटो, मैसेज, और चलाए जाने वाले ऑडियो शामिल हैं."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"रिकॉर्डिंग या कास्ट करना शुरू करें?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> का इस्तेमाल करके रिकॉर्ड और कास्ट करना शुरू करें?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"क्या आपको शेयर या रिकॉर्ड करने की <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> को अनुमति देनी है?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"बंद करें"</string>
<string name="sound_settings" msgid="8874581353127418308">"आवाज़ और वाइब्रेशन"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिंग"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"बेहतर ऑडियो के लिए वॉल्यूम का लेवल कम किया गया"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"सुझाए गए समय से ज़्यादा देर तक वॉल्यूम का लेवल ज़्यादा रहा है"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ऐप्लिकेशन पिन किया गया है"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"इससे वह तब तक दिखता रहता है, जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, \'वापस जाएं\' और \'खास जानकारी\' को दबाकर रखें."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"इससे वह तब तक दिखाई देती है जब तक आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, होम और वापस जाएं वाले बटन को दबाकर रखें."</string>
@@ -597,7 +599,7 @@
<string name="keyboard_key_enter" msgid="8633362970109751646">"Enter"</string>
<string name="keyboard_key_backspace" msgid="4095278312039628074">"Backspace"</string>
<string name="keyboard_key_media_play_pause" msgid="8389984232732277478">"Play/Pause"</string>
- <string name="keyboard_key_media_stop" msgid="1509943745250377699">"Stop"</string>
+ <string name="keyboard_key_media_stop" msgid="1509943745250377699">"रोकें"</string>
<string name="keyboard_key_media_next" msgid="8502476691227914952">"Next"</string>
<string name="keyboard_key_media_previous" msgid="5637875709190955351">"Previous"</string>
<string name="keyboard_key_media_rewind" msgid="3450387734224327577">"Rewind"</string>
@@ -792,7 +794,7 @@
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"क्या आपको मोबाइल डेटा, <xliff:g id="CARRIER">%s</xliff:g> पर वापस से स्विच करना है?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"उपलब्ध होने पर, मोबाइल डेटा अपने-आप स्विच नहीं होगा"</string>
- <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"स्विच न करें"</string>
+ <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"नहीं, रहने दें"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"स्विच करें"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"ऐप की वजह से मंज़ूरी के अनुरोध को समझने में दिक्कत हो रही है, इसलिए सेटिंग से आपके जवाब की पुष्टि नहीं हो पा रही है."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> को <xliff:g id="APP_2">%2$s</xliff:g> के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें?"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"पसंदीदा से हटाएं"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"इसे <xliff:g id="NUMBER">%d</xliff:g> नंबर पर ले जाएं"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"कंट्राेल"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"उन कंट्रोल को चुनें जिन्हें फटाफट सेटिंग से ऐक्सेस करना है"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"कंट्रोल का क्रम बदलने के लिए उन्हें दबाकर रखें और खींचें"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"सभी कंट्रोल हटा दिए गए"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"बदलाव सेव नहीं किए गए"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"दूसरे ऐप्लिकेशन देखें"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"फिर से व्यवस्थित करें"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"कंट्रोल बटन जोड़ें"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"बदलाव करने के लिए वापस जाएं"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"कंट्रोल लोड नहीं किए जा सके. <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन देखें, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन की सेटिंग में कोई बदलाव नहीं हुआ है."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"इस सेटिंग के साथ काम करने वाले कंट्रोल उपलब्ध नहीं हैं"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ऑफ़िस की नीति के तहत, वर्क प्रोफ़ाइल होने पर ही फ़ोन कॉल किए जा सकते हैं"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"वर्क प्रोफ़ाइल पर स्विच करें"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"बंद करें"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"लॉक स्क्रीन की सेटिंग"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"लॉक स्क्रीन को कस्टमाइज़ करें"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"लॉक स्क्रीन को पसंद के मुताबिक बनाने के लिए अनलॉक करें"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"वाई-फ़ाई उपलब्ध नहीं है"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"कैमरे का ऐक्सेस नहीं है"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"कैमरे और माइक्रोफ़ोन का ऐक्सेस नहीं है"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"माइक्रोफ़ोन का ऐक्सेस नहीं है"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राथमिकता मोड चालू है"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant आपकी बातें सुन रही है"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"सेटिंग में जाकर, नोट लेने की सुविधा देने वाले ऐप्लिकेशन को डिफ़ॉल्ट के तौर पर सेट करें"</string>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index a68d099..8a13b54 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -99,7 +99,7 @@
<string name="screenrecord_name" msgid="2596401223859996572">"Snimač zaslona"</string>
<string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obrada snimanja zaslona"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Tekuća obavijest za sesiju snimanja zaslona"</string>
- <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite li započeti snimanje?"</string>
+ <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite li pokrenuti snimanje?"</string>
<string name="screenrecord_description" msgid="1123231719680353736">"Za vrijeme snimanja sustav Android može snimiti osjetljive podatke koji su vidljivi na vašem zaslonu ili se reproduciraju na vašem uređaju. To uključuje zaporke, podatke o plaćanju, fotografije, poruke i zvuk."</string>
<string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Snimi cijeli zaslon"</string>
<string name="screenrecord_option_single_app" msgid="5954863081500035825">"Snimi jednu aplikaciju"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Početak"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zaustavi"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Način rada jednom rukom"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardni"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Srednji"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Visoki"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite li deblokirati mikrofon uređaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite li deblokirati fotoaparat uređaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite li deblokirati fotoaparat i mikrofon uređaja?"</string>
@@ -380,7 +384,7 @@
<string name="user_remove_user_remove" msgid="8387386066949061256">"Ukloni"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
<string name="media_projection_dialog_service_text" msgid="958000992162214611">"Usluga koja pruža ovu funkcionalnost imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
- <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite li započeti snimanje ili emitiranje?"</string>
+ <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite li pokrenuti snimanje ili emitiranje?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"Želite li započeti snimanje ili emitiranje pomoću aplikacije <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Želite li dopustiti aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> da dijeli ili snima?"</string>
<string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Cijeli zaslon"</string>
@@ -403,7 +407,7 @@
<string name="notification_section_header_conversations" msgid="821834744538345661">"Razgovori"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Izbriši sve bešumne obavijesti"</string>
<string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"Značajka Ne uznemiravaj pauzirala je Obavijesti"</string>
- <string name="media_projection_action_text" msgid="3634906766918186440">"Započni"</string>
+ <string name="media_projection_action_text" msgid="3634906766918186440">"Pokreni"</string>
<string name="empty_shade_text" msgid="8935967157319717412">"Nema obavijesti"</string>
<string name="no_unseen_notif_text" msgid="395512586119868682">"Nema novih obavijesti"</string>
<string name="unlock_to_see_notif_text" msgid="7439033907167561227">"Otključajte za starije obavijesti"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogući"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibracija"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Postavke"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Stišano na sigurniju glasnoću"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Zvuk je bio glasan duže nego što se preporučuje"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je prikvačena"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite i zadržite Natrag i Pregled da biste ga otkvačili."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite gumbe Natrag i Početna i zadržite pritisak da biste ga otkvačili."</string>
@@ -697,7 +699,7 @@
<string name="right_keycode" msgid="2480715509844798438">"Desni kôd tipke"</string>
<string name="left_icon" msgid="5036278531966897006">"Lijeva ikona"</string>
<string name="right_icon" msgid="1103955040645237425">"Desna ikona"</string>
- <string name="drag_to_add_tiles" msgid="8933270127508303672">"Zadržite i povucite za dodavanje pločica"</string>
+ <string name="drag_to_add_tiles" msgid="8933270127508303672">"Zadržite i povucite da biste dodali pločice"</string>
<string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Zadržite i povucite da biste premjestili pločice"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Povucite ovdje za uklanjanje"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Potrebno je barem <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> pločica"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonili iz favorita"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Premjestite na položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Odaberite kontrole kojima želite pristupati putem izbornika Brze postavke"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i povucite da biste promijenili raspored kontrola"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Sve su kontrole uklonjene"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promjene nisu spremljene"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Pogledajte ostale aplikacije"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Promjena rasporeda"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodajte kontrole"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Natrag na uređivanje"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrole se ne mogu učitati. U aplikaciji <xliff:g id="APP">%s</xliff:g> provjerite da se postavke aplikacije nisu promijenile."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilne kontrole nisu dostupne"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Wi-Fi se zasad neće automatski povezivati"</string>
<string name="see_all_networks" msgid="3773666844913168122">"Prikaži sve"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Da biste se prebacili na drugu mrežu, odspojite Ethernet"</string>
- <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Da bi se poboljšao doživljaj uređaja, aplikacije i usluge i dalje mogu tražiti Wi-Fi mreže u bilo kojem trenutku, čak i kada je Wi-Fi isključen. To možete promijeniti u postavkama traženja Wi-Fija. "<annotation id="link">"Promijeni"</annotation></string>
+ <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Radi boljeg doživljaja na uređaju, aplikacije i usluge i dalje mogu tražiti Wi-Fi mreže u bilo kojem trenutku, čak i kada je Wi-Fi isključen. To možete promijeniti u postavkama traženja Wi-Fija. "<annotation id="link">"Promijenite"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"Isključi način rada u zrakoplovu"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> želi dodati sljedeću pločicu u Brze postavke"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj pločicu"</string>
@@ -1055,7 +1055,7 @@
<string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikacija je aktivna}one{# aplikacija je aktivna}few{# aplikacije su aktivne}other{# aplikacija je aktivno}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"Nove informacije"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivne aplikacije"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Te su aplikacije aktivne i pokrenute čak i kad ih ne koristite. Time se poboljšava njihova funkcionalnost, ali to može utjecati na trajanje baterije."</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Ove su aplikacije aktivne i pokrenute čak i kad ih ne koristite. Time se poboljšava njihova funkcionalnost, ali to može utjecati na trajanje baterije."</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Zaustavi"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Zaustavljeno"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"Gotovo"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Vaša pravila za poslovne uređaje omogućuju vam upućivanje poziva samo s poslovnog profila"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Prijeđite na poslovni profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Postavke zaključanog zaslona"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključavanje zaslona"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nije dostupan"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokirana"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Blokirani su kamera i mikrofon"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Uključen je prioritetni način rada"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Pažnja Asistenta je aktivirana"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index e2f0eb0..4163cb9 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Indítás"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Leállítás"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Egykezes mód"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontraszt"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Normál"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Közepes"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Nagy"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Feloldja az eszközmikrofon letiltását?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Feloldja az eszközkamera letiltását?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Feloldja az eszközkamera és -mikrofon letiltását?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"letiltás"</string>
<string name="sound_settings" msgid="8874581353127418308">"Hang és rezgés"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Beállítások"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Hangerő csökkentve a biztonság érdekében"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"A hangerő az ajánlottnál hosszabb ideig volt nagy"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Az alkalmazás ki van tűzve"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva a Vissza és az Áttekintés lehetőséget."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva a Vissza és a Kezdőképernyő elemet."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"eltávolítás a kedvencek közül"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Áthelyezés a következő pozícióba: <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vezérlők"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Válassza ki azokat a vezérlőelemeket, amelyhez hozzá szeretne férni a Gyorsbeállítások között"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tartsa lenyomva, és húzza a vezérlők átrendezéséhez"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Minden vezérlő eltávolítva"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"A rendszer nem mentette a módosításokat"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Többi alkalmazás megtekintése"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Átrendezés"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Vezérlők hozzáadása"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Vissza a szerkesztéshez"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Nem sikerült betölteni a vezérlőket. Ellenőrizze a(z) <xliff:g id="APP">%s</xliff:g> alkalmazást, és győződjön meg arról, hogy nem változtak az alkalmazásbeállítások."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Nem állnak rendelkezésre kompatibilis vezérlők"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Más"</string>
@@ -1037,7 +1037,7 @@
<string name="mobile_data_off_summary" msgid="3663995422004150567">"Nincs automatikus mobiladat-kapcsolat"</string>
<string name="mobile_data_no_connection" msgid="1713872434869947377">"Nincs kapcsolat"</string>
<string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nincs több rendelkezésre álló hálózat"</string>
- <string name="all_network_unavailable" msgid="4112774339909373349">"Nincs rendelkezésre álló hálózat"</string>
+ <string name="all_network_unavailable" msgid="4112774339909373349">"Nincs elérhető hálózat"</string>
<string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string>
<string name="tap_a_network_to_connect" msgid="1565073330852369558">"A kapcsolódáshoz koppintson a kívánt hálózatra"</string>
<string name="unlock_to_view_networks" msgid="5072880496312015676">"Zárolás feloldása a hálózatok megtekintéséhez"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"A Wi-Fi-re történő csatlakozás jelenleg nem automatikus"</string>
<string name="see_all_networks" msgid="3773666844913168122">"Megtekintés"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Hálózatváltáshoz válassza le az ethernetet"</string>
- <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Az eszközhasználati élmény javítása érdekében az alkalmazások és a szolgáltatások továbbra is bármikor kereshetnek Wi-Fi-hálózatokat, még akkor is, ha a Wi-Fi ki van kapcsolva. A funkciót a „Wi-Fi scanning settings” (Wi-Fi-keresési beállítások) részben módosíthatja. "<annotation id="link">"Módosítás"</annotation></string>
+ <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Az eszközhasználati élmény javítása érdekében az alkalmazások és a szolgáltatások továbbra is bármikor kereshetnek Wi-Fi-hálózatokat, még akkor is, ha a Wi-Fi ki van kapcsolva. A funkciót a Wi-Fi-keresési beállításoknál módosíthatja. "<annotation id="link">"Módosítás"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"Repülős üzemmód kikapcsolása"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> a következő mozaikot szeretné hozzáadni a Gyorsbeállításokhoz"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Mozaik hozzáadása"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"A munkahelyi házirend csak munkaprofilból kezdeményezett telefonhívásokat engedélyez"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Váltás munkaprofilra"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Bezárás"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Lezárási képernyő beállításai"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Lezárási képernyő testreszabása"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Nem áll rendelkezésre Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera letiltva"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera és mikrofon letiltva"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon letiltva"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritás mód bekapcsolva"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"A Segéd figyel"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 26a4315..bdfb8b0 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Սկսել"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Կանգնեցնել"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Մեկ ձեռքի ռեժիմ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Կոնտրաստ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Սովորական"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Միջին"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Բարձր"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Արգելահանե՞լ սարքի խոսափողը"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Արգելահանե՞լ սարքի տեսախցիկը"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Արգելահանե՞լ սարքի տեսախցիկը և խոսափողը"</string>
@@ -378,10 +382,10 @@
<string name="user_remove_user_title" msgid="9124124694835811874">"Հեռացնե՞լ օգտատիրոջը:"</string>
<string name="user_remove_user_message" msgid="6702834122128031833">"Այս օգտատիրոջ բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"Հեռացնել"</string>
- <string name="media_projection_dialog_text" msgid="1755705274910034772">"Ձայնագրման և հեռարձակման ընթացքում <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Ձայնագրման և հեռարձակման ընթացքում ծառայությունների մատակարարին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
- <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Սկսե՞լ ձայնագրումը կամ հեռարձակումը"</string>
- <string name="media_projection_dialog_title" msgid="3316063622495360646">"Սկսե՞լ ձայնագրումը կամ հեռարձակումը <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածով"</string>
+ <string name="media_projection_dialog_text" msgid="1755705274910034772">"Տեսագրման և հեռարձակման ընթացքում <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Տեսագրման և հեռարձակման ընթացքում ծառայությունների մատակարարին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
+ <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Սկսե՞լ տեսագրումը կամ հեռարձակումը"</string>
+ <string name="media_projection_dialog_title" msgid="3316063622495360646">"Սկսե՞լ տեսագրումը կամ հեռարձակումը <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածով"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Թույլատրե՞լ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին ցուցադրել կամ տեսագրել էկրանը"</string>
<string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Ամբողջ էկրանը"</string>
<string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Մեկ հավելված"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"անջատել"</string>
<string name="sound_settings" msgid="8874581353127418308">"Ձայն և թրթռոց"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Կարգավորումներ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ձայնն իջեցվեց անվտանգ մակարդակի"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ձայնը բարձր է եղել առաջարկված ժամանակահատվածից ավելի երկար"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Հավելվածն ամրացված է"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Հետ և Համատեսք կոճակները:"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Էկրանը կցուցադրվի այնքան ժամանակ, մինչև չեղարկեք ամրացումը: Չեղարկելու համար հպեք և պահեք «Հետ» և «Գլխավոր էկրան» կոճակները"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ընտրանուց հեռացնելու համար"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Տեղափոխել դիրք <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Կառավարման տարրեր"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Ընտրեք կառավարման տարրերը, որոնք պետք է հասանելի լինեն Արագ կարգավորումներում"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Պահեք և քաշեք՝ կառավարման տարրերը վերադասավորելու համար"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Կառավարման բոլոր տարրերը հեռացվեցին"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Փոփոխությունները չեն պահվել"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Տեսնել այլ հավելվածներ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Վերադասավորել"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Ավելացնել կարգավորումներ"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Վերադառնալ խմբագրման ռեժիմին"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Չհաջողվեց բեռնել կառավարման տարրերը։ Ստուգեք <xliff:g id="APP">%s</xliff:g> հավելվածը՝ համոզվելու, որ հավելվածի կարգավորումները չեն փոխվել։"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Համատեղելի կառավարման տարրերը հասանելի չեն"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Այլ"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Ձեր աշխատանքային կանոնների համաձայն՝ դուք կարող եք զանգեր կատարել աշխատանքային պրոֆիլից"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Անցնել աշխատանքային պրոֆիլ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Փակել"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Կողպէկրանի կարգավորումներ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Անհատականացնել կողպէկրանը"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ցանց հասանելի չէ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Տեսախցիկն արգելափակված է"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Տեսախցիկն ու խոսափողը արգելափակված են"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Խոսափողն արգելափակված է"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Առաջնահերթության ռեժիմը միացված է"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Օգնականը լսում է"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index dade59c..ce3e7e3 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Mulai"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Berhenti"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Mode satu tangan"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontras"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standar"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Sedang"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Tinggi"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Berhenti memblokir mikrofon perangkat?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Berhenti memblokir kamera perangkat?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Berhenti memblokir kamera dan mikrofon perangkat?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"nonaktifkan"</string>
<string name="sound_settings" msgid="8874581353127418308">"Suara & getaran"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Setelan"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Diturunkan ke volume yang lebih aman"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volume tinggi selama lebih lama dari yang direkomendasikan"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikasi disematkan"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Ringkasan untuk melepas sematan."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Beranda untuk melepas sematan."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"batal favoritkan"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Pindah ke posisi <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrol"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Pilih kontrol untuk diakses dari Setelan Cepat"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan & tarik untuk menata ulang kontrol"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kontrol dihapus"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Perubahan tidak disimpan"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Lihat aplikasi lainnya"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Atur ulang"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Tambahkan kontrol"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Kembali mengedit"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrol tidak dapat dimuat. Periksa aplikasi <xliff:g id="APP">%s</xliff:g> untuk memastikan setelan aplikasi tidak berubah."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kontrol yang kompatibel tidak tersedia"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lainnya"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Kebijakan kantor mengizinkan Anda melakukan panggilan telepon hanya dari profil kerja"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Beralih ke profil kerja"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Tutup"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Setelan layar kunci"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Sesuaikan layar kunci"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi tidak tersedia"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera diblokir"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dan mikrofon diblokir"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon diblokir"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode prioritas diaktifkan"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asisten sedang memerhatikan"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index a588d36..0f29c29 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -100,7 +100,7 @@
<string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Vinnur úr skjáupptöku"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Áframhaldandi tilkynning fyrir skjáupptökulotu"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Hefja upptöku?"</string>
- <string name="screenrecord_description" msgid="1123231719680353736">"Á meðan tekið er upp getur Android kerfið fangað viðkvæmar upplýsingar sem sjást á skjánum eða spilast í tækinu. Þar á meðal eru upplýsingar á borð við aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð."</string>
+ <string name="screenrecord_description" msgid="1123231719680353736">"Á meðan tekið er upp getur Android-kerfið fangað viðkvæmar upplýsingar sem sjást á skjánum eða spilast í tækinu, þar á meðal aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð."</string>
<string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Taka upp allan skjáinn"</string>
<string name="screenrecord_option_single_app" msgid="5954863081500035825">"Taka upp eitt forrit"</string>
<string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Þegar þú tekur upp hefur Android aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Hefja"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stöðva"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Einhent stilling"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Birtuskil"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Staðlað"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Miðlungs"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Mikið"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Opna fyrir hljóðnema tækisins?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Opna fyrir myndavél tækisins?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Opna fyrir myndavél og hljóðnema tækisins?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"slökkva"</string>
<string name="sound_settings" msgid="8874581353127418308">"Hljóð og titringur"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Stillingar"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lækkað í öruggari hljóðstyrk"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hljóðstyrkurinn hefur verið hár í lengri tíma en mælt er með"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Forrit er fest"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Þetta heldur þessu opnu þangað til þú losar það. Haltu fingri á „Til baka“ og „Yfirlit“ til að losa."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Þetta heldur þessu opnu þangað til það er losað. Haltu inni bakkhnappinum og heimahnappinum til að losa."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjarlægja úr eftirlæti"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Færa í stöðu <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Stýringar"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Veldu stýringar til að opna með flýtistillingum"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Haltu og dragðu til að endurraða stýringum"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Allar stýringar fjarlægðar"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Breytingar ekki vistaðar"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Sjá önnur forrit"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Endurraða"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Bæta við stýringum"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Aftur í breytingar"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Ekki tókst að hlaða stýringum. Athugaðu <xliff:g id="APP">%s</xliff:g> til að ganga úr skugga um að stillingar forritsins hafi ekki breyst."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Samhæfar stýringar eru ekki tiltækar"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annað"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Vinnureglur gera þér aðeins kleift að hringja símtöl úr vinnusniði"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Skipta yfir í vinnusnið"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Loka"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Stillingar fyrir lásskjá"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Sérsníða lásskjá"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi er ekki til staðar"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Lokað fyrir myndavél"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Lokað fyrir myndavél og hljóðnema"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Lokað fyrir hljóðnema"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Kveikt er á forgangsstillingu"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Hjálparinn er að hlusta"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index f46ccb7..908a42d 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Inizia"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Interrompi"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modalità a una mano"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrasto"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vuoi sbloccare il microfono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vuoi sbloccare la fotocamera del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vuoi sbloccare la fotocamera e il microfono del dispositivo?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disattiva"</string>
<string name="sound_settings" msgid="8874581353127418308">"Suoni e vibrazione"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Impostazioni"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Audio abbassato a un volume più sicuro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Il volume è alto da più tempo di quanto consigliato"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"L\'app è bloccata sullo schermo"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"La schermata rimane visibile finché non viene sganciata. Per sganciarla, tieni premuto Indietro e Panoramica."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"La schermata rimane visibile finché non viene disattivato il blocco su schermo. Per disattivarlo, tocca e tieni premuto Indietro e Home."</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Disattivare i dati mobili?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Non avrai accesso ai dati o a Internet tramite <xliff:g id="CARRIER">%s</xliff:g>. Internet sarà disponibile soltanto tramite Wi-Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"il tuo operatore"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Vuoi passare nuovamente all\'operatore <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Vuoi tornare a <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"I dati mobili non passeranno automaticamente all\'operatore in base alla disponibilità"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No, grazie"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Sì, confermo"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"rimuovere l\'elemento dai preferiti"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Sposta nella posizione <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controlli"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Scegli i controlli a cui accedere dalle Impostazioni rapide"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tieni premuto e trascina per riordinare i controlli"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Tutti i controlli sono stati rimossi"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modifiche non salvate"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Mostra altre app"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Riordina"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Aggiungi controlli"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Torna alle modifiche"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Impossibile caricare i controlli. Verifica nell\'app <xliff:g id="APP">%s</xliff:g> che le relative impostazioni non siano cambiate."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Controlli compatibili non disponibili"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altro"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Le norme di lavoro ti consentono di fare telefonate soltanto dal profilo di lavoro"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Passa al profilo di lavoro"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Chiudi"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Impostazioni schermata di blocco"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizza schermata di blocco"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Sblocca per personalizzare la schermata di blocco"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non disponibile"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Videocamera bloccata"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Videocamera e microfono bloccati"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfono bloccato"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modalità priorità attivata"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"L\'assistente è attivo"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Imposta l\'app per le note predefinita nelle Impostazioni"</string>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 7eb2764..b632953 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"התחלה"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"עצירה"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"מצב שימוש ביד אחת"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ניגודיות"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"רגילה"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"בינונית"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"גבוהה"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"לבטל את חסימת המיקרופון של המכשיר?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"לבטל את חסימת המצלמה של המכשיר?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"לבטל את חסימת המצלמה והמיקרופון של המכשיר?"</string>
@@ -379,7 +383,7 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"כל האפליקציות והנתונים של המשתמש הזה יימחקו."</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"הסרה"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"לאפליקציית <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> תהיה גישה לכל המידע הגלוי במסך שלך ולכל תוכן שמופעל במכשיר שלך בזמן הקלטה או העברה (casting). המידע הזה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"לשירות שמספק את הפונקציה הזו תהיה גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך בזמן הקלטה או העברה (cast) – כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"לשירות שמספק את הפונקציה הזו תהיה גישה לכל המידע שגלוי במסך שלך או מופעל מהמכשיר שלך בזמן הקלטה או העברה (cast) – כולל מידע כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"להתחיל להקליט או להעביר (cast)?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"להתחיל להקליט או להעביר (cast) באמצעות <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"לאפשר לאפליקציה <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> לשתף או להקליט?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"השבתה"</string>
<string name="sound_settings" msgid="8874581353127418308">"צליל ורטט"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"הגדרות"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"עוצמת הקול הוחלשה לרמה בטוחה יותר"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"עוצמת הקול הייתה גבוהה במשך יותר זמן מהמומלץ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"האפליקציה מוצמדת"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"נשאר בתצוגה עד לביטול ההצמדה. יש ללחוץ לחיצה ארוכה על הלחצנים \'הקודם\' ו\'סקירה\' כדי לבטל את ההצמדה."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"נשאר בתצוגה עד לביטול ההצמדה. יש ללחוץ לחיצה ארוכה על הלחצנים \'הקודם\' ו\'דף הבית\' כדי לבטל את ההצמדה."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"להסיר מהמועדפים"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"העברה למיקום <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"פקדים"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"יש לבחור פקדים לגישה מההגדרות המהירות"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"יש ללחוץ לחיצה ארוכה ולגרור כדי לארגן מחדש את הפקדים"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"כל הפקדים הוסרו"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"השינויים לא נשמרו"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"הצגת אפליקציות אחרות"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"סידור מחדש"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"הוספת פקדים"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"חזרה לעריכה"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"לא ניתן היה לטעון את הפקדים. יש לבדוק את האפליקציה <xliff:g id="APP">%s</xliff:g> כדי לוודא שהגדרות האפליקציה לא השתנו."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"פקדים תואמים לא זמינים"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"אחר"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"המדיניות של מקום העבודה מאפשרת לך לבצע שיחות טלפון רק מפרופיל העבודה"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"מעבר לפרופיל עבודה"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"סגירה"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"הגדרות מסך הנעילה"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"התאמה אישית של מסך הנעילה"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ה-Wi-Fi לא זמין"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"המצלמה חסומה"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"המצלמה והמיקרופון חסומים"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"המיקרופון חסום"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"מצב \'עדיפות\' מופעל"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant מאזינה"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 6f43e4b..54b989a1 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -246,8 +246,8 @@
<string name="quick_settings_user_title" msgid="8673045967216204537">"ユーザー"</string>
<string name="quick_settings_wifi_label" msgid="2879507532983487244">"Wi-Fi"</string>
<string name="quick_settings_internet_label" msgid="6603068555872455463">"インターネット"</string>
- <string name="quick_settings_networks_available" msgid="1875138606855420438">"ネットワークが利用できます"</string>
- <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"ネットワークは利用できません"</string>
+ <string name="quick_settings_networks_available" msgid="1875138606855420438">"利用できるネットワークがあります"</string>
+ <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"利用できるネットワークがありません"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"Wi-Fiネットワークを利用できません"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"ON にしています…"</string>
<string name="quick_settings_cast_title" msgid="2279220930629235211">"画面のキャスト"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"片手モード"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"コントラスト"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"標準"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"中"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"デバイスのマイクのブロックを解除しますか?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"デバイスのカメラのブロックを解除しますか?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"デバイスのカメラとマイクのブロックを解除しますか?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"無効にする"</string>
<string name="sound_settings" msgid="8874581353127418308">"音とバイブレーション"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"安全な音量まで下げました"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"おすすめの時間よりも長く大音量になっていました"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"アプリは固定されています"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"固定を解除するまで画面が常に表示されるようになります。[戻る] と [最近] を同時に押し続けると固定が解除されます。"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"固定を解除するまで画面が常に表示されるようになります。[戻る] と [ホーム] を同時に押し続けると固定が解除されます。"</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g>でデータやインターネットにアクセスできなくなります。インターネットには Wi-Fi からのみ接続できます。"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"携帯通信会社"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g> に戻しますか?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"利用可能な場合でも、モバイルデータを利用するよう自動的に切り替わることはありません"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"利用可能な場合でも、モバイルデータ通信に自動的に切り替わることはありません"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"キャンセル"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"切り替える"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"アプリが許可リクエストを隠しているため、設定側でユーザーの応答を確認できません。"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"お気に入りから削除"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ポジション <xliff:g id="NUMBER">%d</xliff:g> に移動"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"コントロール"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"クイック設定からアクセスするコントロールを選択してください"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"コントロールを並べ替えるには長押ししてドラッグします"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"すべてのコントロールを削除しました"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"変更が保存されていません"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"その他のアプリを表示"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"再配置"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"コントロールを追加する"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"編集に戻る"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"コントロールを読み込めませんでした。<xliff:g id="APP">%s</xliff:g> アプリで、アプリの設定が変更されていないことをご確認ください。"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"互換性のあるコントロールがありません"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"その他"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"仕事用ポリシーでは、通話の発信を仕事用プロファイルからのみに制限できます"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"仕事用プロファイルに切り替える"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"閉じる"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ロック画面の設定"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ロック画面のカスタマイズ"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ロック画面をカスタマイズするにはロックを解除してください"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi は利用できません"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"カメラはブロックされています"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"カメラとマイクはブロックされています"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"マイクはブロックされています"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先モードは ON です"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"アシスタントは起動済みです"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"[設定] でデフォルトのメモアプリを設定してください"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 97ccc04..9d46a75 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"დაწყება"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"შეწყვეტა"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ცალი ხელის რეჟიმი"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"კონტრასტი"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"სტანდარტული"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"საშუალო"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"მაღალი"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"გსურთ მოწყობილობის მიკროფონის განბლოკვა?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"გსურთ მოწყობილობის კამერის განბლოკვა?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"გსურთ მოწყობილობის კამერის და მიკროფონის განბლოკვა?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"გამორთვა"</string>
<string name="sound_settings" msgid="8874581353127418308">"ხმა და ვიბრაცია"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"პარამეტრები"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ხმა დაკლებულია უსაფრთხო დონემდე"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ხმა მაღალია რეკომენდებულზე მეტი ხნის განავლობაში"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"აპი ჩამაგრებულია"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"ამით ის დარჩება ხედში ჩამაგრების მოხსნამდე. ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ „უკან და მიმოხილვა“-ს."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ამით ის დარჩება ხედში ჩამაგრების მოხსნამდე. ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ „უკან მთავარ გვერდზე“-ს."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"რჩეულებიდან ამოღება"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"გადატანა პოზიციაზე <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"მართვის საშუალებები"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"აირჩიეთ მართვის საშუალებები სწრაფი პარამეტრებიდან წვდომისთვის"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"მართვის საშუალებების გადაწყობა შეგიძლიათ მათი ჩავლებით გადატანით"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"მართვის ყველა საშუალება ამოიშალა"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ცვლილებები არ შენახულა"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"სხვა აპების ნახვა"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"გადაწყობა"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"მართვის საშუალებების დამატება"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"რედაქტირებაზე დაბრუნება"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"მართვის საშუალებების ჩატვირთვა ვერ მოხერხდა. შეამოწმეთ <xliff:g id="APP">%s</xliff:g> აპი, რათა დარწმუნდეთ, რომ აპის პარამეტრები არ შეცვლილა."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"მართვის თავსებადი საშუალებები მიუწვდომელია"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"სხვა"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"თქვენი სამსახურის წესები საშუალებას გაძლევთ, სატელეფონო ზარები განახორციელოთ მხოლოდ სამსახურის პროფილიდან"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"სამსახურის პროფილზე გადართვა"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"დახურვა"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ჩაკეტილი ეკრანის პარამეტრები"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ჩაკეთილი ეკრანის მორგება"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi მიუწვდომელია"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"კამერა დაბლოკილია"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"კამერა და მიკროფონი დაბლოკილია"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"მიკროფონი დაბლოკილია"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"პრიორიტეტული რეჟიმი ჩართულია"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"ასისტენტის ყურადღების ფუნქცია ჩართულია"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 609dba4..7eb7a93 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -100,7 +100,7 @@
<string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Экран жазғыш бейнесін өңдеу"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды бейнеге жазудың ағымдағы хабарландыруы"</string>
<string name="screenrecord_start_label" msgid="1750350278888217473">"Жазу басталсын ба?"</string>
- <string name="screenrecord_description" msgid="1123231719680353736">"Android жүйесі экранда көрсетілетін немесе құрылғыда ойнатылатын құпия ақпаратты жазып алуы мүмкін. Ондай ақпаратқа құпия сөздер, төлем ақпараты, фотосуреттер, хабарлар және аудио жатады."</string>
+ <string name="screenrecord_description" msgid="1123231719680353736">"Android жүйесі экранда көрсетілетін немесе құрылғыда ойнатылатын құпия ақпаратты жазып алуы мүмкін. Ондай ақпаратқа құпия сөздер, төлем ақпараты, фотосуреттер, хабарлар және дыбыстар жатады."</string>
<string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Бүкіл экранды жазу"</string>
<string name="screenrecord_option_single_app" msgid="5954863081500035825">"Жалғыз қолданбаны жазу"</string>
<string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Жазу кезінде Android жүйесі экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
@@ -269,7 +269,7 @@
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Қосылуда…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Трафикті үнемдеу режимі қосулы"</string>
<string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# құрылғы}other{# құрылғы}}"</string>
- <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Қалта шам"</string>
+ <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Қолшам"</string>
<string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Камера қолданылып жатыр"</string>
<string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Мобильдік интернет"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"Дерек шығыны"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Бастау"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Тоқтату"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Бір қолмен басқару режимі"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартты режим"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Орташа"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Жоғары"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Құрылғы микрофонының бөгеуі алынсын ба?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Құрылғы камерасының бөгеуі алынсын ба?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Құрылғы камерасы мен микрофонының бөгеуі алынсын ба?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"өшіру"</string>
<string name="sound_settings" msgid="8874581353127418308">"Дыбыс және діріл"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Параметрлер"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Қауіпсіз дыбыс деңгейіне төмендетілді"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Дыбыстың жоғары деңгейі ұсынылғаннан уақыттан ұзағырақ болды."</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Қолданба бекітілді"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Өзіңіз босатқаша ашық тұрады. Босату үшін \"Артқа\" және \"Шолу\" түймелерін басып тұрыңыз."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Өзіңіз босатқаша ашық тұрады. Босату үшін \"Артқа\" және \"Негізгі бет\" түймелерін басып тұрыңыз"</string>
@@ -852,8 +854,7 @@
<string name="accessibility_magnification_medium" msgid="6994632616884562625">"Орташа"</string>
<string name="accessibility_magnification_small" msgid="8144502090651099970">"Кішi"</string>
<string name="accessibility_magnification_large" msgid="6602944330021308774">"Үлкен"</string>
- <!-- no translation found for accessibility_magnification_fullscreen (5043514702759201964) -->
- <skip />
+ <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"Толық экран"</string>
<string name="accessibility_magnification_done" msgid="263349129937348512">"Дайын"</string>
<string name="accessibility_magnifier_edit" msgid="1522877239671820636">"Өзгерту"</string>
<string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Ұлғайтқыш терезесінің параметрлері"</string>
@@ -884,23 +885,21 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"таңдаулылардан алып тастау"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> позициясына жылжыту"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Басқару элементтері"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"\"Жылдам параметрлер\" мәзірінен пайдалануға болатын басқару элементтерін таңдаңыз."</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Басқару элементтерінің ретін өзгерту үшін оларды басып тұрып сүйреңіз."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Барлық басқару элементтері жойылды."</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өзгерістер сақталмады."</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Басқа қолданбаларды көру"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Қайта реттеу"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Басқару элементтерін қосу"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Өзгерту бетіне оралу"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Басқару элементтері жүктелмеді. Қолданба параметрлерінің өзгермегенін тексеру үшін <xliff:g id="APP">%s</xliff:g> қолданбасын қараңыз."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Үйлесімді басқару элементтері қолжетімді емес."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Басқа"</string>
<string name="controls_dialog_title" msgid="2343565267424406202">"Құрылғы басқару элементтеріне қосу"</string>
<string name="controls_dialog_ok" msgid="2770230012857881822">"Енгізу"</string>
- <string name="controls_dialog_remove" msgid="3775288002711561936">"Өшіру"</string>
+ <string name="controls_dialog_remove" msgid="3775288002711561936">"Жою"</string>
<string name="controls_dialog_message" msgid="342066938390663844">"<xliff:g id="APP">%s</xliff:g> ұсынған"</string>
<string name="controls_tile_locked" msgid="731547768182831938">"Құрылғы құлыпталды."</string>
<string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"Құрылғыларды құлып экранынан көрсетуге және басқаруға рұқсат берілсін бе?"</string>
@@ -954,7 +953,7 @@
<string name="controls_menu_add" msgid="4447246119229920050">"Басқару элементтерін қосу"</string>
<string name="controls_menu_edit" msgid="890623986951347062">"Басқару элементтерін өзгерту"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Қолданба қосу"</string>
- <string name="controls_menu_remove" msgid="3006525275966023468">"Қолданбаны өшіру"</string>
+ <string name="controls_menu_remove" msgid="3006525275966023468">"Қолданбаны жою"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Шығыс сигналдарды қосу"</string>
<string name="media_output_dialog_group" msgid="5571251347877452212">"Топ"</string>
<string name="media_output_dialog_single_device" msgid="3102758980643351058">"1 құрылғы таңдалды."</string>
@@ -1124,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Жұмыс саясатыңызға сәйкес тек жұмыс профилінен қоңырау шалуға болады."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Жұмыс профиліне ауысу"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Жабу"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Экран құлпының параметрлері"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Құлып экранын бейімдеу"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi қолжетімсіз."</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера бөгелген."</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера мен микрофон бөгелген."</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон бөгелген."</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"\"Маңызды\" режимі қосулы."</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant қосулы."</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 0d4333f..4eafd98 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ចាប់ផ្ដើម"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ឈប់"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"មុខងារប្រើដៃម្ខាង"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"កម្រិតរំលេចពណ៌"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ស្តង់ដារ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"មធ្យម"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ខ្ពស់"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ឈប់ទប់ស្កាត់មីក្រូហ្វូនរបស់ឧបករណ៍ឬ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ឈប់ទប់ស្កាត់កាមេរ៉ារបស់ឧបករណ៍ឬ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ឈប់ទប់ស្កាត់កាមេរ៉ា និងមីក្រូហ្វូនរបស់ឧបករណ៍ឬ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"បិទ"</string>
<string name="sound_settings" msgid="8874581353127418308">"សំឡេង និងការញ័រ"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ការកំណត់"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"បានបន្ថយទៅកម្រិតសំឡេងដែលកាន់តែមានសុវត្ថិភាព"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"កម្រិតសំឡេងខ្ពស់ក្នុងរយៈពេលយូរជាងកម្រិតដែលបានណែនាំ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"កម្មវិធីត្រូវបានខ្ទាស់"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"វានឹងនៅតែបង្ហាញ រហូតទាល់តែអ្នកដកការដៅ។ សូមសង្កត់ប៊ូតុងថយក្រោយ និងប៊ូតុងទិដ្ឋភាពរួមឲ្យជាប់ ដើម្បីដកការដៅ។"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"វានឹងនៅតែបង្ហាញ រហូតទាល់តែអ្នកដកការដៅ។ សូមចុចប៊ូតុងថយក្រោយ និងប៊ូតុងទំព័រដើមឱ្យជាប់ ដើម្បីដកការដៅ។"</string>
@@ -517,13 +519,13 @@
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"ការកំណត់អេក្រង់ចាក់សោ"</string>
<string name="qr_code_scanner_title" msgid="1938155688725760702">"កម្មវិធីស្កេនកូដ QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"កំពុងដំឡើងកំណែ"</string>
- <string name="status_bar_work" msgid="5238641949837091056">"ប្រវត្តិរូបការងារ"</string>
+ <string name="status_bar_work" msgid="5238641949837091056">"កម្រងព័ត៌មានការងារ"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"ពេលជិះយន្តហោះ"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"អ្នកនឹងមិនលឺម៉ោងរោទ៍ <xliff:g id="WHEN">%1$s</xliff:g> បន្ទាប់របស់អ្នកទេ"</string>
<string name="alarm_template" msgid="2234991538018805736">"នៅ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"នៅ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="accessibility_status_bar_hotspot" msgid="2888479317489131669">"ហតស្ប៉ត"</string>
- <string name="accessibility_managed_profile" msgid="4703836746209377356">"ប្រវត្តិរូបការងារ"</string>
+ <string name="accessibility_managed_profile" msgid="4703836746209377356">"កម្រងព័ត៌មានការងារ"</string>
<string name="tuner_warning_title" msgid="7721976098452135267">"ល្អសម្រាប់អ្នកប្រើមួយចំនួន តែមិនសម្រាប់គ្រប់គ្នាទេ"</string>
<string name="tuner_warning" msgid="1861736288458481650">"កម្មវិធីសម្រួល UI ប្រព័ន្ធផ្តល់ជូនអ្នកនូវមធ្យោបាយបន្ថែមទៀតដើម្បីកែសម្រួល និងប្តូរចំណុចប្រទាក់អ្នកប្រើ Android តាមបំណង។ លក្ខណៈពិសេសសាកល្បងនេះអាចនឹងផ្លាស់ប្តូរ បំបែក ឬបាត់បង់បន្ទាប់ពីការចេញផ្សាយនាពេលអនាគត។ សូមបន្តដោយប្រុងប្រយ័ត្ន។"</string>
<string name="tuner_persistent_warning" msgid="230466285569307806">"លក្ខណៈពិសេសសាកល្បងនេះអាចនឹងផ្លាស់ប្តូរ បំបែក ឬបាត់បង់បន្ទាប់ពីការចេញផ្សាយនាពេលអនាគត។ សូមបន្តដោយប្រុងប្រយ័ត្ន។"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ដកចេញពីសំណព្វ"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ផ្លាស់ទីទៅតាំងទី <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ការគ្រប់គ្រង"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ជ្រើសរើសការគ្រប់គ្រង ដើម្បីចូលប្រើពីការកំណត់រហ័ស"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ចុចឱ្យជាប់ រួចអូសដើម្បីរៀបចំផ្ទាំងគ្រប់គ្រងឡើងវិញ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"បានដកផ្ទាំងគ្រប់គ្រងទាំងអស់ហើយ"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"មិនបានរក្សាទុកការផ្លាស់ប្ដូរទេ"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"មើលកម្មវិធីផ្សេងទៀត"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"តម្រៀបឡើងវិញ"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"បញ្ចូលការគ្រប់គ្រង"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ត្រឡប់ទៅការកែវិញ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"មិនអាចផ្ទុកការគ្រប់គ្រងបានទេ។ សូមពិនិត្យមើលកម្មវិធី <xliff:g id="APP">%s</xliff:g> ដើម្បីធ្វើឱ្យប្រាកដថាការកំណត់កម្មវិធីមិនបានផ្លាស់ប្ដូរ។"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"មិនអាចប្រើការគ្រប់គ្រងដែលត្រូវគ្នាបានទេ"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ផ្សេងៗ"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"មិនអាចផ្ទុកស្ថានភាពបានទេ"</string>
<string name="controls_error_failed" msgid="960228639198558525">"មានបញ្ហា សូមព្យាយាមម្តងទៀត"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"បញ្ចូលផ្ទាំងគ្រប់គ្រង"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"កែផ្ទាំងគ្រប់គ្រង"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"កែការគ្រប់គ្រង"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"បញ្ចូលកម្មវិធី"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"ដកកម្មវិធីចេញ"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"បញ្ចូលឧបករណ៍មេឌៀ"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"គោលការណ៍ការងាររបស់អ្នកអនុញ្ញាតឱ្យអ្នកធ្វើការហៅទូរសព្ទបានតែពីកម្រងព័ត៌មានការងារប៉ុណ្ណោះ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ប្ដូរទៅកម្រងព័ត៌មានការងារ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"បិទ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ការកំណត់អេក្រង់ចាក់សោ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ប្ដូរអេក្រង់ចាក់សោតាមបំណង"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ដោះសោ ដើម្បីប្ដូរអេក្រង់ចាក់សោតាមបំណង"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"មិនមាន Wi-Fi ទេ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"បានទប់ស្កាត់កាមេរ៉ា"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"បានទប់ស្កាត់កាមេរ៉ា និងមីក្រូហ្វូន"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"បានទប់ស្កាត់មីក្រូហ្វូន"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"មុខងារអាទិភាពត្រូវបានបើក"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"ភាពប្រុងប្រៀបរបស់ Google Assistant ត្រូវបានបើក"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"កំណត់កម្មវិធីកំណត់ចំណាំលំនាំដើមនៅក្នុងការកំណត់"</string>
</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 43fc735..b0193f0 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ನಿಲ್ಲಿಸಿ"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ಒಂದು ಕೈ ಮೋಡ್"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ಕಾಂಟ್ರಾಸ್ಟ್"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ಪ್ರಮಾಣಿತ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ಮಧ್ಯಮ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ಹೆಚ್ಚು"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ಸಾಧನದ ಮೈಕ್ರೋಫೋನ್ ನಿರ್ಬಂಧವನ್ನು ತೆಗೆಯಬೇಕೆ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ಸಾಧನದ ಕ್ಯಾಮರಾ ನಿರ್ಬಂಧವನ್ನು ತೆಗೆಯಬೇಕೆ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ಸಾಧನದ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಅನ್ಬ್ಲಾಕ್ ಮಾಡಬೇಕೇ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="sound_settings" msgid="8874581353127418308">"ಧ್ವನಿ & ವೈಬ್ರೇಷನ್"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ಸುರಕ್ಷಿತ ವಾಲ್ಯೂಮ್ಗೆ ಕಡಿಮೆ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ಶಿಫಾರಸು ಮಾಡಿದ ಸಮಯಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಮಯ ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚಾಗಿರುತ್ತದೆ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ಆ್ಯಪ್ ಅನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"ನೀವು ಅನ್ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅನ್ಪಿನ್ ಮಾಡಲು ಅವಲೋಕಿಸಿ."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ನೀವು ಅನ್ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅನ್ಪಿನ್ ಮಾಡಲು ಮುಖಪುಟಕ್ಕೆ ಹಿಂತಿರುಗಿ."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ಮೆಚ್ಚಿನದಲ್ಲದ್ದು"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ಸ್ಥಾನ <xliff:g id="NUMBER">%d</xliff:g> ಕ್ಕೆ ಸರಿಸಿ"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ನಿಯಂತ್ರಣಗಳು"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳಿಂದ ಪ್ರವೇಶಿಸಲು ನಿಯಂತ್ರಣಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ನಿಯಂತ್ರಣಗಳನ್ನು ಮರುಹೊಂದಿಸಲು ಹೋಲ್ಡ್ ಮಾಡಿ ಮತ್ತು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ಎಲ್ಲಾ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ಇತರ ಆ್ಯಪ್ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ಮರುಹೊಂದಿಸಿ"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ಕಂಟ್ರೋಲ್ಗಳನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ಎಡಿಟ್ ಮಾಡುವಿಕೆಗೆ ಹಿಂತಿರುಗಿ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"ನಿಯಂತ್ರಣಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಆ್ಯಪ್ ಸೆಟ್ಟಿಂಗ್ಗಳು ಬದಲಾಗಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು <xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ಹೊಂದಾಣಿಕೆಯ ನಿಯಂತ್ರಣಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ಇತರ"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ನಿಮ್ಮ ಕೆಲಸದ ನೀತಿಯು ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ನಿಂದ ಮಾತ್ರ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ಗೆ ಬದಲಿಸಿ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ಮುಚ್ಚಿರಿ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ವೈ-ಫೈ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ಕ್ಯಾಮರಾವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ಆದ್ಯತೆಯ ಮೋಡ್ ಆನ್ ಆಗಿದೆ"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ನಿಮ್ಮ ಮಾತನ್ನು ಆಲಿಸುತ್ತಿದೆ"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 724233c..32e27ee 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"시작"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"중지"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"한 손 사용 모드"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"대비"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"표준"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"보통"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"높음"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"기기 마이크를 &#173;차단 해제하시겠습니까?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"기기 카메라를 차단 해제하시겠습니까?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"기기 카메라 및 마이크를 차단 해제하시겠습니까?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"사용 중지"</string>
<string name="sound_settings" msgid="8874581353127418308">"소리 및 진동"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"설정"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"청력 보호를 위해 적정 볼륨으로 낮춤"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"볼륨이 권장 시간보다 긴 시간 동안 높은 상태였습니다"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"앱 고정됨"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"고정 해제할 때까지 계속 표시됩니다. 고정 해제하려면 뒤로 및 최근 사용을 길게 터치하세요."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"고정 해제할 때까지 계속 표시됩니다. 고정 해제하려면 뒤로 및 홈을 길게 터치하세요."</string>
@@ -791,8 +793,8 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g>을(를) 통해 데이터 또는 인터넷에 액세스할 수 없게 됩니다. 인터넷은 Wi-Fi를 통해서만 사용할 수 있습니다."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"이동통신사"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"다시 <xliff:g id="CARRIER">%s</xliff:g>(으)로 전환할까요?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"모바일 데이터가 가용성에 따라 자동으로 전환하지 않습니다."</string>
- <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"나중에"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"모바일 데이터를 사용할 수 있어도 자동으로 전환되지 않습니다"</string>
+ <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"아니요"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"예, 전환합니다"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"앱이 권한 요청을 가리고 있기 때문에 설정에서 내 응답을 확인할 수 없습니다."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g>에서 <xliff:g id="APP_2">%2$s</xliff:g>의 슬라이스를 표시하도록 허용하시겠습니까?"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"즐겨찾기에서 삭제"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"다음 위치로 이동: <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"제어"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"빠른 설정에서 액세스할 컨트롤 선택"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"길게 누르고 드래그하여 컨트롤 재정렬"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"모든 컨트롤 삭제됨"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"변경사항이 저장되지 않음"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"다른 앱 보기"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"다시 정렬"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"제어 기능 추가"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"수정 모드로 돌아가기"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"컨트롤을 로드할 수 없습니다. <xliff:g id="APP">%s</xliff:g> 앱에서 설정이 변경되지 않았는지 확인하세요."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"호환 컨트롤을 사용할 수 없습니다."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"기타"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"통계를 로드할 수 없음"</string>
<string name="controls_error_failed" msgid="960228639198558525">"오류. 다시 시도하세요."</string>
<string name="controls_menu_add" msgid="4447246119229920050">"컨트롤 추가"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"제어 설정 수정"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"컨트롤 수정"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"앱 추가"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"앱 삭제"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"출력 추가"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"직장 정책이 직장 프로필에서만 전화를 걸도록 허용합니다."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"직장 프로필로 전환"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"닫기"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"잠금 화면 설정"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"잠금 화면 맞춤 설정"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi를 사용할 수 없음"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"카메라 차단됨"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"카메라 및 마이크 차단됨"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"마이크 차단됨"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"우선순위 모드 설정됨"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"어시스턴트가 대기 중임"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 2c43d93..6b78db8 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -131,7 +131,7 @@
<string name="accessibility_phone_button" msgid="4256353121703100427">"Телефон"</string>
<string name="accessibility_voice_assist_button" msgid="6497706615649754510">"Үн жардамчысы"</string>
<string name="accessibility_wallet_button" msgid="1458258783460555507">"Капчык"</string>
- <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"QR коддорунун сканери"</string>
+ <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"QR сканери"</string>
<string name="accessibility_unlock_button" msgid="3613812140816244310">"Кулпусу ачылды"</string>
<string name="accessibility_lock_icon" msgid="661492842417875775">"Түзмөк кулпуланды"</string>
<string name="accessibility_scanning_face" msgid="3093828357921541387">"Жүз скандалууда"</string>
@@ -257,8 +257,8 @@
<string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Wi-Fi туташкан жок"</string>
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Жарыктыгы"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"Түстөрдү инверсиялоо"</string>
- <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түстөрдү тууралоо"</string>
- <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Ариптин өлчөмү"</string>
+ <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түсүн тууралоо"</string>
+ <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Арип өлчөмү"</string>
<string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Колдонуучуларды тескөө"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Бүттү"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Жабуу"</string>
@@ -295,10 +295,14 @@
<string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string>
<string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC өчүрүлгөн"</string>
<string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC иштетилген"</string>
- <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"Экрандан видео жаздырып алуу"</string>
+ <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"Экранды жаздыруу"</string>
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Баштадык"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Токтотуу"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Бир кол режими"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Кадимки"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Орточо"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Жогору"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Түзмөктүн микрофонун бөгөттөн чыгарасызбы?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Түзмөктүн камерасын бөгөттөн чыгарасызбы?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Түзмөктүн камерасы менен микрофону бөгөттөн чыгарылсынбы?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"өчүрүү"</string>
<string name="sound_settings" msgid="8874581353127418308">"Үн жана дирилдөө"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Параметрлер"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Коопсуз үн көлөмүнө төмөндөтүлдү"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Үн көлөмү сунушталгандан узагыраак убакыт жогору болду"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Колдонмо кадалды"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн \"Артка\" жана \"Назар\" баскычтарын басып, кармап туруңуз."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Артка\" жана \"Башкы бет\" баскычтарын басып, кармап туруңуз."</string>
@@ -515,7 +517,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Колдонуу үчүн кулпусун ачыңыз"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"Кыйытмаларды алууда ката кетти. Бир аздан кийин кайталап көрүңүз."</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Экранды кулпулоо параметрлери"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"QR кодунун сканери"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"QR сканери"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Жаңырууда"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Жумуш профили"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Учак режими"</string>
@@ -604,7 +606,7 @@
<string name="keyboard_key_media_fast_forward" msgid="3572444327046911822">"Алдыга түрүү"</string>
<string name="keyboard_key_page_up" msgid="173914303254199845">"Page Up"</string>
<string name="keyboard_key_page_down" msgid="9035902490071829731">"Page Down"</string>
- <string name="keyboard_key_forward_del" msgid="5325501825762733459">"Жок кылуу"</string>
+ <string name="keyboard_key_forward_del" msgid="5325501825762733459">"Өчүрүү"</string>
<string name="keyboard_key_move_home" msgid="3496502501803911971">"Башкы бет"</string>
<string name="keyboard_key_move_end" msgid="99190401463834854">"Бүтүрүү"</string>
<string name="keyboard_key_insert" msgid="4621692715704410493">"Insert"</string>
@@ -793,7 +795,7 @@
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Кайра <xliff:g id="CARRIER">%s</xliff:g> байланыш операторуна которуласызбы?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Жеткиликтүү болгондо мобилдик Интернет автоматтык түрдө которулбайт"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Жок, рахмат"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ооба, которулуу"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ооба, которулам"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Уруксат берүү сурамыңыз көрүнбөй калгандыктан, Параметрлер жообуңузду ырастай албай жатат."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"<xliff:g id="APP_0">%1$s</xliff:g> колдонмосуна <xliff:g id="APP_2">%2$s</xliff:g> үлгүлөрүн көрсөтүүгө уруксат берилсинби?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- <xliff:g id="APP">%1$s</xliff:g> колдонмосунун маалыматын окуйт"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"сүйүктүүлөрдөн чыгаруу"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-позицияга жылдыруу"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Башкаруу элементтери"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Ыкчам жөндөөлөрдө жеткиликтүү боло турган башкаруу элементтерин тандаңыз"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Башкаруу элементтеринин иретин өзгөртүү үчүн кармап туруп, сүйрөңүз"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Бардык башкаруу элементтери өчүрүлдү"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өзгөртүүлөр сакталган жок"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Башка колдонмолорду көрүү"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Иреттештирүү"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Башкаруу элементтерин кошуу"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Түзөтүүгө кайтуу"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Башкаруу элементтери жүктөлгөн жок. <xliff:g id="APP">%s</xliff:g> колдонмосуна өтүп, колдонмонун параметрлери өзгөрбөгөнүн текшериңиз."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Шайкеш башкаруу элементтери жеткиликсиз"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Башка"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Жумуш саясатыңызга ылайык, жумуш профилинен гана чалууларды аткара аласыз"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Жумуш профилине которулуу"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Жабуу"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Кулпуланган экран параметрлери"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Кулпу экранын тууралоо"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi жеткиликтүү эмес"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера бөгөттөлдү"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера менен микрофон бөгөттөлдү"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон бөгөттөлдү"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Маанилүү сүйлөшүүлөр режими күйүк"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Жардамчы иштетилди"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index b57f836..5b01705 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ເລີ່ມ"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ຢຸດ"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ໂໝດມືດຽວ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ຄອນທຣາສ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ມາດຕະຖານ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ປານກາງ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ສູງ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ຍົກເລີກການບລັອກໄມໂຄຣໂຟນອຸປະກອນບໍ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ຍົກເລີກການບລັອກກ້ອງຖ່າຍຮູບອຸປະກອນບໍ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ຍົກເລີກການບລັອກກ້ອງຖ່າຍຮູບ ຫຼື ໄມໂຄຣໂຟນອຸປະກອນບໍ?"</string>
@@ -516,7 +520,7 @@
<string name="qr_code_scanner_title" msgid="1938155688725760702">"ຕົວສະແກນລະຫັດ QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"ກຳລັງອັບເດດ"</string>
<string name="status_bar_work" msgid="5238641949837091056">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
- <string name="status_bar_airplane" msgid="4848702508684541009">"ໂໝດເຮືອບິນ"</string>
+ <string name="status_bar_airplane" msgid="4848702508684541009">"ໂໝດຢູ່ໃນຍົນ"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"ທ່ານຈະບໍ່ໄດ້ຍິນສຽງໂມງປ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template" msgid="2234991538018805736">"ເວລາ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"ວັນ <xliff:g id="WHEN">%1$s</xliff:g>"</string>
@@ -881,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ຍົກເລີກລາຍການທີ່ມັກ"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ຍ້າຍໄປຕຳແໜ່ງ <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ການຄວບຄຸມ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ເລືອກການຄວບຄຸມເພື່ອເຂົ້າເຖິງຈາກການຕັ້ງຄ່າດ່ວນ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ກົດຄ້າງໄວ້ເພື່ອຈັດຮຽງການຄວບຄຸມຄືນໃໝ່"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ລຶບການຄວບຄຸມທັງໝົດອອກແລ້ວ"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ບໍ່ໄດ້ບັນທຶກການປ່ຽນແປງໄວ້"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ເບິ່ງແອັບອື່ນໆ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ຈັດຮຽງຄືນໃໝ່"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ເພີ່ມການຄວບຄຸມ"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ກັບຄືນໄປຫາການແກ້ໄຂ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"ບໍ່ສາມາດໂຫຼດການຄວບຄຸມໄດ້. ກວດສອບແອັບ <xliff:g id="APP">%s</xliff:g> ເພື່ອໃຫ້ແນ່ໃຈວ່າຍັງບໍ່ມີການປ່ຽນແປງການຕັ້ງຄ່າແອັບເທື່ອ."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ບໍ່ມີການຄວບຄຸມທີ່ໃຊ້ຮ່ວມກັນທີ່ສາມາດໃຊ້ໄດ້"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ອື່ນໆ"</string>
@@ -1121,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ນະໂຍບາຍບ່ອນເຮັດວຽກຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານໂທລະສັບໄດ້ຈາກໂປຣໄຟລ໌ບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ສະຫຼັບໄປໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ປິດ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ການຕັ້ງຄ່າໜ້າຈໍລັອກ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ປັບແຕ່ງໜ້າຈໍລັອກ"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ບໍ່ພ້ອມໃຫ້ນຳໃຊ້"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ກ້ອງຖ່າຍຮູບຖືກບລັອກຢູ່"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຖືກບລັອກຢູ່"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ໄມໂຄຣໂຟນຖືກບລັອກຢູ່"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ໂໝດຄວາມສຳຄັນເປີດຢູ່"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"ການເອີ້ນໃຊ້ຜູ້ຊ່ວຍເປີດຢູ່"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index ab2ac5a..c0de813 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Pradėti"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stabdyti"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Vienos rankos režimas"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrastas"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Įprastas"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Vidutinis"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Aukštas"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Panaikinti įrenginio mikrofono blokavimą?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Panaikinti įrenginio fotoaparato blokavimą?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Panaikinti įrenginio fotoaparato ir mikrofono blokavimą?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"išjungti"</string>
<string name="sound_settings" msgid="8874581353127418308">"Garsas ir vibravimas"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nustatymai"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sumažinta iki saugesnio garsumo"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Garsumas buvo aukštas ilgiau, nei rekomenduojama"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Programa prisegta"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Tai bus rodoma, kol atsegsite. Palieskite ir palaikykite „Atgal“ ir „Apžvalga“, kad atsegtumėte."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Tai bus rodoma, kol atsegsite. Palieskite ir palaikykite „Atgal“ ir „Pagrindinis ekranas“, kad atsegtumėte."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"pašalinti iš mėgstamiausių"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Perkelti į <xliff:g id="NUMBER">%d</xliff:g> padėtį"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Valdikliai"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Pasirinkite valdiklius, kad pasiektumėte iš sparčiųjų nustatymų"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Norėdami pertvarkyti valdiklius, vilkite laikydami nuspaudę"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Visi valdikliai pašalinti"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Pakeitimai neišsaugoti"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Žr. kitas programas"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Pertvarkyti"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Pridėti valdiklių"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Atgal į redagavimą"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Nepavyko įkelti valdiklių. Eikite į programą „<xliff:g id="APP">%s</xliff:g>“ ir įsitikinkite, kad programos nustatymai nepakeisti."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Suderinami valdikliai nepasiekiami"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Kita"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Pagal jūsų darbo politiką galite skambinti telefonu tik iš darbo profilio"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Perjungti į darbo profilį"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Uždaryti"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Užrakinimo ekrano nustatymai"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Užrakinimo ekrano tinkinimas"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"„Wi-Fi“ ryšys nepasiekiamas"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Fotoaparatas užblokuotas"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Fotoaparatas ir mikrofonas užblokuoti"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonas užblokuotas"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteto režimas įjungtas"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Padėjėjas klauso"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 4992eb1..3ec0e20 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Sākt"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Apturēt"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Vienas rokas režīms"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrasts"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standarta"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Vidējs"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Augsts"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vai atbloķēt ierīces mikrofonu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vai vēlaties atbloķēt ierīces kameru?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vai atbloķēt ierīces kameru un mikrofonu?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"atspējot"</string>
<string name="sound_settings" msgid="8874581353127418308">"Skaņa un vibrācija"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Iestatījumi"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Skaļums samazināts līdz drošākam"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Skaļums ir bijis liels ilgāk, nekā ieteicams."</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Lietotne ir piesprausta"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, pieskarieties pogām Atpakaļ un Pārskats un turiet tās."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, pieskarieties pogām “Atpakaļ” un “Sākums” un turiet tās."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"noņemtu no izlases"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Pārvietot uz <xliff:g id="NUMBER">%d</xliff:g>. pozīciju"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vadīklas"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Izvēlieties vadīklas, kam piekļūt no ātrajiem iestatījumiem."</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Lai pārkārtotu vadīklas, turiet un velciet tās"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Visas vadīklas ir noņemtas"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Izmaiņas nav saglabātas."</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Skatīt citas lietotnes"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Pārkārtot"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Pievienot vadīklas"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Atgriezties pie rediģēšanas"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Nevarēja ielādēt vadīklas. Lietotnē <xliff:g id="APP">%s</xliff:g> pārbaudiet, vai nav mainīti lietotnes iestatījumi."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Nav pieejamas saderīgas vadīklas"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Cita"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Saskaņā ar jūsu darba politiku tālruņa zvanus drīkst veikt tikai no darba profila"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Pārslēgties uz darba profilu"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Aizvērt"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Bloķēšanas ekrāna iestatījumi"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Pielāgot bloķēšanas ekrānu"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nav pieejams"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera ir bloķēta"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameras un mikrofona lietošana ir bloķēta"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofons ir bloķēts"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritātes režīms ir ieslēgts"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistents klausās"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index ec30a5b..09cd589 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -247,14 +247,14 @@
<string name="quick_settings_wifi_label" msgid="2879507532983487244">"Wi-Fi"</string>
<string name="quick_settings_internet_label" msgid="6603068555872455463">"Интернет"</string>
<string name="quick_settings_networks_available" msgid="1875138606855420438">"Мрежите се достапни"</string>
- <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"Мрежите се недостапни"</string>
+ <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"Не се достапни мрежи"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"Нема достапни Wi-Fi мрежи"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"Се вклучува…"</string>
- <string name="quick_settings_cast_title" msgid="2279220930629235211">"Емитување на екранот"</string>
+ <string name="quick_settings_cast_title" msgid="2279220930629235211">"Емитување екран"</string>
<string name="quick_settings_casting" msgid="1435880708719268055">"Емитување"</string>
<string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"Неименуван уред"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"Нема достапни уреди"</string>
- <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Wi-Fi не е поврзано"</string>
+ <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Нема Wi-Fi врска"</string>
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Осветленост"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инверзија на боите"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекција на боите"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Започни"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Сопри"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Режим со една рака"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандарден"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Среден"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Висок"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Да се одблокира пристапот до микрофонот на уредот?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Да се одблокира пристапот до камерата на уредот?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Да се одблокира пристапот до камерата и микрофонот на уредот?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"оневозможи"</string>
<string name="sound_settings" msgid="8874581353127418308">"Звук и вибрации"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Поставки"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Намалено на побезбедна јачина на звук"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Јачината на звукот е висока подолго од препорачаното"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Апликацијата е закачена"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ќе се гледа сѐ додека не го откачите. Допрете и држете „Назад“ и „Краток преглед“ за откачување."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ќе се гледа сѐ додека не го откачите. Допрете и задржете „Назад“ и „Почетен екран“ за откачување."</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Да се исклучи мобилниот интернет?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Нема да имате пристап до податоците или интернетот преку <xliff:g id="CARRIER">%s</xliff:g>. Интернетот ќе биде достапен само преку Wi-Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"вашиот оператор"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Да се префрли на <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Ќе се вратите на <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Мобилниот интернет нема автоматски да се префрли според достапноста"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Не, фала"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Да, префрли се"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"означите како неомилена"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Преместете на позиција <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Изберете контроли до кои ќе пристапувате од „Брзите поставки“"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржете и влечете за да ги преуредите контролите"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Сите контроли се отстранети"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промените не се зачувани"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Видете други апликации"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Преуредување"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Додајте контроли"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Назад на изменување"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Контролите не може да се вчитаат. Проверете ја апликацијата <xliff:g id="APP">%s</xliff:g> за да се уверите дека поставките за апликацијата не се променети."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Нема компатибилни контроли"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друга"</string>
@@ -1047,7 +1047,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Прикажи ги сите"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"За промена на мрежата, прекинете ја врската со етернетот"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"За да се подобри доживувањето на уредот, апликациите и услугите може сѐ уште да скенираат за Wi‑Fi мрежи во секое време, дури и кога Wi‑Fi е исклучено. Може да го промените ова во поставките за „Скенирање за Wi-Fi“. "<annotation id="link">"Промени"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Исклучи го авионскиот режим"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Исклучи „Авионски режим“"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> сака да ја додаде следнава плочка на „Брзите поставки“"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Додајте плочка"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не додавајте плочка"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Вашето работно правило ви дозволува да упатувате повици само од работниот профил"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Префрли се на работен профил"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Затвори"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Поставки за заклучен екран"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Приспособете го заклучениот екран"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi не е достапно"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камерата е блокирана"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камерата и микрофонот се блокирани"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофонот е блокиран"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетниот режим е вклучен"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Вниманието на „Помошникот“ е вклучено"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-mk/tiles_states_strings.xml b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
index 8c4459a..4c302ff 100644
--- a/packages/SystemUI/res/values-mk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
@@ -88,7 +88,7 @@
</string-array>
<string-array name="tile_states_color_correction">
<item msgid="2840507878437297682">"Недостапна"</item>
- <item msgid="1909756493418256167">"Исклучена"</item>
+ <item msgid="1909756493418256167">"Исклучено"</item>
<item msgid="4531508423703413340">"Вклучена"</item>
</string-array>
<string-array name="tile_states_inversion">
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 790ebdb..aa61976 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ആരംഭിക്കുക"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"നിര്ത്തുക"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ഒറ്റക്കൈ മോഡ്"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"കോൺട്രാസ്റ്റ്"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"സ്റ്റാൻഡേർഡ്"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ഇടത്തരം"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"കൂടുതൽ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ഉപകരണ മൈക്രോഫോൺ അൺബ്ലോക്ക് ചെയ്യണോ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ഉപകരണ ക്യാമറ അൺബ്ലോക്ക് ചെയ്യണോ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ഉപകരണ ക്യാമറയോ മൈക്രോഫോണോ അൺബ്ലോക്ക് ചെയ്യണോ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="sound_settings" msgid="8874581353127418308">"ശബ്ദവും വൈബ്രേഷനും"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ക്രമീകരണം"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"കൂടുതൽ സുരക്ഷിതമായ നിലയിലേക്ക് വോളിയം കുറച്ചു"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"നിർദ്ദേശിച്ചതിനേക്കാൾ കൂടുതൽ സമയം വോളിയം ഉയർന്ന നിലയിലായിരുന്നു"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ആപ്പ് പിൻ ചെയ്തു"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യാൻ \'തിരികെ\', \'ചുരുക്കവിവരണം\' എന്നിവ സ്പർശിച്ച് പിടിക്കുക."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യാൻ \'തിരികെ പോവുക\', \'ഹോം\' ബട്ടണുകൾ സ്പർശിച്ച് പിടിക്കുക."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"പ്രിയപ്പെട്ടതല്ലാതാക്കുക"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-ാം സ്ഥാനത്തേയ്ക്ക് നീക്കുക"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"നിയന്ത്രണങ്ങൾ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ദ്രുത ക്രമീകരണത്തിൽ നിന്ന് ആക്സസ് ചെയ്യേണ്ട നിയന്ത്രണങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"നിയന്ത്രണങ്ങൾ പുനഃക്രമീകരിക്കാൻ അമർത്തിപ്പിടിച്ച് വലിച്ചിടുക"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"എല്ലാ നിയന്ത്രണങ്ങളും നീക്കം ചെയ്തു"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"മാറ്റങ്ങൾ സംരക്ഷിച്ചിട്ടില്ല"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"മറ്റ് ആപ്പുകൾ കാണുക"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"പുനഃക്രമീകരിക്കുക"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"നിയന്ത്രണങ്ങൾ ചേർക്കുക"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"എഡിറ്റിംഗിലേക്ക് മടങ്ങുക"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"നിയന്ത്രണങ്ങൾ ലോഡ് ചെയ്യാനായില്ല. ആപ്പ് ക്രമീകരണം മാറ്റിയിട്ടില്ലെന്ന് ഉറപ്പാക്കാൻ <xliff:g id="APP">%s</xliff:g> ആപ്പ് പരിശോധിക്കുക."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"അനുയോജ്യമായ നിയന്ത്രണങ്ങൾ ലഭ്യമല്ല"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"മറ്റുള്ളവ"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ഔദ്യോഗിക പ്രൊഫൈലിൽ നിന്ന് മാത്രം ഫോൺ കോളുകൾ ചെയ്യാനാണ് നിങ്ങളുടെ ഔദ്യോഗിക നയം അനുവദിക്കുന്നത്"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"അടയ്ക്കുക"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ലോക്ക് സ്ക്രീൻ ക്രമീകരണം"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ലോക്ക് സ്ക്രീൻ ഇഷ്ടാനുസൃതമാക്കൂ"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ലോക്ക് സ്ക്രീൻ ഇഷ്ടാനുസൃതമാക്കാൻ അൺലോക്ക് ചെയ്യുക"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"വൈഫൈ ലഭ്യമല്ല"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ക്യാമറ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ക്യാമറയും മൈക്രോഫോണും ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"മൈക്രോഫോൺ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"മുൻഗണനാ മോഡ് ഓണാണ്"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant സജീവമാണ്"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ക്രമീകരണത്തിൽ കുറിപ്പുകൾക്കുള്ള ഡിഫോൾട്ട് ആപ്പ് സജ്ജീകരിക്കുക"</string>
</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 5d00da2..7d0d8a2 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Эхлүүлэх"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зогсоох"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Нэг гарын горим"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Ялгарал"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандарт"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Дунд зэрэг"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Өндөр"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Төхөөрөмжийн микрофоныг блокоос гаргах уу?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Төхөөрөмжийн камерыг блокоос гаргах уу?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Төхөөрөмжийн камер болон микрофоныг блокоос гаргах уу?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"идэвхгүй болгох"</string>
<string name="sound_settings" msgid="8874581353127418308">"Дуу, чичиргээ"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Тохиргоо"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Аюулгүй дууны түвшин рүү багасгасан"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Дууны түвшин санал болгосноос удаан хугацааны туршид өндөр байсан"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Аппыг бэхэлсэн"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулна. Тогтоосныг болиулахын тулд Буцах, Тоймыг дараад хүлээнэ үү."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулсан хэвээр байна. Тогтоосныг болиулахын тулд Буцах, Нүүр хуудас товчлуурыг дараад хүлээнэ үү."</string>
@@ -698,7 +700,7 @@
<string name="left_icon" msgid="5036278531966897006">"Зүүн дүрс тэмдэг"</string>
<string name="right_icon" msgid="1103955040645237425">"Баруун дүрс тэмдэг"</string>
<string name="drag_to_add_tiles" msgid="8933270127508303672">"Хавтан нэмэхийн тулд дараад чирэх"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Хавтангуудыг дахин засварлахын тулд дараад чирнэ үү"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Хавтангуудыг дахин цэгцлэхийн тулд дараад чирнэ үү"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Устгахын тулд энд зөөнө үү"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Танд хамгийн багадаа <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> хавтан шаардлагатай"</string>
<string name="qs_edit" msgid="5583565172803472437">"Засах"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"дургүй гэж тэмдэглэх"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-р байрлал руу зөөх"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Хяналт"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Шуурхай тохиргооноос хандах удирдлагуудаа сонгоно уу"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Хяналтуудыг дахин засварлахын тулд дараад чирнэ үү"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Бүх хяналтыг хассан"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өөрчлөлтийг хадгалаагүй"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Бусад аппыг харах"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Дахин эмхлэх"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Тохиргоо нэмэх"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Засах руу буцах"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Хяналтыг ачаалж чадсангүй. Аппын тохиргоог өөрчлөөгүй эсэхийг нягтлахын тулд <xliff:g id="APP">%s</xliff:g> аппыг шалгана уу."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Тохирох хяналт байхгүй"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Бусад"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Таны ажлын бодлого танд зөвхөн ажлын профайлаас утасны дуудлага хийхийг зөвшөөрдөг"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Ажлын профайл руу сэлгэх"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Хаах"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Түгжигдсэн дэлгэцийн тохиргоо"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Түгжигдсэн дэлгэцийг өөрчлөх"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi боломжгүй байна"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камерыг блоклосон"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камер болон микрофоныг блоклосон"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофоныг блоклосон"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Чухал горим асаалттай байна"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Туслах анхаарлаа хандуулж байна"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 20b1267..4135188 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"सुरू"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"थांबा"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"एकहाती मोड"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"कॉंट्रास्ट"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"साधारण"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"मध्यम"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"उच्च"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"डिव्हाइसचा मायक्रोफोन अनब्लॉक करायचा आहे का?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"डिव्हाइसचा कॅमेरा अनब्लॉक करायचा आहे का?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"डिव्हाइसचा कॅमेरा आणि मायक्रोफोन अनब्लॉक करायचा आहे का?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"बंद करा"</string>
<string name="sound_settings" msgid="8874581353127418308">"आवाज आणि व्हायब्रेशन"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिंग्ज"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"सुरक्षित आवाजापर्यंत कमी केले"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"आवाजाची पातळी शिफारस केलेल्या वेळेपेक्षा जास्त वेळ उच्च आहे"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ॲप पिन केले आहे"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"तुम्ही अनपिन करेर्यंत हे यास दृश्यामध्ये ठेवते. अनपिन करण्यासाठी परत आणि विहंगावलोकनास स्पर्श करा आणि धरून ठेवा."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"तुम्ही अनपिन करेर्यंत हे त्याला दृश्यामध्ये ठेवते. अनपिन करण्यासाठी मागे आणि होम वर स्पर्श करा आणि धरून ठेवा."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"नावडते"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> स्थानावर हलवा"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"नियंत्रणे"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"क्विक सेटिंग्ज मधून अॅक्सेस करण्यासाठी नियंत्रणे निवडा"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियंत्रणांची पुनर्रचना करण्यासाठी धरून ठेवा आणि ड्रॅग करा"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"सर्व नियंत्रणे काढून टाकली आहेत"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"बदल सेव्ह केले गेले नाहीत"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"इतर अॅप्स पहा"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"पुन्हा संगतवार लावा"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"नियंत्रणे जोडा"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"संपादनावर परत जा"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"नियंत्रणे लोड करता अली नाहीत. ॲपची सेटिंग्ज बदलली नसल्याची खात्री करण्यासाठी <xliff:g id="APP">%s</xliff:g> ॲप तपासा."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"कंपॅटिबल नियंत्रणे उपलब्ध नाहीत"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"इतर"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"तुमचे कामाशी संबंधित धोरण तुम्हाला फक्त कार्य प्रोफाइलवरून फोन कॉल करन्याची अनुमती देते"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"कार्य प्रोफाइलवर स्विच करा"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"बंद करा"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"लॉक स्क्रीन सेटिंग्ज"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"कस्टमाइझ लॉक स्क्रीन"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"वाय-फाय उपलब्ध नाही"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"कॅमेरा ब्लॉक केला"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"कॅमेरा आणि मायक्रोफोन ब्लॉक केले आहेत"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"मायक्रोफोन ब्लॉक केला"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राधान्य मोड सुरू आहे"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant चे लक्ष हे आता अॅक्टिव्ह आहे"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 5936fc8..dd0a896 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Mula"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Berhenti"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Mod sebelah tangan"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontras"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Sederhana"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Tinggi"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Nyahsekat mikrofon peranti?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Nyahsekat kamera peranti?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Nyahsekat kamera dan mikrofon peranti?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"lumpuhkan"</string>
<string name="sound_settings" msgid="8874581353127418308">"Bunyi & getaran"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Tetapan"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Dikurangkan kepada kelantangan yang lebih selamat"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Kelantangan tinggi melebihi tempoh yang disyorkan"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Apl telah disemat"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Tindakan ini memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh & tahan Kembali dan Ikhtisar untuk menyahsemat."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Tindakan ini memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh & tahan Kembali dan Skrin Utama untuk menyahsemat."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"nyahgemari"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Alih ke kedudukan <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kawalan"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Pilih kawalan untuk diakses daripada Tetapan Pantas"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan & seret untuk mengatur semula kawalan"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kawalan dialih keluar"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Perubahan tidak disimpan"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Lihat apl lain"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Susun semula"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Tambah kawalan"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Kembali mengedit"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kawalan tidak dapat dimuatkan. Semak apl <xliff:g id="APP">%s</xliff:g> untuk memastikan bahawa tetapan apl tidak berubah."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kawalan serasi tidak tersedia"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Lain-lain"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Dasar kerja anda membenarkan anda membuat panggilan telefon hanya daripada profil kerja"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Tukar kepada profil kerja"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Tutup"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Tetapan skrin kunci"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Sesuaikan skrin kunci"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi tidak tersedia"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera disekat"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dan mikrofon disekat"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon disekat"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mod keutamaan dihidupkan"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Perhatian pembantu dihidupkan"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index ae55ab2..925fb98 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"စတင်ရန်"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ရပ်ရန်"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"လက်တစ်ဖက်သုံးမုဒ်"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ဆန့်ကျင်ဘက်"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ပုံမှန်"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"အသင့်အတင့်"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"များ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"စက်၏မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်မလား။"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"စက်၏ကင်မရာကို ပြန်ဖွင့်မလား။"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"စက်၏ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို ပြန်ဖွင့်မလား။"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ပိတ်ရန်"</string>
<string name="sound_settings" msgid="8874581353127418308">"အသံနှင့် တုန်ခါမှု"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ဆက်တင်များ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ပိုအန္တရာယ်ကင်းသော အသံသို့ လျှော့ထားသည်"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"အသံကို အကြံပြုထားသည်ထက် ပိုကြာမြင့်စွာ ချဲ့ထားသည်"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"အက်ပ်ကို ပင်ထိုးထားသည်"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"သင်ပင်မဖြုတ်မခြင်း ၎င်းကို ပြသထားပါမည်။ ပင်ဖြုတ်ရန် Back နှင့် Overview ကို ထိ၍ဖိထားပါ။"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"သင်က ပင်မဖြုတ်မခြင်း ၎င်းကို ပြသထားပါမည်။ ပင်ဖြုတ်ရန် \'နောက်သို့\' နှင့် \'ပင်မ\' ခလုတ်တို့ကို တို့၍ဖိထားပါ။"</string>
@@ -875,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"ဖယ်ရှားထားသည်"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"<xliff:g id="APPNAME">%s</xliff:g> ထည့်မလား။"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> သည် ဤနေရာတွင်ပြသည့် သတ်မှတ်ချက်နှင့် အကြောင်းအရာများကို ရွေးနိုင်သည်။"</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"<xliff:g id="APPNAME">%s</xliff:g> အတွက် သတ်မှတ်ချက်များ ဖယ်ရှားမလား။"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"<xliff:g id="APPNAME">%s</xliff:g> အတွက် ထိန်းချုပ်မှုများ ဖယ်ရှားမလား။"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"အကြိုက်ဆုံးတွင် ထည့်ထားသည်"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"အကြိုက်ဆုံးတွင် ထည့်ထားသည်၊ အဆင့် <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"အကြိုက်ဆုံးမှ ဖယ်ရှားထားသည်"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"အကြိုက်ဆုံးမှ ဖယ်ရှားရန်"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"အနေအထား <xliff:g id="NUMBER">%d</xliff:g> သို့ ရွှေ့ရန်"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ထိန်းချုပ်မှုများ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"အမြန် ဆက်တင်များမှ သုံးရန် ထိန်းချုပ်မှုများကို ရွေးပါ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ထိန်းချုပ်မှုများ ပြန်စီစဉ်ရန် ဖိပြီးဆွဲပါ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ထိန်းချုပ်မှုအားလုံး ဖယ်ရှားလိုက်သည်"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"အပြောင်းအလဲများကို သိမ်းမထားပါ"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"အခြားအက်ပ်များကိုကြည့်ပါ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ပြန်စီရန်"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"သတ်မှတ်ချက်များ ထည့်ရန်"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"တည်းဖြတ်ခြင်းသို့ ပြန်သွားရန်"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"ထိန်းချုပ်မှုများကို ဖွင့်၍မရပါ။ အက်ပ်ဆက်တင်များ ပြောင်းမထားကြောင်း သေချာစေရန် <xliff:g id="APP">%s</xliff:g> အက်ပ်ကို စစ်ဆေးပါ။"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ကိုက်ညီသော ထိန်းချုပ်မှုများကို မရရှိနိုင်ပါ"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"အခြား"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Wi-Fi က လောလောဆယ် အလိုအလျောက် ချိတ်ဆက်မည်မဟုတ်ပါ"</string>
<string name="see_all_networks" msgid="3773666844913168122">"အားလုံးကြည့်ရန်"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"ကွန်ရက်ပြောင်းရန် အီသာနက်ကို ချိတ်ဆက်မှုဖြုတ်ပါ"</string>
- <string name="wifi_scan_notify_message" msgid="3753839537448621794">"စက်ပစ္စည်းကို ပိုမိုကောင်းမွန်စွာ အသုံးပြုနိုင်ရန် Wi-Fi ပိတ်ထားသည့်တိုင် အက်ပ်နှင့် ဝန်ဆောင်မှုများက Wi-Fi ကွန်ရက်များကို အချိန်မရွေး စကင်ဖတ်နိုင်သည်။ ၎င်းကို Wi-Fi ရှာဖွေခြင်း ဆက်တင်များတွင် ပြောင်းနိုင်သည်။ "<annotation id="link">"ပြောင်းရန်"</annotation></string>
+ <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Wi-Fi ပိတ်ထားသည့်တိုင် စက်ပစ္စည်းကို ပိုမိုကောင်းမွန်စွာ အသုံးပြုနိုင်ရန်အတွက် အက်ပ်နှင့် ဝန်ဆောင်မှုများက Wi-Fi ကွန်ရက်များကို အချိန်မရွေး စကင်ဖတ်နိုင်သည်။ ၎င်းကို Wi-Fi ရှာဖွေခြင်း ဆက်တင်များတွင် ပြောင်းနိုင်သည်။ "<annotation id="link">"ပြောင်းရန်"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"လေယာဉ်ပျံမုဒ်ကို ပိတ်ရန်"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> က ‘အမြန် ဆက်တင်များ’ တွင် အောက်ပါအကွက်ငယ်ကို ထည့်လိုသည်"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"အကွက်ငယ် ထည့်ရန်"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"သင့်အလုပ်မူဝါဒသည် သင့်အား အလုပ်ပရိုဖိုင်မှသာ ဖုန်းခေါ်ဆိုခွင့် ပြုသည်"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"အလုပ်ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ပိတ်ရန်"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"လော့ခ်မျက်နှာပြင် ဆက်တင်များ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"လော့ခ်မျက်နှာပြင်စိတ်ကြိုက်လုပ်ရန်"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi မရနိုင်ပါ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ကင်မရာကို ပိတ်ထားသည်"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ဦးစားပေးမုဒ် ဖွင့်ထားသည်"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant နားထောင်နေသည်"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index ea27460..72bb06a 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -248,7 +248,7 @@
<string name="quick_settings_internet_label" msgid="6603068555872455463">"Internett"</string>
<string name="quick_settings_networks_available" msgid="1875138606855420438">"Tilgjengelige nettverk"</string>
<string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"Nettverk er utilgjengelige"</string>
- <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"Ingen tilgjengelige Wifi-nettverk"</string>
+ <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"Ingen tilgjengelige wifi-nettverk"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"Slår på …"</string>
<string name="quick_settings_cast_title" msgid="2279220930629235211">"Skjermcasting"</string>
<string name="quick_settings_casting" msgid="1435880708719268055">"Casting"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Start"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stopp"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Enhåndsmodus"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Middels"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Høy"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du oppheve blokkeringen av enhetsmikrofonen?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du oppheve blokkeringen av enhetskameraet?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du oppheve blokkeringen av enhetskameraet og -mikrofonen?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiver"</string>
<string name="sound_settings" msgid="8874581353127418308">"Lyd og vibrering"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Innstillinger"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Redusert til et tryggere volum"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumet har vært høyt lengre enn anbefalt"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Appen er festet"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Gjør at den vises til du løsner den. Trykk og hold inne Tilbake og Oversikt for å løsne den."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Gjør at den vises til du løsner den. Trykk og hold inne Tilbake og Startside for å løsne den."</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Du får ikke tilgang til data eller internett via <xliff:g id="CARRIER">%s</xliff:g>. Internett er bare tilgjengelig via Wifi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatøren din"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Vil du bytte tilbake til <xliff:g id="CARRIER">%s</xliff:g>?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Det byttes ikke mobildataoperatør automatisk basert på tilgjengelighet"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobildataoperatør byttes ikke automatisk basert på tilgjengelighet"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Nei takk"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ja, bytt"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Fordi en app skjuler tillatelsesforespørselen, kan ikke Innstillinger bekrefte svaret ditt."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjerne som favoritt"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Flytt til posisjon <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Velg kontroller som skal være tilgjengelige fra hurtiginnstillingene"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold og dra for å flytte kontroller"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroller er fjernet"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Endringene er ikke lagret"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Se andre apper"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Omorganiser"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Legg til kontroller"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Tilbake til redigering"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kunne ikke laste inn kontrollene. Sjekk <xliff:g id="APP">%s</xliff:g>-appen for å sjekke at appinnstillingene ikke er endret."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatible kontroller er ikke tilgjengelige"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Annet"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Wifi kobles ikke til automatisk inntil videre"</string>
<string name="see_all_networks" msgid="3773666844913168122">"Se alle"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"For å bytte nettverk, koble fra Ethernet"</string>
- <string name="wifi_scan_notify_message" msgid="3753839537448621794">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter Wifi-nettverk når som helst – også når Wifi er slått av. Du kan endre dette i innstillingene for wifi-skanning. "<annotation id="link">"Endre"</annotation></string>
+ <string name="wifi_scan_notify_message" msgid="3753839537448621794">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter wifi-nettverk når som helst – også når Wifi er slått av. Du kan endre dette i innstillingene for wifi-skanning. "<annotation id="link">"Endre"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"Slå av flymodus"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> vil legge til denne brikken i Hurtiginnstillinger"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Legg til brikke"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Som følge av jobbreglene dine kan du bare starte telefonanrop fra jobbprofilen."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Bytt til jobbprofilen"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Lukk"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Innstillinger for låseskjermen"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Tilpass låseskjermen"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi er ikke tilgjengelig"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameraet er blokkert"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameraet og mikrofonen er blokkert"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen er blokkert"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteringsmodus er på"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistentoppmerksomhet er på"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 8a2057a..eb5d3db 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -254,7 +254,7 @@
<string name="quick_settings_casting" msgid="1435880708719268055">"प्रसारण गर्दै"</string>
<string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"बेनाम उपकरण"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"कुनै उपकरणहरू उपलब्ध छैन"</string>
- <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Wi-Fi जडान गरिएको छैन"</string>
+ <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Wi-Fi कनेक्ट गरिएको छैन"</string>
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"उज्यालपन"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"कलर इन्भर्सन"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"कलर करेक्सन"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"सुरु गर्नुहोस्"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"रोक्नुहोस्"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"एक हाते मोड"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"कन्ट्रास्ट"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"डिफल्ट"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"मध्यम"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"उच्च"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"डिभाइसको माइक्रोफोन अनब्लक गर्ने हो?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"डिभाइसको क्यामेरा अनब्लक गर्ने हो?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"डिभाइसको क्यामेरा र माइक्रोफोन अनब्लक गर्ने हो?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"असक्षम पार्नुहोस्"</string>
<string name="sound_settings" msgid="8874581353127418308">"साउन्ड तथा भाइब्रेसन"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिङ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"तपाईं आरामदायी तरिकाले अडियो सुन्न सक्नुहोस् भन्नाका लागि भोल्युम घटाइएको छ"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"सिफारिस गरिएको समयभन्दा बढी समयदेखि भोल्युमको स्तर उच्च छ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"एप पिन गरिएको छ"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"तपाईंले अनपिन नगरेसम्म यसले त्यसलाई दृश्यमा कायम राख्छ। अनपिन गर्न पछाडि र परिदृश्य बटनलाई टच एण्ड होल्ड गर्नुहोस्।"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"तपाईंले अनपिन नगरेसम्म यसले त्यसलाई दृश्यमा कायम राख्छ। अनपिन गर्न पछाडि र गृह नामक बटनहरूलाई टच एण्ड होल्ड गर्नुहोस्।"</string>
@@ -783,8 +785,8 @@
<string name="dnd_is_off" msgid="3185706903793094463">"बाधा नपुर्याउनुहोस् नामक विकल्प निष्क्रिय छ"</string>
<string name="dnd_is_on" msgid="7009368176361546279">"Do Not Disturb अन छ"</string>
<string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"कुनै स्वचालित नियमले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रियो गऱ्यो (<xliff:g id="ID_1">%s</xliff:g>)।"</string>
- <string name="qs_dnd_prompt_app" msgid="4027984447935396820">"कुनै अनुप्रयोगले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो (<xliff:g id="ID_1">%s</xliff:g>)।"</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"कुनै स्वचालित नियम वा अनुप्रयोगले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो।"</string>
+ <string name="qs_dnd_prompt_app" msgid="4027984447935396820">"कुनै एपले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो (<xliff:g id="ID_1">%s</xliff:g>)।"</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"कुनै स्वचालित नियम वा एपले बाधा नपुऱ्याउनुहोस् नामक विकल्पलाई सक्रिय गऱ्यो।"</string>
<string name="running_foreground_services_title" msgid="5137313173431186685">"पृष्ठभूमिमा चल्ने एपहरू"</string>
<string name="running_foreground_services_msg" msgid="3009459259222695385">"ब्याट्री र डेटाका प्रयोग सम्बन्धी विवरणहरूका लागि ट्याप गर्नुहोस्"</string>
<string name="mobile_data_disable_title" msgid="5366476131671617790">"मोबाइल डेटा निष्क्रिय पार्ने हो?"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"मन पर्ने कुराहरूको सूचीमा नराख्नुहोस्"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>ले निर्देश गर्ने ठाउँमा सार्नुहोस्"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"नियन्त्रणहरू"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"आफूले द्रुत सेटिङबाट प्रयोग गर्न चाहेका कन्ट्रोल छान्नुहोस्"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"कन्ट्रोललाई होल्ड एण्ड ड्र्याग गरी कन्ट्रोलको क्रम मिलाउनुहोस्"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"सबै कन्ट्रोल हटाइए"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"परिवर्तनहरू सुरक्षित गरिएका छैनन्"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"अन्य एपहरू हेर्नुहोस्"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"पुनः मिलाउनुहोस्"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"कन्ट्रोलहरू हाल्नुहोस्"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"सम्पादन गर्ने स्क्रिनमा फर्कनुहोस्"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"नियन्त्रण सुविधाहरू लोड गर्न सकिएन। <xliff:g id="APP">%s</xliff:g> एपका सेटिङ परिवर्तन गरिएका छैनन् भन्ने कुरा सुनिश्चित गर्न उक्त एप जाँच्नुहोस्।"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"मिल्दा नियन्त्रण सुविधाहरू उपलब्ध छैनन्"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"अन्य"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"वस्तुस्थिति लोड गर्न सकिएन"</string>
<string name="controls_error_failed" msgid="960228639198558525">"त्रुटि भयो, फेरि प्रयास गर्नु…"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"कन्ट्रोल थप्नुहोस्"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"कन्ट्रोल सम्पादन गर्नुहोस्"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"सेटिङ सम्पादन गर्नुहोस्"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"एप हाल्नुहोस्"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"यो एप हटाउनुहोस्"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"आउटपुट यन्त्रहरू थप्नुहोस्"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"तपाईंको कामसम्बन्धी नीतिअनुसार कार्य प्रोफाइलबाट मात्र फोन कल गर्न सकिन्छ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"कार्य प्रोफाइल प्रयोग गर्नुहोस्"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"बन्द गर्नुहोस्"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"लक स्क्रिनसम्बन्धी सेटिङ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"लक स्क्रिन कस्टमाइज गर्नुहोस्"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi उपलब्ध छैन"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"क्यामेरा ब्लक गरिएको छ"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"क्यामेरा र माइक्रोफोन ब्लक गरिएको छ"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"माइक्रोफोन ब्लक गरिएको छ"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राथमिकता मोड अन छ"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"सहायकले सुनिरहेको छ"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 1a0265f..9589804 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starten"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stoppen"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Bediening met 1 hand"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standaard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Gemiddeld"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Hoog"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Blokkeren van apparaatmicrofoon opheffen?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Blokkeren van apparaatcamera opheffen?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blokkeren van apparaatcamera en -microfoon opheffen?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"uitzetten"</string>
<string name="sound_settings" msgid="8874581353127418308">"Geluid en trillen"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Instellingen"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Verlaagd naar veiliger volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Het volume is langer dan de aanbevolen tijd hoog geweest"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"App is vastgezet"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en Overzicht en houd deze vast om het scherm los te maken."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en Home en houd deze vast om het scherm los te maken."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"als favoriet verwijderen"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Verplaatsen naar positie <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Bedieningselementen"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Kies welke bedieningselementen je wilt zien in Snelle instellingen"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Houd vast en sleep om de bedieningselementen opnieuw in te delen"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alle bedieningselementen verwijderd"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Wijzigingen zijn niet opgeslagen"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Andere apps bekijken"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Opnieuw indelen"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Bedieningselementen toevoegen"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Terug naar bewerken"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Bedieningselementen kunnen niet worden geladen. Check de <xliff:g id="APP">%s</xliff:g>-app om na te gaan of de app-instellingen niet zijn gewijzigd."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Geen geschikte bedieningselementen beschikbaar"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Overig"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Op basis van je werkbeleid kun je alleen bellen vanuit het werkprofiel"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Overschakelen naar werkprofiel"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Sluiten"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Instellingen vergrendelscherm"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Vergrendelscherm aanpassen"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi niet beschikbaar"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera geblokkeerd"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera en microfoon geblokkeerd"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfoon geblokkeerd"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteitsmodus aan"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent-aandacht aan"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index df284c1..f298fd3 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -238,7 +238,7 @@
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ଅଟୋ-ରୋଟେଟ ସ୍କ୍ରିନ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ଲୋକେସନ"</string>
<string name="quick_settings_screensaver_label" msgid="1495003469366524120">"ସ୍କ୍ରିନ ସେଭର"</string>
- <string name="quick_settings_camera_label" msgid="5612076679385269339">"କ୍ୟାମେରା ଆକ୍ସେସ"</string>
+ <string name="quick_settings_camera_label" msgid="5612076679385269339">"କେମେରା ଆକ୍ସେସ"</string>
<string name="quick_settings_mic_label" msgid="8392773746295266375">"ମାଇକ ଆକ୍ସେସ"</string>
<string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ଉପଲବ୍ଧ"</string>
<string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"ବ୍ଲକ୍ କରାଯାଇଛି"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ଏକ-ହାତ ମୋଡ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"କଣ୍ଟ୍ରାଷ୍ଟ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ଷ୍ଟାଣ୍ଡାର୍ଡ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ମଧ୍ୟମ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ଅଧିକ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ଡିଭାଇସର ମାଇକ୍ରୋଫୋନକୁ ଅନବ୍ଲକ କରିବେ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ଡିଭାଇସର କ୍ୟାମେରାକୁ ଅନବ୍ଲକ କରିବେ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ଡିଭାଇସର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନକୁ ଅନବ୍ଲକ୍ କରିବେ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="sound_settings" msgid="8874581353127418308">"ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେସନ"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ସେଟିଂସ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ଭଲ୍ୟୁମକୁ ସୁରକ୍ଷିତ ସ୍ତରକୁ କମ କରାଯାଇଛି"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ସୁପାରିଶ କରାଯାଇଥିବାଠାରୁ ଅଧିକ ସମୟ ପାଇଁ ଭଲ୍ୟୁମକୁ ଉଚ୍ଚ ସ୍ତରରେ ରଖାଯାଇଛି"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ଆପକୁ ପିନ୍ କରାଯାଇଛି"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"ଆପଣ ଅନପିନ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍ କରିବାକୁ ସ୍ପର୍ଶ କରି ଧରିରଖନ୍ତୁ ଓ ଦେଖନ୍ତୁ।"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ଆପଣ ଅନପିନ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍ କରିବା ପାଇଁ ହୋମ ଓ ବ୍ୟାକ ବଟନକୁ ଦବାଇ ଧରନ୍ତୁ।"</string>
@@ -698,7 +700,7 @@
<string name="left_icon" msgid="5036278531966897006">"ବାମ ଆଇକନ୍"</string>
<string name="right_icon" msgid="1103955040645237425">"ଡାହାଣ ଆଇକନ୍"</string>
<string name="drag_to_add_tiles" msgid="8933270127508303672">"ଟାଇଲ୍ ଯୋଗ କରିବା ପାଇଁ ଦାବିଧରି ଡ୍ରାଗ କରନ୍ତୁ"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"ଟାଇଲ୍ ପୁଣି ସଜାଇବାକୁ ଦାବିଧରି ଟାଣନ୍ତୁ"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"ଟାଇଲ ପୁଣି ସଜାଇବାକୁ ଦାବିଧରି ଟାଣନ୍ତୁ"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"ବାହାର କରିବାକୁ ଏଠାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"ଆପଣଙ୍କର ଅତିକମ୍ରେ <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>ଟି ଟାଇଲ୍ ଆବଶ୍ୟକ"</string>
<string name="qs_edit" msgid="5583565172803472437">"ଏଡିଟ କରନ୍ତୁ"</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"ଡାଟା କିମ୍ବା ଇଣ୍ଟରନେଟ୍କୁ <xliff:g id="CARRIER">%s</xliff:g> ଦ୍ଵାରା ଆପଣଙ୍କର ଆକ୍ସେସ୍ ରହିବ ନାହିଁ। ଇଣ୍ଟରନେଟ୍ କେବଳ ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ ଉପଲବ୍ଧ ହେବ।"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"ଆପଣଙ୍କ କେରିଅର୍"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g>କୁ ପୁଣି ସ୍ୱିଚ କରିବେ?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"ଉପଲବ୍ଧତା ଆଧାରରେ ମୋବାଇଲ ଡାଟା ସ୍ୱଚାଳିତ ଭାବେ ସ୍ୱିଚ ହେବ ନାହିଁ"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"ଉପଲବ୍ଧତା ଆଧାରରେ ମୋବାଇଲ ଡାଟା ସ୍ୱତଃ ସ୍ୱିଚ ହେବ ନାହିଁ"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"ନା, ଧନ୍ୟବାଦ"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"ହଁ, ସ୍ୱିଚ କରନ୍ତୁ"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"ଗୋଟିଏ ଆପ୍ ଏକ ଅନୁମତି ଅନୁରୋଧକୁ ଦେଖିବାରେ ବାଧା ଦେଉଥିବାରୁ, ସେଟିଙ୍ଗ ଆପଣଙ୍କ ଉତ୍ତରକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ।"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ନାପସନ୍ଦ କରନ୍ତୁ"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> ସ୍ଥିତିକୁ ମୁଭ୍ କରନ୍ତୁ"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"କ୍ୱିକ୍ ସେଟିଂସରୁ ଆକ୍ସେସ୍ କରିବାକୁ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ବାଛନ୍ତୁ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ପୁଣି ବ୍ୟବସ୍ଥିତ କରିବାକୁ ସେଗୁଡ଼ିକୁ ଡ୍ରାଗ କରି ଧରି ରଖନ୍ତୁ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ସମସ୍ତ ନିୟନ୍ତ୍ରଣ କାଢ଼ି ଦିଆଯାଇଛି"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ସେଭ୍ କରାଯାଇନାହିଁ"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ଅନ୍ୟ ଆପ୍ ଦେଖନ୍ତୁ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ପୁଣି ସଜାନ୍ତୁ"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ଏଡିଟିଂକୁ ଫେରନ୍ତୁ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଲୋଡ୍ କରାଯାଇପାରିଲା ନାହିଁ। ଆପ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ ହୋଇନାହିଁ ବୋଲି ନିଶ୍ଚିତ କରିବାକୁ <xliff:g id="APP">%s</xliff:g> ଆପ୍ ଯାଞ୍ଚ କରନ୍ତୁ।"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ସୁସଙ୍ଗତ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ଅନ୍ୟ"</string>
@@ -947,7 +947,7 @@
<string name="controls_error_removed" msgid="6675638069846014366">"ମିଳିଲା ନାହିଁ"</string>
<string name="controls_error_removed_title" msgid="1207794911208047818">"ନିୟନ୍ତ୍ରଣ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="controls_error_removed_message" msgid="2885911717034750542">"<xliff:g id="DEVICE">%1$s</xliff:g>କୁ ଆକ୍ସେସ୍ କରିହେଲା ନାହିଁ। ନିୟନ୍ତ୍ରଣ ଏବେ ବି ଉପଲବ୍ଧ ଅଛି ଏବଂ ଆପ୍ ସେଟିଂସ୍ ବଦଳାଯାଇ ନାହିଁ ବୋଲି ସୁନିଶ୍ଚିତ କରିବାକୁ <xliff:g id="APPLICATION">%2$s</xliff:g> ଆପକୁ ଯାଞ୍ଚ କରନ୍ତୁ।"</string>
- <string name="controls_open_app" msgid="483650971094300141">"ଆପ୍ ଖୋଲନ୍ତୁ"</string>
+ <string name="controls_open_app" msgid="483650971094300141">"ଆପ ଖୋଲନ୍ତୁ"</string>
<string name="controls_error_generic" msgid="352500456918362905">"ସ୍ଥିତି ଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
<string name="controls_error_failed" msgid="960228639198558525">"ତ୍ରୁଟି ହୋଇଛି, ପୁଣି ଚେଷ୍ଟା କର"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ ଯୋଗ କରନ୍ତୁ"</string>
@@ -1022,7 +1022,7 @@
<string name="person_available" msgid="2318599327472755472">"ଉପଲବ୍ଧ"</string>
<string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ମିଟର୍ ପଢ଼ିବାରେ ସମସ୍ୟା ହେଉଛି"</string>
<string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ଅଧିକ ସୂଚନା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
- <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ଆଲାରାମ ସେଟ୍ ହୋଇନାହିଁ"</string>
+ <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ଆଲାରାମ ସେଟ ହୋଇନାହିଁ"</string>
<string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ଟିପଚିହ୍ନ ସେନ୍ସର୍"</string>
<string name="accessibility_authenticate_hint" msgid="798914151813205721">"ପ୍ରମାଣୀକରଣ କରନ୍ତୁ"</string>
<string name="accessibility_enter_hint" msgid="2617864063504824834">"ଡିଭାଇସ୍ ବିଷୟରେ ସୂଚନା ଲେଖନ୍ତୁ"</string>
@@ -1039,7 +1039,7 @@
<string name="non_carrier_network_unavailable" msgid="770049357024492372">"ଅନ୍ୟ କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="all_network_unavailable" msgid="4112774339909373349">"କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="turn_on_wifi" msgid="1308379840799281023">"ୱାଇ-ଫାଇ"</string>
- <string name="tap_a_network_to_connect" msgid="1565073330852369558">"ସଂଯୋଗ କରିବାକୁ ଏକ ନେଟୱାର୍କରେ ଟାପ୍ କରନ୍ତୁ"</string>
+ <string name="tap_a_network_to_connect" msgid="1565073330852369558">"କନେକ୍ଟ କରିବାକୁ ଏକ ନେଟୱାର୍କରେ ଟାପ କରନ୍ତୁ"</string>
<string name="unlock_to_view_networks" msgid="5072880496312015676">"ନେଟୱାର୍କଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ ଅନଲକ୍ କରନ୍ତୁ"</string>
<string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"ନେଟୱାର୍କଗୁଡ଼ିକ ସନ୍ଧାନ କରାଯାଉଛି…"</string>
<string name="wifi_failed_connect_message" msgid="4161863112079000071">"ନେଟୱାର୍କକୁ ସଂଯୋଗ କରିବାରେ ବିଫଳ ହୋଇଛି"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ଆପଣଙ୍କ ୱାର୍କ ନୀତି ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ପ୍ରୋଫାଇଲରୁ ଫୋନ କଲ କରିବାକୁ ଅନୁମତି ଦିଏ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ବନ୍ଦ କରନ୍ତୁ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ଲକ ସ୍କ୍ରିନ ସେଟିଂସ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ଲକ ସ୍କ୍ରିନକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"କେମେରାକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"କେମେରା ଏବଂ ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ପ୍ରାୟୋରିଟି ମୋଡ ଚାଲୁ ଅଛି"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ଆଟେନସନ ଚାଲୁ ଅଛି"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 67f1314..50e829f 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ਰੋਕੋ"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ਇੱਕ ਹੱਥ ਮੋਡ"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ਕੰਟ੍ਰਾਸਟ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ਮਿਆਰੀ"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ਦਰਮਿਆਨਾ"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ਜ਼ਿਆਦਾ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ਕੀ ਡੀਵਾਈਸ ਦੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੂੰ ਅਣਬਲਾਕ ਕਰਨਾ ਹੈ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ਕੀ ਡੀਵਾਈਸ ਦੇ ਕੈਮਰੇ ਨੂੰ ਅਣਬਲਾਕ ਕਰਨਾ ਹੈ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ਕੀ ਡੀਵਾਈਸ ਦੇ ਕੈਮਰੇ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੂੰ ਅਣਬਲਾਕ ਕਰਨਾ ਹੈ?"</string>
@@ -379,7 +383,7 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"ਹਟਾਓ"</string>
<string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਬਾਕੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੈ ਜਾਂ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚਲਾਏ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ।"</string>
- <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ਇਹ ਫੰਕਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਨ ਵਾਲੀ ਸੇਵਾ ਕੋਲ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੁੰਦੀ ਹੈ ਜਾਂ ਰਿਕਾਰਡ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚਲਾਏ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ।"</string>
+ <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ਇਹ ਫੰਕਸ਼ਨ ਮੁਹੱਈਆ ਕਰਵਾਉਣ ਵਾਲੀ ਸੇਵਾ ਕੋਲ, ਰਿਕਾਰਡ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਦਿਖਣਯੋਗ ਜਾਂ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚਲਾਈ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ।"</string>
<string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ਕੀ ਰਿਕਾਰਡ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨਾਲ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
<string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"ਕੀ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਜਾਂ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ਬੰਦ ਕਰੋ"</string>
<string name="sound_settings" msgid="8874581353127418308">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ਸੈਟਿੰਗਾਂ"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ਸੁਰੱਖਿਅਤ ਸੀਮਾ ਤੱਕ ਅਵਾਜ਼ ਨੂੰ ਘਟਾਇਆ ਗਿਆ"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ਅਵਾਜ਼ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ ਸਮੇਂ ਤੋਂ ਲੰਮੇ ਸਮੇਂ ਤੱਕ ਉੱਚੀ ਰਹੀ ਹੈ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ਐਪ ਨੂੰ ਪਿੰਨ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"ਇਹ ਇਸ ਨੂੰ ਤਦ ਤੱਕ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਰੱਖਦਾ ਹੈ ਜਦ ਤੱਕ ਤੁਸੀਂ ਅਨਪਿੰਨ ਨਹੀਂ ਕਰਦੇ। ਅਨਪਿੰਨ ਕਰਨ ਲਈ \'ਪਿੱਛੇ\' ਅਤੇ \'ਰੂਪ-ਰੇਖਾ\' ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾ ਕੇ ਰੱਖੋ।"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨਪਿੰਨ ਕੀਤੇ ਜਾਣ ਤੱਕ ਇਸਨੂੰ ਦਿਖਾਇਆ ਜਾਂਦਾ ਹੈ। ਅਨਪਿੰਨ ਕਰਨ ਲਈ \'ਪਿੱਛੇ\' ਅਤੇ \'ਹੋਮ\' ਨੂੰ ਸਪਰਸ਼ ਕਰਕੇ ਰੱਖੋ।"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> ਸਥਾਨ \'ਤੇ ਲਿਜਾਓ"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"ਕੰਟਰੋਲ"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਤੋਂ ਪਹੁੰਚ ਕਰਨ ਲਈ ਕੰਟਰੋਲ ਚੁਣੋ"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"ਕੰਟਰੋਲਾਂ ਨੂੰ ਮੁੜ-ਵਿਵਸਥਿਤ ਕਰਨ ਲਈ ਫੜ੍ਹ ਕੇ ਘਸੀਟੋ"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"ਸਾਰੇ ਕੰਟਰੋਲ ਹਟਾਏ ਗਏ"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ਹੋਰ ਐਪਾਂ ਦੇਖੋ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ਮੁੜ-ਵਿਵਸਥਿਤ ਕਰੋ"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ਸੰਪਾਦਨ ’ਤੇ ਵਾਪਸ ਜਾਓ"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"ਕੰਟਰੋਲਾਂ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਇਹ ਪੱਕਾ ਕਰਨ ਲਈ <xliff:g id="APP">%s</xliff:g> ਐਪ ਦੀ ਜਾਂਚ ਕਰੋ ਕਿ ਐਪ ਸੈਟਿੰਗਾਂ ਨਹੀਂ ਬਦਲੀਆਂ ਹਨ।"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ਕੋਈ ਅਨੁਰੂਪ ਕੰਟਰੋਲ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ਹੋਰ"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ਤੁਹਾਡੀ ਕਾਰਜ ਨੀਤੀ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਹੀ ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ਬੰਦ ਕਰੋ"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"ਲਾਕ ਸਕ੍ਰੀਨ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ਲਾਕ ਸਕ੍ਰੀਨ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ਵਾਈ-ਫਾਈ ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ਕੈਮਰਾ ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਬਲਾਕ ਕੀਤੇ ਗਏ"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ਤਰਜੀਹ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ਧਿਆਨ ਸੁਵਿਧਾ ਨੂੰ ਚਾਲੂ ਹੈ"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index db2ea37..499925a 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Rozpocznij"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Zatrzymaj"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Tryb jednej ręki"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardowy"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Średni"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Wysoki"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Odblokować mikrofon urządzenia?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Odblokować aparat urządzenia?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Odblokować aparat i mikrofon urządzenia?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"wyłącz"</string>
<string name="sound_settings" msgid="8874581353127418308">"Dźwięk i wibracje"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ustawienia"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Obniżono głośność do bezpieczniejszego poziomu"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Głośność była zbyt duża przez czas dłuższy niż zalecany"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacja jest przypięta"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj Wstecz oraz Przegląd."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, naciśnij i przytrzymaj Wstecz oraz Ekran główny."</string>
@@ -697,8 +699,8 @@
<string name="right_keycode" msgid="2480715509844798438">"Prawy klawisz"</string>
<string name="left_icon" msgid="5036278531966897006">"Lewa ikona"</string>
<string name="right_icon" msgid="1103955040645237425">"Prawa ikona"</string>
- <string name="drag_to_add_tiles" msgid="8933270127508303672">"Przytrzymaj i przeciągnij, by dodać kafelki"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Przytrzymaj i przeciągnij, by przestawić kafelki"</string>
+ <string name="drag_to_add_tiles" msgid="8933270127508303672">"Aby dodać kafelki, przytrzymaj je i przeciągnij"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Aby przestawić kafelki, przytrzymaj je i przeciągnij"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Przeciągnij tutaj, by usunąć"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimalna liczba kafelków to <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string>
<string name="qs_edit" msgid="5583565172803472437">"Edytuj"</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Wyłączyć mobilną transmisję danych?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Nie będziesz mieć dostępu do transmisji danych ani internetu w <xliff:g id="CARRIER">%s</xliff:g>. Internet będzie dostępny tylko przez Wi‑Fi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"Twój operator"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Wrócić do operatora <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Wrócić do <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobilna transmisja danych nie będzie automatycznie przełączana na podstawie dostępności"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Nie, dziękuję"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Tak, wróć"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"usunąć z ulubionych"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Przenieś w położenie <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Elementy sterujące"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Wybierz elementy sterujące dostępne w Szybkich ustawieniach"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Przytrzymaj i przeciągnij, aby przestawić elementy sterujące"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Usunięto wszystkie elementy sterujące"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Zmiany nie zostały zapisane"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Wyświetl pozostałe aplikacje"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Zmień kolejność"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj elementy sterujące"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Wróć do edycji"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Nie udało się wczytać elementów sterujących. Sprawdź aplikację <xliff:g id="APP">%s</xliff:g>, aby upewnić się, że jej ustawienia się nie zmieniły."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Zgodne elementy sterujące niedostępne"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Inne"</string>
@@ -1039,7 +1039,7 @@
<string name="non_carrier_network_unavailable" msgid="770049357024492372">"Brak innych dostępnych sieci"</string>
<string name="all_network_unavailable" msgid="4112774339909373349">"Brak dostępnych sieci"</string>
<string name="turn_on_wifi" msgid="1308379840799281023">"Wi‑Fi"</string>
- <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Kliknij sieć, aby połączyć"</string>
+ <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Aby się połączyć, kliknij sieć"</string>
<string name="unlock_to_view_networks" msgid="5072880496312015676">"Odblokuj, by wyświetlić sieci"</string>
<string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Szukam sieci…"</string>
<string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nie udało się połączyć z siecią"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Zasady obowiązujące w firmie zezwalają na nawiązywanie połączeń telefonicznych tylko w profilu służbowym"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Przełącz na profil służbowy"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zamknij"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Ustawienia ekranu blokady"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Dostosuj ekran blokady"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Sieć Wi-Fi jest niedostępna"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera jest zablokowana"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera i mikrofon są zablokowane"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon jest zablokowany"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Tryb priorytetowy jest włączony"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asystent jest aktywny"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pl/tiles_states_strings.xml b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
index c73cbed..fb0bb70 100644
--- a/packages/SystemUI/res/values-pl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
@@ -113,7 +113,7 @@
</string-array>
<string-array name="tile_states_cast">
<item msgid="6032026038702435350">"Niedostępny"</item>
- <item msgid="1488620600954313499">"Wyłączony"</item>
+ <item msgid="1488620600954313499">"Wyłączone"</item>
<item msgid="588467578853244035">"Włączony"</item>
</string-array>
<string-array name="tile_states_night">
@@ -133,7 +133,7 @@
</string-array>
<string-array name="tile_states_reduce_brightness">
<item msgid="1839836132729571766">"Niedostępny"</item>
- <item msgid="4572245614982283078">"Wyłączony"</item>
+ <item msgid="4572245614982283078">"Wyłączone"</item>
<item msgid="6536448410252185664">"Włączony"</item>
</string-array>
<string-array name="tile_states_cameratoggle">
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 9e434d5..2469f2e 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo para uma mão"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Padrão"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Médio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desativar"</string>
<string name="sound_settings" msgid="8874581353127418308">"Som e vibração"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configurações"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume diminuído para um nível mais seguro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume ficou alto por mais tempo do que o recomendado"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"O app está fixado"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Visão geral e mantenha essas opções pressionadas para liberar."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Início e mantenha essas opções pressionadas para liberar."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Escolha os controles disponíveis nas Configurações rápidas"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque no controle, mantenha-o pressionado e arraste para reorganizar as posições."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outros apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Adicionar controles"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Voltar para a edição"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Não foi possível carregar os controles. Verifique o app <xliff:g id="APP">%s</xliff:g> para garantir que as configurações não tenham sido modificadas."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Controles compatíveis indisponíveis"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Sua política de trabalho só permite fazer ligações pelo perfil de trabalho"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Alternar para o perfil de trabalho"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Configurações de tela de bloqueio"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar a tela de bloqueio"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueie para personalizar a tela de bloqueio"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Câmara bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Câmera e microfone bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfone bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo de prioridade ativado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Defina o app de notas padrão nas Configurações"</string>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 5de3135..07378b9 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -131,7 +131,7 @@
<string name="accessibility_phone_button" msgid="4256353121703100427">"Telemóvel"</string>
<string name="accessibility_voice_assist_button" msgid="6497706615649754510">"Assistente de voz"</string>
<string name="accessibility_wallet_button" msgid="1458258783460555507">"Carteira"</string>
- <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"Leitor de códigos QR"</string>
+ <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"Leitor QR"</string>
<string name="accessibility_unlock_button" msgid="3613812140816244310">"Desbloqueado"</string>
<string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
<string name="accessibility_scanning_face" msgid="3093828357921541387">"A analisar o rosto…"</string>
@@ -258,7 +258,7 @@
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brilho"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversão de cores"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correção da cor"</string>
- <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Tamanho do tipo de letra"</string>
+ <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Tamanho da letra"</string>
<string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Gerir utilizadores"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Concluído"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fechar"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo para uma mão"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Padrão"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Médio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmara do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Pretende desbloquear a câmara e o microfone?"</string>
@@ -513,7 +517,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Desbloquear para utilizar"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"Ocorreu um problema ao obter os seus cartões. Tente mais tarde."</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Definições do ecrã de bloqueio"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"Leitor de códigos QR"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"Leitor QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"A atualizar"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Perfil de trabalho"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"Modo de avião"</string>
@@ -820,7 +824,7 @@
<string name="privacy_type_media_projection" msgid="8136723828804251547">"gravação de ecrã"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Sem título"</string>
<string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"Modo de espera"</string>
- <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Tamanho do tipo de letra"</string>
+ <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Tamanho da letra"</string>
<string name="font_scaling_smaller" msgid="1012032217622008232">"Diminuir"</string>
<string name="font_scaling_larger" msgid="5476242157436806760">"Aumentar"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Janela de ampliação"</string>
@@ -881,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controlos"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Escolha os controlos a que pretende aceder a partir das Definições rápidas"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque sem soltar e arraste para reorganizar os controlos."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controlos foram removidos."</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Alterações não guardadas."</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outras apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Adicionar controlos"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Regressar à edição"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Não foi possível carregar os controlos. Verifique a app <xliff:g id="APP">%s</xliff:g> para se certificar de que as definições da mesma não foram alteradas."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Controlos compatíveis indisponíveis"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
@@ -1121,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"A sua Política de Trabalho só lhe permite fazer chamadas telefónicas a partir do perfil de trabalho"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Mudar para perfil de trabalho"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Definições do ecrã de bloqueio"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar o ecrã de bloqueio"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Câmara bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Câmara e microfone bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfone bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo Prioridade ativado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 9e434d5..2469f2e 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Iniciar"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Parar"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modo para uma mão"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contraste"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Padrão"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Médio"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desativar"</string>
<string name="sound_settings" msgid="8874581353127418308">"Som e vibração"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configurações"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume diminuído para um nível mais seguro"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume ficou alto por mais tempo do que o recomendado"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"O app está fixado"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Visão geral e mantenha essas opções pressionadas para liberar."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Início e mantenha essas opções pressionadas para liberar."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Escolha os controles disponíveis nas Configurações rápidas"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque no controle, mantenha-o pressionado e arraste para reorganizar as posições."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outros apps"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Adicionar controles"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Voltar para a edição"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Não foi possível carregar os controles. Verifique o app <xliff:g id="APP">%s</xliff:g> para garantir que as configurações não tenham sido modificadas."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Controles compatíveis indisponíveis"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Outro"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Sua política de trabalho só permite fazer ligações pelo perfil de trabalho"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Alternar para o perfil de trabalho"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Configurações de tela de bloqueio"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar a tela de bloqueio"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueie para personalizar a tela de bloqueio"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Câmara bloqueada"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Câmera e microfone bloqueados"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfone bloqueado"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo de prioridade ativado"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Defina o app de notas padrão nas Configurações"</string>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 6380223..6d73152 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Începe"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Oprește"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modul cu o mână"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Mediu"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Ridicat"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblochezi microfonul dispozitivului?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblochezi camera dispozitivului?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblochezi camera și microfonul dispozitivului?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"dezactivează"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sunete și vibrații"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Setări"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Redus la un volum mai sigur"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumul a fost ridicat mai mult timp decât este recomandat"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplicația este fixată"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Astfel rămâne afișat până anulezi fixarea. Atinge lung opțiunile Înapoi și Recente pentru a anula fixarea."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Astfel rămâne afișat până anulezi fixarea. Atinge lung opțiunile Înapoi și Acasă pentru a anula fixarea."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"anulează marcarea ca preferată"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Mută pe poziția <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Comenzi"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Alege comenzile de accesat din Setările rapide"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ține apăsat și trage pentru a rearanja comenzile"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Au fost șterse toate comenzile"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modificările nu au fost salvate"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Vezi alte aplicații"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Rearanjează"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Adaugă comenzi"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Revino la editare"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Comenzile nu au putut fi încărcate. Accesează aplicația <xliff:g id="APP">%s</xliff:g> pentru a te asigura că setările aplicației nu s-au schimbat."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Nu sunt disponibile comenzi compatibile"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altul"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Politica privind activitatea îți permite să efectuezi apeluri telefonice numai din profilul de serviciu"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Comută la profilul de serviciu"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Închide"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Setările ecranului de blocare"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizează ecranul de blocare"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Conexiune Wi-Fi indisponibilă"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera foto a fost blocată"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera foto și microfonul sunt blocate"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfonul a fost blocat"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modul Cu prioritate este activat"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistentul este atent"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index dd6aff6..25807f2 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Начать"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Остановить"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Режим управления одной рукой"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контрастность"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартная"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Средняя"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Высокая"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Разблокировать микрофон устройства?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Разблокировать камеру устройства?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Разблокировать камеру и микрофон устройства?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"отключить"</string>
<string name="sound_settings" msgid="8874581353127418308">"Звук и вибрация"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Открыть настройки"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Громкость уменьшена до безопасного уровня"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Громкость была высокой дольше рекомендованного периода."</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Приложение закреплено"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Приложение останется активным, пока вы не отмените блокировку, нажав и удерживая кнопки \"Назад\" и \"Обзор\"."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Приложение останется активным, пока вы не отмените блокировку, нажав и удерживая кнопки \"Назад\" и \"Главный экран\"."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"удалить из избранного"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Переместить на позицию <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Элементы управления"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Выберите виджеты управления, которые будут доступны в меню \"Быстрые настройки\"."</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Чтобы изменить порядок виджетов, перетащите их."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Все виджеты управления удалены."</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Изменения не сохранены."</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Показать другие приложения"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Изменить порядок"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Добавить элементы управления"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Назад к редактированию"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Не удалось загрузить список виджетов для управления устройствами. Проверьте, не изменились ли настройки приложения \"<xliff:g id="APP">%s</xliff:g>\"."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Управление недоступно."</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Другое"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"Не удалось загрузить статус."</string>
<string name="controls_error_failed" msgid="960228639198558525">"Ошибка. Повторите попытку."</string>
<string name="controls_menu_add" msgid="4447246119229920050">"Добавить виджеты"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"Изменить виджеты"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"Изменить настройки"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Добавить приложение"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"Удалить приложение"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Добавление устройств вывода"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Согласно правилам вашей организации вы можете совершать телефонные звонки только из рабочего профиля."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Перейти в рабочий профиль"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрыть"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Настройки блокировки экрана"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Настройки заблок. экрана"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Функция Wi-Fi недоступна"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера заблокирована"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера и микрофон заблокированы"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон заблокирован"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Режим \"Только важные\" включен"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Ассистент готов слушать"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 67ebeab..a4e340c 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ආරම්භ කරන්න"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"නතර කරන්න"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"තනි අත් ප්රකාරය"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"අසමානතාව"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"සම්මත"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"මධ්යම"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"ඉහළ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"උපාංග මයික්රෆෝනය අවහිර කිරීම ඉවත් කරන්නද?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"උපාංග කැමරාව අවහිර කිරීම ඉවත් කරන්නද?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"උපාංග කැමරාව සහ මයික්රෆෝනය අවහිර කිරීම ඉවත් කරන්නද?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"අබල කරන්න"</string>
<string name="sound_settings" msgid="8874581353127418308">"ශබ්ද සහ කම්පනය"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"සැකසීම්"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"සුරක්ෂිත පරිමාවකට අඩු කරන ලදි"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"නිර්දේශිත ප්රමාණයට වඩා වැඩි කාලයක් පරිමාව ඉහළ මට්ටමක පවතී"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"යෙදුම අමුණා ඇත"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට දළ විශ්ලේෂණය ස්පර්ශ කර ආපසු අල්ලාගෙන සිටින්න."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට මුල් පිටුව ස්පර්ශ කර අල්ලාගෙන සිටින්න."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ප්රියතම වෙතින් ඉවත් කරන්න"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ස්ථාන <xliff:g id="NUMBER">%d</xliff:g> වෙත ගෙන යන්න"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"පාලන"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"ඉක්මන් සැකසීම් වෙතින් ප්රවේශ වීමට පාලන තෝරා ගන්න"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"පාලන නැවත පිළියෙළ කිරීමට අල්ලාගෙන සිට අදින්න"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"සියලු පාලන ඉවත් කර ඇත"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"වෙනස් කිරීම් නොසුරැකිණි"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"වෙනත් යෙදුම් බලන්න"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"නැවත පිළිවෙල කරන්න"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"පාලන එක් කරන්න"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ආපසු සංස්කරණයට"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"පාලන පූරණය කළ නොහැකි විය. යෙදුම් සැකසීම් වෙනස් වී නැති බව සහතික කර ගැනීමට <xliff:g id="APP">%s</xliff:g> යෙදුම පරීක්ෂා කරන්න."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ගැළපෙන පාලන ලබා ගත නොහැකිය"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"වෙනත්"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"ඔබේ වැඩ ප්රතිපත්තිය ඔබට කාර්යාල පැතිකඩෙන් පමණක් දුරකථන ඇමතුම් ලබා ගැනීමට ඉඩ සලසයි"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"කාර්යාල පැතිකඩ වෙත මාරු වන්න"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"වසන්න"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"අගුළු තිර සැකසීම්"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"අගුළු තිරය අභිරුචිකරණය කරන්න"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ලද නොහැක"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"කැමරාව අවහිරයි"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"කැමරාව සහ මයික්රොෆෝනය අවහිරයි"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"මයික්රොෆෝනය අවහිරයි"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ප්රමුඛතා මාදිලිය සක්රීයයි"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"සහයක අවධානය යොමු කරයි"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 45faf7f..d59c6ae 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Začať"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončiť"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Režim jednej ruky"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Štandardný"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Stredný"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Vysoký"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Chcete odblokovať mikrofón zariadenia?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Chcete odblokovať kameru zariadenia?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Chcete odblokovať fotoaparát a mikrofón zariadenia?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"zakázať"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvuk a vibrácie"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavenia"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Znížené na bezpečnú hlasitosť"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hlasitosť bola vysoká dlhšie, ako sa odporúča"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikácia je pripnutá"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho stlačením a podržaním tlačidiel Späť a Prehľad."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho pridržaním tlačidiel Späť a Domov."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odstránite z obľúbených"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Presunúť na pozíciu <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládacie prvky"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Vyberte ovládače, ku ktorému chcete mať prístup z rýchlych nastavení"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Polohu každého ovládača môžete zmeniť jeho pridržaním a presunutím"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Všetky ovládače boli odstránené"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Zmeny neboli uložené"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Zobraziť ďalšie aplikácie"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Usporiadať"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Pridať ovládanie"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Späť k úpravám"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Ovládacie prvky sa nepodarilo načítať. V aplikácii <xliff:g id="APP">%s</xliff:g> skontrolujte, či sa nezmenili nastavenia."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilné ovládacie prvky nie sú k dispozícii"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iné"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"Stav sa nepodarilo načítať"</string>
<string name="controls_error_failed" msgid="960228639198558525">"Chyba, skúste to znova"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"Pridať ovládače"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"Upraviť ovládače"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"Upraviť ovládanie"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Pridať aplikáciu"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"Odstrániť aplikáciu"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Pridanie výstupov"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Pracovné pravidlá vám umožňujú telefonovať iba v pracovnom profile"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Prepnúť na pracovný profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zavrieť"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Nastavenia uzamknutej obrazovky"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Prispôsobiť uzamknutú obrazovku"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ak chcete prispôsobiť uzamknutú obrazovku, odomknite ju"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi‑Fi nie je k dispozícii"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokovaná"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera a mikrofón sú blokované"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofón je blokovaný"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Režim priority je zapnutý"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Pozornosť Asistenta je zapnutá"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Nastavte predvolenú aplikáciu na poznámky v Nastaveniach"</string>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index e90a29d..b600337ce 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Začni"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ustavi"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Enoročni način"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standardni"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Srednji"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Visok"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Želite odblokirati mikrofon v napravi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Želite odblokirati fotoaparat v napravi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Želite odblokirati fotoaparat in mikrofon v napravi?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogoči"</string>
<string name="sound_settings" msgid="8874581353127418308">"Zvok in vibriranje"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavitve"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Glasnost znižana na varnejšo raven"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Glasnost je bila visoka dalj časa, kot je priporočeno."</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je pripeta"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"S tem ostane vidna, dokler je ne odpnete. Če jo želite odpeti, hkrati pridržite gumba za nazaj in pregled."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"S tem ostane vidna, dokler je ne odpnete. Če jo želite odpeti, hkrati pridržite gumba za nazaj in za začetni zaslon."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odstranitev iz priljubljenih"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Premakni na položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolniki"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Izberite kontrolnike, do katerih želite imeti dostop v hitrih nastavitvah."</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite in povlecite, da prerazporedite kontrolnike."</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Vsi kontrolniki so bili odstranjeni."</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Spremembe niso shranjene"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Prikaz drugih aplikacij"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Razvrščanje"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodajte kontrolnike"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Nazaj na urejanje"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrolnikov ni bilo mogoče naložiti. Preverite aplikacijo <xliff:g id="APP">%s</xliff:g> in se prepričajte, da se njene nastavitve niso spremenile."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Združljivi kontrolniki niso na voljo"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Drugo"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Službeni pravilnik dovoljuje opravljanje telefonskih klicev le iz delovnega profila."</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Preklopi na delovni profil"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Zapri"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Nastavitve zaklepanja zaslona"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagajanje zaklenjenega zaslona"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Odklenite za prilagajanje zaklenjenega zaslona"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ni na voljo."</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Fotoaparat je blokiran."</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Fotoaparat in mikrofon sta blokirana."</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran."</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prednostni način je vklopljen."</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Zaznavanje pomočnika je vklopljeno."</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Nastavite privzeto aplikacijo za zapiske v nastavitvah."</string>
</resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 37248fe..ea380a0 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Nis"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ndalo"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modaliteti i përdorimit me një dorë"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrasti"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Mesatar"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"I lartë"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Të zhbllokohet mikrofoni i pajisjes?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Të zhbllokohet kamera e pajisjes?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Të zhbllokohen kamera dhe mikrofoni i pajisjes?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"çaktivizo"</string>
<string name="sound_settings" msgid="8874581353127418308">"Tingulli dhe dridhjet"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Cilësimet"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ulur në një volum më të sigurt"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumi ka qenë i lartë për një kohë më të gjatë nga sa rekomandohet"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacioni është i gozhduar"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Kjo e ruan në pamje deri sa ta heqësh nga gozhdimi. Prek dhe mbaj të shtypur \"Prapa\" dhe \"Përmbledhje\" për ta hequr nga gozhdimi."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Kjo e ruan në pamje deri sa ta heqësh nga gozhdimi. Prek dhe mbaj të shtypur \"Prapa\" dhe \"Kreu\" për ta hequr nga gozhdimi."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ta heqësh nga të preferuarat"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Zhvendose te pozicioni <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrollet"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Zgjidh kontrollet për t\'u qasur nga \"Cilësimet e shpejta\""</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mbaje të shtypur dhe zvarrit për të risistemuar kontrollet"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Të gjitha kontrollet u hoqën"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ndryshimet nuk u ruajtën"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Shiko aplikacionet e tjera"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Riorganizo"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Shto kontrollet"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Kthehu prapa te modifikimi"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrollet nuk mund të ngarkoheshin. Kontrollo aplikacionin <xliff:g id="APP">%s</xliff:g> për t\'u siguruar që cilësimet e aplikacionit nuk janë ndryshuar."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Kontrollet e përputhshme nuk ofrohen"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Tjetër"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Politika jote e punës të lejon të bësh telefonata vetëm nga profili i punës"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Kalo te profili i punës"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Mbyll"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Cilësimet e ekranit të kyçjes"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizo ekranin e kyçjes"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nuk ofrohet"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera u bllokua"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dhe mikrofoni u bllokuan"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoni u bllokua"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modaliteti i përparësisë aktiv"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Vëmendja e \"Asistentit\" aktive"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index d26d5a4..14dddd68 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Почните"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зауставите"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Режим једном руком"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандардно"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Средње"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Високо"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Желите да одблокирате микрофон уређаја?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Желите да одблокирате камеру уређаја?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Желите да одблокирате камеру и микрофон уређаја?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"онемогућите"</string>
<string name="sound_settings" msgid="8874581353127418308">"Звук и вибрирање"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Подешавања"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Звук је смањен на безбедну јачину"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Звук је био гласан дуже него што се препоручује"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Апликација је закачена"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"На овај начин се ово стално приказује док га не откачите. Додирните и задржите Назад и Преглед да бисте га откачили."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"На овај начин се ово стално приказује док га не откачите. Додирните и задржите Назад и Почетна да бисте га откачили."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"уклонили из омиљених"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Преместите на <xliff:g id="NUMBER">%d</xliff:g>. позицију"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Контроле"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Одаберите контроле да бисте им приступили из Брзих подешавања"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржите и превуците да бисте променили распоред контрола"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Све контроле су уклоњене"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промене нису сачуване"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Погледајте друге апликације"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Прераспореди"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Додај контроле"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Назад на измене"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Учитавање контрола није успело. Погледајте апликацију <xliff:g id="APP">%s</xliff:g> да бисте се уверили да се подешавања апликације нису променила."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Компатибилне контроле нису доступне"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Друго"</string>
@@ -1047,7 +1047,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Погледајте све"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Да бисте променили мрежу, прекините етернет везу"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"Ради бољег доживљаја уређаја, апликације и услуге и даље могу да траже WiFi мреже у било ком тренутку, чак и када је WiFi искључен. То можете да промените у подешавањима WiFi скенирања. "<annotation id="link">"Промените"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Искључите режим рада у авиону"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Искључи режим рада у авиону"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> жели да дода следећу плочицу у Брза подешавања"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Додај плочицу"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не додај плочицу"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Смернице за посао вам омогућавају да телефонирате само са пословног профила"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Пређи на пословни профил"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Затвори"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Подешавања закључаног екрана"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Прилагоди закључани екран"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi није доступан"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера је блокирана"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера и микрофон су блокирани"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон је блокиран"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетни режим је укључен"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Помоћник је у активном стању"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 58a7426..5149bbf 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Starta"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Stoppa"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Enhandsläge"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Medelhög"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Hög"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vill du återaktivera enhetens mikrofon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vill du återaktivera enhetens kamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vill du återaktivera enhetens kamera och mikrofon?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"inaktivera"</string>
<string name="sound_settings" msgid="8874581353127418308">"Ljud och vibration"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Inställningar"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sänkte till säkrare volym"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volymen har varit hög längre än vad som rekommenderas"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Appen har fästs"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Skärmen visas tills du lossar den. Tryck länge på Tillbaka och Översikt om du vill lossa skärmen."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Skärmen visas tills du lossar den. Tryck länge på Tillbaka och Startsida om du vill lossa skärmen."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ta bort från favoriter"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Flytta till position <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Välj kontrollerna som ska visas i snabbinställningarna"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ändra ordning på kontrollerna genom att trycka och dra"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Alla kontroller har tagits bort"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ändringarna har inte sparats"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Visa andra appar"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Ordna om"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Lägg till kontroller"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Tillbaka till redigering"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Det gick inte att läsa in enhetsstyrning. Kontrollera att inställningarna inte har ändrats i <xliff:g id="APP">%s</xliff:g>-appen."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Ingen kompatibel enhetsstyrning tillgänglig"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Övrigt"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"Status otillgänglig"</string>
<string name="controls_error_failed" msgid="960228639198558525">"Fel, försök igen"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"Lägg till snabbkontroller"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"Redigera snabbkontroller"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"Redigera kontroller"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Lägg till app"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"Ta bort app"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Lägg till utgångar"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Jobbprincipen tillåter endast att du ringer telefonsamtal från jobbprofilen"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Byt till jobbprofilen"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Stäng"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Inställningar för låsskärm"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Anpassa låsskärmen"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi är inte tillgängligt"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameran är blockerad"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameran och mikrofonen är blockerade"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen är blockerad"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetsläge är aktiverat"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistenten är aktiverad"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index a3cd098..eb32d9b 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Anza kurekodi"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Acha kurekodi"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Hali ya kutumia kwa mkono mmoja"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Utofautishaji"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Kawaida"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Wastani"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Juu"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ungependa kuwacha kuzuia maikrofoni ya kifaa?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ungependa kuwacha kuzuia kamera ya kifaa?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ungependa kuwacha kuzuia kamera na maikrofoni ya kifaa?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"zima"</string>
<string name="sound_settings" msgid="8874581353127418308">"Sauti na mtetemo"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Mipangilio"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sauti imepunguzwa kuwa kiwango salama"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Sauti imekuwa juu kwa muda mrefu kuliko inavyopendekezwa"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Programu imebandikwa"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Hali hii huifanya ionekane hadi utakapoibandua. Gusa na ushikilie kipengele cha Nyuma na Muhtasari ili ubandue."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Hali hii huifanya ionekane hadi utakapoibandua. Gusa na ushikilie kitufe cha kurudisha Nyuma na cha Mwanzo kwa pamoja ili ubandue."</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"Ungependa kuzima data ya mtandao wa simu?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"Hutaweza kufikia data au intaneti kupitia <xliff:g id="CARRIER">%s</xliff:g>. Intaneti itapatikana kupitia Wi-Fi pekee."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"mtoa huduma wako"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Ungependa kubadilisha ili utumie data ya mtandao wa <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Ungependa kubadili ili utumie <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Data ya mtandao wa simu haitabadilika kiotomatiki kulingana na upatikanaji"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Hapana"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ndiyo, badili"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ondoa kwenye vipendwa"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Sogeza kwenye nafasi ya <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Vidhibiti"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Chagua vidhibiti vya kufikia ukitumia Mipangilio ya Haraka"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Shikilia na uburute ili upange vidhibiti upya"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Umeondoa vidhibiti vyote"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Mabadiliko hayajahifadhiwa"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Angalia programu zingine"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Panga upya"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Weka vidhibiti"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Rudi kwenye ukurasa wa kubadilisha"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Imeshindwa kupakia vidhibiti. Angalia programu ya <xliff:g id="APP">%s</xliff:g> ili uhakikishe kuwa mipangilio yake haijabadilika."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Vidhibiti vinavyooana havipatikani"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Nyingine"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Sera ya mahali pako pa kazi inakuruhusu upige simu kutoka kwenye wasifu wa kazini pekee"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Tumia wasifu wa kazini"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Funga"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Mipangilio ya skrini iliyofungwa"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Wekea mapendeleo skrini iliyofungwa"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi haipatikani"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera imezuiwa"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera na maikrofoni zimezuiwa"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Maikrofoni imezuiwa"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Hali ya kipaumbele imewashwa"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Programu ya Mratibu imewashwa"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 41a7743..583ec25 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"தொடங்கு"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"நிறுத்து"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ஒற்றைக் கைப் பயன்முறை"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"ஒளி மாறுபாடு"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"இயல்புநிலை"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"நடுத்தரம்"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"அதிகம்"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"சாதனத்தின் மைக்ரோஃபோனுக்கான தடுப்பை நீக்கவா?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"சாதனத்தின் கேமராவுக்கான தடுப்பை நீக்கவா?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"சாதனத்தின் கேமராவுக்கும் மைக்ரோஃபோனுக்குமான தடுப்பை நீக்கவா?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"முடக்கும்"</string>
<string name="sound_settings" msgid="8874581353127418308">"ஒலி & அதிர்வு"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"அமைப்புகள்"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"பாதுகாப்பான ஒலியளவிற்குக் குறைக்கப்பட்டது"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"பரிந்துரைக்கப்பட்டதை விட ஒலியளவு அதிகமாக உள்ளது"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ஆப்ஸ் பின் செய்யப்பட்டது"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"பொருத்தியதை அகற்றும் வரை இதைக் காட்சியில் வைக்கும். அகற்ற, முந்தையது மற்றும் மேலோட்டப் பார்வையைத் தொட்டுப் பிடிக்கவும்."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"இதற்கான பின்னை அகற்றும் வரை, இந்தப் பயன்முறை செயல்பாட்டிலேயே இருக்கும். அகற்றுவதற்கு, முந்தையது மற்றும் முகப்பு பட்டன்களைத் தொட்டுப் பிடிக்கவும்."</string>
@@ -852,8 +854,7 @@
<string name="accessibility_magnification_medium" msgid="6994632616884562625">"நடுத்தரமானது"</string>
<string name="accessibility_magnification_small" msgid="8144502090651099970">"சிறியது"</string>
<string name="accessibility_magnification_large" msgid="6602944330021308774">"பெரியது"</string>
- <!-- no translation found for accessibility_magnification_fullscreen (5043514702759201964) -->
- <skip />
+ <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"முழுத்திரை"</string>
<string name="accessibility_magnification_done" msgid="263349129937348512">"முடிந்தது"</string>
<string name="accessibility_magnifier_edit" msgid="1522877239671820636">"மாற்று"</string>
<string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"சாளரத்தைப் பெரிதாக்கும் கருவிக்கான அமைப்புகள்"</string>
@@ -884,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"பிடித்தவற்றிலிருந்து நீக்க இருமுறை தட்டவும்"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>ம் நிலைக்கு நகர்த்து"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"கட்டுப்பாடுகள்"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"விரைவு அமைப்புகளிலிருந்து அணுகுவதற்கான கட்டுப்பாடுகளைத் தேர்ந்தெடுங்கள்"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"கட்டுப்பாடுகளை மறுவரிசைப்படுத்த அவற்றைப் பிடித்து இழுக்கவும்"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"கட்டுப்பாடுகள் அனைத்தும் அகற்றப்பட்டன"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"மாற்றங்கள் சேமிக்கப்படவில்லை"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"பிற ஆப்ஸையும் காட்டு"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"மறுவரிசைப்படுத்து"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"கட்டுப்பாடுகளைச் சேர்"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"திருத்துதலுக்குச் செல்"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"கட்டுப்பாடுகளை ஏற்ற முடியவில்லை. ஆப்ஸ் அமைப்புகள் மாறவில்லை என்பதை உறுதிப்படுத்த <xliff:g id="APP">%s</xliff:g> ஆப்ஸைப் பார்க்கவும்."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"இணக்கமான கட்டுப்பாடுகள் இல்லை"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"பிற"</string>
@@ -1040,7 +1039,7 @@
<string name="non_carrier_network_unavailable" msgid="770049357024492372">"வேறு நெட்வொர்க்குகள் எதுவும் கிடைக்கவில்லை"</string>
<string name="all_network_unavailable" msgid="4112774339909373349">"நெட்வொர்க்குகள் எதுவும் கிடைக்கவில்லை"</string>
<string name="turn_on_wifi" msgid="1308379840799281023">"வைஃபை"</string>
- <string name="tap_a_network_to_connect" msgid="1565073330852369558">"இணைய நெட்வொர்க்கைத் தட்டுங்கள்"</string>
+ <string name="tap_a_network_to_connect" msgid="1565073330852369558">"இணைக்க நெட்வொர்க்கைத் தட்டுங்கள்"</string>
<string name="unlock_to_view_networks" msgid="5072880496312015676">"நெட்வொர்க்குகளைப் பார்க்க அன்லாக் செய்யுங்கள்"</string>
<string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"நெட்வொர்க்குகளைத் தேடுகிறது…"</string>
<string name="wifi_failed_connect_message" msgid="4161863112079000071">"நெட்வொர்க்குடன் இணைக்க முடியவில்லை"</string>
@@ -1124,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"உங்கள் பணிக் கொள்கையின்படி நீங்கள் பணிக் கணக்கில் இருந்து மட்டுமே ஃபோன் அழைப்புகளைச் செய்ய முடியும்"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"பணிக் கணக்கிற்கு மாறு"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"மூடுக"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"பூட்டுத் திரை அமைப்புகள்"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"பூட்டுத் திரையை பிரத்தியேகமாக்கு"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"வைஃபை கிடைக்கவில்லை"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"கேமரா தடுக்கப்பட்டுள்ளது"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"கேமராவும் மைக்ரோஃபோனும் தடுக்கப்பட்டுள்ளன"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"மைக்ரோஃபோன் தடுக்கப்பட்டுள்ளது"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"முன்னுரிமைப் பயன்முறை இயக்கத்தில் உள்ளது"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"அசிஸ்டண்ட்டின் கவனம் இயக்கத்தில் உள்ளது"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index fa549b8..8ada2ee 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -182,7 +182,7 @@
<string name="accessibility_not_connected" msgid="4061305616351042142">"కనెక్ట్ చేయబడలేదు."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"రోమింగ్"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ఆఫ్ చేయండి"</string>
- <string name="accessibility_airplane_mode" msgid="1899529214045998505">"ఎయిర్ప్లేన్ మోడ్."</string>
+ <string name="accessibility_airplane_mode" msgid="1899529214045998505">"విమానం మోడ్."</string>
<string name="accessibility_vpn_on" msgid="8037549696057288731">"VPNలో."</string>
<string name="accessibility_battery_level" msgid="5143715405241138822">"బ్యాటరీ <xliff:g id="NUMBER">%d</xliff:g> శాతం."</string>
<string name="accessibility_battery_level_with_estimate" msgid="6548654589315074529">"బ్యాటరీ <xliff:g id="PERCENTAGE">%1$d</xliff:g> శాతం, <xliff:g id="TIME">%2$s</xliff:g> ఉంటుంది"</string>
@@ -246,7 +246,7 @@
<string name="quick_settings_user_title" msgid="8673045967216204537">"యూజర్"</string>
<string name="quick_settings_wifi_label" msgid="2879507532983487244">"Wi-Fi"</string>
<string name="quick_settings_internet_label" msgid="6603068555872455463">"ఇంటర్నెట్"</string>
- <string name="quick_settings_networks_available" msgid="1875138606855420438">"నెట్వర్క్లు అందుబాటులో ఉన్నాయి"</string>
+ <string name="quick_settings_networks_available" msgid="1875138606855420438">"అందుబాటులో ఉన్న నెట్వర్క్లు"</string>
<string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"నెట్వర్క్లు అందుబాటులో లేవు"</string>
<string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"Wi-Fi నెట్వర్క్లు ఏవీ అందుబాటులో లేవు"</string>
<string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"ఆన్ చేస్తోంది…"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"ప్రారంభించండి"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ఆపు"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"వన్-హ్యాండెడ్ మోడ్"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"కాంట్రాస్ట్"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"స్టాండర్డ్"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"మధ్యస్థం"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"అధికం"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"పరికరం మైక్రోఫోన్ను అన్బ్లాక్ చేయమంటారా?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"పరికరంలోని కెమెరాను అన్బ్లాక్ చేయమంటారా?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"పరికరంలోని కెమెరా, మైక్రోఫోన్లను అన్బ్లాక్ చేయమంటారా?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"నిలిపివేయండి"</string>
<string name="sound_settings" msgid="8874581353127418308">"సౌండ్ & వైబ్రేషన్"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"సెట్టింగ్లు"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"సురక్షితమైన వాల్యూమ్కు తగ్గించబడింది"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"సిఫార్సు చేసిన దానికంటే ఎక్కువ కాలం వాల్యూమ్ ఎక్కువగా ఉంది"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"యాప్ పిన్ చేయబడి ఉంది"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"దీని వలన మీరు అన్పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్పిన్ చేయడానికి వెనుకకు మరియు స్థూలదృష్టి తాకి & అలాగే పట్టుకోండి."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"దీని వలన మీరు అన్పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్పిన్ చేయడానికి వెనుకకు మరియు హోమ్ని తాకి & అలాగే పట్టుకోండి."</string>
@@ -518,7 +520,7 @@
<string name="qr_code_scanner_title" msgid="1938155688725760702">"QR కోడ్ స్కానర్"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"అప్డేట్ చేస్తోంది"</string>
<string name="status_bar_work" msgid="5238641949837091056">"ఆఫీస్ ప్రొఫైల్"</string>
- <string name="status_bar_airplane" msgid="4848702508684541009">"ఎయిర్ప్లేన్ మోడ్"</string>
+ <string name="status_bar_airplane" msgid="4848702508684541009">"విమానం మోడ్"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"మీరు <xliff:g id="WHEN">%1$s</xliff:g> సెట్ చేసిన మీ తర్వాత అలారం మీకు వినిపించదు"</string>
<string name="alarm_template" msgid="2234991538018805736">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"\"<xliff:g id="CARRIER">%s</xliff:g>\" ద్వారా మీకు డేటా లేదా ఇంటర్నెట్కు యాక్సెస్ ఉండదు. Wi-Fi ద్వారా మాత్రమే ఇంటర్నెట్ అందుబాటులో ఉంటుంది."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"మీ క్యారియర్"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g>కి తిరిగి మారాలా?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"మొబైల్ డేటా లభ్యత ఆధారంగా ఆటోమేటిక్గా స్విచ్ అవ్వదు"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"లభ్యత ఆధారంగా మొబైల్ డేటా ఆటోమేటిక్గా మారదు"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"వద్దు, థ్యాంక్స్"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"అవును, మార్చండి"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"అనుమతి రిక్వెస్ట్కు ఒక యాప్ అడ్డు తగులుతున్నందున సెట్టింగ్లు మీ ప్రతిస్పందనను ధృవీకరించలేకపోయాయి."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ఇష్టమైనదిగా పెట్టిన గుర్తును తీసివేయండి"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> పొజిషన్కు తరలించండి"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"నియంత్రణలు"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"త్వరిత సెట్టింగ్ల నుండి యాక్సెస్ చేయడానికి కంట్రోల్స్ను ఎంచుకోండి"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"కంట్రోల్స్ క్రమం మార్చడానికి దేన్నయినా పట్టుకుని, లాగి వదలండి"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"అన్ని కంట్రోల్స్ తీసివేయబడ్డాయి"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"మార్పులు సేవ్ చేయబడలేదు"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ఇతర యాప్లను చూడండి"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"తిరిగి అమర్చండి"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"కంట్రోల్స్ను జోడించండి"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ఎడిటింగ్కు తిరిగి వెళ్లండి"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"కంట్రోల్లను లోడ్ చేయడం సాధ్యపడలేదు. యాప్ సెట్టింగ్లు మారలేదని నిర్ధారించడానికి <xliff:g id="APP">%s</xliff:g> యాప్ను చెక్ చేయండి."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"అనుకూల కంట్రోల్లు అందుబాటులో లేవు"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"ఇతరం"</string>
@@ -1055,7 +1055,7 @@
<string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# యాప్ యాక్టివ్గా ఉంది}other{# యాప్లు యాక్టివ్గా ఉన్నాయి}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"కొత్త సమాచారం"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"యాక్టివ్గా ఉన్న యాప్లు"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"మీరు వాటిని ఉపయోగించనప్పటికీ, ఈ యాప్లు యాక్టివ్గా ఉంటాయి, రన్ అవుతాయి. ఇది వారి ఫంక్షనాలిటీని మెరుగుపరుస్తుంది, అయితే ఇది బ్యాటరీ జీవితకాలాన్ని కూడా ప్రభావితం చేయవచ్చు."</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"మీరు వాటిని ఉపయోగించనప్పటికీ, ఈ యాప్లు యాక్టివ్గా ఉంటాయి, రన్ అవుతాయి. ఇది వాటి ఫంక్షనాలిటీని మెరుగుపరుస్తుంది, అయితే ఇది బ్యాటరీ జీవితకాలాన్ని కూడా ప్రభావితం చేయవచ్చు."</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ఆపివేయండి"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ఆపివేయబడింది"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"పూర్తయింది"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"మీ వర్క్ పాలసీ, మిమ్మల్ని వర్క్ ప్రొఫైల్ నుండి మాత్రమే ఫోన్ కాల్స్ చేయడానికి అనుమతిస్తుంది"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"వర్క్ ప్రొఫైల్కు మారండి"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"మూసివేయండి"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"లాక్ స్క్రీన్ సెట్టింగ్లు"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"లాక్ స్క్రీన్ను అనుకూలీకరించండి"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"లాక్ స్క్రీన్ను అనుకూలంగా మార్చుకోవడానికి అన్లాక్ చేయండి"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi అందుబాటులో లేదు"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"కెమెరా బ్లాక్ చేయబడింది"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"కెమెరా, మైక్రోఫోన్ బ్లాక్ చేయబడ్డాయి"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"మైక్రోఫోన్ బ్లాక్ చేయబడింది"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ప్రయారిటీ మోడ్ ఆన్లో ఉంది"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant అటెన్షన్ ఆన్లో ఉంది"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"సెట్టింగ్లలో ఆటోమేటిక్గా ఉండేలా ఒక నోట్స్ యాప్ను సెట్ చేసుకోండి"</string>
</resources>
diff --git a/packages/SystemUI/res/values-te/tiles_states_strings.xml b/packages/SystemUI/res/values-te/tiles_states_strings.xml
index 6549c56..9d2b407 100644
--- a/packages/SystemUI/res/values-te/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-te/tiles_states_strings.xml
@@ -169,12 +169,12 @@
<string-array name="tile_states_onehanded">
<item msgid="8189342855739930015">"అందుబాటులో లేదు"</item>
<item msgid="146088982397753810">"ఆఫ్"</item>
- <item msgid="460891964396502657">"ఆన్"</item>
+ <item msgid="460891964396502657">"ఆన్లో ఉంది"</item>
</string-array>
<string-array name="tile_states_dream">
<item msgid="6184819793571079513">"అందుబాటులో లేరు"</item>
<item msgid="8014986104355098744">"ఆఫ్"</item>
- <item msgid="5966994759929723339">"ఆన్"</item>
+ <item msgid="5966994759929723339">"ఆన్లో ఉంది"</item>
</string-array>
<string-array name="tile_states_font_scaling">
<item msgid="3173069902082305985">"అందుబాటులో లేదు"</item>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 110b62ae..ce35c40 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -237,10 +237,10 @@
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"หมุนอัตโนมัติ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"หมุนหน้าจออัตโนมัติ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ตำแหน่ง"</string>
- <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"โปรแกรมรักษาหน้าจอ"</string>
+ <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"ภาพพักหน้าจอ"</string>
<string name="quick_settings_camera_label" msgid="5612076679385269339">"สิทธิ์เข้าถึงกล้อง"</string>
- <string name="quick_settings_mic_label" msgid="8392773746295266375">"สิทธิ์เข้าถึงไมโครโฟน"</string>
- <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"พร้อมให้ใช้งาน"</string>
+ <string name="quick_settings_mic_label" msgid="8392773746295266375">"สิทธิ์เข้าถึงไมค์"</string>
+ <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"พร้อมใช้งาน"</string>
<string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"ถูกบล็อก"</string>
<string name="quick_settings_media_device_label" msgid="8034019242363789941">"อุปกรณ์สื่อ"</string>
<string name="quick_settings_user_title" msgid="8673045967216204537">"ผู้ใช้"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"เริ่ม"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"หยุด"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"โหมดมือเดียว"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"คอนทราสต์"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"มาตรฐาน"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ปานกลาง"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"สูง"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"เลิกบล็อกไมโครโฟนของอุปกรณ์ใช่ไหม"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"เลิกบล็อกกล้องของอุปกรณ์ใช่ไหม"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"เลิกบล็อกกล้องและไมโครโฟนของอุปกรณ์ใช่ไหม"</string>
@@ -452,16 +456,14 @@
<string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g> <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="accessibility_volume_settings" msgid="1458961116951564784">"การตั้งค่าเสียง"</string>
<string name="volume_odi_captions_tip" msgid="8825655463280990941">"แสดงคำบรรยายสื่อโดยอัตโนมัติ"</string>
- <string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"เคล็ดลับเกี่ยวกับคำอธิบายภาพ"</string>
- <string name="volume_odi_captions_content_description" msgid="4172765742046013630">"การวางซ้อนคำบรรยายภาพ"</string>
+ <string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"เคล็ดลับเกี่ยวกับคำบรรยายแทนเสียง"</string>
+ <string name="volume_odi_captions_content_description" msgid="4172765742046013630">"การวางซ้อนคำบรรยายแทนเสียง"</string>
<string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"เปิดใช้"</string>
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ปิดใช้"</string>
<string name="sound_settings" msgid="8874581353127418308">"เสียงและการสั่น"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"การตั้งค่า"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ลดเสียงลงไประดับที่ปลอดภัยขึ้นแล้ว"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"เสียงอยู่ในระดับที่ดังเป็นระยะเวลานานกว่าที่แนะนำ"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ปักหมุดแอปอยู่"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกปักหมุด แตะ \"กลับ\" และ \"ภาพรวม\" ค้างไว้เพื่อเลิกปักหมุด"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกปักหมุด แตะ \"กลับ\" และ \"หน้าแรก\" ค้างไว้เพื่อเลิกปักหมุด"</string>
@@ -875,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"นำออกแล้ว"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"เพิ่ม <xliff:g id="APPNAME">%s</xliff:g> ไหม"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> สามารถเลือกตัวควบคุมและเนื้อหาที่จะปรากฏขึ้นที่นี่"</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"นำการควบคุมสำหรับ <xliff:g id="APPNAME">%s</xliff:g> ออกไหม"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"นำตัวควบคุมสำหรับ <xliff:g id="APPNAME">%s</xliff:g> ออกไหม"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"ตั้งเป็นรายการโปรดแล้ว"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"ตั้งเป็นรายการโปรดแล้ว โดยอยู่ลำดับที่ <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"นำออกจากรายการโปรดแล้ว"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"นำออกจากรายการโปรด"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"ย้ายไปที่ตำแหน่ง <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"การควบคุม"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"เลือกตัวควบคุมที่ต้องการให้เข้าถึงได้จากการตั้งค่าด่วน"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"แตะตัวควบคุมค้างไว้แล้วลากเพื่อจัดเรียงใหม่"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"นำตัวควบคุมทั้งหมดออกแล้ว"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ยังไม่ได้บันทึกการเปลี่ยนแปลง"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ดูแอปอื่นๆ"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"จัดเรียงใหม่"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"เพิ่มตัวควบคุม"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"กลับไปที่การแก้ไข"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"โหลดตัวควบคุมไม่ได้ ตรวจสอบแอป <xliff:g id="APP">%s</xliff:g> ให้แน่ใจว่าการตั้งค่าของแอปไม่เปลี่ยนแปลง"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"ตัวควบคุมที่เข้ากันได้ไม่พร้อมใช้งาน"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"อื่นๆ"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"นโยบายการทำงานอนุญาตให้คุณโทรออกได้จากโปรไฟล์งานเท่านั้น"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"สลับไปใช้โปรไฟล์งาน"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"ปิด"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"การตั้งค่าหน้าจอล็อก"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"ปรับแต่งหน้าจอล็อก"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ไม่พร้อมใช้งาน"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"กล้องถูกบล็อกอยู่"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"กล้องและไมโครโฟนถูกบล็อกอยู่"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ไมโครโฟนถูกบล็อกอยู่"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"โหมดลำดับความสำคัญเปิดอยู่"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"การเรียกใช้งาน Assistant เปิดอยู่"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 285b865..527a2f6 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Magsimula"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ihinto"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"One-hand mode"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Contrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standard"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Katamtaman"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Mataas"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"I-unblock ang mikropono ng device?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"I-unblock ang camera ng device?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"I-unblock ang camera at mikropono ng device?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"i-disable"</string>
<string name="sound_settings" msgid="8874581353127418308">"Tunog at pag-vibrate"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Mga Setting"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Hininaan sa mas ligtas na volume"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Naging malakas ang volume nang mas matagal sa inirerekomenda"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Naka-pin ang app"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Overview upang mag-unpin."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Home upang mag-unpin."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"alisin sa paborito"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Ilipat sa posisyong <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Mga Kontrol"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Pumili ng mga kontrol na maa-access mula sa Mga Mabilisang Setting"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"I-hold at i-drag para baguhin ang pagkakaayos ng mga kontrol"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Inalis ang lahat ng kontrol"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Hindi na-save ang mga pagbabago"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Tingnan ang iba pang app"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Ayusin ulit"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Magdagdag ng mga kontrol"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Bumalik sa pag-edit"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Hindi ma-load ang mga kontrol. Tingnan ang app na <xliff:g id="APP">%s</xliff:g> para matiyak na hindi nabago ang mga setting ng app."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Hindi available ang mga compatible na kontrol"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Iba pa"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Pinapayagan ka ng iyong patakaran sa trabaho na tumawag lang mula sa profile sa trabaho"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Lumipat sa profile sa trabaho"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Isara"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Mga setting ng lock screen"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"I-customize ang lock screen"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Hindi available ang Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Naka-block ang camera"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Naka-block ang camera at mikropono"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Naka-block ang mikropono"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Naka-on ang Priority mode"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Naka-on ang atensyon ng Assistant"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index f82194d..cb50462 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Başlat"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Durdur"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Tek el modu"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standart"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Orta"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Yüksek"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonunun engellemesi kaldırılsın mı?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerasının engellemesi kaldırılsın mı?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası ile mikrofonunun engellemesi kaldırılsın mı?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"devre dışı bırak"</string>
<string name="sound_settings" msgid="8874581353127418308">"Ses ve titreşim"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ayarlar"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ses, sağlık açısından daha güvenli bir seviyeye düşürüldü"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ses, önerilenden daha uzun süredir yüksek seviyede"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Uygulama sabitlendi"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Bu işlem, siz sabitlemeyi kaldırana kadar ekranı görünür durumda tutar. Sabitlemeyi kaldırmak için Geri\'ye ve Genel Bakış\'a dokunup basılı tutun."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Bu işlem, siz sabitlemeyi kaldırana kadar ekranı görünür durumda tutar. Sabitlemeyi kaldırmak için Geri\'ye ve Ana sayfaya dokunup basılı tutun."</string>
@@ -791,7 +793,7 @@
<string name="mobile_data_disable_message" msgid="8604966027899770415">"<xliff:g id="CARRIER">%s</xliff:g> üzerinden veri veya internet erişiminiz olmayacak. İnternet yalnızca kablosuz bağlantı üzerinden kullanılabilecek."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"operatörünüz"</string>
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g> operatörüne geri dönülsün mü?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Uygunluk durumuna göre otomatik olarak mobil veriye geçilmez"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Kullanılabilir olduğunda otomatik olarak mobil veriye geçilmez"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Hayır, teşekkürler"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Evet, geçilsin"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Bir uygulama bir izin isteğinin anlaşılmasını engellediğinden, Ayarlar, yanıtınızı doğrulayamıyor."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"favorilerden kaldırın"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>. konuma taşı"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Hızlı Ayarlar\'dan erişmek istediğiniz kontrolleri seçin"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Denetimleri yeniden düzenlemek için basılı tutup sürükleyin"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Tüm denetimler kaldırıldı"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Değişiklikler kaydedilmedi"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Tüm uygulamaları göster"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Yeniden düzenle"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Kontrol ekle"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Düzenlemeye dön"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontroller yüklenemedi. Uygulama ayarlarının değişmediğinden emin olmak için <xliff:g id="APP">%s</xliff:g> uygulamasını kontrol edin."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Uyumlu kontrol bulunamadı"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Diğer"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"İşletme politikanız yalnızca iş profilinden telefon araması yapmanıza izin veriyor"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"İş profiline geç"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Kapat"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Kilit ekranı ayarları"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Kilit ekranını özelleştir"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Kablosuz bağlantı kullanılamıyor"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera engellendi"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera ve mikrofon engellendi"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon engellendi"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Öncelik modu etkin"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistan dinliyor"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 62e1ec6..d236f50 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Почати"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Зупинити"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Режим керування однією рукою"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Контраст"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартний"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Середній"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Високий"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Надати доступ до мікрофона?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Надати доступ до камери пристрою?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Надати доступ до камери й мікрофона?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"вимкнути"</string>
<string name="sound_settings" msgid="8874581353127418308">"Звук і вібрація"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Налаштування"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Гучність знижено до безпечнішого рівня"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Аудіо відтворювалося з високою гучністю довше, ніж рекомендується"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Додаток закріплено"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ви постійно бачитимете екран, доки не відкріпите його. Щоб відкріпити екран, натисніть і втримуйте кнопки \"Назад\" та \"Огляд\"."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ви бачитимете цей екран, доки не відкріпите його. Для цього натисніть і утримуйте кнопки \"Назад\" та \"Головний екран\"."</string>
@@ -481,7 +483,7 @@
<string name="stream_system" msgid="7663148785370565134">"Система"</string>
<string name="stream_ring" msgid="7550670036738697526">"Дзвінок"</string>
<string name="stream_music" msgid="2188224742361847580">"Медіа"</string>
- <string name="stream_alarm" msgid="16058075093011694">"Сигнал"</string>
+ <string name="stream_alarm" msgid="16058075093011694">"Будильник"</string>
<string name="stream_notification" msgid="7930294049046243939">"Сповіщення"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"Bluetooth"</string>
<string name="stream_dtmf" msgid="7322536356554673067">"Двотональний багаточастотний аналоговий сигнал"</string>
@@ -506,7 +508,7 @@
<string name="enable_demo_mode" msgid="3180345364745966431">"Увімкнути демонстраційний режим"</string>
<string name="show_demo_mode" msgid="3677956462273059726">"Показати демонстраційний режим"</string>
<string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string>
- <string name="status_bar_alarm" msgid="87160847643623352">"Сигнал"</string>
+ <string name="status_bar_alarm" msgid="87160847643623352">"Будильник"</string>
<string name="wallet_title" msgid="5369767670735827105">"Гаманець"</string>
<string name="wallet_empty_state_label" msgid="7776761245237530394">"Швидше й безпечніше сплачуйте за покупки за допомогою телефона"</string>
<string name="wallet_app_button_label" msgid="7123784239111190992">"Показати все"</string>
@@ -793,7 +795,7 @@
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Перейти на <xliff:g id="CARRIER">%s</xliff:g>?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Пристрій не перемикатиметься на мобільний Інтернет автоматично"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Ні, дякую"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Так, перемикатися"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Так"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"Не вдається підтвердити вашу відповідь у налаштуваннях, оскільки інший додаток заступає запит на дозвіл."</string>
<string name="slice_permission_title" msgid="3262615140094151017">"Дозволити додатку <xliff:g id="APP_0">%1$s</xliff:g> показувати фрагменти додатка <xliff:g id="APP_2">%2$s</xliff:g>?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- Має доступ до інформації з додатка <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"видалити з вибраного"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Перемістити на позицію <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Елементи керування"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Виберіть, які елементи керування мають бути доступні в швидких налаштуваннях"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Щоб змінити порядок елементів керування, перетягуйте їх"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Усі елементи керування вилучено"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Зміни не збережено"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Переглянути інші додатки"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Упорядкувати"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Додати елементи керування"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Повернутися до редагування"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Не вдалося завантажити елементи керування. Перевірте в додатку <xliff:g id="APP">%s</xliff:g>, чи його налаштування не змінились."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Сумісні елементи керування недоступні"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Інше"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Відповідно до правил організації ви можете телефонувати лише з робочого профілю"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Перейти в робочий профіль"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрити"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Параметри заблокованого екрана"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Налаштувати заблокований екран"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Мережа Wi-Fi недоступна"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камеру заблоковано"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камеру й мікрофон заблоковано"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Мікрофон заблоковано"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Режим пріоритету ввімкнено"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Асистента активовано"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index c2bbe9d..92a7652 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"شروع کریں"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"روکیں"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"ایک ہاتھ کی وضع"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"کنٹراسٹ"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"معیاری"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"متوسط"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"زیادہ"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"آلے کا مائیکروفون غیر مسدود کریں؟"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"آلے کا کیمرا غیر مسدود کریں؟"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"آلے کا کیمرا اور مائیکروفون غیر مسدود کریں؟"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"غیر فعال کریں"</string>
<string name="sound_settings" msgid="8874581353127418308">"آواز اور وائبریشن"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ترتیبات"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"محفوظ والیوم تک کم کر دیا گیا"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"والیوم تجویز کردہ مدت سے زیادہ بلند رہا ہے"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"ایپ کو پن کر دیا گیا ہے"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"اس سے یہ اس وقت تک منظر میں رہتی ہے جب تک آپ اس سے پن ہٹا نہیں دیتے۔ پن ہٹانے کیلئے پیچھے اور مجموعی جائزہ کے بٹنز کو ٹچ کریں اور دبائے رکھیں۔"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"اس سے یہ اس وقت تک منظر میں رہتی ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے \"پیچھے\" اور \"ہوم\" بٹنز کو ٹچ کریں اور دبائے رکھیں۔"</string>
@@ -790,7 +792,7 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"موبائل ڈیٹا آف کریں؟"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"آپ کو <xliff:g id="CARRIER">%s</xliff:g> کے ذریعے ڈیٹا یا انٹرنیٹ تک رسائی حاصل نہیں ہوگی۔ انٹرنیٹ صرف Wi-Fi کے ذریعے دستیاب ہوگا۔"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"آپ کا کریئر"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g> پر واپس سوئچ کریں؟"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"<xliff:g id="CARRIER">%s</xliff:g> پر واپس سوئچ کریں؟"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"دستیابی کی بنیاد پر موبائل ڈیٹا خودکار طور پر تبدیل نہیں ہوگا"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"نہیں شکریہ"</string>
<string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"ہاں، سوئچ کریں"</string>
@@ -875,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"ہٹا دیا گیا"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"<xliff:g id="APPNAME">%s</xliff:g> کو شامل کریں؟"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> انتخاب کر سکتی ہے کہ یہاں کون سے کنٹرولز اور مواد دکھایا جائے۔"</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"<xliff:g id="APPNAME">%s</xliff:g> کے کنٹرولز کو ہٹا دیں؟"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"<xliff:g id="APPNAME">%s</xliff:g> کے کنٹرولز کو ہٹا دیں؟"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"پسند کردہ"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"پسند کردہ، پوزیشن <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"ناپسند کردہ"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"پسندیدگی ختم کریں"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"پوزیشن <xliff:g id="NUMBER">%d</xliff:g> میں منتقل کریں"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"کنٹرولز"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"فوری ترتیبات سے رسائی کے لیے کنٹرولز منتخب کریں"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"کنٹرولز کو دوبارہ ترتیب دینے کے ليے پکڑیں اور گھسیٹیں"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"سبھی کنٹرولز ہٹا دیے گئے"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"تبدیلیاں محفوظ نہیں ہوئیں"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"دیگر ایپس دیکھیں"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"دوبارہ ترتیب دیں"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"کنٹرولز شامل کریں"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ترمیم پر واپس جائیں"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"کنٹرولز کو لوڈ نہیں کیا جا سکا۔ یہ یقینی بنانے کے لیے <xliff:g id="APP">%s</xliff:g> ایپ کو چیک کریں کہ ایپ کی ترتیبات تبدیل نہیں ہوئی ہیں۔"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"موافق کنٹرولز دستیاب نہیں ہیں"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"دیگر"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"آپ کے کام سے متعلق پالیسی آپ کو صرف دفتری پروفائل سے فون کالز کرنے کی اجازت دیتی ہے"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"دفتری پروفائل پر سوئچ کریں"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"بند کریں"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"مقفل اسکرین کی ترتیبات"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"مقفل اسکرین کو حسب ضرورت بنائیں"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi دستیاب نہیں ہے"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"کیمرا مسدود ہے"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"کیمرا اور مائیکروفون مسدود ہے"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"مائیکروفون مسدود ہے"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ترجیحی موڈ آن ہے"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"اسسٹنٹ کی توجہ آن ہے"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index fb20f8b..3d148e4 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -258,7 +258,7 @@
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Yorqinlik"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"Ranglarni akslantirish"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Ranglarni tuzatish"</string>
- <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Shrift oʻlchami"</string>
+ <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Shrift hajmi"</string>
<string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Foydalanuvchilarni boshqarish"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Tayyor"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Yopish"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Boshlash"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Toʻxtatish"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Ixcham rejim"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Kontrast"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Standart"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Oʻrtacha"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Yuqori"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Qurilma mikrofoni blokdan chiqarilsinmi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Qurilma kamerasi blokdan chiqarilsinmi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Qurilma kamerasi va mikrofoni blokdan chiqarilsinmi?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"faolsizlantirish"</string>
<string name="sound_settings" msgid="8874581353127418308">"Tovush va tebranish"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Sozlamalar"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Tovush balandligi xavfsiz darajaga tushirildi"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Tovush tavsiya qilinganidan koʻra uzoqroq vaqt baland boʻldi"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Ilova mahkamlandi"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun “Orqaga” va “Umumiy ma’lumot” tugmalarini bosib turing."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ekran yechib olinmagunicha u mahkamlangan holatda qoladi. Uni yechish uchun Orqaga va Asosiy tugmalarni birga bosib turing."</string>
@@ -822,7 +824,7 @@
<string name="privacy_type_media_projection" msgid="8136723828804251547">"ekranni yozuvi"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"Nomsiz"</string>
<string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"Kutib turing"</string>
- <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Shrift oʻlchami"</string>
+ <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Shrift hajmi"</string>
<string name="font_scaling_smaller" msgid="1012032217622008232">"Kichiklashtirish"</string>
<string name="font_scaling_larger" msgid="5476242157436806760">"Kattalashtirish"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"Kattalashtirish oynasi"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"saralanganlardan olib tashlash"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-joyga olish"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Boshqaruv elementlari"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Tezkor sozlamalarda qaysi boshqaruv elementlari chiqishini tanlang"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Boshqaruv elementlarini qayta tartiblash uchun ushlab torting"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Barcha boshqaruv elementlari olib tashlandi"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Oʻzgarishlar saqlanmadi"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Boshqa ilovalar"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Qayta tartiblash"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Tugma kiritish"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Tahrirlashga qaytish"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Boshqaruvlar yuklanmadi. <xliff:g id="APP">%s</xliff:g> ilovasining sozlamalari oʻzgarmaganini tekshiring."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Mos boshqaruv elementlari mavjud emas"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Boshqa"</string>
@@ -951,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"Holat axboroti yuklanmadi"</string>
<string name="controls_error_failed" msgid="960228639198558525">"Xato, qayta urining"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"Element kiritish"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"Elementlarni tahrirlash"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"Boshqaruvni tahrirlash"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Ilova kiritish"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"Ilovani olib tashlash"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Chiquvchi qurilmani kiritish"</string>
@@ -1096,7 +1096,7 @@
<string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
<string name="log_access_confirmation_title" msgid="4843557604739943395">"<xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> uchun qurilmadagi barcha jurnallarga kirish ruxsati berilsinmi?"</string>
<string name="log_access_confirmation_allow" msgid="752147861593202968">"Bir martalik ruxsat berish"</string>
- <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Rad etish"</string>
+ <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Ruxsat berilmasin"</string>
<string name="log_access_confirmation_body" msgid="6883031912003112634">"Qurilma jurnaliga qurilma bilan yuz bergan hodisalar qaydlari yoziladi. Ilovalar bu jurnal qaydlari yordamida muammolarni topishi va bartaraf qilishi mumkin.\n\nAyrim jurnal qaydlarida maxfiy axborotlar yozilishi mumkin, shu sababli qurilmadagi barcha jurnal qaydlariga ruxsatni faqat ishonchli ilovalarga bering. \n\nBu ilovaga qurilmadagi barcha jurnal qaydlariga ruxsat berilmasa ham, u oʻzining jurnalini ocha oladi. Qurilma ishlab chiqaruvchisi ham ayrim jurnallar yoki qurilma haqidagi axborotlarni ocha oladi."</string>
<string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Batafsil"</string>
<string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Batafsil: <xliff:g id="URL">%s</xliff:g>"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Ishga oid siyosatingiz faqat ish profilidan telefon chaqiruvlarini amalga oshirish imkonini beradi"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Ish profiliga almashish"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Yopish"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Qulflangan ekran sozlamalari"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Ekran qulfini moslash"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi mavjud emas"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera bloklangan"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera va mikrofon bloklangan"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon bloklangan"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Imtiyozli rejim yoniq"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent diqqati yoniq"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 0f2ebf6..f9a23ed 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Bắt đầu"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Dừng"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Chế độ một tay"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Độ tương phản"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Chuẩn"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Vừa"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Cao"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Bỏ chặn micrô của thiết bị?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Bỏ chặn máy ảnh của thiết bị?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Bỏ chặn máy ảnh và micrô của thiết bị?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"tắt"</string>
<string name="sound_settings" msgid="8874581353127418308">"Âm thanh và chế độ rung"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Cài đặt"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Đã giảm âm lượng xuống mức an toàn hơn"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Âm lượng ở mức cao trong khoảng thời gian lâu hơn khuyến nghị"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"Đã ghim ứng dụng"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Ứng dụng này sẽ ở cố định trên màn hình cho đến khi bạn bỏ ghim. Hãy chạm và giữ Quay lại và Tổng quan để bỏ ghim."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ứng dụng này sẽ ở cố định trên màn hình cho đến khi bạn bỏ ghim. Hãy chạm và giữ nút Quay lại và nút Màn hình chính để bỏ ghim."</string>
@@ -518,7 +520,7 @@
<string name="qr_code_scanner_title" msgid="1938155688725760702">"Trình quét mã QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Đang cập nhật"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Hồ sơ công việc"</string>
- <string name="status_bar_airplane" msgid="4848702508684541009">"Chế độ máy bay"</string>
+ <string name="status_bar_airplane" msgid="4848702508684541009">"Chế độ trên máy bay"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"Bạn sẽ không nghe thấy báo thức tiếp theo lúc <xliff:g id="WHEN">%1$s</xliff:g> của mình"</string>
<string name="alarm_template" msgid="2234991538018805736">"lúc <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"vào <xliff:g id="WHEN">%1$s</xliff:g>"</string>
@@ -852,8 +854,7 @@
<string name="accessibility_magnification_medium" msgid="6994632616884562625">"Vừa"</string>
<string name="accessibility_magnification_small" msgid="8144502090651099970">"Nhỏ"</string>
<string name="accessibility_magnification_large" msgid="6602944330021308774">"Lớn"</string>
- <!-- no translation found for accessibility_magnification_fullscreen (5043514702759201964) -->
- <skip />
+ <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"Toàn màn hình"</string>
<string name="accessibility_magnification_done" msgid="263349129937348512">"Xong"</string>
<string name="accessibility_magnifier_edit" msgid="1522877239671820636">"Chỉnh sửa"</string>
<string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Chế độ cài đặt cửa sổ phóng to"</string>
@@ -876,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"Đã xóa"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"Thêm <xliff:g id="APPNAME">%s</xliff:g>?"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> có thể chọn các nút điều khiển và nội dung hiện ở đây."</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"Xoá chế độ cài đặt cho <xliff:g id="APPNAME">%s</xliff:g>?"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"Xoá chế độ điều khiển cho <xliff:g id="APPNAME">%s</xliff:g>?"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"Được yêu thích"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"Được yêu thích, vị trí số <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"Không được yêu thích"</string>
@@ -884,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"bỏ yêu thích"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Di chuyển tới vị trí số <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Các tùy chọn điều khiển"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Chọn các tuỳ chọn điều khiển để truy cập từ trình đơn Cài đặt nhanh"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Giữ và kéo để sắp xếp lại các tùy chọn điều khiển"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Đã xóa tất cả tùy chọn điều khiển"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Chưa lưu các thay đổi"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Xem ứng dụng khác"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Sắp xếp lại"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Thêm chế độ điều khiển"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Quay lại chế độ chỉnh sửa"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Không tải được các chức năng điều khiển. Hãy kiểm tra ứng dụng <xliff:g id="APP">%s</xliff:g> để đảm bảo rằng thông tin cài đặt của ứng dụng chưa thay đổi."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Không có các chức năng điều khiển tương thích"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Khác"</string>
@@ -952,7 +951,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"Không tải được trạng thái"</string>
<string name="controls_error_failed" msgid="960228639198558525">"Lỗi, hãy thử lại"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"Thêm các tùy chọn điều khiển"</string>
- <string name="controls_menu_edit" msgid="890623986951347062">"Chỉnh sửa tùy chọn điều khiển"</string>
+ <string name="controls_menu_edit" msgid="890623986951347062">"Chỉnh sửa chế độ điều khiển"</string>
<string name="controls_menu_add_another_app" msgid="8661172304650786705">"Thêm ứng dụng"</string>
<string name="controls_menu_remove" msgid="3006525275966023468">"Xoá ứng dụng"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"Thêm thiết bị đầu ra"</string>
@@ -1053,10 +1052,10 @@
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Thêm ô"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Không thêm ô"</string>
<string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Chọn người dùng"</string>
- <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{Ứng dụng # đang hoạt động}other{Ứng dụng # đang hoạt động}}"</string>
+ <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# ứng dụng đang hoạt động}other{# ứng dụng đang hoạt động}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"Thông tin mới"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ứng dụng đang hoạt động"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Các ứng dụng này vẫn hoạt động và đang chạy ngay cả khi bạn không sử dụng chúng. Việc này giúp cải thiện các chức năng nhưng đồng thời cũng có thể ảnh hưởng đến thời lượng pin."</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Những ứng dụng sau vẫn hoạt động và chạy ngay cả khi bạn không sử dụng chúng. Việc này giúp cải thiện các chức năng nhưng đồng thời cũng có thể ảnh hưởng đến thời lượng pin."</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"Dừng"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"Đã dừng"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"Xong"</string>
@@ -1124,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Chính sách của nơi làm việc chỉ cho phép bạn gọi điện thoại từ hồ sơ công việc"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Chuyển sang hồ sơ công việc"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Đóng"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Cài đặt màn hình khoá"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Tuỳ chỉnh màn hình khoá"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Không có Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Máy ảnh bị chặn"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Máy ảnh và micrô bị chặn"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micrô bị chặn"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Chế độ ưu tiên đang bật"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Trợ lý đang bật"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 571ee95..5110027 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -258,7 +258,7 @@
<string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"亮度"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"颜色反转"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"色彩校正"</string>
- <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"字号"</string>
+ <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"字体大小"</string>
<string name="quick_settings_more_user_settings" msgid="7634653308485206306">"管理用户"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"完成"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"关闭"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"开始"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"单手模式"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"对比度"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"标准"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"中"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解锁设备麦克风吗?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"要解锁设备摄像头吗?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"要解锁设备摄像头和麦克风吗?"</string>
@@ -456,12 +460,10 @@
<string name="volume_odi_captions_content_description" msgid="4172765742046013630">"字幕重叠显示"</string>
<string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"启用"</string>
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
- <string name="sound_settings" msgid="8874581353127418308">"提示音和振动"</string>
+ <string name="sound_settings" msgid="8874581353127418308">"声音和振动"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"设置"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已降低至较安全的音量"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"音量保持较高的时间超过了建议时长"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"应用已固定"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”和“概览”即可取消固定屏幕。"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”和“主屏幕”即可取消固定屏幕。"</string>
@@ -698,7 +700,7 @@
<string name="left_icon" msgid="5036278531966897006">"向左图标"</string>
<string name="right_icon" msgid="1103955040645237425">"向右图标"</string>
<string name="drag_to_add_tiles" msgid="8933270127508303672">"按住并拖动即可添加功能块"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"按住并拖动即可重新排列图块"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"按住并拖动即可重新排列功能块"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"拖动到此处即可移除"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"您至少需要 <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> 个卡片"</string>
<string name="qs_edit" msgid="5583565172803472437">"编辑"</string>
@@ -790,10 +792,10 @@
<string name="mobile_data_disable_title" msgid="5366476131671617790">"要关闭移动数据网络吗?"</string>
<string name="mobile_data_disable_message" msgid="8604966027899770415">"您将无法通过<xliff:g id="CARRIER">%s</xliff:g>使用移动数据或互联网,只能通过 WLAN 连接到互联网。"</string>
<string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"您的运营商"</string>
- <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"切换回 <xliff:g id="CARRIER">%s</xliff:g>?"</string>
- <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"移动流量不会根据可用性自动切换"</string>
+ <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"是否要切换回 <xliff:g id="CARRIER">%s</xliff:g>?"</string>
+ <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"移动流量不会根据网络可用情况自动切换"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"不用了"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,切换"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,请切换"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"由于某个应用遮挡了权限请求界面,因此“设置”应用无法验证您的回应。"</string>
<string name="slice_permission_title" msgid="3262615140094151017">"要允许“<xliff:g id="APP_0">%1$s</xliff:g>”显示“<xliff:g id="APP_2">%2$s</xliff:g>”图块吗?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- 可以读取“<xliff:g id="APP">%1$s</xliff:g>”中的信息"</string>
@@ -875,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"已移除"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"添加“<xliff:g id="APPNAME">%s</xliff:g>”?"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"“<xliff:g id="APPNAME">%s</xliff:g>”可以选择在此处显示哪些控件和内容。"</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"移除<xliff:g id="APPNAME">%s</xliff:g>的控件?"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"要移除<xliff:g id="APPNAME">%s</xliff:g>的控制器吗?"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"已收藏"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"已收藏,位置:<xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"已取消收藏"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"取消收藏"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"移至位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控制"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"选择要从“快捷设置”菜单访问的控制项"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住并拖动即可重新排列控制器"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控制器"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未保存更改"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"查看其他应用"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"重新排列"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"添加控件"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"返回以继续修改"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"无法加载控件。请查看<xliff:g id="APP">%s</xliff:g>应用,确保应用设置没有更改。"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"找不到兼容的控件"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"根据您的工作政策,您只能通过工作资料拨打电话"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"切换到工作资料"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"关闭"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"锁屏设置"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"自定义锁屏状态"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"没有 WLAN 连接"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"已禁用摄像头"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"已禁用摄像头和麦克风"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"已禁用麦克风"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"已开启优先模式"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"已开启 Google 助理感知功能"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 8df1c3d..82f81f6 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -20,14 +20,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4811759950673118541">"系統使用者介面"</string>
- <string name="battery_low_title" msgid="5319680173344341779">"要開啟「省電模式」嗎?"</string>
- <string name="battery_low_description" msgid="3282977755476423966">"剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g> 電量。「省電模式」會開啟深色主題背景、限制背景活動,並延遲顯示通知。"</string>
- <string name="battery_low_intro" msgid="5148725009653088790">"「省電模式」會開啟深色主題背景、限制背景活動,並延遲顯示通知。"</string>
+ <string name="battery_low_title" msgid="5319680173344341779">"要開啟「慳電模式」嗎?"</string>
+ <string name="battery_low_description" msgid="3282977755476423966">"剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g> 電量。「慳電模式」會開啟深色主題背景、限制背景活動,並延遲顯示通知。"</string>
+ <string name="battery_low_intro" msgid="5148725009653088790">"「慳電模式」會開啟深色主題背景、限制背景活動,並延遲顯示通知。"</string>
<string name="battery_low_percent_format" msgid="4276661262843170964">"剩餘 <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
<string name="invalid_charger_title" msgid="938685362320735167">"無法透過 USB 充電"</string>
<string name="invalid_charger_text" msgid="2339310107232691577">"使用裝置隨附的充電器"</string>
- <string name="battery_saver_confirmation_title" msgid="1234998463717398453">"要開啟省電模式嗎?"</string>
- <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"關於「省電模式」"</string>
+ <string name="battery_saver_confirmation_title" msgid="1234998463717398453">"要開啟慳電模式嗎?"</string>
+ <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"關於「慳電模式」"</string>
<string name="battery_saver_confirmation_ok" msgid="5042136476802816494">"開啟"</string>
<string name="battery_saver_start_action" msgid="8353766979886287140">"開啟"</string>
<string name="battery_saver_dismiss_action" msgid="7199342621040014738">"不用了,謝謝"</string>
@@ -285,7 +285,7 @@
<string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g> 開啟"</string>
<string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"直到<xliff:g id="TIME">%s</xliff:g>"</string>
<string name="quick_settings_ui_mode_night_label" msgid="1398928270610780470">"深色主題背景"</string>
- <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"省電模式"</string>
+ <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"慳電模式"</string>
<string name="quick_settings_dark_mode_secondary_label_on_at_sunset" msgid="6017379738102015710">"在日落時開啟"</string>
<string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"在日出時關閉"</string>
<string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"於<xliff:g id="TIME">%s</xliff:g>開啟"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"單手模式"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"對比"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"標準"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"中"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解除封鎖裝置麥克風嗎?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"要解除封鎖裝置相機嗎?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"要解除封鎖裝置相機和麥克風嗎?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
<string name="sound_settings" msgid="8874581353127418308">"音效和震動"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已調低至較安全的音量"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"使用高音量已超過建議的時間"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"已固定應用程式"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住「返回」和「概覽」按鈕即可取消固定。"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住「返回」按鈕和主按鈕即可取消固定。"</string>
@@ -583,7 +585,7 @@
<string name="snoozed_for_time" msgid="7586689374860469469">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
<string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# 小時}=2{# 小時}other{# 小時}}"</string>
<string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# 分鐘}other{# 分鐘}}"</string>
- <string name="battery_detail_switch_title" msgid="6940976502957380405">"省電模式"</string>
+ <string name="battery_detail_switch_title" msgid="6940976502957380405">"慳電模式"</string>
<string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> 鍵"</string>
<string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
<string name="keyboard_key_back" msgid="4185420465469481999">"返回"</string>
@@ -793,7 +795,7 @@
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"要切換回「<xliff:g id="CARRIER">%s</xliff:g>」嗎?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"流動數據不會根據可用性自動切換"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"不用了,謝謝"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,切換回 DDS 對話框"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,請切換"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證您的回應。"</string>
<string name="slice_permission_title" msgid="3262615140094151017">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的快訊嗎?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- 可以讀取「<xliff:g id="APP">%1$s</xliff:g>」中的資料"</string>
@@ -801,8 +803,8 @@
<string name="slice_permission_checkbox" msgid="4242888137592298523">"允許「<xliff:g id="APP">%1$s</xliff:g>」顯示任何應用程式的快訊"</string>
<string name="slice_permission_allow" msgid="6340449521277951123">"允許"</string>
<string name="slice_permission_deny" msgid="6870256451658176895">"拒絕"</string>
- <string name="auto_saver_title" msgid="6873691178754086596">"輕按即可預定省電模式自動開啟時間"</string>
- <string name="auto_saver_text" msgid="3214960308353838764">"在電池電量可能耗盡前啟用「省電模式」"</string>
+ <string name="auto_saver_title" msgid="6873691178754086596">"輕按即可預定慳電模式自動開啟時間"</string>
+ <string name="auto_saver_text" msgid="3214960308353838764">"在電池電量可能耗盡前啟用「慳電模式」"</string>
<string name="no_auto_saver_action" msgid="7467924389609773835">"不用了,謝謝"</string>
<string name="heap_dump_tile_name" msgid="2464189856478823046">"Dump SysUI Heap"</string>
<string name="ongoing_privacy_dialog_a11y_title" msgid="2205794093673327974">"使用中"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"取消收藏"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"移至位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"選擇要從「快速設定」存取的控制項"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳便可重新排列控制項"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控制項"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未儲存變更"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"查看其他應用程式"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"重新排列"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"新增控制項"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"繼續編輯"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"無法載入控制項。請檢查 <xliff:g id="APP">%s</xliff:g> 應用程式,確保設定沒有變動。"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"沒有兼容的控制項"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"您的公司政策只允許透過工作設定檔撥打電話"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"切換至工作設定檔"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"關閉"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"上鎖畫面設定"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"自訂上鎖畫面"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解鎖後即可自訂螢幕鎖定畫面"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"無法連線至 Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"已封鎖相機"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"已封鎖相機和麥克風"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"已封鎖麥克風"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先模式已開啟"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"「Google 助理」感應功能已開啟"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在「設定」中指定預設記事應用程式"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index a25fc44..1652a1c 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"開始"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"停止"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"單手模式"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"對比"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"標準"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"中"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"高"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要將裝置麥克風解除封鎖嗎?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"要將裝置相機解除封鎖嗎?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"要將裝置的相機和麥克風解除封鎖嗎?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
<string name="sound_settings" msgid="8874581353127418308">"音效與震動"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已調低至較安全的音量"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"已超過建議的高音量時間"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"應用程式已固定"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [返回] 按鈕和 [總覽] 按鈕即可取消固定。"</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"這會讓應用程式顯示在螢幕上,直到取消固定為止。按住 [返回] 按鈕和主畫面按鈕即可取消固定。"</string>
@@ -793,7 +795,7 @@
<string name="auto_data_switch_disable_title" msgid="5146527155665190652">"要切換回「<xliff:g id="CARRIER">%s</xliff:g>」嗎?"</string>
<string name="auto_data_switch_disable_message" msgid="5885533647399535852">"行動數據不會依據可用性自動切換"</string>
<string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"不用了,謝謝"</string>
- <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,切換回 DDS 對話方塊"</string>
+ <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,請切換"</string>
<string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式覆蓋了權限要求畫面,因此「設定」應用程式無法驗證你的回應。"</string>
<string name="slice_permission_title" msgid="3262615140094151017">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的區塊嗎?"</string>
<string name="slice_permission_text_1" msgid="6675965177075443714">"- 它可以讀取「<xliff:g id="APP">%1$s</xliff:g>」的資訊"</string>
@@ -875,7 +877,7 @@
<string name="controls_removed" msgid="3731789252222856959">"已移除"</string>
<string name="controls_panel_authorization_title" msgid="267429338785864842">"要新增「<xliff:g id="APPNAME">%s</xliff:g>」嗎?"</string>
<string name="controls_panel_authorization" msgid="7045551688535104194">"「<xliff:g id="APPNAME">%s</xliff:g>」可選擇要顯示在這裡的控制選項和內容。"</string>
- <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"要移除「<xliff:g id="APPNAME">%s</xliff:g>」的控制嗎?"</string>
+ <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"要移除「<xliff:g id="APPNAME">%s</xliff:g>」的控制項嗎?"</string>
<string name="accessibility_control_favorite" msgid="8694362691985545985">"已加入收藏"</string>
<string name="accessibility_control_favorite_position" msgid="54220258048929221">"已加入收藏,位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="accessibility_control_not_favorite" msgid="1291760269563092359">"從收藏中移除"</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"從收藏中移除"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"移到位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"選擇要顯示在「快速設定」選單中的控制項"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳即可重新排列控制項"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"所有控制項都已移除"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未儲存變更"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"查看其他應用程式"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"重新排列"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"新增控制選項"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"繼續編輯"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"無法載入控制項。請查看「<xliff:g id="APP">%s</xliff:g>」應用程式,確認應用程式設定沒有任何異動。"</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"找不到相容的控制項"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
@@ -960,7 +960,7 @@
<string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 部裝置"</string>
<string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(連線中斷)"</string>
<string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"無法切換,輕觸即可重試。"</string>
- <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"建立裝置連線"</string>
+ <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"連接裝置"</string>
<string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"如要投放這個工作階段,請開啟應用程式。"</string>
<string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"不明的應用程式"</string>
<string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"停止投放"</string>
@@ -1055,7 +1055,7 @@
<string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# 個應用程式正在運作}other{# 個應用程式正在運作}}"</string>
<string name="fgs_dot_content_description" msgid="2865071539464777240">"新資訊"</string>
<string name="fgs_manager_dialog_title" msgid="5879184257257718677">"運作中的應用程式"</string>
- <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"即使您並未使用,這些應用程式仍會持續運作。這可提升應用程式效能,但也可能影響電池續航力。"</string>
+ <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"即使你並未使用,這些應用程式仍會持續運作。這可提升應用程式效能,但也可能影響電池續航力。"</string>
<string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string>
<string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"已停止"</string>
<string name="clipboard_edit_text_done" msgid="4551887727694022409">"完成"</string>
@@ -1123,11 +1123,13 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"貴公司政策僅允許透過工作資料夾撥打電話"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"切換至工作資料夾"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"關閉"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"螢幕鎖定設定"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"自訂螢幕鎖定畫面"</string>
+ <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解鎖後即可自訂螢幕鎖定畫面"</string>
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"無法連上 Wi-Fi"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"已封鎖攝影機"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"已封鎖攝影機和麥克風"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"已封鎖麥克風"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先模式已開啟"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Google 助理感知功能已開啟"</string>
+ <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在「設定」中指定預設記事應用程式"</string>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 59884dbc..aa6f168 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -127,7 +127,7 @@
<string name="accessibility_accessibility_button" msgid="4089042473497107709">"Ukufinyeleleka"</string>
<string name="accessibility_rotate_button" msgid="1238584767612362586">"Zungezisa isikrini"</string>
<string name="accessibility_recent" msgid="901641734769533575">"Buka konke"</string>
- <string name="accessibility_camera_button" msgid="2938898391716647247">"Ikhamela"</string>
+ <string name="accessibility_camera_button" msgid="2938898391716647247">"Ikhamera"</string>
<string name="accessibility_phone_button" msgid="4256353121703100427">"Ifoni"</string>
<string name="accessibility_voice_assist_button" msgid="6497706615649754510">"Isisekeli sezwi"</string>
<string name="accessibility_wallet_button" msgid="1458258783460555507">"I-wallet"</string>
@@ -299,6 +299,10 @@
<string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Qala"</string>
<string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Misa"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Imodi yesandla esisodwa"</string>
+ <string name="quick_settings_contrast_label" msgid="988087460210159123">"Ukugqama"</string>
+ <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Okujwayelekile"</string>
+ <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Okuphakathi"</string>
+ <string name="quick_settings_contrast_high" msgid="656049259587494499">"Phezulu"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vulela imakrofoni yedivayisi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vulela ikhamera yedivayisi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vulela ikhamera yedivayisi nemakrofoni?"</string>
@@ -458,10 +462,8 @@
<string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"khubaza"</string>
<string name="sound_settings" msgid="8874581353127418308">"Umsindo nokudlidliza"</string>
<string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Amasethingi"</string>
- <!-- no translation found for csd_lowered_title (1786173629015030856) -->
- <skip />
- <!-- no translation found for csd_system_lowered_text (2001603282316829500) -->
- <skip />
+ <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Yehliselwe kuvolumu ephephile"</string>
+ <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ivolumu beyiphezulu isikhathi eside kunokunconyiwe"</string>
<string name="screen_pinning_title" msgid="9058007390337841305">"I-app iphiniwe"</string>
<string name="screen_pinning_description" msgid="8699395373875667743">"Lokhu kuyigcina ibukeka uze ususe ukuphina. Thinta uphinde ubambe okuthi Emuva Nokubuka konke ukuze ususe ukuphina."</string>
<string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Lokhu kuyigcina ibonakala uze uyisuse. Thinta uphinde ubambe okuthi Emuva nokuthi Ekhaya ukuze ususe ukuphina."</string>
@@ -883,17 +885,15 @@
<string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"susa ubuntandokazi"</string>
<string name="accessibility_control_move" msgid="8980344493796647792">"Hambisa ukuze ubeke ku-<xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="controls_favorite_default_title" msgid="967742178688938137">"Izilawuli"</string>
- <string name="controls_favorite_subtitle" msgid="6481675111056961083">"Khetha izilawuli ukuze ufinyelele kusuka Kumasethingi Asheshayo"</string>
+ <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
+ <skip />
<string name="controls_favorite_rearrange" msgid="5616952398043063519">"Bamba futhi uhudule ukuze uphinde ulungise izilawuli"</string>
<string name="controls_favorite_removed" msgid="5276978408529217272">"Zonke izilawuli zisusiwe"</string>
<string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Izinguquko azilondolozwanga"</string>
<string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Bona ezinye izinhlelo zokusebenza"</string>
- <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
- <skip />
- <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
- <skip />
- <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
- <skip />
+ <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Hlela kabusha"</string>
+ <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Engeza Izilawuli"</string>
+ <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Buyela emuva ekuhleleni"</string>
<string name="controls_favorite_load_error" msgid="5126216176144877419">"Izilawuli azikwazanga ukulayishwa. Hlola uhlelo lokusebenza le-<xliff:g id="APP">%s</xliff:g> ukuqinisekisa ukuthi amasethingi wohlelo lokusebenza awashintshile."</string>
<string name="controls_favorite_load_none" msgid="7687593026725357775">"Izilawuli ezihambelanayo azitholakali"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Okunye"</string>
@@ -1123,11 +1123,15 @@
<string name="call_from_work_profile_text" msgid="3458704745640229638">"Inqubomgomo yakho yomsebenzi ikuvumela ukuthi wenze amakholi wefoni kuphela ngephrofayela yomsebenzi"</string>
<string name="call_from_work_profile_action" msgid="2937701298133010724">"Shintshela kuphrofayela yomsebenzi"</string>
<string name="call_from_work_profile_close" msgid="7927067108901068098">"Vala"</string>
- <string name="lock_screen_settings" msgid="9197175446592718435">"Amasethingi okukhiya isikrini"</string>
+ <string name="lock_screen_settings" msgid="6152703934761402399">"Yenza ngokwezifiso ukukhiya isikrini"</string>
+ <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
+ <skip />
<string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"I-Wi-Fi ayitholakali"</string>
<string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Ikhamera ivinjiwe"</string>
<string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Ikhamera nemakrofoni zivinjiwe"</string>
<string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Imakrofoni ivinjiwe"</string>
<string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Imodi ebalulekile ivuliwe"</string>
<string name="assistant_attention_content_description" msgid="6830215897604642875">"Ukunaka kwe-Assistant kuvuliwe"</string>
+ <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
+ <skip />
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 19deefb..4e68efe 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -404,7 +404,34 @@
<string name="biometric_dialog_last_pin_attempt_before_wipe_profile">If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted.</string>
<!-- Content of a dialog shown when the user only has one attempt left to provide the correct password before the work profile is removed. [CHAR LIMIT=NONE] -->
<string name="biometric_dialog_last_password_attempt_before_wipe_profile">If you enter an incorrect password on the next attempt, your work profile and its data will be deleted.</string>
-
+ <!-- Confirmation button label for a dialog shown when the system requires the user to re-enroll their biometrics. [CHAR LIMIT=20] -->
+ <string name="biometric_re_enroll_dialog_confirm">Set up</string>
+ <!-- Cancel button label for a dialog shown when the system requires the user to re-enroll their biometric. [CHAR LIMIT=20] -->
+ <string name="biometric_re_enroll_dialog_cancel">Not now</string>
+ <!-- Notification content shown when the system requires the user to re-enroll their biometrics. [CHAR LIMIT=NONE] -->
+ <string name="biometric_re_enroll_notification_content">This is required to improve security and performance</string>
+ <!-- Notification title shown when the system requires the user to re-enroll their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_re_enroll_notification_title">Set up Fingerprint Unlock again</string>
+ <!-- Name shown for system notifications related to the fingerprint unlock feature. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_re_enroll_notification_name">Fingerprint Unlock</string>
+ <!-- Title for a dialog shown when the system requires the user to re-enroll their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_re_enroll_dialog_title">Set up Fingerprint Unlock</string>
+ <!-- Content for a dialog shown when the system requires the user to re-enroll their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_re_enroll_dialog_content">To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.\n\nAfter they\’re deleted, you\’ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify it\’s you.</string>
+ <!-- Content for a dialog shown when the system requires the user to re-enroll their fingerprint (singular). [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_re_enroll_dialog_content_singular">To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.\n\nAfter they\’re deleted, you\’ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify it\’s you.</string>
+ <!-- Content for a dialog shown when an error occurs while the user is trying to re-enroll their fingerprint. [CHAR LIMIT=NONE] -->
+ <string name="fingerprint_reenroll_failure_dialog_content">Couldn\u2019t set up fingerprint unlock. Go to Settings to try again.</string>
+ <!-- Notification title shown when the system requires the user to re-enroll their face. [CHAR LIMIT=NONE] -->
+ <string name="face_re_enroll_notification_title">Set up Face Unlock again</string>
+ <!-- Name shown for system notifications related to the face unlock feature. [CHAR LIMIT=NONE] -->
+ <string name="face_re_enroll_notification_name">Face Unlock</string>
+ <!-- Title for a dialog shown when the system requires the user to re-enroll their face. [CHAR LIMIT=NONE] -->
+ <string name="face_re_enroll_dialog_title">Set up Face Unlock</string>
+ <!-- Content for a dialog shown when the system requires the user to re-enroll their face. [CHAR LIMIT=NONE] -->
+ <string name="face_re_enroll_dialog_content">To set up Face Unlock again, your current face model will be deleted.\n\nYou\’ll need to set up this feature again to use your face to unlock your phone.</string>
+ <!-- Content for a dialog shown when an error occurs while the user is trying to re-enroll their face. [CHAR LIMIT=NONE] -->
+ <string name="face_reenroll_failure_dialog_content">Couldn\u2019t set up face unlock. Go to Settings to try again.</string>
<!-- Message shown when the system-provided fingerprint dialog is shown, asking for authentication -->
<string name="fingerprint_dialog_touch_sensor">Touch the fingerprint sensor</string>
<!-- Message shown to inform the user a face cannot be recognized and fingerprint should instead be used.[CHAR LIMIT=50] -->
@@ -2467,7 +2494,7 @@
<!-- Controls management controls screen default title [CHAR LIMIT=30] -->
<string name="controls_favorite_default_title">Controls</string>
<!-- Controls management controls screen subtitle [CHAR LIMIT=NONE] -->
- <string name="controls_favorite_subtitle">Choose controls to access from Quick Settings</string>
+ <string name="controls_favorite_subtitle">Choose device controls to access quickly</string>
<!-- Controls management editing screen, user direction for rearranging controls [CHAR LIMIT=NONE] -->
<string name="controls_favorite_rearrange">Hold & drag to rearrange controls</string>
@@ -3069,6 +3096,9 @@
-->
<string name="lock_screen_settings">Customize lock screen</string>
+ <!-- Title of security view when we want to authenticate before customizing the lockscreen. [CHAR LIMIT=NONE] -->
+ <string name="keyguard_unlock_to_customize_ls">Unlock to customize lock screen</string>
+
<!-- Content description for Wi-Fi not available icon on dream [CHAR LIMIT=NONE]-->
<string name="wifi_unavailable_dream_overlay_content_description">Wi-Fi not available</string>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/condition/ConditionExtensions.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/condition/ConditionExtensions.kt
new file mode 100644
index 0000000..8f8bff8
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/condition/ConditionExtensions.kt
@@ -0,0 +1,23 @@
+package com.android.systemui.shared.condition
+
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.launch
+
+/** Converts a boolean flow to a [Condition] object which can be used with a [Monitor] */
+@JvmOverloads
+fun Flow<Boolean>.toCondition(scope: CoroutineScope, initialValue: Boolean? = null): Condition {
+ return object : Condition(initialValue, false) {
+ var job: Job? = null
+
+ override fun start() {
+ job = scope.launch { collect { updateCondition(it) } }
+ }
+
+ override fun stop() {
+ job?.cancel()
+ job = null
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
index 7262a73..8b87e2a 100644
--- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
+++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
@@ -99,8 +99,10 @@
value.initialize(resources, dozeAmount, 0f)
if (regionSamplingEnabled) {
- clock?.smallClock?.view?.addOnLayoutChangeListener(mLayoutChangedListener)
- clock?.largeClock?.view?.addOnLayoutChangeListener(mLayoutChangedListener)
+ clock?.run {
+ smallClock.view.addOnLayoutChangeListener(mLayoutChangedListener)
+ largeClock.view.addOnLayoutChangeListener(mLayoutChangedListener)
+ }
} else {
updateColors()
}
@@ -175,15 +177,17 @@
private fun updateColors() {
val wallpaperManager = WallpaperManager.getInstance(context)
if (regionSamplingEnabled && !wallpaperManager.lockScreenWallpaperExists()) {
- if (regionSampler != null) {
- if (regionSampler?.sampledView == clock?.smallClock?.view) {
- smallClockIsDark = regionSampler!!.currentRegionDarkness().isDark
- clock?.smallClock?.events?.onRegionDarknessChanged(smallClockIsDark)
- return
- } else if (regionSampler?.sampledView == clock?.largeClock?.view) {
- largeClockIsDark = regionSampler!!.currentRegionDarkness().isDark
- clock?.largeClock?.events?.onRegionDarknessChanged(largeClockIsDark)
- return
+ regionSampler?.let { regionSampler ->
+ clock?.let { clock ->
+ if (regionSampler.sampledView == clock.smallClock.view) {
+ smallClockIsDark = regionSampler.currentRegionDarkness().isDark
+ clock.smallClock.events.onRegionDarknessChanged(smallClockIsDark)
+ return@updateColors
+ } else if (regionSampler.sampledView == clock.largeClock.view) {
+ largeClockIsDark = regionSampler.currentRegionDarkness().isDark
+ clock.largeClock.events.onRegionDarknessChanged(largeClockIsDark)
+ return@updateColors
+ }
}
}
}
@@ -193,8 +197,10 @@
smallClockIsDark = isLightTheme.data == 0
largeClockIsDark = isLightTheme.data == 0
- clock?.smallClock?.events?.onRegionDarknessChanged(smallClockIsDark)
- clock?.largeClock?.events?.onRegionDarknessChanged(largeClockIsDark)
+ clock?.run {
+ smallClock.events.onRegionDarknessChanged(smallClockIsDark)
+ largeClock.events.onRegionDarknessChanged(largeClockIsDark)
+ }
}
private fun updateRegionSampler(sampledRegion: View) {
@@ -240,7 +246,7 @@
private val configListener =
object : ConfigurationController.ConfigurationListener {
override fun onThemeChanged() {
- clock?.events?.onColorPaletteChanged(resources)
+ clock?.run { events.onColorPaletteChanged(resources) }
updateColors()
}
@@ -253,7 +259,10 @@
object : BatteryStateChangeCallback {
override fun onBatteryLevelChanged(level: Int, pluggedIn: Boolean, charging: Boolean) {
if (isKeyguardVisible && !isCharging && charging) {
- clock?.animations?.charge()
+ clock?.run {
+ smallClock.animations.charge()
+ largeClock.animations.charge()
+ }
}
isCharging = charging
}
@@ -262,7 +271,7 @@
private val localeBroadcastReceiver =
object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
- clock?.events?.onLocaleChanged(Locale.getDefault())
+ clock?.run { events.onLocaleChanged(Locale.getDefault()) }
}
}
@@ -272,7 +281,10 @@
isKeyguardVisible = visible
if (!featureFlags.isEnabled(DOZING_MIGRATION_1)) {
if (!isKeyguardVisible) {
- clock?.animations?.doze(if (isDozing) 1f else 0f)
+ clock?.run {
+ smallClock.animations.doze(if (isDozing) 1f else 0f)
+ largeClock.animations.doze(if (isDozing) 1f else 0f)
+ }
}
}
@@ -281,19 +293,19 @@
}
override fun onTimeFormatChanged(timeFormat: String?) {
- clock?.events?.onTimeFormatChanged(DateFormat.is24HourFormat(context))
+ clock?.run { events.onTimeFormatChanged(DateFormat.is24HourFormat(context)) }
}
override fun onTimeZoneChanged(timeZone: TimeZone) {
- clock?.events?.onTimeZoneChanged(timeZone)
+ clock?.run { events.onTimeZoneChanged(timeZone) }
}
override fun onUserSwitchComplete(userId: Int) {
- clock?.events?.onTimeFormatChanged(DateFormat.is24HourFormat(context))
+ clock?.run { events.onTimeFormatChanged(DateFormat.is24HourFormat(context)) }
}
override fun onWeatherDataChanged(data: WeatherData) {
- clock?.events?.onWeatherDataChanged(data)
+ clock?.run { events.onWeatherDataChanged(data) }
}
}
@@ -349,34 +361,33 @@
smallTimeListener = null
largeTimeListener = null
- clock?.smallClock?.let {
- smallTimeListener = TimeListener(it, mainExecutor)
- smallTimeListener?.update(shouldTimeListenerRun)
- }
- clock?.largeClock?.let {
- largeTimeListener = TimeListener(it, mainExecutor)
- largeTimeListener?.update(shouldTimeListenerRun)
+ clock?.let {
+ smallTimeListener = TimeListener(it.smallClock, mainExecutor).apply {
+ update(shouldTimeListenerRun)
+ }
+ largeTimeListener = TimeListener(it.largeClock, mainExecutor).apply {
+ update(shouldTimeListenerRun)
+ }
}
}
private fun updateFontSizes() {
- clock
- ?.smallClock
- ?.events
- ?.onFontSettingChanged(
+ clock?.run {
+ smallClock.events.onFontSettingChanged(
resources.getDimensionPixelSize(R.dimen.small_clock_text_size).toFloat()
)
- clock
- ?.largeClock
- ?.events
- ?.onFontSettingChanged(
+ largeClock.events.onFontSettingChanged(
resources.getDimensionPixelSize(R.dimen.large_clock_text_size).toFloat()
)
+ }
}
private fun handleDoze(doze: Float) {
dozeAmount = doze
- clock?.animations?.doze(dozeAmount)
+ clock?.run {
+ smallClock.animations.doze(dozeAmount)
+ largeClock.animations.doze(dozeAmount)
+ }
smallTimeListener?.update(doze < DOZE_TICKRATE_THRESHOLD)
largeTimeListener?.update(doze < DOZE_TICKRATE_THRESHOLD)
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
index 1980f70..510fcbf 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
@@ -116,7 +116,7 @@
}
@Override
- public void showMessage(CharSequence message, ColorStateList colorState) {
+ public void showMessage(CharSequence message, ColorStateList colorState, boolean animated) {
if (mMessageAreaController == null) {
return;
}
@@ -124,7 +124,7 @@
if (colorState != null) {
mMessageAreaController.setNextMessageColor(colorState);
}
- mMessageAreaController.setMessage(message);
+ mMessageAreaController.setMessage(message, animated);
}
// Allow subclasses to override this behavior
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index 5ba0ad6..a6c782d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -26,8 +26,6 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import kotlin.Unit;
-
/**
* Switch to show plugin clock when plugin is connected, otherwise it will show default clock.
*/
@@ -38,6 +36,8 @@
private static final long CLOCK_OUT_MILLIS = 150;
private static final long CLOCK_IN_MILLIS = 200;
+ public static final long CLOCK_IN_START_DELAY_MILLIS = CLOCK_OUT_MILLIS / 2;
+ private static final long STATUS_AREA_START_DELAY_MILLIS = 50;
private static final long STATUS_AREA_MOVE_MILLIS = 350;
@IntDef({LARGE, SMALL})
@@ -173,7 +173,7 @@
msg.setBool1(useLargeClock);
msg.setBool2(animate);
msg.setBool3(mChildrenAreLaidOut);
- return Unit.INSTANCE;
+ return kotlin.Unit.INSTANCE;
}, (msg) -> "updateClockViews"
+ "; useLargeClock=" + msg.getBool1()
+ "; animate=" + msg.getBool2()
@@ -235,7 +235,7 @@
mClockInAnim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
mClockInAnim.playTogether(ObjectAnimator.ofFloat(in, View.ALPHA, 1f),
ObjectAnimator.ofFloat(in, View.TRANSLATION_Y, direction * mClockSwitchYAmount, 0));
- mClockInAnim.setStartDelay(CLOCK_OUT_MILLIS / 2);
+ mClockInAnim.setStartDelay(CLOCK_IN_START_DELAY_MILLIS);
mClockInAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
mClockInAnim = null;
@@ -247,6 +247,7 @@
mStatusAreaAnim = ObjectAnimator.ofFloat(mStatusArea, View.TRANSLATION_Y,
statusAreaYTranslation);
+ mStatusAreaAnim.setStartDelay(useLargeClock ? STATUS_AREA_START_DELAY_MILLIS : 0L);
mStatusAreaAnim.setDuration(STATUS_AREA_MOVE_MILLIS);
mStatusAreaAnim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
mStatusAreaAnim.addListener(new AnimatorListenerAdapter() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index ad333b7..a34c9fa 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -53,11 +53,11 @@
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.NotificationIconContainer;
import com.android.systemui.util.ViewController;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.settings.SecureSettings;
import java.io.PrintWriter;
import java.util.Locale;
-import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -98,7 +98,7 @@
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
private boolean mOnlyClock = false;
- private final Executor mUiExecutor;
+ private final DelayableExecutor mUiExecutor;
private boolean mCanShowDoubleLineClock = true;
private final ContentObserver mDoubleLineClockObserver = new ContentObserver(null) {
@Override
@@ -133,7 +133,7 @@
LockscreenSmartspaceController smartspaceController,
KeyguardUnlockAnimationController keyguardUnlockAnimationController,
SecureSettings secureSettings,
- @Main Executor uiExecutor,
+ @Main DelayableExecutor uiExecutor,
DumpManager dumpManager,
ClockEventController clockEventController,
@KeyguardClockLog LogBuffer logBuffer) {
@@ -344,7 +344,8 @@
ClockController clock = getClock();
boolean appeared = mView.switchToClock(clockSize, animate);
if (clock != null && animate && appeared && clockSize == LARGE) {
- clock.getAnimations().enter();
+ mUiExecutor.executeDelayed(() -> clock.getLargeClock().getAnimations().enter(),
+ KeyguardClockSwitch.CLOCK_IN_START_DELAY_MILLIS);
}
}
@@ -354,7 +355,8 @@
public void animateFoldToAod(float foldFraction) {
ClockController clock = getClock();
if (clock != null) {
- clock.getAnimations().fold(foldFraction);
+ clock.getSmallClock().getAnimations().fold(foldFraction);
+ clock.getLargeClock().getAnimations().fold(foldFraction);
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt
index 5b0e290..461d390 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardFaceListenModel.kt
@@ -41,10 +41,10 @@
var listeningForFaceAssistant: Boolean = false,
var occludingAppRequestingFaceAuth: Boolean = false,
var postureAllowsListening: Boolean = false,
- var primaryUser: Boolean = false,
var secureCameraLaunched: Boolean = false,
var supportsDetect: Boolean = false,
var switchingUser: Boolean = false,
+ var systemUser: Boolean = false,
var udfpsFingerDown: Boolean = false,
var userNotTrustedOrDetectionIsNeeded: Boolean = false,
) : KeyguardListenModel() {
@@ -69,11 +69,11 @@
keyguardGoingAway.toString(),
listeningForFaceAssistant.toString(),
occludingAppRequestingFaceAuth.toString(),
- primaryUser.toString(),
postureAllowsListening.toString(),
secureCameraLaunched.toString(),
supportsDetect.toString(),
switchingUser.toString(),
+ systemUser.toString(),
alternateBouncerShowing.toString(),
udfpsFingerDown.toString(),
userNotTrustedOrDetectionIsNeeded.toString(),
@@ -109,12 +109,11 @@
keyguardGoingAway = model.keyguardGoingAway
listeningForFaceAssistant = model.listeningForFaceAssistant
occludingAppRequestingFaceAuth = model.occludingAppRequestingFaceAuth
- primaryUser = model.primaryUser
postureAllowsListening = model.postureAllowsListening
secureCameraLaunched = model.secureCameraLaunched
supportsDetect = model.supportsDetect
switchingUser = model.switchingUser
- switchingUser = model.switchingUser
+ systemUser = model.systemUser
udfpsFingerDown = model.udfpsFingerDown
userNotTrustedOrDetectionIsNeeded = model.userNotTrustedOrDetectionIsNeeded
}
@@ -153,11 +152,11 @@
"keyguardGoingAway",
"listeningForFaceAssistant",
"occludingAppRequestingFaceAuth",
- "primaryUser",
"postureAllowsListening",
"secureCameraLaunched",
"supportsDetect",
"switchingUser",
+ "systemUser",
"udfpsBouncerShowing",
"udfpsFingerDown",
"userNotTrustedOrDetectionIsNeeded",
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardFingerprintListenModel.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardFingerprintListenModel.kt
index b8c0ccb..f2685c5 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardFingerprintListenModel.kt
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardFingerprintListenModel.kt
@@ -41,11 +41,11 @@
var keyguardIsVisible: Boolean = false,
var keyguardOccluded: Boolean = false,
var occludingAppRequestingFp: Boolean = false,
- var primaryUser: Boolean = false,
var shouldListenSfpsState: Boolean = false,
var shouldListenForFingerprintAssistant: Boolean = false,
var strongerAuthRequired: Boolean = false,
var switchingUser: Boolean = false,
+ var systemUser: Boolean = false,
var udfps: Boolean = false,
var userDoesNotHaveTrust: Boolean = false,
) : KeyguardListenModel() {
@@ -72,11 +72,11 @@
keyguardIsVisible.toString(),
keyguardOccluded.toString(),
occludingAppRequestingFp.toString(),
- primaryUser.toString(),
shouldListenSfpsState.toString(),
shouldListenForFingerprintAssistant.toString(),
strongerAuthRequired.toString(),
switchingUser.toString(),
+ systemUser.toString(),
udfps.toString(),
userDoesNotHaveTrust.toString(),
)
@@ -112,11 +112,11 @@
keyguardIsVisible = model.keyguardIsVisible
keyguardOccluded = model.keyguardOccluded
occludingAppRequestingFp = model.occludingAppRequestingFp
- primaryUser = model.primaryUser
shouldListenSfpsState = model.shouldListenSfpsState
shouldListenForFingerprintAssistant = model.shouldListenForFingerprintAssistant
strongerAuthRequired = model.strongerAuthRequired
switchingUser = model.switchingUser
+ systemUser = model.systemUser
udfps = model.udfps
userDoesNotHaveTrust = model.userDoesNotHaveTrust
}
@@ -158,11 +158,11 @@
"keyguardIsVisible",
"keyguardOccluded",
"occludingAppRequestingFp",
- "primaryUser",
"shouldListenSidFingerprintState",
"shouldListenForFingerprintAssistant",
"strongAuthRequired",
"switchingUser",
+ "systemUser",
"underDisplayFingerprint",
"userDoesNotHaveTrust",
)
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
index bec8547..a0f5f34 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
@@ -121,7 +121,7 @@
}
@Override
- public void showMessage(CharSequence message, ColorStateList colorState) {
+ public void showMessage(CharSequence message, ColorStateList colorState, boolean animated) {
}
public void startAppearAnimation() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 5c56aab..39225fb 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -333,14 +333,14 @@
}
@Override
- public void showMessage(CharSequence message, ColorStateList colorState) {
+ public void showMessage(CharSequence message, ColorStateList colorState, boolean animated) {
if (mMessageAreaController == null) {
return;
}
if (colorState != null) {
mMessageAreaController.setNextMessageColor(colorState);
}
- mMessageAreaController.setMessage(message);
+ mMessageAreaController.setMessage(message, animated);
}
@Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index db38d34..693268d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -65,7 +65,6 @@
import com.android.keyguard.KeyguardSecurityContainer.SwipeListener;
import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.keyguard.dagger.KeyguardBouncerScope;
-import com.android.settingslib.Utils;
import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
@@ -179,6 +178,7 @@
@Override
public void onUserInput() {
+ mKeyguardFaceAuthInteractor.onPrimaryBouncerUserInput();
mUpdateMonitor.cancelFaceAuth();
}
@@ -307,7 +307,7 @@
FaceAuthApiRequestReason.SWIPE_UP_ON_BOUNCER);
mKeyguardSecurityCallback.userActivity();
if (didFaceAuthRun) {
- showMessage(null, null);
+ showMessage(/* message= */ null, /* colorState= */ null, /* animated= */ true);
}
}
if (mUpdateMonitor.isFaceEnrolled()) {
@@ -459,7 +459,7 @@
showPrimarySecurityScreen(true);
mAdminSecondaryLockScreenController.hide();
if (mCurrentSecurityMode != SecurityMode.None) {
- getCurrentSecurityController().onPause();
+ getCurrentSecurityController(controller -> controller.onPause());
}
mView.onPause();
mView.clearFocus();
@@ -513,13 +513,15 @@
if (reason != PROMPT_REASON_NONE) {
Log.i(TAG, "Strong auth required, reason: " + reason);
}
- getCurrentSecurityController().showPromptReason(reason);
+ getCurrentSecurityController(controller -> controller.showPromptReason(reason));
}
}
- public void showMessage(CharSequence message, ColorStateList colorState) {
+ /** Set message of bouncer title. */
+ public void showMessage(CharSequence message, ColorStateList colorState, boolean animated) {
if (mCurrentSecurityMode != SecurityMode.None) {
- getCurrentSecurityController().showMessage(message, colorState);
+ getCurrentSecurityController(
+ controller -> controller.showMessage(message, colorState, animated));
}
}
@@ -634,7 +636,8 @@
}
SysUiStatsLog.write(SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED, state);
- getCurrentSecurityController().onResume(reason);
+
+ getCurrentSecurityController(controller -> controller.onResume(reason));
}
mView.onResume(
mSecurityModel.getSecurityMode(KeyguardUpdateMonitor.getCurrentUser()),
@@ -645,7 +648,7 @@
public void setInitialMessage() {
CharSequence customMessage = mViewMediatorCallback.consumeCustomMessage();
if (!TextUtils.isEmpty(customMessage)) {
- showMessage(customMessage, Utils.getColorError(getContext()));
+ showMessage(customMessage, /* colorState= */ null, /* animated= */ false);
return;
}
showPromptReason(mViewMediatorCallback.getBouncerPromptReason());
@@ -674,7 +677,7 @@
if (mCurrentSecurityMode != SecurityMode.None) {
setAlpha(1f);
mView.startAppearAnimation(mCurrentSecurityMode);
- getCurrentSecurityController().startAppearAnimation();
+ getCurrentSecurityController(controller -> controller.startAppearAnimation());
}
}
@@ -684,24 +687,23 @@
}
public boolean startDisappearAnimation(Runnable onFinishRunnable) {
- boolean didRunAnimation = false;
-
if (mCurrentSecurityMode != SecurityMode.None) {
mView.startDisappearAnimation(mCurrentSecurityMode);
- didRunAnimation = getCurrentSecurityController().startDisappearAnimation(
- onFinishRunnable);
+ getCurrentSecurityController(
+ controller -> {
+ boolean didRunAnimation = controller.startDisappearAnimation(
+ onFinishRunnable);
+ if (!didRunAnimation && onFinishRunnable != null) {
+ onFinishRunnable.run();
+ }
+ });
}
-
- if (!didRunAnimation && onFinishRunnable != null) {
- onFinishRunnable.run();
- }
-
- return didRunAnimation;
+ return true;
}
public void onStartingToHide() {
if (mCurrentSecurityMode != SecurityMode.None) {
- getCurrentSecurityController().onStartingToHide();
+ getCurrentSecurityController(controller -> controller.onStartingToHide());
}
}
@@ -809,8 +811,9 @@
return finish;
}
+ @Override
public boolean needsInput() {
- return getCurrentSecurityController().needsInput();
+ return false;
}
/**
@@ -938,22 +941,19 @@
return;
}
- KeyguardInputViewController<KeyguardInputView> oldView = getCurrentSecurityController();
+ getCurrentSecurityController(oldView -> oldView.onPause());
- // Emulate Activity life cycle
- if (oldView != null) {
- oldView.onPause();
- }
+ mCurrentSecurityMode = securityMode;
- KeyguardInputViewController<KeyguardInputView> newView = changeSecurityMode(securityMode);
- if (newView != null) {
- newView.onResume(KeyguardSecurityView.VIEW_REVEALED);
- mSecurityViewFlipperController.show(newView);
- configureMode();
- }
+ getCurrentSecurityController(
+ newView -> {
+ newView.onResume(KeyguardSecurityView.VIEW_REVEALED);
+ mSecurityViewFlipperController.show(newView);
+ configureMode();
+ mKeyguardSecurityCallback.onSecurityModeChanged(
+ securityMode, newView != null && newView.needsInput());
- mKeyguardSecurityCallback.onSecurityModeChanged(
- securityMode, newView != null && newView.needsInput());
+ });
}
/**
@@ -986,7 +986,7 @@
mView.initMode(mode, mGlobalSettings, mFalsingManager, mUserSwitcherController,
() -> showMessage(getContext().getString(R.string.keyguard_unlock_to_continue),
- null), mFalsingA11yDelegate);
+ /* colorState= */ null, /* animated= */ true), mFalsingA11yDelegate);
}
public void reportFailedUnlockAttempt(int userId, int timeoutMs) {
@@ -1033,15 +1033,11 @@
}
}
- private KeyguardInputViewController<KeyguardInputView> getCurrentSecurityController() {
- return mSecurityViewFlipperController
- .getSecurityView(mCurrentSecurityMode, mKeyguardSecurityCallback);
- }
-
- private KeyguardInputViewController<KeyguardInputView> changeSecurityMode(
- SecurityMode securityMode) {
- mCurrentSecurityMode = securityMode;
- return getCurrentSecurityController();
+ private void getCurrentSecurityController(
+ KeyguardSecurityViewFlipperController.OnViewInflatedCallback onViewInflatedCallback) {
+ mSecurityViewFlipperController
+ .getSecurityView(mCurrentSecurityMode, mKeyguardSecurityCallback,
+ onViewInflatedCallback);
}
/**
@@ -1091,28 +1087,22 @@
}
private void reloadColors() {
- reinflateViewFlipper(() -> mView.reloadColors());
+ reinflateViewFlipper(controller -> mView.reloadColors());
}
/** Handles density or font scale changes. */
private void onDensityOrFontScaleChanged() {
- reinflateViewFlipper(() -> mView.onDensityOrFontScaleChanged());
+ reinflateViewFlipper(controller -> mView.onDensityOrFontScaleChanged());
}
/**
* Reinflate the view flipper child view.
*/
public void reinflateViewFlipper(
- KeyguardSecurityViewFlipperController.OnViewInflatedListener onViewInflatedListener) {
+ KeyguardSecurityViewFlipperController.OnViewInflatedCallback onViewInflatedListener) {
mSecurityViewFlipperController.clearViews();
- if (mFeatureFlags.isEnabled(Flags.ASYNC_INFLATE_BOUNCER)) {
- mSecurityViewFlipperController.asynchronouslyInflateView(mCurrentSecurityMode,
- mKeyguardSecurityCallback, onViewInflatedListener);
- } else {
- mSecurityViewFlipperController.getSecurityView(mCurrentSecurityMode,
- mKeyguardSecurityCallback);
- onViewInflatedListener.onViewInflated();
- }
+ mSecurityViewFlipperController.asynchronouslyInflateView(mCurrentSecurityMode,
+ mKeyguardSecurityCallback, onViewInflatedListener);
}
/**
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java
index 67d77e5..22ad725 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityView.java
@@ -106,7 +106,7 @@
* @param message the message to show
* @param colorState the color to use
*/
- void showMessage(CharSequence message, ColorStateList colorState);
+ void showMessage(CharSequence message, ColorStateList colorState, boolean animated);
/**
* Starts the animation which should run when the security view appears.
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java
index ddf1199..fbacd68 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipperController.java
@@ -28,7 +28,6 @@
import com.android.keyguard.dagger.KeyguardBouncerScope;
import com.android.systemui.R;
import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
import com.android.systemui.util.ViewController;
import java.util.ArrayList;
@@ -54,23 +53,19 @@
private final Factory mKeyguardSecurityViewControllerFactory;
private final FeatureFlags mFeatureFlags;
- private final ViewMediatorCallback mViewMediatorCallback;
-
@Inject
protected KeyguardSecurityViewFlipperController(KeyguardSecurityViewFlipper view,
LayoutInflater layoutInflater,
AsyncLayoutInflater asyncLayoutInflater,
KeyguardInputViewController.Factory keyguardSecurityViewControllerFactory,
EmergencyButtonController.Factory emergencyButtonControllerFactory,
- FeatureFlags featureFlags,
- ViewMediatorCallback viewMediatorCallback) {
+ FeatureFlags featureFlags) {
super(view);
mKeyguardSecurityViewControllerFactory = keyguardSecurityViewControllerFactory;
mLayoutInflater = layoutInflater;
mEmergencyButtonControllerFactory = emergencyButtonControllerFactory;
mAsyncLayoutInflater = asyncLayoutInflater;
mFeatureFlags = featureFlags;
- mViewMediatorCallback = viewMediatorCallback;
}
@Override
@@ -97,40 +92,17 @@
@VisibleForTesting
- KeyguardInputViewController<KeyguardInputView> getSecurityView(SecurityMode securityMode,
- KeyguardSecurityCallback keyguardSecurityCallback) {
- KeyguardInputViewController<KeyguardInputView> childController = null;
+ void getSecurityView(SecurityMode securityMode,
+ KeyguardSecurityCallback keyguardSecurityCallback,
+ OnViewInflatedCallback onViewInflatedCallback) {
for (KeyguardInputViewController<KeyguardInputView> child : mChildren) {
if (child.getSecurityMode() == securityMode) {
- childController = child;
- break;
+ onViewInflatedCallback.onViewInflated(child);
+ return;
}
}
- if (!mFeatureFlags.isEnabled(Flags.ASYNC_INFLATE_BOUNCER) && childController == null
- && securityMode != SecurityMode.None && securityMode != SecurityMode.Invalid) {
- int layoutId = getLayoutIdFor(securityMode);
- KeyguardInputView view = null;
- if (layoutId != 0) {
- if (DEBUG) Log.v(TAG, "inflating on main thread id = " + layoutId);
- view = (KeyguardInputView) mLayoutInflater.inflate(
- layoutId, mView, false);
- mView.addView(view);
- childController = mKeyguardSecurityViewControllerFactory.create(
- view, securityMode, keyguardSecurityCallback);
- childController.init();
-
- mChildren.add(childController);
- }
- }
-
- if (childController == null) {
- childController = new NullKeyguardInputViewController(
- securityMode, keyguardSecurityCallback,
- mEmergencyButtonControllerFactory.create(null));
- }
-
- return childController;
+ asynchronouslyInflateView(securityMode, keyguardSecurityCallback, onViewInflatedCallback);
}
/**
@@ -143,7 +115,7 @@
*/
public void asynchronouslyInflateView(SecurityMode securityMode,
KeyguardSecurityCallback keyguardSecurityCallback,
- @Nullable OnViewInflatedListener onViewInflatedListener) {
+ @Nullable OnViewInflatedCallback onViewInflatedListener) {
int layoutId = getLayoutIdFor(securityMode);
if (layoutId != 0) {
if (DEBUG) Log.v(TAG, "inflating on bg thread id = " + layoutId);
@@ -156,9 +128,8 @@
keyguardSecurityCallback);
childController.init();
mChildren.add(childController);
- mViewMediatorCallback.setNeedsInput(childController.needsInput());
if (onViewInflatedListener != null) {
- onViewInflatedListener.onViewInflated();
+ onViewInflatedListener.onViewInflated(childController);
}
});
}
@@ -184,33 +155,9 @@
}
}
- private static class NullKeyguardInputViewController
- extends KeyguardInputViewController<KeyguardInputView> {
- protected NullKeyguardInputViewController(SecurityMode securityMode,
- KeyguardSecurityCallback keyguardSecurityCallback,
- EmergencyButtonController emergencyButtonController) {
- super(null, securityMode, keyguardSecurityCallback, emergencyButtonController,
- null);
- }
-
- @Override
- public boolean needsInput() {
- return false;
- }
-
- @Override
- public void onStartingToHide() {
- }
-
- @Override
- protected int getInitialMessageResId() {
- return 0;
- }
- }
-
/** Listener to when view has finished inflation. */
- public interface OnViewInflatedListener {
+ public interface OnViewInflatedCallback {
/** Notifies that view has been inflated */
- void onViewInflated();
+ void onViewInflated(KeyguardInputViewController<KeyguardInputView> controller);
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
index 0cdef4d..edfcb8d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
@@ -349,7 +349,7 @@
ClockController clock = mKeyguardClockSwitchController.getClock();
boolean customClockAnimation = clock != null
- && clock.getConfig().getHasCustomPositionUpdatedAnimation();
+ && clock.getLargeClock().getConfig().getHasCustomPositionUpdatedAnimation();
if (mFeatureFlags.isEnabled(Flags.STEP_CLOCK_ANIMATION) && customClockAnimation) {
// Find the clock, so we can exclude it from this transition.
@@ -436,7 +436,8 @@
return;
}
- clock.getAnimations().onPositionUpdated(from, to, animation.getAnimatedFraction());
+ clock.getLargeClock().getAnimations()
+ .onPositionUpdated(from, to, animation.getAnimatedFraction());
});
return anim;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index c48aaf4..10c08bc 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -297,7 +297,7 @@
private final Context mContext;
private final UserTracker mUserTracker;
private final KeyguardUpdateMonitorLogger mLogger;
- private final boolean mIsPrimaryUser;
+ private final boolean mIsSystemUser;
private final AuthController mAuthController;
private final UiEventLogger mUiEventLogger;
private final Set<Integer> mFaceAcquiredInfoIgnoreList;
@@ -1771,10 +1771,6 @@
MSG_TIMEZONE_UPDATE, intent.getStringExtra(Intent.EXTRA_TIMEZONE));
mHandler.sendMessage(msg);
} else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- // Clear incompatible charger state when device is unplugged.
- if (!BatteryStatus.isPluggedIn(intent)) {
- mIncompatibleCharger = false;
- }
final Message msg = mHandler.obtainMessage(
MSG_BATTERY_UPDATE, new BatteryStatus(intent, mIncompatibleCharger));
mHandler.sendMessage(msg);
@@ -2526,7 +2522,7 @@
updateBiometricListeningState(BIOMETRIC_ACTION_UPDATE, FACE_AUTH_UPDATED_ON_KEYGUARD_INIT);
TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
- mIsPrimaryUser = mUserManager.isPrimaryUser();
+ mIsSystemUser = mUserManager.isSystemUser();
int user = mUserTracker.getUserId();
mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user));
mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled();
@@ -2972,7 +2968,7 @@
|| (mKeyguardOccluded && userDoesNotHaveTrust && mKeyguardShowing
&& (mOccludingAppRequestingFp || isUdfps || mAlternateBouncerShowing));
- // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
+ // Only listen if this KeyguardUpdateMonitor belongs to the system user. There is an
// instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
final boolean biometricEnabledForUser = mBiometricEnabledForUser.get(user);
final boolean userCanSkipBouncer = getUserCanSkipBouncer(user);
@@ -2981,7 +2977,7 @@
!mSwitchingUser
&& !fingerprintDisabledForUser
&& (!mKeyguardGoingAway || !mDeviceInteractive)
- && mIsPrimaryUser
+ && mIsSystemUser
&& biometricEnabledForUser
&& !isUserInLockdown(user);
final boolean strongerAuthRequired = !isUnlockingWithFingerprintAllowed();
@@ -3025,11 +3021,11 @@
isKeyguardVisible(),
mKeyguardOccluded,
mOccludingAppRequestingFp,
- mIsPrimaryUser,
shouldListenSideFpsState,
shouldListenForFingerprintAssistant,
strongerAuthRequired,
mSwitchingUser,
+ mIsSystemUser,
isUdfps,
userDoesNotHaveTrust));
@@ -3074,7 +3070,7 @@
final boolean shouldListenForFaceAssistant = shouldListenForFaceAssistant();
final boolean isUdfpsFingerDown = mAuthController.isUdfpsFingerDown();
final boolean isPostureAllowedForFaceAuth = doesPostureAllowFaceAuth(mPostureState);
- // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
+ // Only listen if this KeyguardUpdateMonitor belongs to the system user. There is an
// instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
final boolean shouldListen =
(mPrimaryBouncerFullyShown
@@ -3086,7 +3082,7 @@
|| mAlternateBouncerShowing)
&& !mSwitchingUser && !faceDisabledForUser && userNotTrustedOrDetectionIsNeeded
&& !mKeyguardGoingAway && biometricEnabledForUser
- && faceAuthAllowedOrDetectionIsNeeded && mIsPrimaryUser
+ && faceAuthAllowedOrDetectionIsNeeded && mIsSystemUser
&& (!mSecureCameraLaunched || mAlternateBouncerShowing)
&& faceAndFpNotAuthenticated
&& !mGoingToSleep
@@ -3112,10 +3108,10 @@
shouldListenForFaceAssistant,
mOccludingAppRequestingFace,
isPostureAllowedForFaceAuth,
- mIsPrimaryUser,
mSecureCameraLaunched,
supportsDetect,
mSwitchingUser,
+ mIsSystemUser,
isUdfpsFingerDown,
userNotTrustedOrDetectionIsNeeded));
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index 7661b8d..281067d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -23,8 +23,8 @@
import androidx.annotation.Nullable;
import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -178,7 +178,7 @@
* Registers the CentralSurfaces to which this Keyguard View is mounted.
*/
void registerCentralSurfaces(CentralSurfaces centralSurfaces,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
@Nullable ShadeExpansionStateManager shadeExpansionStateManager,
BiometricUnlockController biometricUnlockController,
View notificationContainer,
diff --git a/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java b/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
index 334bb1e..9308773 100644
--- a/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
+++ b/packages/SystemUI/src/com/android/keyguard/ViewMediatorCallback.java
@@ -96,6 +96,11 @@
CharSequence consumeCustomMessage();
/**
+ * Sets a message to be consumed the next time the bouncer shows up.
+ */
+ void setCustomMessage(CharSequence customMessage);
+
+ /**
* Call when cancel button is pressed in bouncer.
*/
void onCancelClicked();
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java
index cde8ff7..6740375 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/ClockRegistryModule.java
@@ -27,7 +27,9 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
+import com.android.systemui.log.dagger.KeyguardClockLog;
import com.android.systemui.plugins.PluginManager;
+import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.shared.clocks.ClockRegistry;
import com.android.systemui.shared.clocks.DefaultClockProvider;
@@ -51,7 +53,8 @@
@Background CoroutineDispatcher bgDispatcher,
FeatureFlags featureFlags,
@Main Resources resources,
- LayoutInflater layoutInflater) {
+ LayoutInflater layoutInflater,
+ @KeyguardClockLog LogBuffer logBuffer) {
ClockRegistry registry = new ClockRegistry(
context,
pluginManager,
@@ -62,6 +65,7 @@
/* handleAllUsers= */ true,
new DefaultClockProvider(context, layoutInflater, resources),
context.getString(R.string.lockscreen_clock_id_fallback),
+ logBuffer,
/* keepAllLoaded = */ false,
/* subTag = */ "System");
registry.registerListeners();
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
index d01c98a..91dd1d6 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
@@ -17,7 +17,7 @@
package com.android.keyguard.dagger;
import com.android.keyguard.KeyguardStatusViewController;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewStateProvider;
import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController;
@@ -37,8 +37,8 @@
interface Factory {
KeyguardStatusBarViewComponent build(
@BindsInstance KeyguardStatusBarView view,
- @BindsInstance NotificationPanelViewController.NotificationPanelViewStateProvider
- notificationPanelViewStateProvider);
+ @BindsInstance ShadeViewStateProvider
+ shadeViewStateProvider);
}
/** Builds a {@link KeyguardStatusViewController}. */
diff --git a/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java b/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java
index 7af6f66..401f6c9 100644
--- a/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/ActivityStarterDelegate.java
@@ -26,12 +26,12 @@
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.statusbar.phone.CentralSurfaces;
+import dagger.Lazy;
+
import java.util.Optional;
import javax.inject.Inject;
-import dagger.Lazy;
-
/**
* Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but
* delegates to an actual implementation (CentralSurfaces).
@@ -142,6 +142,14 @@
}
@Override
+ public void postStartActivityDismissingKeyguard(Intent intent, int delay,
+ @Nullable ActivityLaunchAnimator.Controller animationController, String customMessage) {
+ mActualStarterOptionalLazy.get().ifPresent(
+ starter -> starter.postStartActivityDismissingKeyguard(intent, delay,
+ animationController, customMessage));
+ }
+
+ @Override
public void postStartActivityDismissingKeyguard(PendingIntent intent,
ActivityLaunchAnimator.Controller animationController) {
mActualStarterOptionalLazy.get().ifPresent(
@@ -161,4 +169,12 @@
mActualStarterOptionalLazy.get().ifPresent(
starter -> starter.dismissKeyguardThenExecute(action, cancel, afterKeyguardGone));
}
+
+ @Override
+ public void dismissKeyguardThenExecute(OnDismissAction action, @Nullable Runnable cancel,
+ boolean afterKeyguardGone, String customMessage) {
+ mActualStarterOptionalLazy.get().ifPresent(
+ starter -> starter.dismissKeyguardThenExecute(action, cancel, afterKeyguardGone,
+ customMessage));
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java
index b6ee4cb..3349fe5 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/MagnificationSettingsController.java
@@ -24,6 +24,7 @@
import android.content.Context;
import android.content.res.Configuration;
import android.util.Range;
+import android.view.WindowManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
@@ -68,14 +69,18 @@
@NonNull Callback settingsControllerCallback,
SecureSettings secureSettings,
WindowMagnificationSettings windowMagnificationSettings) {
- mContext = context;
+ mContext = context.createWindowContext(
+ context.getDisplay(),
+ WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
+ null);
+ mContext.setTheme(com.android.systemui.R.style.Theme_SystemUI);
mDisplayId = mContext.getDisplayId();
- mConfiguration = new Configuration(context.getResources().getConfiguration());
+ mConfiguration = new Configuration(mContext.getResources().getConfiguration());
mSettingsControllerCallback = settingsControllerCallback;
if (windowMagnificationSettings != null) {
mWindowMagnificationSettings = windowMagnificationSettings;
} else {
- mWindowMagnificationSettings = new WindowMagnificationSettings(context,
+ mWindowMagnificationSettings = new WindowMagnificationSettings(mContext,
mWindowMagnificationSettingsCallback,
sfVsyncFrameProvider, secureSettings);
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
index 71c5f24..6e8275f 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
@@ -559,7 +559,7 @@
final LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
- LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY,
+ LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSPARENT);
params.gravity = Gravity.TOP | Gravity.START;
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt b/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt
new file mode 100644
index 0000000..ae9f57f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/data/repository/AccessibilityRepository.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility.data.repository
+
+import android.view.accessibility.AccessibilityManager
+import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import dagger.Module
+import dagger.Provides
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+
+/** Exposes accessibility-related state. */
+interface AccessibilityRepository {
+ /** @see [AccessibilityManager.isTouchExplorationEnabled] */
+ val isTouchExplorationEnabled: Flow<Boolean>
+
+ companion object {
+ operator fun invoke(a11yManager: AccessibilityManager): AccessibilityRepository =
+ AccessibilityRepositoryImpl(a11yManager)
+ }
+}
+
+private class AccessibilityRepositoryImpl(
+ manager: AccessibilityManager,
+) : AccessibilityRepository {
+ override val isTouchExplorationEnabled: Flow<Boolean> =
+ conflatedCallbackFlow {
+ val listener = TouchExplorationStateChangeListener(::trySend)
+ manager.addTouchExplorationStateChangeListener(listener)
+ trySend(manager.isTouchExplorationEnabled)
+ awaitClose { manager.removeTouchExplorationStateChangeListener(listener) }
+ }
+ .distinctUntilChanged()
+}
+
+@Module
+object AccessibilityRepositoryModule {
+ @Provides fun provideRepo(manager: AccessibilityManager) = AccessibilityRepository(manager)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/domain/interactor/AccessibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/accessibility/domain/interactor/AccessibilityInteractor.kt
new file mode 100644
index 0000000..968ce0d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/domain/interactor/AccessibilityInteractor.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility.domain.interactor
+
+import com.android.systemui.accessibility.data.repository.AccessibilityRepository
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+@SysUISingleton
+class AccessibilityInteractor
+@Inject
+constructor(
+ private val a11yRepo: AccessibilityRepository,
+) {
+ /** @see [android.view.accessibility.AccessibilityManager.isTouchExplorationEnabled] */
+ val isTouchExplorationEnabled: Flow<Boolean>
+ get() = a11yRepo.isTouchExplorationEnabled
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceView.kt
index 7f5a67f..57ffd24 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceView.kt
@@ -19,6 +19,8 @@
import android.content.Context
import android.hardware.biometrics.BiometricAuthenticator.Modality
import android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE
+import android.hardware.biometrics.BiometricConstants
+import android.hardware.face.FaceManager
import android.util.AttributeSet
import com.android.systemui.R
@@ -27,6 +29,7 @@
context: Context,
attrs: AttributeSet?
) : AuthBiometricFingerprintView(context, attrs) {
+ var isFaceClass3 = false
constructor (context: Context) : this(context, null)
@@ -34,10 +37,22 @@
override fun forceRequireConfirmation(@Modality modality: Int) = modality == TYPE_FACE
- override fun ignoreUnsuccessfulEventsFrom(@Modality modality: Int) = modality == TYPE_FACE
+ override fun ignoreUnsuccessfulEventsFrom(@Modality modality: Int, unsuccessfulReason: String) =
+ modality == TYPE_FACE && !(isFaceClass3 && isLockoutErrorString(unsuccessfulReason))
override fun onPointerDown(failedModalities: Set<Int>) = failedModalities.contains(TYPE_FACE)
override fun createIconController(): AuthIconController =
AuthBiometricFingerprintAndFaceIconController(mContext, mIconView, mIconViewOverlay)
+
+ private fun isLockoutErrorString(unsuccessfulReason: String) =
+ unsuccessfulReason == FaceManager.getErrorString(
+ mContext,
+ BiometricConstants.BIOMETRIC_ERROR_LOCKOUT,
+ 0 /*vendorCode */
+ ) || unsuccessfulReason == FaceManager.getErrorString(
+ mContext,
+ BiometricConstants.BIOMETRIC_ERROR_LOCKOUT_PERMANENT,
+ 0 /*vendorCode */
+ )
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
index 13bb6d3..e04dd06 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
@@ -258,7 +258,8 @@
}
/** Ignore all events from this (secondary) modality except successful authentication. */
- protected boolean ignoreUnsuccessfulEventsFrom(@Modality int modality) {
+ protected boolean ignoreUnsuccessfulEventsFrom(@Modality int modality,
+ String unsuccessfulReason) {
return false;
}
@@ -541,7 +542,7 @@
*/
public void onAuthenticationFailed(
@Modality int modality, @Nullable String failureReason) {
- if (ignoreUnsuccessfulEventsFrom(modality)) {
+ if (ignoreUnsuccessfulEventsFrom(modality, failureReason)) {
return;
}
@@ -556,7 +557,7 @@
* @param error message
*/
public void onError(@Modality int modality, String error) {
- if (ignoreUnsuccessfulEventsFrom(modality)) {
+ if (ignoreUnsuccessfulEventsFrom(modality, error)) {
return;
}
@@ -586,7 +587,7 @@
* @param help message
*/
public void onHelp(@Modality int modality, String help) {
- if (ignoreUnsuccessfulEventsFrom(modality)) {
+ if (ignoreUnsuccessfulEventsFrom(modality, help)) {
return;
}
if (mSize != AuthDialog.SIZE_MEDIUM) {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
index 517f94f..aeebb01 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
@@ -18,6 +18,7 @@
import static android.hardware.biometrics.BiometricManager.BIOMETRIC_MULTI_SENSOR_DEFAULT;
import static android.hardware.biometrics.BiometricManager.BiometricMultiSensorMode;
+import static android.hardware.biometrics.SensorProperties.STRENGTH_STRONG;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_BIOMETRIC_PROMPT_TRANSITION;
@@ -383,6 +384,8 @@
fingerprintAndFaceView.setSensorProperties(fpProperties);
fingerprintAndFaceView.setScaleFactorProvider(config.mScaleProvider);
fingerprintAndFaceView.updateOverrideIconLayoutParamsSize();
+ fingerprintAndFaceView.setFaceClass3(
+ faceProperties.sensorStrength == STRENGTH_STRONG);
mBiometricView = fingerprintAndFaceView;
} else if (fpProperties != null) {
final AuthBiometricFingerprintView fpView =
@@ -877,7 +880,7 @@
final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
- WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL,
+ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG,
windowFlags,
PixelFormat.TRANSLUCENT);
lp.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index 0999229..6eb3c70 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -1349,7 +1349,7 @@
default void onEnrollmentsChanged(@Modality int modality) {}
/**
- * Called when UDFPS enrollments have changed. This is called after boot and on changes to
+ * Called when enrollments have changed. This is called after boot and on changes to
* enrollment.
*/
default void onEnrollmentsChanged(
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationBroadcastReceiver.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationBroadcastReceiver.java
new file mode 100644
index 0000000..c22a66b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationBroadcastReceiver.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.biometrics.BiometricSourceType;
+
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+import javax.inject.Inject;
+
+/**
+ * Receives broadcasts sent by {@link BiometricNotificationService} and takes
+ * the appropriate action.
+ */
+@SysUISingleton
+public class BiometricNotificationBroadcastReceiver extends BroadcastReceiver {
+ static final String ACTION_SHOW_FACE_REENROLL_DIALOG = "face_action_show_reenroll_dialog";
+ static final String ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG =
+ "fingerprint_action_show_reenroll_dialog";
+
+ private static final String TAG = "BiometricNotificationBroadcastReceiver";
+
+ private final Context mContext;
+ private final BiometricNotificationDialogFactory mNotificationDialogFactory;
+ @Inject
+ BiometricNotificationBroadcastReceiver(Context context,
+ BiometricNotificationDialogFactory notificationDialogFactory) {
+ mContext = context;
+ mNotificationDialogFactory = notificationDialogFactory;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+
+ switch (action) {
+ case ACTION_SHOW_FACE_REENROLL_DIALOG:
+ mNotificationDialogFactory.createReenrollDialog(mContext,
+ new SystemUIDialog(mContext),
+ BiometricSourceType.FACE)
+ .show();
+ break;
+ case ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG:
+ mNotificationDialogFactory.createReenrollDialog(
+ mContext,
+ new SystemUIDialog(mContext),
+ BiometricSourceType.FINGERPRINT)
+ .show();
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java
new file mode 100644
index 0000000..3e6508c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationDialogFactory.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.face.Face;
+import android.hardware.face.FaceManager;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.systemui.R;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+import javax.inject.Inject;
+
+/**
+ * Manages the creation of dialogs to be shown for biometric re enroll notifications.
+ */
+@SysUISingleton
+public class BiometricNotificationDialogFactory {
+ private static final String TAG = "BiometricNotificationDialogFactory";
+
+ @Inject
+ BiometricNotificationDialogFactory() {}
+
+ Dialog createReenrollDialog(final Context context, final SystemUIDialog sysuiDialog,
+ BiometricSourceType biometricSourceType) {
+ if (biometricSourceType == BiometricSourceType.FACE) {
+ sysuiDialog.setTitle(context.getString(R.string.face_re_enroll_dialog_title));
+ sysuiDialog.setMessage(context.getString(R.string.face_re_enroll_dialog_content));
+ } else if (biometricSourceType == BiometricSourceType.FINGERPRINT) {
+ FingerprintManager fingerprintManager = context.getSystemService(
+ FingerprintManager.class);
+ sysuiDialog.setTitle(context.getString(R.string.fingerprint_re_enroll_dialog_title));
+ if (fingerprintManager.getEnrolledFingerprints().size() == 1) {
+ sysuiDialog.setMessage(context.getString(
+ R.string.fingerprint_re_enroll_dialog_content_singular));
+ } else {
+ sysuiDialog.setMessage(context.getString(
+ R.string.fingerprint_re_enroll_dialog_content));
+ }
+ }
+
+ sysuiDialog.setPositiveButton(R.string.biometric_re_enroll_dialog_confirm,
+ (dialog, which) -> onReenrollDialogConfirm(context, biometricSourceType));
+ sysuiDialog.setNegativeButton(R.string.biometric_re_enroll_dialog_cancel,
+ (dialog, which) -> {});
+ return sysuiDialog;
+ }
+
+ private static Dialog createReenrollFailureDialog(Context context,
+ BiometricSourceType biometricType) {
+ final SystemUIDialog sysuiDialog = new SystemUIDialog(context);
+
+ if (biometricType == BiometricSourceType.FACE) {
+ sysuiDialog.setMessage(context.getString(
+ R.string.face_reenroll_failure_dialog_content));
+ } else if (biometricType == BiometricSourceType.FINGERPRINT) {
+ sysuiDialog.setMessage(context.getString(
+ R.string.fingerprint_reenroll_failure_dialog_content));
+ }
+
+ sysuiDialog.setPositiveButton(R.string.ok, (dialog, which) -> {});
+ return sysuiDialog;
+ }
+
+ private static void onReenrollDialogConfirm(final Context context,
+ BiometricSourceType biometricType) {
+ if (biometricType == BiometricSourceType.FACE) {
+ reenrollFace(context);
+ } else if (biometricType == BiometricSourceType.FINGERPRINT) {
+ reenrollFingerprint(context);
+ }
+ }
+
+ private static void reenrollFingerprint(Context context) {
+ FingerprintManager fingerprintManager = context.getSystemService(FingerprintManager.class);
+ if (fingerprintManager == null) {
+ Log.e(TAG, "Not launching enrollment. Fingerprint manager was null!");
+ createReenrollFailureDialog(context, BiometricSourceType.FINGERPRINT).show();
+ return;
+ }
+
+ if (!fingerprintManager.hasEnrolledTemplates(context.getUserId())) {
+ createReenrollFailureDialog(context, BiometricSourceType.FINGERPRINT).show();
+ return;
+ }
+
+ // Remove all enrolled fingerprint. Launch enrollment if successful.
+ fingerprintManager.removeAll(context.getUserId(),
+ new FingerprintManager.RemovalCallback() {
+ boolean mDidShowFailureDialog;
+
+ @Override
+ public void onRemovalError(Fingerprint fingerprint, int errMsgId,
+ CharSequence errString) {
+ Log.e(TAG, "Not launching enrollment."
+ + "Failed to remove existing face(s).");
+ if (!mDidShowFailureDialog) {
+ mDidShowFailureDialog = true;
+ createReenrollFailureDialog(context, BiometricSourceType.FINGERPRINT)
+ .show();
+ }
+ }
+
+ @Override
+ public void onRemovalSucceeded(Fingerprint fingerprint, int remaining) {
+ if (!mDidShowFailureDialog && remaining == 0) {
+ Intent intent = new Intent(Settings.ACTION_FINGERPRINT_ENROLL);
+ intent.setPackage("com.android.settings");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+ }
+ });
+ }
+
+ private static void reenrollFace(Context context) {
+ FaceManager faceManager = context.getSystemService(FaceManager.class);
+ if (faceManager == null) {
+ Log.e(TAG, "Not launching enrollment. Face manager was null!");
+ createReenrollFailureDialog(context, BiometricSourceType.FACE).show();
+ return;
+ }
+
+ if (!faceManager.hasEnrolledTemplates(context.getUserId())) {
+ createReenrollFailureDialog(context, BiometricSourceType.FACE).show();
+ return;
+ }
+
+ // Remove all enrolled faces. Launch enrollment if successful.
+ faceManager.removeAll(context.getUserId(),
+ new FaceManager.RemovalCallback() {
+ boolean mDidShowFailureDialog;
+
+ @Override
+ public void onRemovalError(Face face, int errMsgId, CharSequence errString) {
+ Log.e(TAG, "Not launching enrollment."
+ + "Failed to remove existing face(s).");
+ if (!mDidShowFailureDialog) {
+ mDidShowFailureDialog = true;
+ createReenrollFailureDialog(context, BiometricSourceType.FACE).show();
+ }
+ }
+
+ @Override
+ public void onRemovalSucceeded(Face face, int remaining) {
+ if (!mDidShowFailureDialog && remaining == 0) {
+ Intent intent = new Intent("android.settings.FACE_ENROLL");
+ intent.setPackage("com.android.settings");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+ }
+ });
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
new file mode 100644
index 0000000..4b17be3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import static android.app.PendingIntent.FLAG_IMMUTABLE;
+
+import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FACE_REENROLL_DIALOG;
+import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Log;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
+import com.android.systemui.CoreStartable;
+import com.android.systemui.R;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+
+import javax.inject.Inject;
+
+/**
+ * Handles showing system notifications related to biometric unlock.
+ */
+@SysUISingleton
+public class BiometricNotificationService implements CoreStartable {
+
+ private static final String TAG = "BiometricNotificationService";
+ private static final String CHANNEL_ID = "BiometricHiPriNotificationChannel";
+ private static final String CHANNEL_NAME = " Biometric Unlock";
+ private static final int FACE_NOTIFICATION_ID = 1;
+ private static final int FINGERPRINT_NOTIFICATION_ID = 2;
+ private static final long SHOW_NOTIFICATION_DELAY_MS = 5_000L; // 5 seconds
+ private static final int REENROLL_REQUIRED = 1;
+ private static final int REENROLL_NOT_REQUIRED = 0;
+
+ private final Context mContext;
+ private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ private final KeyguardStateController mKeyguardStateController;
+ private final Handler mHandler;
+ private final NotificationManager mNotificationManager;
+ private final BiometricNotificationBroadcastReceiver mBroadcastReceiver;
+ private NotificationChannel mNotificationChannel;
+ private boolean mFaceNotificationQueued;
+ private boolean mFingerprintNotificationQueued;
+ private boolean mFingerprintReenrollRequired;
+
+ private final KeyguardStateController.Callback mKeyguardStateControllerCallback =
+ new KeyguardStateController.Callback() {
+ private boolean mIsShowing = true;
+ @Override
+ public void onKeyguardShowingChanged() {
+ if (mKeyguardStateController.isShowing()
+ || mKeyguardStateController.isShowing() == mIsShowing) {
+ mIsShowing = mKeyguardStateController.isShowing();
+ return;
+ }
+ mIsShowing = mKeyguardStateController.isShowing();
+ if (isFaceReenrollRequired(mContext) && !mFaceNotificationQueued) {
+ queueFaceReenrollNotification();
+ }
+ if (mFingerprintReenrollRequired && !mFingerprintNotificationQueued) {
+ mFingerprintReenrollRequired = false;
+ queueFingerprintReenrollNotification();
+ }
+ }
+ };
+
+ private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
+ new KeyguardUpdateMonitorCallback() {
+ @Override
+ public void onBiometricError(int msgId, String errString,
+ BiometricSourceType biometricSourceType) {
+ if (msgId == BiometricFaceConstants.BIOMETRIC_ERROR_RE_ENROLL
+ && biometricSourceType == BiometricSourceType.FACE) {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_REQUIRED,
+ UserHandle.USER_CURRENT);
+ } else if (msgId == BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL
+ && biometricSourceType == BiometricSourceType.FINGERPRINT) {
+ mFingerprintReenrollRequired = true;
+ }
+ }
+ };
+
+
+ @Inject
+ public BiometricNotificationService(Context context,
+ KeyguardUpdateMonitor keyguardUpdateMonitor,
+ KeyguardStateController keyguardStateController,
+ Handler handler, NotificationManager notificationManager,
+ BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver) {
+ mContext = context;
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mKeyguardStateController = keyguardStateController;
+ mHandler = handler;
+ mNotificationManager = notificationManager;
+ mBroadcastReceiver = biometricNotificationBroadcastReceiver;
+ }
+
+ @Override
+ public void start() {
+ mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
+ mKeyguardStateController.addCallback(mKeyguardStateControllerCallback);
+ mNotificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME,
+ NotificationManager.IMPORTANCE_HIGH);
+ final IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG);
+ intentFilter.addAction(ACTION_SHOW_FACE_REENROLL_DIALOG);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter,
+ Context.RECEIVER_EXPORTED_UNAUDITED);
+ }
+
+ private void queueFaceReenrollNotification() {
+ mFaceNotificationQueued = true;
+ final String title = mContext.getString(R.string.face_re_enroll_notification_title);
+ final String content = mContext.getString(
+ R.string.biometric_re_enroll_notification_content);
+ final String name = mContext.getString(R.string.face_re_enroll_notification_name);
+ mHandler.postDelayed(
+ () -> showNotification(ACTION_SHOW_FACE_REENROLL_DIALOG, title, content, name,
+ FACE_NOTIFICATION_ID),
+ SHOW_NOTIFICATION_DELAY_MS);
+ }
+
+ private void queueFingerprintReenrollNotification() {
+ mFingerprintNotificationQueued = true;
+ final String title = mContext.getString(R.string.fingerprint_re_enroll_notification_title);
+ final String content = mContext.getString(
+ R.string.biometric_re_enroll_notification_content);
+ final String name = mContext.getString(R.string.fingerprint_re_enroll_notification_name);
+ mHandler.postDelayed(
+ () -> showNotification(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG, title, content,
+ name, FINGERPRINT_NOTIFICATION_ID),
+ SHOW_NOTIFICATION_DELAY_MS);
+ }
+
+ private void showNotification(String action, CharSequence title, CharSequence content,
+ CharSequence name, int notificationId) {
+ if (notificationId == FACE_NOTIFICATION_ID) {
+ mFaceNotificationQueued = false;
+ } else if (notificationId == FINGERPRINT_NOTIFICATION_ID) {
+ mFingerprintNotificationQueued = false;
+ }
+
+ if (mNotificationManager == null) {
+ Log.e(TAG, "Failed to show notification "
+ + action + ". Notification manager is null!");
+ return;
+ }
+
+ final Intent onClickIntent = new Intent(action);
+ final PendingIntent onClickPendingIntent = PendingIntent.getBroadcastAsUser(mContext,
+ 0 /* requestCode */, onClickIntent, FLAG_IMMUTABLE, UserHandle.CURRENT);
+
+ final Notification notification = new Notification.Builder(mContext, CHANNEL_ID)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setSmallIcon(com.android.internal.R.drawable.ic_lock)
+ .setContentTitle(title)
+ .setContentText(content)
+ .setSubText(name)
+ .setContentIntent(onClickPendingIntent)
+ .setAutoCancel(true)
+ .setLocalOnly(true)
+ .setOnlyAlertOnce(true)
+ .setVisibility(Notification.VISIBILITY_SECRET)
+ .build();
+
+ mNotificationManager.createNotificationChannel(mNotificationChannel);
+ mNotificationManager.notifyAsUser(TAG, notificationId, notification, UserHandle.CURRENT);
+ }
+
+ private boolean isFaceReenrollRequired(Context context) {
+ final int settingValue =
+ Settings.Secure.getIntForUser(context.getContentResolver(),
+ Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_NOT_REQUIRED,
+ UserHandle.USER_CURRENT);
+ return settingValue == REENROLL_REQUIRED;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt
index eb5d23a..4319f01 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/SideFpsController.kt
@@ -144,8 +144,7 @@
orientationListener.enable()
}
}
- @VisibleForTesting
- internal var overlayOffsets: SensorLocationInternal = SensorLocationInternal.DEFAULT
+ @VisibleForTesting var overlayOffsets: SensorLocationInternal = SensorLocationInternal.DEFAULT
private val overlayViewParams =
WindowManager.LayoutParams(
@@ -297,7 +296,7 @@
}
@VisibleForTesting
- internal fun updateOverlayParams(display: Display, bounds: Rect) {
+ fun updateOverlayParams(display: Display, bounds: Rect) {
val isNaturalOrientation = display.isNaturalOrientation()
val isDefaultOrientation =
if (isReverseDefaultRotation) !isNaturalOrientation else isNaturalOrientation
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.kt
index 5101ad4..3b50bbc 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.kt
@@ -257,7 +257,7 @@
}
@VisibleForTesting
- internal suspend fun listenForBouncerExpansion(scope: CoroutineScope): Job {
+ suspend fun listenForBouncerExpansion(scope: CoroutineScope): Job {
return scope.launch {
primaryBouncerInteractor.bouncerExpansion.collect { bouncerExpansion: Float ->
inputBouncerExpansion = bouncerExpansion
@@ -268,7 +268,7 @@
}
@VisibleForTesting
- internal suspend fun listenForAlternateBouncerVisibility(scope: CoroutineScope): Job {
+ suspend fun listenForAlternateBouncerVisibility(scope: CoroutineScope): Job {
return scope.launch {
alternateBouncerInteractor.isVisible.collect { isVisible: Boolean ->
showUdfpsBouncer(isVisible)
diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastSender.kt b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastSender.kt
index f9613d50..f47275f8 100644
--- a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastSender.kt
+++ b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastSender.kt
@@ -24,16 +24,13 @@
@Background private val bgExecutor: Executor
) {
- private val WAKE_LOCK_TAG = "SysUI:BroadcastSender"
- private val WAKE_LOCK_SEND_REASON = "sendInBackground"
-
/**
* Sends broadcast via [Context.sendBroadcast] on background thread to avoid blocking
* synchronous binder call.
*/
@AnyThread
fun sendBroadcast(intent: Intent) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcast(intent)
}
}
@@ -44,7 +41,7 @@
*/
@AnyThread
fun sendBroadcast(intent: Intent, receiverPermission: String?) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcast(intent, receiverPermission)
}
}
@@ -55,7 +52,7 @@
*/
@AnyThread
fun sendBroadcastAsUser(intent: Intent, userHandle: UserHandle) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcastAsUser(intent, userHandle)
}
}
@@ -66,7 +63,7 @@
*/
@AnyThread
fun sendBroadcastAsUser(intent: Intent, userHandle: UserHandle, receiverPermission: String?) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcastAsUser(intent, userHandle, receiverPermission)
}
}
@@ -82,7 +79,7 @@
receiverPermission: String?,
options: Bundle?
) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcastAsUser(intent, userHandle, receiverPermission, options)
}
}
@@ -98,7 +95,7 @@
receiverPermission: String?,
appOp: Int
) {
- sendInBackground {
+ sendInBackground("$intent") {
context.sendBroadcastAsUser(intent, userHandle, receiverPermission, appOp)
}
}
@@ -108,7 +105,7 @@
*/
@AnyThread
fun closeSystemDialogs() {
- sendInBackground {
+ sendInBackground("closeSystemDialogs") {
context.closeSystemDialogs()
}
}
@@ -116,17 +113,21 @@
/**
* Dispatches parameter on background executor while holding a wakelock.
*/
- private fun sendInBackground(callable: () -> Unit) {
+ private fun sendInBackground(reason: String, callable: () -> Unit) {
val broadcastWakelock = wakeLockBuilder.setTag(WAKE_LOCK_TAG)
.setMaxTimeout(5000)
.build()
- broadcastWakelock.acquire(WAKE_LOCK_SEND_REASON)
+ broadcastWakelock.acquire(reason)
bgExecutor.execute {
try {
callable.invoke()
} finally {
- broadcastWakelock.release(WAKE_LOCK_SEND_REASON)
+ broadcastWakelock.release(reason)
}
}
}
+
+ companion object {
+ private const val WAKE_LOCK_TAG = "SysUI:BroadcastSender"
+ }
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
index 98a3e4b..11ef749 100644
--- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
@@ -34,7 +34,6 @@
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.shared.recents.utilities.Utilities;
-import com.android.systemui.surfaceeffects.ripple.RippleAnimationConfig;
import com.android.systemui.surfaceeffects.ripple.RippleShader;
import com.android.systemui.surfaceeffects.ripple.RippleShader.RippleShape;
import com.android.systemui.surfaceeffects.ripple.RippleView;
@@ -177,7 +176,7 @@
mRippleView.setBlur(6.5f, 2.5f);
} else {
mRippleView.setDuration(CIRCLE_RIPPLE_ANIMATION_DURATION);
- mRippleView.setColor(color, RippleAnimationConfig.RIPPLE_DEFAULT_ALPHA);
+ mRippleView.setColor(color, RippleShader.RIPPLE_DEFAULT_ALPHA);
}
OnAttachStateChangeListener listener = new OnAttachStateChangeListener() {
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
index 6670108..08e1e9a 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
@@ -26,9 +26,6 @@
void onSuccessfulUnlock();
/** */
- void onNotificationActive();
-
- /** */
void setShowingAod(boolean showingAod);
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
index cc25368..f335d1d 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
@@ -25,10 +25,6 @@
}
@Override
- public void onNotificationActive() {
- }
-
- @Override
public void setShowingAod(boolean showingAod) {
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
index 8bdef13..6a021f6 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
@@ -174,10 +174,6 @@
}
@Override
- public void onNotificationActive() {
- }
-
- @Override
public void setShowingAod(boolean showingAod) {
mShowingAod = showingAod;
updateSessionActive();
diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
index 5230159..0aeab10 100644
--- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
@@ -32,7 +32,6 @@
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TAP_OUTSIDE;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_TIMED_OUT;
-import static com.android.systemui.flags.Flags.CLIPBOARD_REMOTE_BEHAVIOR;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -277,7 +276,7 @@
} else if (!mIsMinimized) {
setExpandedView();
}
- if (mFeatureFlags.isEnabled(CLIPBOARD_REMOTE_BEHAVIOR) && mClipboardModel.isRemote()) {
+ if (mClipboardModel.isRemote()) {
mTimeoutHandler.cancelTimeout();
mOnUiUpdate = null;
} else {
@@ -291,8 +290,7 @@
mView.setMinimized(false);
switch (model.getType()) {
case TEXT:
- if ((mFeatureFlags.isEnabled(CLIPBOARD_REMOTE_BEHAVIOR) && model.isRemote())
- || DeviceConfig.getBoolean(
+ if (model.isRemote() || DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_SYSTEMUI, CLIPBOARD_OVERLAY_SHOW_ACTIONS, false)) {
if (model.getTextLinks() != null) {
classifyText(model);
@@ -326,11 +324,7 @@
mView.showDefaultTextPreview();
break;
}
- if (mFeatureFlags.isEnabled(CLIPBOARD_REMOTE_BEHAVIOR)) {
- if (!model.isRemote()) {
- maybeShowRemoteCopy(model.getClipData());
- }
- } else {
+ if (!model.isRemote()) {
maybeShowRemoteCopy(model.getClipData());
}
if (model.getType() != ClipboardModel.Type.OTHER) {
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java b/packages/SystemUI/src/com/android/systemui/complication/Complication.java
similarity index 99%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java
rename to packages/SystemUI/src/com/android/systemui/complication/Complication.java
index b07efdf..6b06752 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/Complication.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import android.annotation.IntDef;
import android.view.View;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveData.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionLiveData.java
similarity index 97%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveData.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionLiveData.java
index f6fe8d2..ac38b8d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveData.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionLiveData.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import androidx.lifecycle.LiveData;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionViewModel.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionViewModel.java
similarity index 97%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionViewModel.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionViewModel.java
index 7190d7a..5e3b14e 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationCollectionViewModel.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationCollectionViewModel.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Transformations;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java
similarity index 96%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java
index aad2090..8527dcb3 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationHostViewController.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;
-import static com.android.systemui.dreams.complication.dagger.ComplicationModule.SCOPED_COMPLICATIONS_MODEL;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;
+import static com.android.systemui.complication.dagger.ComplicationModule.SCOPED_COMPLICATIONS_MODEL;
import android.graphics.Rect;
import android.graphics.Region;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationId.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationId.java
similarity index 96%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationId.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationId.java
index 420359c..d7bdce3 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationId.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationId.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
/**
* A {@link ComplicationId} is a value to uniquely identify a complication during the current
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
similarity index 97%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
index 3e9b010..e82564d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutEngine.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_IN_DURATION;
-import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_OUT_DURATION;
-import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_DEFAULT;
-import static com.android.systemui.dreams.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_IN_DURATION;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATIONS_FADE_OUT_DURATION;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.COMPLICATION_MARGIN_DEFAULT;
+import static com.android.systemui.complication.dagger.ComplicationHostViewModule.SCOPED_COMPLICATIONS_LAYOUT;
import android.util.Log;
import android.view.View;
@@ -29,8 +29,8 @@
import androidx.constraintlayout.widget.Constraints;
import com.android.systemui.R;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams.Position;
-import com.android.systemui.dreams.complication.dagger.ComplicationModule;
+import com.android.systemui.complication.ComplicationLayoutParams.Position;
+import com.android.systemui.complication.dagger.ComplicationModule;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.touch.TouchInsetManager;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutParams.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
similarity index 99%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutParams.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
index 99e19fc..71ba720 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutParams.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationLayoutParams.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import android.annotation.IntDef;
import android.view.ViewGroup;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationTypesUpdater.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
similarity index 98%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationTypesUpdater.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
index 1702eac..016891d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationTypesUpdater.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationTypesUpdater.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationUtils.java
similarity index 73%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationUtils.java
index 18aacd2..183053a 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationUtils.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_AIR_QUALITY;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_CAST_INFO;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_DATE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_NONE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_SMARTSPACE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_TIME;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_WEATHER;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_AIR_QUALITY;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_CAST_INFO;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_DATE;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_NONE;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_SMARTSPACE;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_TIME;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_WEATHER;
import com.android.settingslib.dream.DreamBackend;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModel.java
similarity index 97%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModel.java
index 00cf58c..61b948e 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModel.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import androidx.lifecycle.ViewModel;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelProvider.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelProvider.java
similarity index 88%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelProvider.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelProvider.java
index cc17ea1e..2287171 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelProvider.java
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStore;
-import com.android.systemui.dreams.complication.dagger.DaggerViewModelProviderFactory;
+import com.android.systemui.complication.dagger.DaggerViewModelProviderFactory;
import javax.inject.Inject;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformer.java b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelTransformer.java
similarity index 93%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformer.java
rename to packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelTransformer.java
index 5d113dd..482bbec 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformer.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/ComplicationViewModelTransformer.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import com.android.systemui.dreams.complication.dagger.ComplicationViewModelComponent;
+import com.android.systemui.complication.dagger.ComplicationViewModelComponent;
import java.util.HashMap;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java b/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
similarity index 91%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java
rename to packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
index bb1e6e2..5020480 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/DreamClockTimeComplication.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.dagger.DreamClockTimeComplicationModule.DREAM_CLOCK_TIME_COMPLICATION_VIEW;
-import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS;
+import static com.android.systemui.complication.dagger.DreamClockTimeComplicationModule.DREAM_CLOCK_TIME_COMPLICATION_VIEW;
+import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.view.View;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java b/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
similarity index 95%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java
rename to packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
index 82a8858..8f192de 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/DreamHomeControlsComplication.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
+import static com.android.systemui.complication.dagger.DreamHomeControlsComplicationComponent.DreamHomeControlsModule.DREAM_HOME_CONTROLS_CHIP_VIEW;
+import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_HOME_CONTROLS_CHIP_LAYOUT_PARAMS;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE_AFTER_UNLOCK;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.UNAVAILABLE;
-import static com.android.systemui.dreams.complication.dagger.DreamHomeControlsComplicationComponent.DreamHomeControlsModule.DREAM_HOME_CONTROLS_CHIP_VIEW;
-import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_HOME_CONTROLS_CHIP_LAYOUT_PARAMS;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.content.Context;
@@ -34,13 +34,13 @@
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.CoreStartable;
import com.android.systemui.animation.ActivityLaunchAnimator;
+import com.android.systemui.complication.dagger.DreamHomeControlsComplicationComponent;
import com.android.systemui.controls.ControlsServiceInfo;
import com.android.systemui.controls.dagger.ControlsComponent;
import com.android.systemui.controls.management.ControlsListingController;
import com.android.systemui.controls.ui.ControlsActivity;
import com.android.systemui.controls.ui.ControlsUiController;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.dagger.DreamHomeControlsComplicationComponent;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.util.ViewController;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamMediaEntryComplication.java b/packages/SystemUI/src/com/android/systemui/complication/DreamMediaEntryComplication.java
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/DreamMediaEntryComplication.java
rename to packages/SystemUI/src/com/android/systemui/complication/DreamMediaEntryComplication.java
index deff060..6a72785 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamMediaEntryComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/DreamMediaEntryComplication.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.dagger.DreamMediaEntryComplicationComponent.DreamMediaEntryModule.DREAM_MEDIA_ENTRY_VIEW;
-import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_MEDIA_ENTRY_LAYOUT_PARAMS;
+import static com.android.systemui.complication.dagger.DreamMediaEntryComplicationComponent.DreamMediaEntryModule.DREAM_MEDIA_ENTRY_VIEW;
+import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_MEDIA_ENTRY_LAYOUT_PARAMS;
import static com.android.systemui.flags.Flags.DREAM_MEDIA_TAP_TO_OPEN;
import android.app.PendingIntent;
@@ -25,8 +25,8 @@
import android.view.View;
import com.android.systemui.ActivityIntentHelper;
+import com.android.systemui.complication.dagger.DreamMediaEntryComplicationComponent;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.dagger.DreamMediaEntryComplicationComponent;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.controls.ui.MediaCarouselController;
import com.android.systemui.media.dream.MediaDreamComplication;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java b/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
similarity index 96%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java
rename to packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
index ff1f312..2f5ef6d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/SmartSpaceComplication.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_SMARTSPACE_LAYOUT_PARAMS;
+import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_SMARTSPACE_LAYOUT_PARAMS;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_PRETEXT_MONITOR;
import android.content.Context;
diff --git a/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationComponent.kt b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationComponent.kt
new file mode 100644
index 0000000..0189147
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationComponent.kt
@@ -0,0 +1,29 @@
+package com.android.systemui.complication.dagger
+
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.ViewModelStore
+import com.android.systemui.complication.Complication
+import com.android.systemui.complication.ComplicationHostViewController
+import com.android.systemui.complication.ComplicationLayoutEngine
+import com.android.systemui.touch.TouchInsetManager
+import dagger.BindsInstance
+import dagger.Subcomponent
+
+@Subcomponent(modules = [ComplicationModule::class])
+@ComplicationModule.ComplicationScope
+interface ComplicationComponent {
+ /** Factory for generating [ComplicationComponent]. */
+ @Subcomponent.Factory
+ interface Factory {
+ fun create(
+ @BindsInstance lifecycleOwner: LifecycleOwner,
+ @BindsInstance host: Complication.Host,
+ @BindsInstance viewModelStore: ViewModelStore,
+ @BindsInstance touchInsetManager: TouchInsetManager
+ ): ComplicationComponent
+ }
+
+ fun getComplicationHostViewController(): ComplicationHostViewController
+
+ fun getVisibilityController(): ComplicationLayoutEngine
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
similarity index 96%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
index 797906f..1158565 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationHostViewModule.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationHostViewModule.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import android.content.res.Resources;
import android.view.LayoutInflater;
@@ -44,7 +44,7 @@
/**
* Generates a {@link ConstraintLayout}, which can host
- * {@link com.android.systemui.dreams.complication.Complication} instances.
+ * {@link com.android.systemui.complication.Complication} instances.
*/
@Provides
@Named(SCOPED_COMPLICATIONS_LAYOUT)
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationModule.java
similarity index 90%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationModule.java
index dbf5ab0..57841af 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationModule.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStore;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.ComplicationCollectionViewModel;
-import com.android.systemui.dreams.complication.ComplicationLayoutEngine;
+import com.android.systemui.complication.Complication;
+import com.android.systemui.complication.ComplicationCollectionViewModel;
+import com.android.systemui.complication.ComplicationLayoutEngine;
import com.android.systemui.touch.TouchInsetManager;
import dagger.Module;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationViewModelComponent.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationViewModelComponent.java
similarity index 78%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationViewModelComponent.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationViewModelComponent.java
index 703cd28..d2d3698 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationViewModelComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/ComplicationViewModelComponent.java
@@ -13,18 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.ComplicationId;
-import com.android.systemui.dreams.complication.ComplicationViewModelProvider;
+import com.android.systemui.complication.Complication;
+import com.android.systemui.complication.ComplicationId;
+import com.android.systemui.complication.ComplicationViewModelProvider;
import dagger.BindsInstance;
import dagger.Subcomponent;
/**
* The {@link ComplicationViewModelComponent} allows for a
- * {@link com.android.systemui.dreams.complication.ComplicationViewModel} for a particular
+ * {@link com.android.systemui.complication.ComplicationViewModel} for a particular
* {@link Complication}. This component binds these instance specific values to allow injection with
* values provided at the wider scope.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DaggerViewModelProviderFactory.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DaggerViewModelProviderFactory.java
similarity index 96%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DaggerViewModelProviderFactory.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/DaggerViewModelProviderFactory.java
index 8ffedec..b4ec40f 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DaggerViewModelProviderFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DaggerViewModelProviderFactory.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModel;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationModule.java
similarity index 92%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationModule.java
index 5290e44..fd711ee 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamClockTimeComplicationModule.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import android.view.LayoutInflater;
@@ -23,13 +23,13 @@
import com.android.internal.util.Preconditions;
import com.android.systemui.R;
-import com.android.systemui.dreams.complication.DreamClockTimeComplication;
-
-import javax.inject.Named;
+import com.android.systemui.complication.DreamClockTimeComplication;
import dagger.Module;
import dagger.Provides;
+import javax.inject.Named;
+
/**
* Module for providing {@link DreamClockTimeComplication}.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java
index cf05d2d..ef18d66 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamHomeControlsComplicationComponent.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@@ -22,7 +22,12 @@
import android.widget.ImageView;
import com.android.systemui.R;
-import com.android.systemui.dreams.complication.DreamHomeControlsComplication;
+import com.android.systemui.complication.DreamHomeControlsComplication;
+
+import dagger.Module;
+import dagger.Provides;
+import dagger.Subcomponent;
+
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@@ -30,10 +35,6 @@
import javax.inject.Named;
import javax.inject.Scope;
-import dagger.Module;
-import dagger.Provides;
-import dagger.Subcomponent;
-
/**
* Responsible for generating dependencies for the {@link DreamHomeControlsComplication}.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamMediaEntryComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamMediaEntryComplicationComponent.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java
index ed05daf..f15a586 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamMediaEntryComplicationComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/DreamMediaEntryComplicationComponent.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@@ -22,7 +22,11 @@
import android.view.View;
import com.android.systemui.R;
-import com.android.systemui.dreams.complication.DreamMediaEntryComplication;
+import com.android.systemui.complication.DreamMediaEntryComplication;
+
+import dagger.Module;
+import dagger.Provides;
+import dagger.Subcomponent;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@@ -30,10 +34,6 @@
import javax.inject.Named;
import javax.inject.Scope;
-import dagger.Module;
-import dagger.Provides;
-import dagger.Subcomponent;
-
/**
* Responsible for generating dependencies for the {@link DreamMediaEntryComplication}.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java b/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java
similarity index 97%
rename from packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java
rename to packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java
index 3be42cb..98975fbd 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/complication/dagger/RegisteredComplicationsModule.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication.dagger;
+package com.android.systemui.complication.dagger;
import android.content.res.Resources;
import android.view.ViewGroup;
import com.android.systemui.R;
+import com.android.systemui.complication.ComplicationLayoutParams;
import com.android.systemui.dagger.SystemUIBinder;
import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
-import javax.inject.Named;
-
import dagger.Module;
import dagger.Provides;
+import javax.inject.Named;
+
/**
* Module for all components with corresponding dream layer complications registered in
* {@link SystemUIBinder}.
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
index 20d690e..5d6479e 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
@@ -25,19 +25,20 @@
import com.android.systemui.accessibility.SystemActions
import com.android.systemui.accessibility.WindowMagnification
import com.android.systemui.biometrics.AuthController
+import com.android.systemui.biometrics.BiometricNotificationService
import com.android.systemui.clipboardoverlay.ClipboardListener
import com.android.systemui.controls.dagger.StartControlsStartableModule
import com.android.systemui.dagger.qualifiers.PerUser
import com.android.systemui.dreams.AssistantAttentionMonitor
import com.android.systemui.dreams.DreamMonitor
import com.android.systemui.globalactions.GlobalActionsComponent
-import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable
import com.android.systemui.keyboard.KeyboardUI
+import com.android.systemui.keyboard.PhysicalKeyboardCoreStartable
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.data.quickaffordance.MuteQuickAffordanceCoreStartable
import com.android.systemui.log.SessionTracker
-import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI
import com.android.systemui.media.RingtonePlayer
+import com.android.systemui.media.dialog.MediaOutputSwitcherDialogUI
import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper
import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderCoordinator
@@ -48,7 +49,6 @@
import com.android.systemui.shortcut.ShortcutKeyDispatcher
import com.android.systemui.statusbar.notification.InstantAppNotifier
import com.android.systemui.statusbar.phone.KeyguardLiftController
-import com.android.systemui.statusbar.phone.LetterboxModule
import com.android.systemui.stylus.StylusUsiPowerStartable
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
import com.android.systemui.theme.ThemeOverlayController
@@ -68,7 +68,6 @@
@Module(includes = [
MultiUserUtilsModule::class,
StartControlsStartableModule::class,
- LetterboxModule::class,
])
abstract class SystemUICoreStartableModule {
/** Inject into AuthController. */
@@ -77,6 +76,14 @@
@ClassKey(AuthController::class)
abstract fun bindAuthController(service: AuthController): CoreStartable
+ /** Inject into BiometricNotificationService */
+ @Binds
+ @IntoMap
+ @ClassKey(BiometricNotificationService::class)
+ abstract fun bindBiometricNotificationService(
+ service: BiometricNotificationService
+ ): CoreStartable
+
/** Inject into ChooserCoreStartable. */
@Binds
@IntoMap
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index 7945470..cee8294 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -29,6 +29,7 @@
import com.android.systemui.BootCompleteCache;
import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.accessibility.AccessibilityModule;
+import com.android.systemui.accessibility.data.repository.AccessibilityRepositoryModule;
import com.android.systemui.appops.dagger.AppOpsModule;
import com.android.systemui.assist.AssistModule;
import com.android.systemui.biometrics.AlternateUdfpsTouchProvider;
@@ -38,16 +39,15 @@
import com.android.systemui.biometrics.dagger.UdfpsModule;
import com.android.systemui.classifier.FalsingModule;
import com.android.systemui.clipboardoverlay.dagger.ClipboardOverlayModule;
+import com.android.systemui.complication.dagger.ComplicationComponent;
import com.android.systemui.controls.dagger.ControlsModule;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.demomode.dagger.DemoModeModule;
import com.android.systemui.doze.dagger.DozeComponent;
-import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.dagger.DreamModule;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.FlagsModule;
-import com.android.systemui.fragments.FragmentService;
import com.android.systemui.keyboard.KeyboardModule;
import com.android.systemui.keyguard.data.BouncerViewModule;
import com.android.systemui.log.dagger.LogModule;
@@ -63,6 +63,7 @@
import com.android.systemui.qrcodescanner.dagger.QRCodeScannerModule;
import com.android.systemui.qs.FgsManagerController;
import com.android.systemui.qs.FgsManagerControllerImpl;
+import com.android.systemui.qs.QSFragmentStartableModule;
import com.android.systemui.qs.footer.dagger.FooterActionsModule;
import com.android.systemui.recents.Recents;
import com.android.systemui.screenrecord.ScreenRecordModule;
@@ -70,6 +71,7 @@
import com.android.systemui.security.data.repository.SecurityRepositoryModule;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeModule;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
import com.android.systemui.smartspace.dagger.SmartspaceModule;
@@ -92,6 +94,7 @@
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent;
import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.LetterboxModule;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule;
import com.android.systemui.statusbar.policy.HeadsUpManager;
@@ -140,6 +143,7 @@
*/
@Module(includes = {
AccessibilityModule.class,
+ AccessibilityRepositoryModule.class,
AppOpsModule.class,
AssistModule.class,
BiometricsModule.class,
@@ -158,6 +162,7 @@
FooterActionsModule.class,
GarbageMonitorModule.class,
KeyboardModule.class,
+ LetterboxModule.class,
LogModule.class,
MediaProjectionModule.class,
MotionToolModule.class,
@@ -167,11 +172,13 @@
PolicyModule.class,
PrivacyModule.class,
QRCodeScannerModule.class,
+ QSFragmentStartableModule.class,
ScreenshotModule.class,
SensorModule.class,
SecurityRepositoryModule.class,
ScreenRecordModule.class,
SettingsUtilModule.class,
+ ShadeModule.class,
SmartRepliesInflationModule.class,
SmartspaceModule.class,
StatusBarPipelineModule.class,
@@ -196,8 +203,7 @@
DozeComponent.class,
ExpandableNotificationRowComponent.class,
KeyguardBouncerComponent.class,
- NotificationShelfComponent.class,
- FragmentService.FragmentCreator.class
+ NotificationShelfComponent.class
})
public abstract class SystemUIModule {
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt
index d0a92f0..5b56c04 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt
@@ -26,11 +26,11 @@
import androidx.lifecycle.repeatOnLifecycle
import com.android.systemui.R
import com.android.systemui.animation.Interpolators
-import com.android.systemui.dreams.complication.ComplicationHostViewController
-import com.android.systemui.dreams.complication.ComplicationLayoutParams
-import com.android.systemui.dreams.complication.ComplicationLayoutParams.POSITION_BOTTOM
-import com.android.systemui.dreams.complication.ComplicationLayoutParams.POSITION_TOP
-import com.android.systemui.dreams.complication.ComplicationLayoutParams.Position
+import com.android.systemui.complication.ComplicationHostViewController
+import com.android.systemui.complication.ComplicationLayoutParams
+import com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM
+import com.android.systemui.complication.ComplicationLayoutParams.POSITION_TOP
+import com.android.systemui.complication.ComplicationLayoutParams.Position
import com.android.systemui.dreams.dagger.DreamOverlayModule
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel.Companion.DREAM_ANIMATION_DURATION
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
index 7c6a748..15a32d2 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
@@ -19,9 +19,9 @@
import static com.android.keyguard.BouncerPanelExpansionCalculator.aboutToShowBouncerProgress;
import static com.android.keyguard.BouncerPanelExpansionCalculator.getDreamAlphaScaledExpansion;
import static com.android.keyguard.BouncerPanelExpansionCalculator.getDreamYPositionScaledExpansion;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM;
+import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_TOP;
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
-import static com.android.systemui.dreams.complication.ComplicationLayoutParams.POSITION_BOTTOM;
-import static com.android.systemui.dreams.complication.ComplicationLayoutParams.POSITION_TOP;
import android.animation.Animator;
import android.content.res.Resources;
@@ -36,8 +36,8 @@
import com.android.dream.lowlight.LowLightTransitionCoordinator;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
+import com.android.systemui.complication.ComplicationHostViewController;
import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dreams.complication.ComplicationHostViewController;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.dreams.dagger.DreamOverlayModule;
import com.android.systemui.dreams.touch.scrim.BouncerlessScrimController;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
index 471c445..1da7900 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
@@ -32,7 +32,6 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.ViewModelStore;
@@ -42,9 +41,9 @@
import com.android.internal.policy.PhoneWindow;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
+import com.android.systemui.complication.Complication;
+import com.android.systemui.complication.dagger.ComplicationComponent;
import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor;
import com.android.systemui.touch.TouchInsetManager;
@@ -91,7 +90,7 @@
private final ComplicationComponent mComplicationComponent;
- private final com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent
+ private final com.android.systemui.dreams.complication.dagger.ComplicationComponent
mDreamComplicationComponent;
private final DreamOverlayComponent mDreamOverlayComponent;
@@ -145,7 +144,7 @@
@Main DelayableExecutor executor,
WindowManager windowManager,
ComplicationComponent.Factory complicationComponentFactory,
- com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent.Factory
+ com.android.systemui.dreams.complication.dagger.ComplicationComponent.Factory
dreamComplicationComponentFactory,
DreamOverlayComponent.Factory dreamOverlayComponentFactory,
DreamOverlayStateController stateController,
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
index 7790986..0f370ac 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
@@ -24,9 +24,9 @@
import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.complication.Complication;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.dreams.complication.Complication;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.statusbar.policy.CallbackController;
@@ -184,6 +184,10 @@
* Returns collection of present {@link Complication}.
*/
public Collection<Complication> getComplications(boolean filterByAvailability) {
+ if (isLowLightActive()) {
+ // Don't show complications on low light.
+ return Collections.emptyList();
+ }
return Collections.unmodifiableCollection(filterByAvailability
? mComplications
.stream()
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
similarity index 95%
rename from packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandler.java
rename to packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
index 3a4578b..410a0c5 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/HideComplicationTouchHandler.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.dreamcomplication;
+package com.android.systemui.dreams.complication;
-import static com.android.systemui.dreams.dreamcomplication.dagger.ComplicationModule.COMPLICATIONS_FADE_OUT_DELAY;
-import static com.android.systemui.dreams.dreamcomplication.dagger.ComplicationModule.COMPLICATIONS_RESTORE_TIMEOUT;
+import static com.android.systemui.dreams.complication.dagger.ComplicationModule.COMPLICATIONS_FADE_OUT_DELAY;
+import static com.android.systemui.dreams.complication.dagger.ComplicationModule.COMPLICATIONS_RESTORE_TIMEOUT;
import android.util.Log;
import android.view.MotionEvent;
@@ -25,9 +25,9 @@
import androidx.annotation.Nullable;
+import com.android.systemui.complication.Complication;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.Complication;
import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor;
import com.android.systemui.dreams.touch.DreamTouchHandler;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt
index 8d133bd..492c502 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationComponent.kt
@@ -1,29 +1,21 @@
package com.android.systemui.dreams.complication.dagger
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.ViewModelStore
-import com.android.systemui.dreams.complication.Complication
-import com.android.systemui.dreams.complication.ComplicationHostViewController
-import com.android.systemui.dreams.complication.ComplicationLayoutEngine
+import com.android.systemui.complication.Complication
+import com.android.systemui.dreams.complication.HideComplicationTouchHandler
import com.android.systemui.touch.TouchInsetManager
import dagger.BindsInstance
import dagger.Subcomponent
@Subcomponent(modules = [ComplicationModule::class])
-@ComplicationModule.ComplicationScope
interface ComplicationComponent {
/** Factory for generating [ComplicationComponent]. */
@Subcomponent.Factory
interface Factory {
fun create(
- @BindsInstance lifecycleOwner: LifecycleOwner,
- @BindsInstance host: Complication.Host,
- @BindsInstance viewModelStore: ViewModelStore,
+ @BindsInstance visibilityController: Complication.VisibilityController,
@BindsInstance touchInsetManager: TouchInsetManager
): ComplicationComponent
}
- fun getComplicationHostViewController(): ComplicationHostViewController
-
- fun getVisibilityController(): ComplicationLayoutEngine
+ fun getHideComplicationTouchHandler(): HideComplicationTouchHandler
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationModule.kt b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt
similarity index 93%
rename from packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationModule.kt
rename to packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt
index ef75ce1..95c225d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/ComplicationModule.kt
@@ -1,4 +1,4 @@
-package com.android.systemui.dreams.dreamcomplication.dagger
+package com.android.systemui.dreams.complication.dagger
import android.content.res.Resources
import com.android.systemui.R
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
index f130026..1271645d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
@@ -24,12 +24,12 @@
import com.android.dream.lowlight.dagger.LowLightDreamModule;
import com.android.settingslib.dream.DreamBackend;
import com.android.systemui.R;
+import com.android.systemui.complication.dagger.RegisteredComplicationsModule;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
import com.android.systemui.dreams.DreamOverlayService;
-import com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule;
-import com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent;
+import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.touch.scrim.dagger.ScrimModule;
import com.android.systemui.process.condition.SystemProcessCondition;
import com.android.systemui.shared.condition.Condition;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java
index 0332f88..cb587c2 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamOverlayComponent.java
@@ -24,8 +24,8 @@
import androidx.lifecycle.LifecycleOwner;
+import com.android.systemui.complication.ComplicationHostViewController;
import com.android.systemui.dreams.DreamOverlayContainerViewController;
-import com.android.systemui.dreams.complication.ComplicationHostViewController;
import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor;
import com.android.systemui.dreams.touch.DreamTouchHandler;
import com.android.systemui.dreams.touch.dagger.DreamTouchModule;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationComponent.kt b/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationComponent.kt
deleted file mode 100644
index f2fb48d..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/dreamcomplication/dagger/ComplicationComponent.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.android.systemui.dreams.dreamcomplication.dagger
-
-import com.android.systemui.dreams.complication.Complication
-import com.android.systemui.dreams.dreamcomplication.HideComplicationTouchHandler
-import com.android.systemui.touch.TouchInsetManager
-import dagger.BindsInstance
-import dagger.Subcomponent
-
-@Subcomponent(modules = [ComplicationModule::class])
-interface ComplicationComponent {
- /** Factory for generating [ComplicationComponent]. */
- @Subcomponent.Factory
- interface Factory {
- fun create(
- @BindsInstance visibilityController: Complication.VisibilityController,
- @BindsInstance touchInsetManager: TouchInsetManager
- ): ComplicationComponent
- }
-
- fun getHideComplicationTouchHandler(): HideComplicationTouchHandler
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/ShadeTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/ShadeTouchHandler.java
index 58b70b0..99451f2 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/ShadeTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/ShadeTouchHandler.java
@@ -23,7 +23,7 @@
import android.view.GestureDetector;
import android.view.MotionEvent;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import java.util.Optional;
@@ -54,8 +54,8 @@
}
session.registerInputListener(ev -> {
- final NotificationPanelViewController viewController =
- mSurfaces.map(CentralSurfaces::getNotificationPanelViewController).orElse(null);
+ final ShadeViewController viewController =
+ mSurfaces.map(CentralSurfaces::getShadeViewController).orElse(null);
if (viewController != null) {
viewController.handleExternalTouch((MotionEvent) ev);
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java
index 081bab0..5f03743 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/dagger/BouncerSwipeModule.java
@@ -25,16 +25,16 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.touch.BouncerSwipeTouchHandler;
import com.android.systemui.dreams.touch.DreamTouchHandler;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.wm.shell.animation.FlingAnimationUtils;
-import javax.inject.Named;
-import javax.inject.Provider;
-
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
+import javax.inject.Named;
+import javax.inject.Provider;
+
/**
* This module captures the components associated with {@link BouncerSwipeTouchHandler}.
*/
@@ -78,8 +78,8 @@
return flingAnimationUtilsBuilderProvider.get()
.reset()
.setMaxLengthSeconds(
- NotificationPanelViewController.FLING_CLOSING_MAX_LENGTH_SECONDS)
- .setSpeedUpFactor(NotificationPanelViewController.FLING_SPEED_UP_FACTOR)
+ ShadeViewController.FLING_CLOSING_MAX_LENGTH_SECONDS)
+ .setSpeedUpFactor(ShadeViewController.FLING_SPEED_UP_FACTOR)
.build();
}
@@ -92,8 +92,8 @@
Provider<FlingAnimationUtils.Builder> flingAnimationUtilsBuilderProvider) {
return flingAnimationUtilsBuilderProvider.get()
.reset()
- .setMaxLengthSeconds(NotificationPanelViewController.FLING_MAX_LENGTH_SECONDS)
- .setSpeedUpFactor(NotificationPanelViewController.FLING_SPEED_UP_FACTOR)
+ .setMaxLengthSeconds(ShadeViewController.FLING_MAX_LENGTH_SECONDS)
+ .setSpeedUpFactor(ShadeViewController.FLING_SPEED_UP_FACTOR)
.build();
}
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index dfe8697..aaf4358 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -58,12 +58,6 @@
"notification_drag_to_contents"
)
- // TODO(b/254512517): Tracking Bug
- val FSI_REQUIRES_KEYGUARD = releasedFlag(110, "fsi_requires_keyguard")
-
- // TODO(b/259130119): Tracking Bug
- val FSI_ON_DND_UPDATE = releasedFlag(259130119, "fsi_on_dnd_update")
-
// TODO(b/254512538): Tracking Bug
val INSTANT_VOICE_REPLY = unreleasedFlag(111, "instant_voice_reply")
@@ -74,31 +68,15 @@
val NOTIFICATION_MEMORY_LOGGING_ENABLED =
unreleasedFlag(119, "notification_memory_logging_enabled")
- // TODO(b/254512731): Tracking Bug
- @JvmField val NOTIFICATION_DISMISSAL_FADE = releasedFlag(113, "notification_dismissal_fade")
-
@JvmField val USE_ROUNDNESS_SOURCETYPES = releasedFlag(116, "use_roundness_sourcetype")
- // TODO(b/259217907)
- @JvmField
- val NOTIFICATION_GROUP_DISMISSAL_ANIMATION =
- releasedFlag(259217907, "notification_group_dismissal_animation")
-
@JvmField
val SIMPLIFIED_APPEAR_FRACTION =
- unreleasedFlag(259395680, "simplified_appear_fraction", teamfood = true)
+ releasedFlag(259395680, "simplified_appear_fraction")
// TODO(b/257315550): Tracking Bug
val NO_HUN_FOR_OLD_WHEN = releasedFlag(118, "no_hun_for_old_when")
- // TODO(b/260335638): Tracking Bug
- @JvmField
- val NOTIFICATION_INLINE_REPLY_ANIMATION =
- releasedFlag(174148361, "notification_inline_reply_animation")
-
- val FILTER_UNSEEN_NOTIFS_ON_KEYGUARD =
- releasedFlag(254647461, "filter_unseen_notifs_on_keyguard")
-
// TODO(b/277338665): Tracking Bug
@JvmField
val NOTIFICATION_SHELF_REFACTOR =
@@ -277,6 +255,10 @@
@JvmField
val QS_PIPELINE_NEW_HOST = unreleasedFlag(504, "qs_pipeline_new_host", teamfood = false)
+ // TODO(b/278068252): Tracking Bug
+ @JvmField
+ val QS_PIPELINE_AUTO_ADD = unreleasedFlag(505, "qs_pipeline_auto_add", teamfood = false)
+
// TODO(b/254512383): Tracking Bug
@JvmField
val FULL_SCREEN_USER_SWITCHER =
@@ -325,8 +307,7 @@
unreleasedFlag(611, "new_status_bar_icons_debug_coloring")
// TODO(b/265892345): Tracking Bug
- val PLUG_IN_STATUS_BAR_CHIP =
- unreleasedFlag(265892345, "plug_in_status_bar_chip", teamfood = true)
+ val PLUG_IN_STATUS_BAR_CHIP = releasedFlag(265892345, "plug_in_status_bar_chip")
// 700 - dialer/calls
// TODO(b/254512734): Tracking Bug
@@ -402,7 +383,7 @@
val MEDIA_RETAIN_RECOMMENDATIONS = releasedFlag(916, "media_retain_recommendations")
// TODO(b/270437894): Tracking Bug
- val MEDIA_REMOTE_RESUME = unreleasedFlag(917, "media_remote_resume", teamfood = true)
+ val MEDIA_REMOTE_RESUME = releasedFlag(917, "media_remote_resume")
// 1000 - dock
val SIMULATE_DOCK_THROUGH_CHARGING = releasedFlag(1000, "simulate_dock_through_charging")
@@ -596,22 +577,10 @@
// TODO(b/254512507): Tracking Bug
val CHOOSER_UNBUNDLED = releasedFlag(1500, "chooser_unbundled")
- // TODO(b/266982749) Tracking Bug
- val SHARESHEET_RESELECTION_ACTION = releasedFlag(1502, "sharesheet_reselection_action")
-
- // TODO(b/266983474) Tracking Bug
- val SHARESHEET_IMAGE_AND_TEXT_PREVIEW = releasedFlag(1503, "sharesheet_image_text_preview")
-
- // TODO(b/267355521) Tracking Bug
- val SHARESHEET_SCROLLABLE_IMAGE_PREVIEW =
- releasedFlag(1504, "sharesheet_scrollable_image_preview")
-
// 1700 - clipboard
@JvmField val CLIPBOARD_REMOTE_BEHAVIOR = releasedFlag(1701, "clipboard_remote_behavior")
// 1800 - shade container
- @JvmField
- val LEAVE_SHADE_OPEN_FOR_BUGREPORT = releasedFlag(1800, "leave_shade_open_for_bugreport")
// TODO(b/265944639): Tracking Bug
@JvmField val DUAL_SHADE = unreleasedFlag(1801, "dual_shade")
@@ -647,7 +616,8 @@
@JvmField
val ENABLE_USI_BATTERY_NOTIFICATIONS =
releasedFlag(2302, "enable_usi_battery_notifications")
- @JvmField val ENABLE_STYLUS_EDUCATION = unreleasedFlag(2303, "enable_stylus_education")
+ @JvmField val ENABLE_STYLUS_EDUCATION =
+ unreleasedFlag(2303, "enable_stylus_education", teamfood = true)
// 2400 - performance tools and debugging info
// TODO(b/238923086): Tracking Bug
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
index 6a27ee7..81a5206 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
@@ -39,16 +39,17 @@
import com.android.systemui.plugins.Plugin;
import com.android.systemui.util.leak.LeakDetector;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.HashMap;
-
import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import javax.inject.Provider;
+
public class FragmentHostManager {
private final Handler mHandler = new Handler(Looper.getMainLooper());
@@ -322,25 +323,17 @@
return instantiateWithInjections(context, className, arguments);
}
- private Fragment instantiateWithInjections(
- Context context, String className, Bundle args) {
- FragmentService.FragmentInstantiationInfo fragmentInstantiationInfo =
+ private Fragment instantiateWithInjections(Context context, String className, Bundle args) {
+ Provider<? extends Fragment> fragmentProvider =
mManager.getInjectionMap().get(className);
- if (fragmentInstantiationInfo != null) {
- try {
- Fragment f = (Fragment) fragmentInstantiationInfo
- .mMethod
- .invoke(fragmentInstantiationInfo.mDaggerComponent);
- // Setup the args, taken from Fragment#instantiate.
- if (args != null) {
- args.setClassLoader(f.getClass().getClassLoader());
- f.setArguments(args);
- }
- return f;
- } catch (IllegalAccessException | InvocationTargetException e) {
- throw new Fragment.InstantiationException("Unable to instantiate " + className,
- e);
+ if (fragmentProvider != null) {
+ Fragment f = fragmentProvider.get();
+ // Setup the args, taken from Fragment#instantiate.
+ if (args != null) {
+ args.setClassLoader(f.getClass().getClassLoader());
+ f.setArguments(args);
}
+ return f;
}
return Fragment.instantiate(context, className, args);
}
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
index d302b13a..a75c056 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
@@ -24,16 +24,12 @@
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
-import com.android.systemui.qs.QSFragment;
import com.android.systemui.statusbar.policy.ConfigurationController;
import java.io.PrintWriter;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
import javax.inject.Inject;
-
-import dagger.Subcomponent;
+import javax.inject.Provider;
/**
* Holds a map of root views to FragmentHostStates and generates them as needed.
@@ -49,9 +45,9 @@
* A map with the means to create fragments via Dagger injection.
*
* key: the fragment class name.
- * value: see {@link FragmentInstantiationInfo}.
+ * value: A {@link Provider} for the Fragment
*/
- private final ArrayMap<String, FragmentInstantiationInfo> mInjectionMap = new ArrayMap<>();
+ private final ArrayMap<String, Provider<? extends Fragment>> mInjectionMap = new ArrayMap<>();
private final Handler mHandler = new Handler();
private final FragmentHostManager.Factory mFragmentHostManagerFactory;
@@ -67,38 +63,31 @@
@Inject
public FragmentService(
- FragmentCreator.Factory fragmentCreatorFactory,
FragmentHostManager.Factory fragmentHostManagerFactory,
ConfigurationController configurationController,
DumpManager dumpManager) {
mFragmentHostManagerFactory = fragmentHostManagerFactory;
- addFragmentInstantiationProvider(fragmentCreatorFactory.build());
configurationController.addCallback(mConfigurationListener);
- dumpManager.registerDumpable(getClass().getSimpleName(), this);
+ dumpManager.registerNormalDumpable(this);
}
- ArrayMap<String, FragmentInstantiationInfo> getInjectionMap() {
+ ArrayMap<String, Provider<? extends Fragment>> getInjectionMap() {
return mInjectionMap;
}
/**
* Adds a new Dagger component object that provides method(s) to create fragments via injection.
*/
- public void addFragmentInstantiationProvider(Object daggerComponent) {
- for (Method method : daggerComponent.getClass().getDeclaredMethods()) {
- if (Fragment.class.isAssignableFrom(method.getReturnType())
- && (method.getModifiers() & Modifier.PUBLIC) != 0) {
- String fragmentName = method.getReturnType().getName();
- if (mInjectionMap.containsKey(fragmentName)) {
- Log.w(TAG, "Fragment " + fragmentName + " is already provided by different"
- + " Dagger component; Not adding method");
- continue;
- }
- mInjectionMap.put(
- fragmentName, new FragmentInstantiationInfo(method, daggerComponent));
- }
+ public void addFragmentInstantiationProvider(
+ Class<?> fragmentCls, Provider<? extends Fragment> provider) {
+ String fragmentName = fragmentCls.getName();
+ if (mInjectionMap.containsKey(fragmentName)) {
+ Log.w(TAG, "Fragment " + fragmentName + " is already provided by different"
+ + " Dagger component; Not adding method");
+ return;
}
+ mInjectionMap.put(fragmentName, provider);
}
public FragmentHostManager getFragmentHostManager(View view) {
@@ -132,22 +121,6 @@
}
}
- /**
- * The subcomponent of dagger that holds all fragments that need injection.
- */
- @Subcomponent
- public interface FragmentCreator {
- /** Factory for creating a FragmentCreator. */
- @Subcomponent.Factory
- interface Factory {
- FragmentCreator build();
- }
- /**
- * Inject a QSFragment.
- */
- QSFragment createQSFragment();
- }
-
private class FragmentHostState {
private final View mView;
@@ -170,16 +143,4 @@
mFragmentHostManager.onConfigurationChanged(newConfig);
}
}
-
- /** An object containing the information needed to instantiate a fragment. */
- static class FragmentInstantiationInfo {
- /** The method that returns a newly-created fragment of the given class. */
- final Method mMethod;
- /** The Dagger component that the method should be invoked on. */
- final Object mDaggerComponent;
- FragmentInstantiationInfo(Method method, Object daggerComponent) {
- this.mMethod = method;
- this.mDaggerComponent = daggerComponent;
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
index 4be47ec..d3b6fc2 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
@@ -1043,9 +1043,6 @@
Log.w(TAG, "Bugreport handler could not be launched");
mIActivityManager.requestInteractiveBugReport();
}
- // Maybe close shade (depends on a flag) so user sees the activity
- mCentralSurfacesOptional.ifPresent(
- CentralSurfaces::collapseShadeForBugreport);
} catch (RemoteException e) {
}
}
@@ -1064,8 +1061,6 @@
mMetricsLogger.action(MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_FULL);
mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_LONG_PRESS);
mIActivityManager.requestFullBugReport();
- // Maybe close shade (depends on a flag) so user sees the activity
- mCentralSurfacesOptional.ifPresent(CentralSurfaces::collapseShadeForBugreport);
} catch (RemoteException e) {
}
return false;
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
index bafd2e7..573de97 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
@@ -60,6 +60,7 @@
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.util.wakelock.SettableWakeLock;
import com.android.systemui.util.wakelock.WakeLock;
+import com.android.systemui.util.wakelock.WakeLockLogger;
import java.util.Date;
import java.util.Locale;
@@ -148,6 +149,8 @@
private int mStatusBarState;
private boolean mMediaIsVisible;
private SystemUIAppComponentFactory.ContextAvailableCallback mContextAvailableCallback;
+ @Inject
+ WakeLockLogger mWakeLockLogger;
/**
* Receiver responsible for time ticking and updating the date format.
@@ -305,8 +308,8 @@
@Override
public boolean onCreateSliceProvider() {
mContextAvailableCallback.onContextAvailable(getContext());
- mMediaWakeLock = new SettableWakeLock(WakeLock.createPartial(getContext(), "media"),
- "media");
+ mMediaWakeLock = new SettableWakeLock(
+ WakeLock.createPartial(getContext(), mWakeLockLogger, "media"), "media");
synchronized (KeyguardSliceProvider.sInstanceLock) {
KeyguardSliceProvider oldInstance = KeyguardSliceProvider.sInstance;
if (oldInstance != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 416b237..7a2013e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -134,9 +134,9 @@
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationShadeDepthController;
@@ -857,6 +857,11 @@
mCustomMessage = null;
return message;
}
+
+ @Override
+ public void setCustomMessage(CharSequence customMessage) {
+ mCustomMessage = customMessage;
+ }
};
/**
@@ -1952,11 +1957,12 @@
if (mShowing && mKeyguardStateController.isShowing()) {
if (mPM.isInteractive() && !mHiding) {
// It's already showing, and we're not trying to show it while the screen is off.
- // We can simply reset all of the views.
+ // We can simply reset all of the views, but don't hide the bouncer in case the user
+ // is currently interacting with it.
if (DEBUG) Log.d(TAG, "doKeyguard: not showing (instead, resetting) because it is "
+ "already showing, we're interactive, and we were not previously hiding. "
+ "It should be safe to short-circuit here.");
- resetStateLocked();
+ resetStateLocked(/* hideBouncer= */ false);
return;
} else {
// We are trying to show the keyguard while the screen is off or while we were in
@@ -2030,8 +2036,12 @@
* @see #handleReset
*/
private void resetStateLocked() {
+ resetStateLocked(/* hideBouncer= */ true);
+ }
+
+ private void resetStateLocked(boolean hideBouncer) {
if (DEBUG) Log.e(TAG, "resetStateLocked");
- Message msg = mHandler.obtainMessage(RESET);
+ Message msg = mHandler.obtainMessage(RESET, hideBouncer ? 1 : 0, 0);
mHandler.sendMessage(msg);
}
@@ -2221,7 +2231,7 @@
handleHide();
break;
case RESET:
- handleReset();
+ handleReset(msg.arg1 != 0);
break;
case VERIFY_UNLOCK:
Trace.beginSection("KeyguardViewMediator#handleMessage VERIFY_UNLOCK");
@@ -3003,10 +3013,10 @@
* Handle message sent by {@link #resetStateLocked}
* @see #RESET
*/
- private void handleReset() {
+ private void handleReset(boolean hideBouncer) {
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleReset");
- mKeyguardViewControllerLazy.get().reset(true /* hideBouncerWhenShowing */);
+ mKeyguardViewControllerLazy.get().reset(hideBouncer);
}
scheduleNonStrongBiometricIdleTimeout();
@@ -3093,7 +3103,7 @@
* @return the View Controller for the Keyguard View this class is mediating.
*/
public KeyguardViewController registerCentralSurfaces(CentralSurfaces centralSurfaces,
- NotificationPanelViewController panelView,
+ ShadeViewController panelView,
@Nullable ShadeExpansionStateManager shadeExpansionStateManager,
BiometricUnlockController biometricUnlockController,
View notificationContainer, KeyguardBypassController bypassController) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
index 09002fd..0055f9a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepository.kt
@@ -212,14 +212,9 @@
userId: Int,
hasEnrollments: Boolean
) {
- // TODO(b/242022358), use authController.isFaceAuthEnrolled after
- // ag/20176811 is available.
- if (
- sensorBiometricType == BiometricType.FACE &&
- userId == selectedUserId
- ) {
+ if (sensorBiometricType == BiometricType.FACE) {
trySendWithFailureLogging(
- hasEnrollments,
+ authController.isFaceAuthEnrolled(selectedUserId),
TAG,
"Face enrollment changed"
)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
index 5f6098b..5f2178df 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
@@ -140,8 +140,10 @@
private var authCancellationSignal: CancellationSignal? = null
private var detectCancellationSignal: CancellationSignal? = null
private var faceAcquiredInfoIgnoreList: Set<Int>
+ private var retryCount = 0
private var cancelNotReceivedHandlerJob: Job? = null
+ private var halErrorRetryJob: Job? = null
private val _authenticationStatus: MutableStateFlow<AuthenticationStatus?> =
MutableStateFlow(null)
@@ -223,11 +225,20 @@
}
private fun observeFaceAuthResettingConditions() {
- // Clear auth status when keyguard is going away or when the user is switching.
- merge(keyguardRepository.isKeyguardGoingAway, userRepository.userSwitchingInProgress)
- .onEach { goingAwayOrUserSwitchingInProgress ->
- if (goingAwayOrUserSwitchingInProgress) {
+ // Clear auth status when keyguard is going away or when the user is switching or device
+ // starts going to sleep.
+ merge(
+ keyguardRepository.wakefulness.map {
+ WakefulnessModel.isSleepingOrStartingToSleep(it)
+ },
+ keyguardRepository.isKeyguardGoingAway,
+ userRepository.userSwitchingInProgress
+ )
+ .onEach { anyOfThemIsTrue ->
+ if (anyOfThemIsTrue) {
_isAuthenticated.value = false
+ retryCount = 0
+ halErrorRetryJob?.cancel()
}
}
.launchIn(applicationScope)
@@ -244,8 +255,8 @@
"nonStrongBiometricIsNotAllowed",
faceDetectLog
),
- // We don't want to run face detect if it's not possible to authenticate with FP
- // from the bouncer. UDFPS is the only fp sensor type that won't support this.
+ // We don't want to run face detect if fingerprint can be used to unlock the device
+ // but it's not possible to authenticate with FP from the bouncer (UDFPS)
logAndObserve(
and(isUdfps(), deviceEntryFingerprintAuthRepository.isRunning).isFalse(),
"udfpsAuthIsNotPossibleAnymore",
@@ -302,7 +313,7 @@
logAndObserve(
combine(
keyguardInteractor.isSecureCameraActive,
- alternateBouncerInteractor.isVisible,
+ alternateBouncerInteractor.isVisible
) { a, b ->
!a || b
},
@@ -330,12 +341,12 @@
logAndObserve(isLockedOut.isFalse(), "isNotInLockOutState", faceAuthLog),
logAndObserve(
deviceEntryFingerprintAuthRepository.isLockedOut.isFalse(),
- "fpLockedOut",
+ "fpIsNotLockedOut",
faceAuthLog
),
logAndObserve(
trustRepository.isCurrentUserTrusted.isFalse(),
- "currentUserTrusted",
+ "currentUserIsNotTrusted",
faceAuthLog
),
logAndObserve(
@@ -343,11 +354,6 @@
"nonStrongBiometricIsAllowed",
faceAuthLog
),
- logAndObserve(
- userRepository.selectedUserInfo.map { it.isPrimary },
- "userIsPrimaryUser",
- faceAuthLog
- ),
)
.reduce(::and)
.distinctUntilChanged()
@@ -385,14 +391,11 @@
_authenticationStatus.value = errorStatus
_isAuthenticated.value = false
if (errorStatus.isCancellationError()) {
- cancelNotReceivedHandlerJob?.cancel()
- applicationScope.launch {
- faceAuthLogger.launchingQueuedFaceAuthRequest(
- faceAuthRequestedWhileCancellation
- )
- faceAuthRequestedWhileCancellation?.let { authenticate(it) }
- faceAuthRequestedWhileCancellation = null
- }
+ handleFaceCancellationError()
+ }
+ if (errorStatus.isHardwareError()) {
+ faceAuthLogger.hardwareError(errorStatus)
+ handleFaceHardwareError()
}
faceAuthLogger.authenticationError(
errorCode,
@@ -418,6 +421,35 @@
}
}
+ private fun handleFaceCancellationError() {
+ cancelNotReceivedHandlerJob?.cancel()
+ applicationScope.launch {
+ faceAuthRequestedWhileCancellation?.let {
+ faceAuthLogger.launchingQueuedFaceAuthRequest(it)
+ authenticate(it)
+ }
+ faceAuthRequestedWhileCancellation = null
+ }
+ }
+
+ private fun handleFaceHardwareError() {
+ if (retryCount < HAL_ERROR_RETRY_MAX) {
+ retryCount++
+ halErrorRetryJob?.cancel()
+ halErrorRetryJob =
+ applicationScope.launch {
+ delay(HAL_ERROR_RETRY_TIMEOUT)
+ if (retryCount < HAL_ERROR_RETRY_MAX) {
+ faceAuthLogger.attemptingRetryAfterHardwareError(retryCount)
+ authenticate(
+ FaceAuthUiEvent.FACE_AUTH_TRIGGERED_RETRY_AFTER_HW_UNAVAILABLE,
+ fallbackToDetection = false
+ )
+ }
+ }
+ }
+ }
+
private fun onFaceAuthRequestCompleted() {
cancellationInProgress = false
_isAuthRunning.value = false
@@ -558,6 +590,12 @@
* cancelled.
*/
const val DEFAULT_CANCEL_SIGNAL_TIMEOUT = 3000L
+
+ /** Number of allowed retries whenever there is a face hardware error */
+ const val HAL_ERROR_RETRY_MAX = 20
+
+ /** Timeout before retries whenever there is a HAL error. */
+ const val HAL_ERROR_RETRY_TIMEOUT = 500L // ms
}
override fun dump(pw: PrintWriter, args: Array<out String>) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractor.kt
index 06ae11fe8..74ef7a5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractor.kt
@@ -59,6 +59,7 @@
fun onQsExpansionStared()
fun onNotificationPanelClicked()
fun onSwipeUpOnBouncer()
+ fun onPrimaryBouncerUserInput()
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/NoopKeyguardFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/NoopKeyguardFaceAuthInteractor.kt
index cad40aa..5005b6c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/NoopKeyguardFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/NoopKeyguardFaceAuthInteractor.kt
@@ -59,4 +59,5 @@
override fun onNotificationPanelClicked() {}
override fun onSwipeUpOnBouncer() {}
+ override fun onPrimaryBouncerUserInput() {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
index 20ebb71..6b515da 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/SystemUIKeyguardFaceAuthInteractor.kt
@@ -151,6 +151,10 @@
return featureFlags.isEnabled(Flags.FACE_AUTH_REFACTOR)
}
+ override fun onPrimaryBouncerUserInput() {
+ repository.cancel()
+ }
+
/** Provide the status of face authentication */
override val authenticationStatus = repository.authenticationStatus
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/FaceAuthenticationModels.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/FaceAuthenticationModels.kt
index eded9c1..c8bd958 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/FaceAuthenticationModels.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/FaceAuthenticationModels.kt
@@ -50,6 +50,11 @@
* was cancelled before it completed.
*/
fun isCancellationError() = msgId == FaceManager.FACE_ERROR_CANCELED
+
+ /** Method that checks if [msgId] is a hardware error. */
+ fun isHardwareError() =
+ msgId == FaceManager.FACE_ERROR_HW_UNAVAILABLE ||
+ msgId == FaceManager.FACE_ERROR_UNABLE_TO_PROCESS
}
/** Face detection success message. */
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt
index 68ac7e1..d96609c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt
@@ -498,7 +498,7 @@
activityStarter: ActivityStarter,
view: View,
) {
- activityStarter.startActivity(
+ activityStarter.postStartActivityDismissingKeyguard(
Intent(Intent.ACTION_SET_WALLPAPER).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
view.context
@@ -506,8 +506,9 @@
.takeIf { it.isNotEmpty() }
?.let { packageName -> setPackage(packageName) }
},
- /* dismissShade= */ true,
- ActivityLaunchAnimator.Controller.fromView(view),
+ /* delay= */ 0,
+ /* animationController= */ ActivityLaunchAnimator.Controller.fromView(view),
+ /* customMessage= */ view.context.getString(R.string.keyguard_unlock_to_customize_ls)
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
index 72dc7a4..6bbc6f6 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBouncerViewBinder.kt
@@ -193,7 +193,11 @@
launch {
viewModel.bouncerShowMessage.collect {
- securityContainerController.showMessage(it.message, it.colorStateList)
+ securityContainerController.showMessage(
+ it.message,
+ it.colorStateList,
+ /* animated= */ true
+ )
viewModel.onMessageShown()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModel.kt
index 5770f3e..ddce516 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModel.kt
@@ -47,6 +47,7 @@
duration = TO_LOCKSCREEN_DURATION,
onStep = { value -> -translatePx + value * translatePx },
interpolator = EMPHASIZED_DECELERATE,
+ onCancel = { 0f },
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt b/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt
index 7f6e4a9..efd3ad6 100644
--- a/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/log/FaceAuthenticationLogger.kt
@@ -4,6 +4,7 @@
import android.hardware.face.FaceSensorPropertiesInternal
import com.android.keyguard.FaceAuthUiEvent
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.shared.model.ErrorAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.log.dagger.FaceAuthLog
import com.android.systemui.plugins.log.LogBuffer
@@ -239,4 +240,25 @@
{ "Requesting face auth for trigger: $str1" }
)
}
+
+ fun hardwareError(errorStatus: ErrorAuthenticationStatus) {
+ logBuffer.log(
+ TAG,
+ DEBUG,
+ {
+ str1 = "${errorStatus.msg}"
+ int1 = errorStatus.msgId
+ },
+ { "Received face hardware error: $str1 , code: $int1" }
+ )
+ }
+
+ fun attemptingRetryAfterHardwareError(retryCount: Int) {
+ logBuffer.log(
+ TAG,
+ DEBUG,
+ { int1 = retryCount },
+ { "Attempting face auth again because of HW error: retry attempt $int1" }
+ )
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
index 3775e2c..077ee02 100644
--- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
@@ -31,6 +31,7 @@
import com.android.systemui.plugins.log.LogcatEchoTrackerProd;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.util.Compile;
+import com.android.systemui.util.wakelock.WakeLockLog;
import dagger.Module;
import dagger.Provides;
@@ -135,6 +136,14 @@
return factory.create("NotifRemoteInputLog", 50 /* maxSize */, false /* systrace */);
}
+ /** Provides a logging buffer for all logs related to unseen notifications. */
+ @Provides
+ @SysUISingleton
+ @UnseenNotificationLog
+ public static LogBuffer provideUnseenNotificationLogBuffer(LogBufferFactory factory) {
+ return factory.create("UnseenNotifLog", 20 /* maxSize */, false /* systrace */);
+ }
+
/** Provides a logging buffer for all logs related to the data layer of notifications. */
@Provides
@SysUISingleton
@@ -168,6 +177,14 @@
false /* systrace */);
}
+ /** Provides a logging buffer for {@link com.android.systemui.broadcast.BroadcastSender} */
+ @Provides
+ @SysUISingleton
+ @WakeLockLog
+ public static LogBuffer provideWakeLockLog(LogBufferFactory factory) {
+ return factory.create("WakeLockLog", 500 /* maxSize */, false /* systrace */);
+ }
+
/** Provides a logging buffer for all logs related to Toasts shown by SystemUI. */
@Provides
@SysUISingleton
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/UnseenNotificationLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/UnseenNotificationLog.java
new file mode 100644
index 0000000..5c2321b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/UnseenNotificationLog.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.log.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.plugins.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/** A {@link LogBuffer} for unseen notification related messages. */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface UnseenNotificationLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt
index 1c8bfd1..8b74263 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/MediaViewHolder.kt
@@ -147,6 +147,7 @@
val expandedBottomActionIds =
setOf(
+ R.id.media_progress_bar,
R.id.actionPrev,
R.id.actionNext,
R.id.action0,
@@ -155,7 +156,22 @@
R.id.action3,
R.id.action4,
R.id.media_scrubbing_elapsed_time,
- R.id.media_scrubbing_total_time
+ R.id.media_scrubbing_total_time,
+ )
+
+ val detailIds =
+ setOf(
+ R.id.header_title,
+ R.id.header_artist,
+ R.id.media_explicit_indicator,
+ R.id.actionPlayPause,
+ )
+
+ val backgroundIds =
+ setOf(
+ R.id.album_art,
+ R.id.turbulence_noise_view,
+ R.id.touch_ripple_view,
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarViewModel.kt
index 2509f21..35f5a8c 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/player/SeekBarViewModel.kt
@@ -20,12 +20,14 @@
import android.media.session.MediaController
import android.media.session.PlaybackState
import android.os.SystemClock
+import android.os.Trace
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
import android.widget.SeekBar
import androidx.annotation.AnyThread
+import androidx.annotation.VisibleForTesting
import androidx.annotation.WorkerThread
import androidx.core.view.GestureDetectorCompat
import androidx.lifecycle.LiveData
@@ -36,10 +38,13 @@
import com.android.systemui.statusbar.NotificationMediaManager
import com.android.systemui.util.concurrency.RepeatableExecutor
import javax.inject.Inject
+import kotlin.math.abs
private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L
private const val MIN_FLING_VELOCITY_SCALE_FACTOR = 10
+private const val TRACE_POSITION_NAME = "SeekBarPollingPosition"
+
private fun PlaybackState.isInMotion(): Boolean {
return this.state == PlaybackState.STATE_PLAYING ||
this.state == PlaybackState.STATE_FAST_FORWARDING ||
@@ -295,14 +300,20 @@
@WorkerThread
private fun checkIfPollingNeeded() {
val needed = listening && !scrubbing && playbackState?.isInMotion() ?: false
+ val traceCookie = controller?.sessionToken.hashCode()
if (needed) {
if (cancel == null) {
- cancel =
+ Trace.beginAsyncSection(TRACE_POSITION_NAME, traceCookie)
+ val cancelPolling =
bgExecutor.executeRepeatedly(
this::checkPlaybackPosition,
0L,
POSITION_UPDATE_INTERVAL_MILLIS
)
+ cancel = Runnable {
+ cancelPolling.run()
+ Trace.endAsyncSection(TRACE_POSITION_NAME, traceCookie)
+ }
}
} else {
cancel?.run()
@@ -316,6 +327,10 @@
return SeekBarChangeListener(this, falsingManager)
}
+ /** first and last motion events of seekbar grab. */
+ @VisibleForTesting var firstMotionEvent: MotionEvent? = null
+ @VisibleForTesting var lastMotionEvent: MotionEvent? = null
+
/** Attach touch handlers to the seek bar view. */
fun attachTouchHandlers(bar: SeekBar) {
bar.setOnSeekBarChangeListener(seekBarListener)
@@ -342,6 +357,23 @@
}
}
+ /**
+ * This method specifies if user made a bad seekbar grab or not. If the vertical distance from
+ * first touch on seekbar is more than the horizontal distance, this means that the seekbar grab
+ * is more vertical and should be rejected. Seekbar accepts horizontal grabs only.
+ *
+ * Single tap has the same first and last motion event, it is counted as a valid grab.
+ *
+ * @return whether the touch on seekbar is valid.
+ */
+ private fun isValidSeekbarGrab(): Boolean {
+ if (firstMotionEvent == null || lastMotionEvent == null) {
+ return true
+ }
+ return abs(firstMotionEvent!!.x - lastMotionEvent!!.x) >=
+ abs(firstMotionEvent!!.y - lastMotionEvent!!.y)
+ }
+
/** Listener interface to be notified when the user starts or stops scrubbing. */
interface ScrubbingChangeListener {
fun onScrubbingChanged(scrubbing: Boolean)
@@ -367,7 +399,7 @@
}
override fun onStopTrackingTouch(bar: SeekBar) {
- if (falsingManager.isFalseTouch(MEDIA_SEEKBAR)) {
+ if (!viewModel.isValidSeekbarGrab() || falsingManager.isFalseTouch(MEDIA_SEEKBAR)) {
viewModel.onSeekFalse()
}
viewModel.onSeek(bar.progress.toLong())
@@ -415,6 +447,8 @@
return false
}
detector.onTouchEvent(event)
+ // Store the last motion event done on seekbar.
+ viewModel.lastMotionEvent = event.copy()
return !shouldGoToSeekBar
}
@@ -459,6 +493,8 @@
if (shouldGoToSeekBar) {
bar.parent?.requestDisallowInterceptTouchEvent(true)
}
+ // Store the first motion event done on seekbar.
+ viewModel.firstMotionEvent = event.copy()
return shouldGoToSeekBar
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt
index 70f2dee..0b33904 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/models/recommendation/RecommendationViewHolder.kt
@@ -180,5 +180,7 @@
R.id.media_cover2_container,
R.id.media_cover3_container
)
+
+ val backgroundId = R.id.sizing_view
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
index fa42114..9997730 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
@@ -43,6 +43,7 @@
import android.net.Uri
import android.os.Parcelable
import android.os.Process
+import android.os.RemoteException
import android.os.UserHandle
import android.provider.Settings
import android.service.notification.StatusBarNotification
@@ -52,6 +53,7 @@
import android.util.Pair as APair
import androidx.media.utils.MediaConstants
import com.android.internal.logging.InstanceId
+import com.android.internal.statusbar.IStatusBarService
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.Dumpable
import com.android.systemui.R
@@ -137,6 +139,8 @@
expiryTimeMs = 0,
)
+const val MEDIA_TITLE_ERROR_MESSAGE = "Invalid media data: title is null or blank."
+
fun isMediaNotification(sbn: StatusBarNotification): Boolean {
return sbn.notification.isMediaNotification()
}
@@ -181,6 +185,7 @@
private val logger: MediaUiEventLogger,
private val smartspaceManager: SmartspaceManager,
private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
+ private val statusBarService: IStatusBarService,
) : Dumpable, BcSmartspaceDataPlugin.SmartspaceTargetListener {
companion object {
@@ -252,6 +257,7 @@
mediaFlags: MediaFlags,
logger: MediaUiEventLogger,
smartspaceManager: SmartspaceManager,
+ statusBarService: IStatusBarService,
keyguardUpdateMonitor: KeyguardUpdateMonitor,
) : this(
context,
@@ -277,6 +283,7 @@
logger,
smartspaceManager,
keyguardUpdateMonitor,
+ statusBarService,
)
private val appChangeReceiver =
@@ -378,21 +385,21 @@
fun onNotificationAdded(key: String, sbn: StatusBarNotification) {
if (useQsMediaPlayer && isMediaNotification(sbn)) {
- var logEvent = false
+ var isNewlyActiveEntry = false
Assert.isMainThread()
val oldKey = findExistingEntry(key, sbn.packageName)
if (oldKey == null) {
val instanceId = logger.getNewInstanceId()
val temp = LOADING.copy(packageName = sbn.packageName, instanceId = instanceId)
mediaEntries.put(key, temp)
- logEvent = true
+ isNewlyActiveEntry = true
} else if (oldKey != key) {
// Resume -> active conversion; move to new key
val oldData = mediaEntries.remove(oldKey)!!
- logEvent = true
+ isNewlyActiveEntry = true
mediaEntries.put(key, oldData)
}
- loadMediaData(key, sbn, oldKey, logEvent)
+ loadMediaData(key, sbn, oldKey, isNewlyActiveEntry)
} else {
onNotificationRemoved(key)
}
@@ -475,9 +482,9 @@
key: String,
sbn: StatusBarNotification,
oldKey: String?,
- logEvent: Boolean = false
+ isNewlyActiveEntry: Boolean = false,
) {
- backgroundExecutor.execute { loadMediaDataInBg(key, sbn, oldKey, logEvent) }
+ backgroundExecutor.execute { loadMediaDataInBg(key, sbn, oldKey, isNewlyActiveEntry) }
}
/** Add a listener for changes in this class */
@@ -601,9 +608,11 @@
}
}
- private fun removeEntry(key: String) {
+ private fun removeEntry(key: String, logEvent: Boolean = true) {
mediaEntries.remove(key)?.let {
- logger.logMediaRemoved(it.appUid, it.packageName, it.instanceId)
+ if (logEvent) {
+ logger.logMediaRemoved(it.appUid, it.packageName, it.instanceId)
+ }
}
notifyMediaDataRemoved(key)
}
@@ -751,7 +760,7 @@
key: String,
sbn: StatusBarNotification,
oldKey: String?,
- logEvent: Boolean = false
+ isNewlyActiveEntry: Boolean = false,
) {
val token =
sbn.notification.extras.getParcelable(
@@ -765,6 +774,34 @@
val metadata = mediaController.metadata
val notif: Notification = sbn.notification
+ // Song name
+ var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE)
+ if (song == null) {
+ song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE)
+ }
+ if (song == null) {
+ song = HybridGroupManager.resolveTitle(notif)
+ }
+ // Media data must have a title.
+ if (song.isNullOrBlank()) {
+ try {
+ statusBarService.onNotificationError(
+ sbn.packageName,
+ sbn.tag,
+ sbn.id,
+ sbn.uid,
+ sbn.initialPid,
+ MEDIA_TITLE_ERROR_MESSAGE,
+ sbn.user.identifier
+ )
+ } catch (e: RemoteException) {
+ Log.e(TAG, "cancelNotification failed: $e")
+ }
+ // Only add log for media removed if active media is updated with invalid title.
+ foregroundExecutor.execute { removeEntry(key, !isNewlyActiveEntry) }
+ return
+ }
+
val appInfo =
notif.extras.getParcelable(
Notification.EXTRA_BUILDER_APPLICATION_INFO,
@@ -793,15 +830,6 @@
// App Icon
val smallIcon = sbn.notification.smallIcon
- // Song name
- var song: CharSequence? = metadata?.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE)
- if (song == null) {
- song = metadata?.getString(MediaMetadata.METADATA_KEY_TITLE)
- }
- if (song == null) {
- song = HybridGroupManager.resolveTitle(notif)
- }
-
// Explicit Indicator
var isExplicit = false
if (mediaFlags.isExplicitIndicatorEnabled()) {
@@ -873,7 +901,7 @@
val instanceId = currentEntry?.instanceId ?: logger.getNewInstanceId()
val appUid = appInfo?.uid ?: Process.INVALID_UID
- if (logEvent) {
+ if (isNewlyActiveEntry) {
logSingleVsMultipleMediaAdded(appUid, sbn.packageName, instanceId)
logger.logActiveMediaAdded(appUid, sbn.packageName, instanceId, playbackLocation)
} else if (playbackLocation != currentEntry?.playbackLocation) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt
index cd51d92..4bca778 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaViewController.kt
@@ -61,37 +61,6 @@
companion object {
@JvmField val GUTS_ANIMATION_DURATION = 500L
- val controlIds =
- setOf(
- R.id.media_progress_bar,
- R.id.actionNext,
- R.id.actionPrev,
- R.id.action0,
- R.id.action1,
- R.id.action2,
- R.id.action3,
- R.id.action4,
- R.id.media_scrubbing_elapsed_time,
- R.id.media_scrubbing_total_time
- )
-
- val detailIds =
- setOf(
- R.id.header_title,
- R.id.header_artist,
- R.id.media_explicit_indicator,
- R.id.actionPlayPause,
- )
-
- val backgroundIds =
- setOf(
- R.id.album_art,
- R.id.turbulence_noise_view,
- R.id.touch_ripple_view,
- )
-
- // Sizing view id for recommendation card view.
- val recSizingViewId = R.id.sizing_view
}
/** A listener when the current dimensions of the player change */
@@ -182,15 +151,14 @@
lastOrientation = newOrientation
// Update the height of media controls for the expanded layout. it is needed
// for large screen devices.
- if (type == TYPE.PLAYER) {
- backgroundIds.forEach { id ->
- expandedLayout.getConstraint(id).layout.mHeight =
- context.resources.getDimensionPixelSize(
- R.dimen.qs_media_session_height_expanded
- )
+ val backgroundIds =
+ if (type == TYPE.PLAYER) {
+ MediaViewHolder.backgroundIds
+ } else {
+ setOf(RecommendationViewHolder.backgroundId)
}
- } else {
- expandedLayout.getConstraint(recSizingViewId).layout.mHeight =
+ backgroundIds.forEach { id ->
+ expandedLayout.getConstraint(id).layout.mHeight =
context.resources.getDimensionPixelSize(
R.dimen.qs_media_session_height_expanded
)
@@ -338,19 +306,19 @@
squishedViewState.height = squishedHeight
// We are not overriding the squishedViewStates height but only the children to avoid
// them remeasuring the whole view. Instead it just remains as the original size
- backgroundIds.forEach { id ->
+ MediaViewHolder.backgroundIds.forEach { id ->
squishedViewState.widgetStates.get(id)?.let { state -> state.height = squishedHeight }
}
// media player
calculateWidgetGroupAlphaForSquishiness(
- controlIds,
+ MediaViewHolder.expandedBottomActionIds,
squishedViewState.measureHeight.toFloat(),
squishedViewState,
squishFraction
)
calculateWidgetGroupAlphaForSquishiness(
- detailIds,
+ MediaViewHolder.detailIds,
squishedViewState.measureHeight.toFloat(),
squishedViewState,
squishFraction
@@ -660,7 +628,7 @@
result.height = result.measureHeight
result.width = result.measureWidth
// Make sure all background views are also resized such that their size is correct
- backgroundIds.forEach { id ->
+ MediaViewHolder.backgroundIds.forEach { id ->
result.widgetStates.get(id)?.let { state ->
state.height = result.height
state.width = result.width
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/MediaComplicationViewController.java b/packages/SystemUI/src/com/android/systemui/media/dream/MediaComplicationViewController.java
index 69b5698..b4153d7 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaComplicationViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaComplicationViewController.java
@@ -31,7 +31,7 @@
/**
* {@link MediaComplicationViewController} handles connecting the
- * {@link com.android.systemui.dreams.complication.Complication} view to the {@link MediaHost}.
+ * {@link com.android.systemui.complication.Complication} view to the {@link MediaHost}.
*/
public class MediaComplicationViewController extends ViewController<FrameLayout> {
private final MediaHost mMediaHost;
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java
index 2c35db3..96c870d 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java
@@ -16,8 +16,8 @@
package com.android.systemui.media.dream;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.ComplicationViewModel;
+import com.android.systemui.complication.Complication;
+import com.android.systemui.complication.ComplicationViewModel;
import com.android.systemui.media.dream.dagger.MediaComplicationComponent;
import javax.inject.Inject;
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
index 20e8ae6..08c626c 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamSentinel.java
@@ -24,8 +24,8 @@
import androidx.annotation.Nullable;
import com.android.systemui.CoreStartable;
+import com.android.systemui.complication.DreamMediaEntryComplication;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.DreamMediaEntryComplication;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.controls.models.player.MediaData;
import com.android.systemui.media.controls.models.recommendation.SmartspaceMediaData;
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/MediaViewHolder.java b/packages/SystemUI/src/com/android/systemui/media/dream/MediaViewHolder.java
index 128a38c..80d322f 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaViewHolder.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaViewHolder.java
@@ -22,8 +22,8 @@
import android.view.View;
import android.widget.FrameLayout;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
+import com.android.systemui.complication.Complication;
+import com.android.systemui.complication.ComplicationLayoutParams;
import javax.inject.Inject;
import javax.inject.Named;
diff --git a/packages/SystemUI/src/com/android/systemui/media/dream/dagger/MediaComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/media/dream/dagger/MediaComplicationComponent.java
index 052608f..72573a5 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/dagger/MediaComplicationComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/dagger/MediaComplicationComponent.java
@@ -16,7 +16,7 @@
package com.android.systemui.media.dream.dagger;
-import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_MEDIA_COMPLICATION_WEIGHT;
+import static com.android.systemui.complication.dagger.RegisteredComplicationsModule.DREAM_MEDIA_COMPLICATION_WEIGHT;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@@ -24,22 +24,22 @@
import android.view.ViewGroup;
import android.widget.FrameLayout;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
+import com.android.systemui.complication.ComplicationLayoutParams;
import com.android.systemui.media.dream.MediaViewHolder;
+import dagger.Module;
+import dagger.Provides;
+import dagger.Subcomponent;
+
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Named;
import javax.inject.Scope;
-import dagger.Module;
-import dagger.Provides;
-import dagger.Subcomponent;
-
/**
* {@link MediaComplicationComponent} is responsible for generating dependencies surrounding the
- * media {@link com.android.systemui.dreams.complication.Complication}, such as view controllers
+ * media {@link com.android.systemui.complication.Complication}, such as view controllers
* and layout details.
*/
@Subcomponent(modules = {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index e8ef612..b0fb349 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -25,6 +25,7 @@
import static android.app.StatusBarManager.WindowVisibleState;
import static android.app.StatusBarManager.windowStateToString;
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
+import static android.view.InsetsSource.FLAG_SUPPRESS_SCRIM;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
@@ -740,7 +741,7 @@
mView.setComponents(mRecentsOptional);
if (mCentralSurfacesOptionalLazy.get().isPresent()) {
mView.setComponents(
- mCentralSurfacesOptionalLazy.get().get().getNotificationPanelViewController());
+ mCentralSurfacesOptionalLazy.get().get().getShadeViewController());
}
mView.setDisabledFlags(mDisabledFlags1, mSysUiFlagsContainer);
mView.setOnVerticalChangedListener(this::onVerticalChanged);
@@ -1342,8 +1343,8 @@
private void onVerticalChanged(boolean isVertical) {
Optional<CentralSurfaces> cs = mCentralSurfacesOptionalLazy.get();
- if (cs.isPresent() && cs.get().getNotificationPanelViewController() != null) {
- cs.get().getNotificationPanelViewController().setQsScrimEnabled(!isVertical);
+ if (cs.isPresent() && cs.get().getShadeViewController() != null) {
+ cs.get().getShadeViewController().setQsScrimEnabled(!isVertical);
}
}
@@ -1717,12 +1718,15 @@
if (insetsHeight != -1 && !mEdgeBackGestureHandler.isButtonForcedVisible()) {
navBarProvider.setInsetsSize(Insets.of(0, 0, 0, insetsHeight));
}
+ final boolean needsScrim = userContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_navBarNeedsScrim);
+ navBarProvider.setFlags(needsScrim ? 0 : FLAG_SUPPRESS_SCRIM, FLAG_SUPPRESS_SCRIM);
final InsetsFrameProvider tappableElementProvider = new InsetsFrameProvider(
mInsetsSourceOwner, 0, WindowInsets.Type.tappableElement());
- final boolean navBarTapThrough = userContext.getResources().getBoolean(
+ final boolean tapThrough = userContext.getResources().getBoolean(
com.android.internal.R.bool.config_navBarTapThrough);
- if (navBarTapThrough) {
+ if (tapThrough) {
tappableElementProvider.setInsetsSize(Insets.NONE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 5d598e8..94f01b8 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -74,7 +74,7 @@
import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
import com.android.systemui.recents.Recents;
import com.android.systemui.settings.DisplayTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.rotation.FloatingRotationButton;
import com.android.systemui.shared.rotation.RotationButton.RotationButtonUpdatesCallback;
import com.android.systemui.shared.rotation.RotationButtonController;
@@ -149,7 +149,7 @@
private NavigationBarInflaterView mNavigationInflaterView;
private Optional<Recents> mRecentsOptional = Optional.empty();
@Nullable
- private NotificationPanelViewController mPanelView;
+ private ShadeViewController mPanelView;
private RotationContextButton mRotationContextButton;
private FloatingRotationButton mFloatingRotationButton;
private RotationButtonController mRotationButtonController;
@@ -346,7 +346,8 @@
mRecentsOptional = recentsOptional;
}
- public void setComponents(NotificationPanelViewController panel) {
+ /** */
+ public void setComponents(ShadeViewController panel) {
mPanelView = panel;
updatePanelSystemUiStateFlags();
}
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
index 5f4e7cac..aab898e 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
@@ -30,6 +30,7 @@
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.ShortcutManager
+import android.graphics.drawable.Icon
import android.os.Build
import android.os.UserHandle
import android.os.UserManager
@@ -84,12 +85,12 @@
fun onBubbleExpandChanged(isExpanding: Boolean, key: String?) {
if (!isEnabled) return
- if (key != Bubble.KEY_APP_BUBBLE) return
+ val info = infoReference.getAndSet(null) ?: return
- val info = infoReference.getAndSet(null)
+ if (key != Bubble.getAppBubbleKeyForApp(info.packageName, info.user)) return
// Safe guard mechanism, this callback should only be called for app bubbles.
- if (info?.launchMode != NoteTaskLaunchMode.AppBubble) return
+ if (info.launchMode != NoteTaskLaunchMode.AppBubble) return
if (isExpanding) {
logDebug { "onBubbleExpandChanged - expanding: $info" }
@@ -172,7 +173,7 @@
return
}
- val info = resolver.resolveInfo(entryPoint, isKeyguardLocked)
+ val info = resolver.resolveInfo(entryPoint, isKeyguardLocked, user)
if (info == null) {
logDebug { "Default notes app isn't set" }
@@ -187,9 +188,10 @@
logDebug { "onShowNoteTask - start: $info on user#${user.identifier}" }
when (info.launchMode) {
is NoteTaskLaunchMode.AppBubble -> {
- // TODO: provide app bubble icon
val intent = createNoteTaskIntent(info)
- bubbles.showOrHideAppBubble(intent, user, null /* icon */)
+ val icon =
+ Icon.createWithResource(context, R.drawable.ic_note_task_shortcut_widget)
+ bubbles.showOrHideAppBubble(intent, user, icon)
// App bubble logging happens on `onBubbleExpandChanged`.
logDebug { "onShowNoteTask - opened as app bubble: $info" }
}
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfo.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfo.kt
index 2b9f0af..a758347 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfo.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfo.kt
@@ -15,10 +15,13 @@
*/
package com.android.systemui.notetask
+import android.os.UserHandle
+
/** Contextual information required to launch a Note Task by [NoteTaskController]. */
data class NoteTaskInfo(
val packageName: String,
val uid: Int,
+ val user: UserHandle,
val entryPoint: NoteTaskEntryPoint? = null,
val isKeyguardLocked: Boolean = false,
) {
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfoResolver.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfoResolver.kt
index 616f9b5..89a8526 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfoResolver.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskInfoResolver.kt
@@ -25,7 +25,6 @@
import android.os.UserHandle
import android.util.Log
import com.android.systemui.notetask.NoteTaskRoleManagerExt.getDefaultRoleHolderAsUser
-import com.android.systemui.settings.UserTracker
import javax.inject.Inject
class NoteTaskInfoResolver
@@ -33,15 +32,13 @@
constructor(
private val roleManager: RoleManager,
private val packageManager: PackageManager,
- private val userTracker: UserTracker,
) {
fun resolveInfo(
entryPoint: NoteTaskEntryPoint? = null,
isKeyguardLocked: Boolean = false,
+ user: UserHandle,
): NoteTaskInfo? {
- val user = userTracker.userHandle
-
val packageName = roleManager.getDefaultRoleHolderAsUser(ROLE_NOTES, user)
if (packageName.isNullOrEmpty()) return null
@@ -49,6 +46,7 @@
return NoteTaskInfo(
packageName = packageName,
uid = packageManager.getUidOf(packageName, user),
+ user = user,
entryPoint = entryPoint,
isKeyguardLocked = isKeyguardLocked,
)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragmentStartable.kt b/packages/SystemUI/src/com/android/systemui/qs/QSFragmentStartable.kt
new file mode 100644
index 0000000..253560b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragmentStartable.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs
+
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.fragments.FragmentService
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+import javax.inject.Inject
+import javax.inject.Provider
+
+@SysUISingleton
+class QSFragmentStartable
+@Inject
+constructor(
+ private val fragmentService: FragmentService,
+ private val qsFragmentProvider: Provider<QSFragment>
+) : CoreStartable {
+ override fun start() {
+ fragmentService.addFragmentInstantiationProvider(QSFragment::class.java, qsFragmentProvider)
+ }
+}
+
+@Module
+interface QSFragmentStartableModule {
+ @Binds
+ @IntoMap
+ @ClassKey(QSFragmentStartable::class)
+ fun bindsQSFragmentStartable(startable: QSFragmentStartable): CoreStartable
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
index 7ee4047..269a158 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
@@ -55,7 +55,6 @@
public TileLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
- setFocusableInTouchMode(true);
mLessRows = ((Settings.System.getInt(context.getContentResolver(), "qs_less_rows", 0) != 0)
|| useQsMediaPlayer(context));
updateResources();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSAutoAddModule.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSAutoAddModule.kt
new file mode 100644
index 0000000..9979228
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSAutoAddModule.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.pipeline.dagger
+
+import com.android.systemui.qs.pipeline.data.repository.AutoAddRepository
+import com.android.systemui.qs.pipeline.data.repository.AutoAddSettingRepository
+import dagger.Binds
+import dagger.Module
+
+@Module
+abstract class QSAutoAddModule {
+
+ @Binds abstract fun bindAutoAddRepository(impl: AutoAddSettingRepository): AutoAddRepository
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSPipelineModule.kt
index e212bc4..e85440c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSPipelineModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/dagger/QSPipelineModule.kt
@@ -32,7 +32,7 @@
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
-@Module
+@Module(includes = [QSAutoAddModule::class])
abstract class QSPipelineModule {
/** Implementation for [TileSpecRepository] */
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/AutoAddRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/AutoAddRepository.kt
new file mode 100644
index 0000000..43a16b6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/data/repository/AutoAddRepository.kt
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.pipeline.data.repository
+
+import android.database.ContentObserver
+import android.provider.Settings
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.qs.pipeline.shared.TileSpec
+import com.android.systemui.util.settings.SecureSettings
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onStart
+import kotlinx.coroutines.withContext
+
+/** Repository to track what QS tiles have been auto-added */
+interface AutoAddRepository {
+
+ /** Flow of tiles that have been auto-added */
+ fun autoAddedTiles(userId: Int): Flow<Set<TileSpec>>
+
+ /** Mark a tile as having been auto-added */
+ suspend fun markTileAdded(userId: Int, spec: TileSpec)
+
+ /**
+ * Unmark a tile as having been auto-added. This is used for tiles that can be auto-added
+ * multiple times.
+ */
+ suspend fun unmarkTileAdded(userId: Int, spec: TileSpec)
+}
+
+/**
+ * Implementation that tracks the auto-added tiles stored in [Settings.Secure.QS_AUTO_ADDED_TILES].
+ */
+@SysUISingleton
+class AutoAddSettingRepository
+@Inject
+constructor(
+ private val secureSettings: SecureSettings,
+ @Background private val bgDispatcher: CoroutineDispatcher,
+) : AutoAddRepository {
+ override fun autoAddedTiles(userId: Int): Flow<Set<TileSpec>> {
+ return conflatedCallbackFlow {
+ val observer =
+ object : ContentObserver(null) {
+ override fun onChange(selfChange: Boolean) {
+ trySend(Unit)
+ }
+ }
+
+ secureSettings.registerContentObserverForUser(SETTING, observer, userId)
+
+ awaitClose { secureSettings.unregisterContentObserver(observer) }
+ }
+ .onStart { emit(Unit) }
+ .map { secureSettings.getStringForUser(SETTING, userId) ?: "" }
+ .distinctUntilChanged()
+ .map {
+ it.split(DELIMITER).map(TileSpec::create).filter { it !is TileSpec.Invalid }.toSet()
+ }
+ .flowOn(bgDispatcher)
+ }
+
+ override suspend fun markTileAdded(userId: Int, spec: TileSpec) {
+ if (spec is TileSpec.Invalid) {
+ return
+ }
+ val added = load(userId).toMutableSet()
+ if (added.add(spec)) {
+ store(userId, added)
+ }
+ }
+
+ override suspend fun unmarkTileAdded(userId: Int, spec: TileSpec) {
+ if (spec is TileSpec.Invalid) {
+ return
+ }
+ val added = load(userId).toMutableSet()
+ if (added.remove(spec)) {
+ store(userId, added)
+ }
+ }
+
+ private suspend fun store(userId: Int, tiles: Set<TileSpec>) {
+ val toStore =
+ tiles
+ .filter { it !is TileSpec.Invalid }
+ .joinToString(DELIMITER, transform = TileSpec::spec)
+ withContext(bgDispatcher) {
+ secureSettings.putStringForUser(
+ SETTING,
+ toStore,
+ null,
+ false,
+ userId,
+ true,
+ )
+ }
+ }
+
+ private suspend fun load(userId: Int): Set<TileSpec> {
+ return withContext(bgDispatcher) {
+ (secureSettings.getStringForUser(SETTING, userId) ?: "")
+ .split(",")
+ .map(TileSpec::create)
+ .filter { it !is TileSpec.Invalid }
+ .toSet()
+ }
+ }
+
+ companion object {
+ private const val SETTING = Settings.Secure.QS_AUTO_ADDED_TILES
+ private const val DELIMITER = ","
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/pipeline/prototyping/PrototypeCoreStartable.kt b/packages/SystemUI/src/com/android/systemui/qs/pipeline/prototyping/PrototypeCoreStartable.kt
index 8940800..bbd7234 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/pipeline/prototyping/PrototypeCoreStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/pipeline/prototyping/PrototypeCoreStartable.kt
@@ -16,11 +16,13 @@
package com.android.systemui.qs.pipeline.prototyping
+import android.util.Log
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
+import com.android.systemui.qs.pipeline.data.repository.AutoAddRepository
import com.android.systemui.qs.pipeline.data.repository.TileSpecRepository
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.statusbar.commandline.Command
@@ -46,6 +48,7 @@
@Inject
constructor(
private val tileSpecRepository: TileSpecRepository,
+ private val autoAddRepository: AutoAddRepository,
private val userRepository: UserRepository,
private val featureFlags: FeatureFlags,
@Application private val scope: CoroutineScope,
@@ -60,6 +63,13 @@
.flatMapLatest { user -> tileSpecRepository.tilesSpecs(user.id) }
.collect {}
}
+ if (featureFlags.isEnabled(Flags.QS_PIPELINE_AUTO_ADD)) {
+ scope.launch {
+ userRepository.selectedUserInfo
+ .flatMapLatest { user -> autoAddRepository.autoAddedTiles(user.id) }
+ .collect { tiles -> Log.d(TAG, "Auto-added tiles: $tiles") }
+ }
+ }
commandRegistry.registerCommand(COMMAND, ::CommandExecutor)
}
}
@@ -105,5 +115,6 @@
companion object {
private const val COMMAND = "qs-pipeline"
+ private const val TAG = "PrototypeCoreStartable"
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 0a188e0..a43f520 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -99,7 +99,7 @@
import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.QuickStepContract;
@@ -205,7 +205,7 @@
// TODO move this logic to message queue
mCentralSurfacesOptionalLazy.get().ifPresent(centralSurfaces -> {
if (event.getActionMasked() == ACTION_DOWN) {
- centralSurfaces.getNotificationPanelViewController()
+ centralSurfaces.getShadeViewController()
.startExpandLatencyTracking();
}
mHandler.post(() -> {
@@ -676,9 +676,9 @@
mNavBarControllerLazy.get().getDefaultNavigationBar();
final NavigationBarView navBarView =
mNavBarControllerLazy.get().getNavigationBarView(mContext.getDisplayId());
- final NotificationPanelViewController panelController =
+ final ShadeViewController panelController =
mCentralSurfacesOptionalLazy.get()
- .map(CentralSurfaces::getNotificationPanelViewController)
+ .map(CentralSurfaces::getShadeViewController)
.orElse(null);
if (SysUiState.DEBUG) {
Log.d(TAG_OPS, "Updating sysui state flags: navBarFragment=" + navBarFragment
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index a4a7d4c..d28ccff 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -178,7 +178,6 @@
import com.android.systemui.statusbar.notification.PropertyAnimator;
import com.android.systemui.statusbar.notification.ViewGroupFadeHelper;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
@@ -243,11 +242,6 @@
public final class NotificationPanelViewController implements ShadeSurface, Dumpable {
public static final String TAG = NotificationPanelView.class.getSimpleName();
- public static final float FLING_MAX_LENGTH_SECONDS = 0.6f;
- public static final float FLING_SPEED_UP_FACTOR = 0.6f;
- public static final float FLING_CLOSING_MAX_LENGTH_SECONDS = 0.6f;
- public static final float FLING_CLOSING_SPEED_UP_FACTOR = 0.6f;
- public static final int WAKEUP_ANIMATION_DELAY_MS = 250;
private static final boolean DEBUG_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG);
private static final boolean SPEW_LOGCAT = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE);
private static final boolean DEBUG_DRAWABLE = false;
@@ -255,12 +249,6 @@
VibrationEffect.get(VibrationEffect.EFFECT_STRENGTH_MEDIUM, false);
/** The parallax amount of the quick settings translation when dragging down the panel. */
public static final float QS_PARALLAX_AMOUNT = 0.175f;
- /** Fling expanding QS. */
- public static final int FLING_EXPAND = 0;
- /** Fling collapsing QS, potentially stopping when QS becomes QQS. */
- public static final int FLING_COLLAPSE = 1;
- /** Fling until QS is completely hidden. */
- public static final int FLING_HIDE = 2;
/** The delay to reset the hint text when the hint animation is finished running. */
private static final int HINT_RESET_DELAY_MS = 1200;
private static final long ANIMATION_DELAY_ICON_FADE_IN =
@@ -870,8 +858,8 @@
mKeyguardBypassController = bypassController;
mUpdateMonitor = keyguardUpdateMonitor;
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
- lockscreenShadeTransitionController.setNotificationPanelController(this);
- shadeTransitionController.setNotificationPanelViewController(this);
+ lockscreenShadeTransitionController.setShadeViewController(this);
+ shadeTransitionController.setShadeViewController(this);
dynamicPrivacyController.addListener(this::onDynamicPrivacyChanged);
quickSettingsController.setExpansionHeightListener(this::onQsSetExpansionHeightCalled);
quickSettingsController.setQsStateUpdateListener(this::onQsStateUpdated);
@@ -1023,7 +1011,7 @@
mKeyguardStatusBarViewController =
mKeyguardStatusBarViewComponentFactory.build(
mKeyguardStatusBar,
- mNotificationPanelViewStateProvider)
+ mShadeViewStateProvider)
.getKeyguardStatusBarViewController();
mKeyguardStatusBarViewController.init();
@@ -1033,9 +1021,6 @@
userAvatarContainer,
keyguardUserSwitcherView);
- NotificationStackScrollLayout stackScrollLayout = mView.findViewById(
- R.id.notification_stack_scroller);
- mNotificationStackScrollLayoutController.attach(stackScrollLayout);
mNotificationStackScrollLayoutController.setOnHeightChangedListener(
new NsslHeightChangedListener());
mNotificationStackScrollLayoutController.setOnEmptySpaceClickListener(
@@ -1618,10 +1603,7 @@
return isOnAod();
}
- /**
- * Notify us that {@link NotificationWakeUpCoordinator} is going to play the doze wakeup
- * animation after a delay. If so, we'll keep the clock centered until that animation starts.
- */
+ @Override
public void setWillPlayDelayedDozeAmountAnimation(boolean willPlay) {
if (mWillPlayDelayedDozeAmountAnimation == willPlay) return;
@@ -1709,8 +1691,7 @@
final float extraSpaceForShelf = lockIconPadding - noShelfOverlapBottomPadding;
if (extraSpaceForShelf > 0f) {
- return Math.min(mNotificationShelfController.getIntrinsicHeight(),
- extraSpaceForShelf);
+ return Math.min(getShelfHeight(), extraSpaceForShelf);
}
return 0f;
}
@@ -1732,10 +1713,18 @@
mNotificationStackScrollLayoutController.getView(),
getVerticalSpaceForLockscreenNotifications(),
getVerticalSpaceForLockscreenShelf(),
- mNotificationShelfController.getIntrinsicHeight()
+ getShelfHeight()
);
}
+ private int getShelfHeight() {
+ if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+ return mNotificationStackScrollLayoutController.getShelfHeight();
+ } else {
+ return mNotificationShelfController.getIntrinsicHeight();
+ }
+ }
+
private void updateClock() {
if (mIsOcclusionTransitionRunning) {
return;
@@ -2817,6 +2806,7 @@
@Override
public void setBouncerShowing(boolean bouncerShowing) {
mBouncerShowing = bouncerShowing;
+ mNotificationStackScrollLayoutController.updateShowEmptyShadeView();
updateVisibility();
}
@@ -3308,16 +3298,6 @@
public boolean hasPulsingNotifications() {
return mNotificationListContainer.hasPulsingNotifications();
}
-
- @Override
- public ActivatableNotificationView getActivatedChild() {
- return mNotificationStackScrollLayoutController.getActivatedChild();
- }
-
- @Override
- public void setActivatedChild(ActivatableNotificationView o) {
- mNotificationStackScrollLayoutController.setActivatedChild(o);
- }
}
@Override
@@ -3338,12 +3318,12 @@
mGestureRecorder = recorder;
mHideExpandedRunnable = hideExpandedRunnable;
+ mNotificationShelfController = notificationShelfController;
if (!mFeatureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
mNotificationStackScrollLayoutController.setShelfController(
notificationShelfController);
+ mLockscreenShadeTransitionController.bindController(notificationShelfController);
}
- mNotificationShelfController = notificationShelfController;
- mLockscreenShadeTransitionController.bindController(notificationShelfController);
updateMaxDisplayedNotifications(true);
}
@@ -3433,8 +3413,9 @@
Log.d(TAG, "Updating panel sysui state flags: fullyExpanded="
+ isFullyExpanded() + " inQs=" + mQsController.getExpanded());
}
+ boolean isPanelVisible = mCentralSurfaces != null && mCentralSurfaces.isPanelExpanded();
mSysUiState
- .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE, getExpandedFraction() > 0)
+ .setFlag(SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE, isPanelVisible)
.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
isFullyExpanded() && !mQsController.getExpanded())
.setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED,
@@ -4384,29 +4365,8 @@
}
}
- /**
- * An interface that provides the current state of the notification panel and related views,
- * which is needed to calculate {@link KeyguardStatusBarView}'s state in
- * {@link KeyguardStatusBarViewController}.
- */
- public interface NotificationPanelViewStateProvider {
- /** Returns the expanded height of the panel view. */
- float getPanelViewExpandedHeight();
-
- /**
- * Returns true if heads up should be visible.
- *
- * TODO(b/138786270): If HeadsUpAppearanceController was injectable, we could inject it into
- * {@link KeyguardStatusBarViewController} and remove this method.
- */
- boolean shouldHeadsUpBeVisible();
-
- /** Return the fraction of the shade that's expanded, when in lockscreen. */
- float getLockscreenShadeDragProgress();
- }
-
- private final NotificationPanelViewStateProvider mNotificationPanelViewStateProvider =
- new NotificationPanelViewStateProvider() {
+ private final ShadeViewStateProvider mShadeViewStateProvider =
+ new ShadeViewStateProvider() {
@Override
public float getPanelViewExpandedHeight() {
return getExpandedHeight();
@@ -4423,13 +4383,7 @@
}
};
- /**
- * Reconfigures the shade to show the AOD UI (clock, smartspace, etc). This is called by the
- * screen off animation controller in order to animate in AOD without "actually" fully switching
- * to the KEYGUARD state, which is a heavy transition that causes jank as 10+ files react to the
- * change.
- */
- @VisibleForTesting
+ @Override
public void showAodUi() {
setDozing(true /* dozing */, false /* animate */);
mStatusBarStateController.setUpcomingState(KEYGUARD);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java
index 2b6327f..d75190e 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java
@@ -84,10 +84,6 @@
setMotionEventSplittingEnabled(false);
}
- public NotificationPanelView getNotificationPanelView() {
- return findViewById(R.id.notification_panel);
- }
-
@Override
public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
final Insets insets = windowInsets.getInsetsIgnoringVisibility(systemBars());
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
index 2f4cc14..ebbf1b5 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
@@ -288,7 +288,6 @@
mService.userActivity();
mService.wakeUpIfDozing(
mClock.uptimeMillis(),
- mView,
"LOCK_ICON_TOUCH",
PowerManager.WAKE_REASON_GESTURE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt b/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt
index b42bdaa..fd82e2f 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt
@@ -90,7 +90,6 @@
shadeLogger.d("Single tap handled, requesting centralSurfaces.wakeUpIfDozing")
centralSurfaces.wakeUpIfDozing(
SystemClock.uptimeMillis(),
- notificationShadeWindowView,
"PULSING_SINGLE_TAP",
PowerManager.WAKE_REASON_TAP
)
@@ -116,7 +115,6 @@
) {
centralSurfaces.wakeUpIfDozing(
SystemClock.uptimeMillis(),
- notificationShadeWindowView,
"PULSING_DOUBLE_TAP",
PowerManager.WAKE_REASON_TAP
)
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
index a931838..1839e13 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeLogger.kt
@@ -20,9 +20,9 @@
import com.android.systemui.log.dagger.ShadeLog
import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogLevel
-import com.android.systemui.shade.NotificationPanelViewController.FLING_COLLAPSE
-import com.android.systemui.shade.NotificationPanelViewController.FLING_EXPAND
-import com.android.systemui.shade.NotificationPanelViewController.FLING_HIDE
+import com.android.systemui.shade.ShadeViewController.Companion.FLING_COLLAPSE
+import com.android.systemui.shade.ShadeViewController.Companion.FLING_EXPAND
+import com.android.systemui.shade.ShadeViewController.Companion.FLING_HIDE
import com.google.errorprone.annotations.CompileTimeConstant
import javax.inject.Inject
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
new file mode 100644
index 0000000..b0b9ab2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import android.view.LayoutInflater
+import com.android.systemui.R
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+import dagger.Module
+import dagger.Provides
+
+/** Module for classes related to the notification shade. */
+@Module
+abstract class ShadeModule {
+ companion object {
+ @Provides
+ @SysUISingleton
+ // TODO(b/277762009): Do something similar to
+ // {@link StatusBarWindowModule.InternalWindowView} so that only
+ // {@link NotificationShadeWindowViewController} can inject this view.
+ fun providesNotificationShadeWindowView(
+ layoutInflater: LayoutInflater,
+ ): NotificationShadeWindowView {
+ return layoutInflater.inflate(R.layout.super_notification_shade, /* root= */ null)
+ as NotificationShadeWindowView?
+ ?: throw IllegalStateException(
+ "R.layout.super_notification_shade could not be properly inflated"
+ )
+ }
+
+ // TODO(b/277762009): Only allow this view's controller to inject the view. See above.
+ @Provides
+ @SysUISingleton
+ fun providesNotificationStackScrollLayout(
+ notificationShadeWindowView: NotificationShadeWindowView,
+ ): NotificationStackScrollLayout {
+ return notificationShadeWindowView.findViewById(R.id.notification_stack_scroller)
+ }
+
+ // TODO(b/277762009): Only allow this view's controller to inject the view. See above.
+ @Provides
+ @SysUISingleton
+ fun providesNotificationPanelView(
+ notificationShadeWindowView: NotificationShadeWindowView,
+ ): NotificationPanelView {
+ return notificationShadeWindowView.findViewById(R.id.notification_panel)
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeSurface.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeSurface.kt
index b698bd3..5ac36bf 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeSurface.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeSurface.kt
@@ -94,6 +94,12 @@
fun setTouchAndAnimationDisabled(disabled: Boolean)
/**
+ * Notify us that {@link NotificationWakeUpCoordinator} is going to play the doze wakeup
+ * animation after a delay. If so, we'll keep the clock centered until that animation starts.
+ */
+ fun setWillPlayDelayedDozeAmountAnimation(willPlay: Boolean)
+
+ /**
* Sets the dozing state.
*
* @param dozing `true` when dozing.
@@ -104,18 +110,12 @@
/** @see view.setImportantForAccessibility */
fun setImportantForAccessibility(mode: Int)
- /** Sets Qs ScrimEnabled and updates QS state. */
- fun setQsScrimEnabled(qsScrimEnabled: Boolean)
-
/** Sets the view's X translation to zero. */
fun resetTranslation()
/** Sets the view's alpha to max. */
fun resetAlpha()
- /** @see ViewGroupFadeHelper.reset */
- fun resetViewGroupFade()
-
/** Called when Back gesture has been committed (i.e. a back event has definitely occurred) */
fun onBackPressed()
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
index 34c9f6d..d5a9e95 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt
@@ -18,11 +18,12 @@
import android.view.MotionEvent
import android.view.ViewGroup
import com.android.systemui.statusbar.RemoteInputController
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController
import com.android.systemui.statusbar.phone.KeyguardBottomAreaView
+import com.android.systemui.statusbar.phone.KeyguardStatusBarView
+import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController
import java.util.function.Consumer
/**
@@ -148,6 +149,9 @@
/** Sets whether the screen has temporarily woken up to display notifications. */
fun setPulsing(pulsing: Boolean)
+ /** Sets Qs ScrimEnabled and updates QS state. */
+ fun setQsScrimEnabled(qsScrimEnabled: Boolean)
+
/** Sets the top spacing for the ambient indicator. */
fun setAmbientIndicationTop(ambientIndicationTop: Int, ambientTextVisible: Boolean)
@@ -167,6 +171,9 @@
*/
val isUnlockHintRunning: Boolean
+ /** @see ViewGroupFadeHelper.reset */
+ fun resetViewGroupFade()
+
/**
* Set the alpha and translationY of the keyguard elements which only show on the lockscreen,
* but not in shade locked / shade. This is used when dragging down to the full shade.
@@ -184,6 +191,14 @@
fun setKeyguardStatusBarAlpha(alpha: Float)
/**
+ * Reconfigures the shade to show the AOD UI (clock, smartspace, etc). This is called by the
+ * screen off animation controller in order to animate in AOD without "actually" fully switching
+ * to the KEYGUARD state, which is a heavy transition that causes jank as 10+ files react to the
+ * change.
+ */
+ fun showAodUi()
+
+ /**
* This method should not be used anymore, you should probably use [.isShadeFullyOpen] instead.
* It was overused as indicating if shade is open or we're on keyguard/AOD. Moving forward we
* should be explicit about the what state we're checking.
@@ -209,6 +224,23 @@
/** Returns the ShadeNotificationPresenter. */
val shadeNotificationPresenter: ShadeNotificationPresenter
+
+ companion object {
+ const val WAKEUP_ANIMATION_DELAY_MS = 250
+ const val FLING_MAX_LENGTH_SECONDS = 0.6f
+ const val FLING_SPEED_UP_FACTOR = 0.6f
+ const val FLING_CLOSING_MAX_LENGTH_SECONDS = 0.6f
+ const val FLING_CLOSING_SPEED_UP_FACTOR = 0.6f
+
+ /** Fling expanding QS. */
+ const val FLING_EXPAND = 0
+
+ /** Fling collapsing QS, potentially stopping when QS becomes QQS. */
+ const val FLING_COLLAPSE = 1
+
+ /** Fling until QS is completely hidden. */
+ const val FLING_HIDE = 2
+ }
}
/** Manages listeners for when users begin expanding the shade from a HUN. */
@@ -254,7 +286,24 @@
/** Returns whether the screen has temporarily woken up to display notifications. */
fun hasPulsingNotifications(): Boolean
+}
- /** The current activated notification. */
- var activatedChild: ActivatableNotificationView?
+/**
+ * An interface that provides the current state of the notification panel and related views, which
+ * is needed to calculate [KeyguardStatusBarView]'s state in [KeyguardStatusBarViewController].
+ */
+interface ShadeViewStateProvider {
+ /** Returns the expanded height of the panel view. */
+ val panelViewExpandedHeight: Float
+
+ /**
+ * Returns true if heads up should be visible.
+ *
+ * TODO(b/138786270): If HeadsUpAppearanceController was injectable, we could inject it into
+ * [KeyguardStatusBarViewController] and remove this method.
+ */
+ fun shouldHeadsUpBeVisible(): Boolean
+
+ /** Return the fraction of the shade that's expanded, when in lockscreen. */
+ val lockscreenShadeDragProgress: Float
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeTransitionController.kt
index 129d09e..41be526 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeTransitionController.kt
@@ -22,10 +22,10 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.qs.QS
-import com.android.systemui.shade.NotificationPanelViewController
import com.android.systemui.shade.PanelState
import com.android.systemui.shade.ShadeExpansionChangeEvent
import com.android.systemui.shade.ShadeExpansionStateManager
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.shade.panelStateToString
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
@@ -47,7 +47,7 @@
private val statusBarStateController: SysuiStatusBarStateController,
) {
- lateinit var notificationPanelViewController: NotificationPanelViewController
+ lateinit var shadeViewController: ShadeViewController
lateinit var notificationStackScrollLayoutController: NotificationStackScrollLayoutController
lateinit var qs: QS
@@ -93,7 +93,7 @@
currentPanelState: ${currentPanelState?.panelStateToString()}
lastPanelExpansionChangeEvent: $lastShadeExpansionChangeEvent
qs.isInitialized: ${this::qs.isInitialized}
- npvc.isInitialized: ${this::notificationPanelViewController.isInitialized}
+ npvc.isInitialized: ${this::shadeViewController.isInitialized}
nssl.isInitialized: ${this::notificationStackScrollLayoutController.isInitialized}
""".trimIndent())
}
diff --git a/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt b/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt
index 26149321..ba9d13d 100644
--- a/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt
@@ -75,7 +75,11 @@
)
}
- override fun startPendingIntent(pi: PendingIntent, showOnLockscreen: Boolean) {
+ override fun startPendingIntent(
+ view: View,
+ pi: PendingIntent,
+ showOnLockscreen: Boolean
+ ) {
if (showOnLockscreen) {
pi.send()
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LegacyNotificationShelfControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/LegacyNotificationShelfControllerImpl.java
index f7d37e6..4ef2063 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LegacyNotificationShelfControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LegacyNotificationShelfControllerImpl.java
@@ -20,7 +20,6 @@
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ActivatableNotificationViewController;
import com.android.systemui.statusbar.notification.row.dagger.NotificationRowScope;
import com.android.systemui.statusbar.notification.stack.AmbientState;
@@ -107,11 +106,6 @@
}
@Override
- public void setOnActivatedListener(ActivatableNotificationView.OnActivatedListener listener) {
- mView.setOnActivatedListener(listener);
- }
-
- @Override
public void setOnClickListener(View.OnClickListener onClickListener) {
mView.setOnClickListener(onClickListener);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt
index 5fb5002..fec6112 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt
@@ -6,7 +6,7 @@
import com.android.systemui.R
import com.android.systemui.dump.DumpManager
import com.android.systemui.media.controls.ui.MediaHierarchyManager
-import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.policy.ConfigurationController
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
@@ -17,7 +17,7 @@
@AssistedInject
constructor(
private val mediaHierarchyManager: MediaHierarchyManager,
- @Assisted private val notificationPanelController: NotificationPanelViewController,
+ @Assisted private val notificationPanelController: ShadeViewController,
context: Context,
configurationController: ConfigurationController,
dumpManager: DumpManager
@@ -114,7 +114,7 @@
@AssistedFactory
fun interface Factory {
fun create(
- notificationPanelController: NotificationPanelViewController
+ notificationPanelController: ShadeViewController
): LockscreenShadeKeyguardTransitionController
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index 63e29d1..faf592e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -30,7 +30,7 @@
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.QS
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
@@ -79,7 +79,7 @@
private set
private var useSplitShade: Boolean = false
private lateinit var nsslController: NotificationStackScrollLayoutController
- lateinit var notificationPanelController: NotificationPanelViewController
+ lateinit var shadeViewController: ShadeViewController
lateinit var centralSurfaces: CentralSurfaces
lateinit var qS: QS
@@ -182,7 +182,7 @@
}
private val keyguardTransitionController by lazy {
- keyguardTransitionControllerFactory.create(notificationPanelController)
+ keyguardTransitionControllerFactory.create(shadeViewController)
}
private val qsTransitionController = qsTransitionControllerFactory.create { qS }
@@ -276,7 +276,6 @@
if (statusBarStateController.state == StatusBarState.KEYGUARD) {
centralSurfaces.wakeUpIfDozing(
SystemClock.uptimeMillis(),
- it,
"SHADE_CLICK",
PowerManager.WAKE_REASON_GESTURE,
)
@@ -320,7 +319,7 @@
startingChild.onExpandedByGesture(
true /* drag down is always an open */)
}
- notificationPanelController.transitionToExpandedShade(delay)
+ shadeViewController.transitionToExpandedShade(delay)
callbacks.forEach { it.setTransitionToFullShadeAmount(0f,
true /* animated */, delay) }
@@ -531,7 +530,7 @@
} else {
// Let's only animate notifications
animationHandler = { delay: Long ->
- notificationPanelController.transitionToExpandedShade(delay)
+ shadeViewController.transitionToExpandedShade(delay)
}
}
goToLockedShadeInternal(expandedView, animationHandler,
@@ -649,7 +648,7 @@
*/
private fun performDefaultGoToFullShadeAnimation(delay: Long) {
logger.logDefaultGoToFullShadeAnimation(delay)
- notificationPanelController.transitionToExpandedShade(delay)
+ shadeViewController.transitionToExpandedShade(delay)
animateAppear(delay)
}
@@ -674,7 +673,7 @@
} else {
pulseHeight = height
val overflow = nsslController.setPulseHeight(height)
- notificationPanelController.setOverStretchAmount(overflow)
+ shadeViewController.setOverStretchAmount(overflow)
val transitionHeight = if (keyguardBypassController.bypassEnabled) height else 0.0f
transitionToShadeAmountCommon(transitionHeight)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index ea9817c..72ae16e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -24,6 +24,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Notification;
+import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
@@ -43,6 +44,7 @@
import android.view.View;
import android.widget.ImageView;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.colorextraction.SysuiColorExtractor;
@@ -117,6 +119,8 @@
private ScrimController mScrimController;
@Nullable
private LockscreenWallpaper mLockscreenWallpaper;
+ @VisibleForTesting
+ boolean mIsLockscreenLiveWallpaperEnabled;
private final DelayableExecutor mMainExecutor;
@@ -179,7 +183,8 @@
StatusBarStateController statusBarStateController,
SysuiColorExtractor colorExtractor,
KeyguardStateController keyguardStateController,
- DumpManager dumpManager) {
+ DumpManager dumpManager,
+ WallpaperManager wallpaperManager) {
mContext = context;
mMediaArtworkProcessor = mediaArtworkProcessor;
mKeyguardBypassController = keyguardBypassController;
@@ -195,6 +200,7 @@
mStatusBarStateController = statusBarStateController;
mColorExtractor = colorExtractor;
mKeyguardStateController = keyguardStateController;
+ mIsLockscreenLiveWallpaperEnabled = wallpaperManager.isLockscreenLiveWallpaperEnabled();
setupNotifPipeline();
@@ -474,13 +480,16 @@
* Refresh or remove lockscreen artwork from media metadata or the lockscreen wallpaper.
*/
public void updateMediaMetaData(boolean metaDataChanged, boolean allowEnterAnimation) {
+
+ if (mIsLockscreenLiveWallpaperEnabled) return;
+
Trace.beginSection("CentralSurfaces#updateMediaMetaData");
if (!SHOW_LOCKSCREEN_MEDIA_ARTWORK) {
Trace.endSection();
return;
}
- if (mBackdrop == null) {
+ if (getBackDropView() == null) {
Trace.endSection();
return; // called too early
}
@@ -709,6 +718,12 @@
&& (mBackdropFront.isVisibleToUser() || mBackdropBack.isVisibleToUser());
}
+ // TODO(b/273443374) temporary test helper; remove
+ @VisibleForTesting
+ BackDropView getBackDropView() {
+ return mBackdrop;
+ }
+
/**
* {@link AsyncTask} to prepare album art for use as backdrop on lock screen.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
index cb414ba..1c9bc60 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
@@ -15,7 +15,6 @@
*/
package com.android.systemui.statusbar;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
/**
@@ -25,8 +24,7 @@
* for affecting the state of the system (e.g. starting an intent, given that the presenter may
* want to perform some action before doing so).
*/
-public interface NotificationPresenter extends ExpandableNotificationRow.OnExpandClickListener,
- ActivatableNotificationView.OnActivatedListener {
+public interface NotificationPresenter extends ExpandableNotificationRow.OnExpandClickListener {
/**
* Returns true if the presenter is not visible. For example, it may not be necessary to do
* animations if this returns true.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
index 9e2a07e..c519115 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
@@ -124,7 +124,7 @@
View view, PendingIntent pendingIntent, RemoteViews.RemoteResponse response) {
mCentralSurfacesOptionalLazy.get().ifPresent(
centralSurfaces -> centralSurfaces.wakeUpIfDozing(
- SystemClock.uptimeMillis(), view, "NOTIFICATION_CLICK",
+ SystemClock.uptimeMillis(), "NOTIFICATION_CLICK",
PowerManager.WAKE_REASON_GESTURE));
final NotificationEntry entry = getNotificationForParent(view.getParent());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
index 07cfd0d..1619dda 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelfController.kt
@@ -21,8 +21,6 @@
import android.view.View.OnClickListener
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView.OnActivatedListener
import com.android.systemui.statusbar.notification.row.ExpandableView
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
@@ -43,9 +41,6 @@
/** Whether or not the shelf can modify the color of notifications in the shade. */
fun canModifyColorOfNotifications(): Boolean
- /** @see ActivatableNotificationView.setOnActivatedListener */
- fun setOnActivatedListener(listener: OnActivatedListener)
-
/** Binds the shelf to the host [NotificationStackScrollLayout], via its Controller. */
fun bind(
ambientState: AmbientState,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt
index 5351024..2ad71e7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt
@@ -17,12 +17,11 @@
import android.app.Fragment
import com.android.systemui.R
+import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.fragments.FragmentHostManager
import com.android.systemui.statusbar.phone.PhoneStatusBarTransitions
import com.android.systemui.statusbar.phone.PhoneStatusBarView
import com.android.systemui.statusbar.phone.PhoneStatusBarViewController
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
import com.android.systemui.statusbar.window.StatusBarWindowController
@@ -33,7 +32,7 @@
* Responsible for creating the status bar window and initializing the root components of that
* window (see [CollapsedStatusBarFragment])
*/
-@CentralSurfacesScope
+@SysUISingleton
class StatusBarInitializer @Inject constructor(
private val windowController: StatusBarWindowController,
private val creationListeners: Set<@JvmSuppressWildcards OnStatusBarViewInitializedListener>,
@@ -42,10 +41,12 @@
var statusBarViewUpdatedListener: OnStatusBarViewUpdatedListener? = null
/**
- * Creates the status bar window and root views, and initializes the component
+ * Creates the status bar window and root views, and initializes the component.
+ *
+ * TODO(b/277762009): Inject StatusBarFragmentCreator and make this class a CoreStartable.
*/
fun initializeStatusBar(
- centralSurfacesComponent: CentralSurfacesComponent
+ statusBarFragmentCreator: () -> CollapsedStatusBarFragment,
) {
windowController.fragmentHostManager.addTagListener(
CollapsedStatusBarFragment.TAG,
@@ -69,7 +70,7 @@
}).fragmentManager
.beginTransaction()
.replace(R.id.status_bar_container,
- centralSurfacesComponent.createCollapsedStatusBarFragment(),
+ statusBarFragmentCreator.invoke(),
CollapsedStatusBarFragment.TAG)
.commit()
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
index 34300c7..f6c9a5c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.dagger;
import android.app.IActivityManager;
+import android.app.WallpaperManager;
import android.content.Context;
import android.os.RemoteException;
import android.service.dreams.IDreamManager;
@@ -142,7 +143,8 @@
StatusBarStateController statusBarStateController,
SysuiColorExtractor colorExtractor,
KeyguardStateController keyguardStateController,
- DumpManager dumpManager) {
+ DumpManager dumpManager,
+ WallpaperManager wallpaperManager) {
return new NotificationMediaManager(
context,
centralSurfacesOptionalLazy,
@@ -157,7 +159,8 @@
statusBarStateController,
colorExtractor,
keyguardStateController,
- dumpManager);
+ dumpManager,
+ wallpaperManager);
}
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
index 826e289..950dbd9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
@@ -353,7 +353,11 @@
}
}
- override fun startPendingIntent(pi: PendingIntent, showOnLockscreen: Boolean) {
+ override fun startPendingIntent(
+ view: View,
+ pi: PendingIntent,
+ showOnLockscreen: Boolean
+ ) {
if (showOnLockscreen) {
pi.send()
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt
index 00d8c42..5f28ecb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt
@@ -31,26 +31,12 @@
fun isDevLoggingEnabled(): Boolean =
featureFlags.isEnabled(Flags.NOTIFICATION_PIPELINE_DEVELOPER_LOGGING)
- fun fullScreenIntentRequiresKeyguard(): Boolean =
- featureFlags.isEnabled(Flags.FSI_REQUIRES_KEYGUARD)
-
- fun fsiOnDNDUpdate(): Boolean = featureFlags.isEnabled(Flags.FSI_ON_DND_UPDATE)
-
- fun forceDemoteFsi(): Boolean =
- sysPropFlags.isEnabled(NotificationFlags.FSI_FORCE_DEMOTE)
-
- fun showStickyHunForDeniedFsi(): Boolean =
- sysPropFlags.isEnabled(NotificationFlags.SHOW_STICKY_HUN_FOR_DENIED_FSI)
-
fun allowDismissOngoing(): Boolean =
sysPropFlags.isEnabled(NotificationFlags.ALLOW_DISMISS_ONGOING)
fun isOtpRedactionEnabled(): Boolean =
sysPropFlags.isEnabled(NotificationFlags.OTP_REDACTION)
- val shouldFilterUnseenNotifsOnKeyguard: Boolean
- get() = featureFlags.isEnabled(Flags.FILTER_UNSEEN_NOTIFS_ON_KEYGUARD)
-
val isNoHunForOldWhenEnabled: Boolean
get() = featureFlags.isEnabled(Flags.NO_HUN_FOR_OLD_WHEN)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
index 705cf92..bab553e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationClicker.java
@@ -71,7 +71,7 @@
}
mCentralSurfacesOptional.ifPresent(centralSurfaces -> centralSurfaces.wakeUpIfDozing(
- SystemClock.uptimeMillis(), v, "NOTIFICATION_CLICK",
+ SystemClock.uptimeMillis(), "NOTIFICATION_CLICK",
PowerManager.WAKE_REASON_GESTURE));
final ExpandableNotificationRow row = (ExpandableNotificationRow) v;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
index 20af6ca..fe0b28d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
@@ -26,9 +26,9 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.shade.NotificationPanelViewController.WAKEUP_ANIMATION_DELAY_MS
import com.android.systemui.shade.ShadeExpansionChangeEvent
import com.android.systemui.shade.ShadeExpansionListener
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
@@ -383,7 +383,7 @@
ObjectAnimator.ofFloat(this, delayedDozeAmount, 0.0f).apply {
interpolator = InterpolatorsAndroidX.LINEAR
duration = StackStateAnimator.ANIMATION_DURATION_WAKEUP.toLong()
- startDelay = WAKEUP_ANIMATION_DELAY_MS.toLong()
+ startDelay = ShadeViewController.WAKEUP_ANIMATION_DELAY_MS.toLong()
doOnStart {
wakeUpListeners.forEach { it.onDelayedDozeAmountAnimationRunning(true) }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
index 4d0e746..0529c94 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
@@ -392,8 +392,7 @@
mNotificationInterruptStateProvider.logFullScreenIntentDecision(entry, fsiDecision)
if (fsiDecision.shouldLaunch) {
mLaunchFullScreenIntentProvider.launchFullScreenIntent(entry)
- } else if (mFlags.fsiOnDNDUpdate() &&
- fsiDecision == FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND) {
+ } else if (fsiDecision == FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND) {
// If DND was the only reason this entry was suppressed, note it for potential
// reconsideration on later ranking updates.
addForFSIReconsideration(entry, mSystemClock.currentTimeMillis())
@@ -509,7 +508,7 @@
// - was suppressed from FSI launch only by a DND suppression
// - is within the recency window for reconsideration
// If any of these entries are no longer suppressed, launch the FSI now.
- if (mFlags.fsiOnDNDUpdate() && isCandidateForFSIReconsideration(entry)) {
+ if (isCandidateForFSIReconsideration(entry)) {
val decision =
mNotificationInterruptStateProvider.getFullScreenIntentDecision(entry)
if (decision.shouldLaunch) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.kt
index 6322edf..2fa070c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.kt
@@ -21,8 +21,10 @@
import android.os.UserHandle
import android.provider.Settings
import androidx.annotation.VisibleForTesting
+import com.android.systemui.Dumpable
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.data.repository.KeyguardRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -42,8 +44,14 @@
import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider
import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.headsUpEvents
+import com.android.systemui.util.asIndenting
+import com.android.systemui.util.indentIfPossible
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
+import java.io.PrintWriter
+import javax.inject.Inject
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -57,13 +65,11 @@
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.transformLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.yield
-import javax.inject.Inject
-import kotlin.time.Duration
-import kotlin.time.Duration.Companion.seconds
/**
* Filters low priority and privacy-sensitive notifications from the lockscreen, and hides section
@@ -74,17 +80,19 @@
@Inject
constructor(
@Background private val bgDispatcher: CoroutineDispatcher,
+ private val dumpManager: DumpManager,
private val headsUpManager: HeadsUpManager,
private val keyguardNotificationVisibilityProvider: KeyguardNotificationVisibilityProvider,
private val keyguardRepository: KeyguardRepository,
private val keyguardTransitionRepository: KeyguardTransitionRepository,
+ private val logger: KeyguardCoordinatorLogger,
private val notifPipelineFlags: NotifPipelineFlags,
@Application private val scope: CoroutineScope,
private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider,
private val secureSettings: SecureSettings,
private val seenNotifsProvider: SeenNotificationsProviderImpl,
private val statusBarStateController: StatusBarStateController,
-) : Coordinator {
+) : Coordinator, Dumpable {
private val unseenNotifications = mutableSetOf<NotificationEntry>()
private var unseenFilterEnabled = false
@@ -95,9 +103,7 @@
pipeline.addFinalizeFilter(notifFilter)
keyguardNotificationVisibilityProvider.addOnStateChangedListener(::invalidateListFromFilter)
updateSectionHeadersVisibility()
- if (notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard) {
- attachUnseenFilter(pipeline)
- }
+ attachUnseenFilter(pipeline)
}
private fun attachUnseenFilter(pipeline: NotifPipeline) {
@@ -105,6 +111,7 @@
pipeline.addCollectionListener(collectionListener)
scope.launch { trackUnseenNotificationsWhileUnlocked() }
scope.launch { invalidateWhenUnseenSettingChanges() }
+ dumpManager.registerDumpable(this)
}
private suspend fun trackUnseenNotificationsWhileUnlocked() {
@@ -124,14 +131,16 @@
// If the screen is turning off, stop tracking, but if that transition is
// cancelled, then start again.
emitAll(
- keyguardTransitionRepository.transitions
- .map { step -> !step.isScreenTurningOff }
+ keyguardTransitionRepository.transitions.map { step ->
+ !step.isScreenTurningOff
+ }
)
}
}
// Prevent double emit of `false` caused by transition to AOD, followed by keyguard
// showing
.distinctUntilChanged()
+ .onEach { trackingUnseen -> logger.logTrackingUnseen(trackingUnseen) }
// Use collectLatest so that trackUnseenNotifications() is cancelled when the keyguard is
// showing again
@@ -142,9 +151,11 @@
// set when unlocked
awaitTimeSpentNotDozing(SEEN_TIMEOUT)
clearUnseenOnBeginTracking = true
+ logger.logSeenOnLockscreen()
} else {
if (clearUnseenOnBeginTracking) {
clearUnseenOnBeginTracking = false
+ logger.logAllMarkedSeenOnUnlock()
unseenNotifications.clear()
}
unseenNotifFilter.invalidateList("keyguard no longer showing")
@@ -168,6 +179,8 @@
.first()
}
+ // Track "unseen" notifications, marking them as seen when either shade is expanded or the
+ // notification becomes heads up.
private suspend fun trackUnseenNotifications() {
coroutineScope {
launch { clearUnseenNotificationsWhenShadeIsExpanded() }
@@ -181,6 +194,7 @@
// keyguard transition and not the user expanding the shade
yield()
if (isExpanded) {
+ logger.logShadeExpanded()
unseenNotifications.clear()
}
}
@@ -192,6 +206,7 @@
.forEach { unseenNotifications.remove(it) }
headsUpManager.headsUpEvents.collect { (entry, isHun) ->
if (isHun) {
+ logger.logUnseenHun(entry.key)
unseenNotifications.remove(entry)
}
}
@@ -233,6 +248,7 @@
if (
keyguardRepository.isKeyguardShowing() || !statusBarStateController.isExpanded
) {
+ logger.logUnseenAdded(entry.key)
unseenNotifications.add(entry)
}
}
@@ -241,12 +257,15 @@
if (
keyguardRepository.isKeyguardShowing() || !statusBarStateController.isExpanded
) {
+ logger.logUnseenUpdated(entry.key)
unseenNotifications.add(entry)
}
}
override fun onEntryRemoved(entry: NotificationEntry, reason: Int) {
- unseenNotifications.remove(entry)
+ if (unseenNotifications.remove(entry)) {
+ logger.logUnseenRemoved(entry.key)
+ }
}
}
@@ -274,6 +293,7 @@
}.also { hasFiltered -> hasFilteredAnyNotifs = hasFilteredAnyNotifs || hasFiltered }
override fun onCleanup() {
+ logger.logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs)
seenNotifsProvider.hasFilteredOutSeenNotifications = hasFilteredAnyNotifs
hasFilteredAnyNotifs = false
}
@@ -308,11 +328,25 @@
sectionHeaderVisibilityProvider.sectionHeadersVisible = showSections
}
+ override fun dump(pw: PrintWriter, args: Array<out String>) =
+ with(pw.asIndenting()) {
+ println(
+ "seenNotifsProvider.hasFilteredOutSeenNotifications=" +
+ seenNotifsProvider.hasFilteredOutSeenNotifications
+ )
+ println("unseen notifications:")
+ indentIfPossible {
+ for (notification in unseenNotifications) {
+ println(notification.key)
+ }
+ }
+ }
+
companion object {
private const val TAG = "KeyguardCoordinator"
private val SEEN_TIMEOUT = 5.seconds
}
}
-private val TransitionStep.isScreenTurningOff: Boolean get() =
- transitionState == TransitionState.STARTED && to != KeyguardState.GONE
\ No newline at end of file
+private val TransitionStep.isScreenTurningOff: Boolean
+ get() = transitionState == TransitionState.STARTED && to != KeyguardState.GONE
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt
new file mode 100644
index 0000000..6503a64
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorLogger.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.coordinator
+
+import com.android.systemui.log.dagger.UnseenNotificationLog
+import com.android.systemui.plugins.log.LogBuffer
+import com.android.systemui.plugins.log.LogLevel
+import javax.inject.Inject
+
+private const val TAG = "KeyguardCoordinator"
+
+class KeyguardCoordinatorLogger
+@Inject
+constructor(
+ @UnseenNotificationLog private val buffer: LogBuffer,
+) {
+ fun logSeenOnLockscreen() =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ "Notifications on lockscreen will be marked as seen when unlocked."
+ )
+
+ fun logTrackingUnseen(trackingUnseen: Boolean) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { bool1 = trackingUnseen },
+ messagePrinter = { "${if (bool1) "Start" else "Stop"} tracking unseen notifications." },
+ )
+
+ fun logAllMarkedSeenOnUnlock() =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ "Notifications have been marked as seen now that device is unlocked."
+ )
+
+ fun logShadeExpanded() =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ "Notifications have been marked as seen due to shade expansion."
+ )
+
+ fun logUnseenAdded(key: String) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { str1 = key },
+ messagePrinter = { "Unseen notif added: $str1" },
+ )
+
+ fun logUnseenUpdated(key: String) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { str1 = key },
+ messagePrinter = { "Unseen notif updated: $str1" },
+ )
+
+ fun logUnseenRemoved(key: String) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { str1 = key },
+ messagePrinter = { "Unseen notif removed: $str1" },
+ )
+
+ fun logProviderHasFilteredOutSeenNotifs(hasFilteredAnyNotifs: Boolean) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { bool1 = hasFilteredAnyNotifs },
+ messagePrinter = { "UI showing unseen filter treatment: $bool1" },
+ )
+
+ fun logUnseenHun(key: String) =
+ buffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ messageInitializer = { str1 = key },
+ messagePrinter = { "Unseen notif has become heads up: $str1" },
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
index 611edf8..38bbb35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinderImpl.java
@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.notification.collection.inflation;
-import static com.android.systemui.flags.Flags.NOTIFICATION_INLINE_REPLY_ANIMATION;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_CONTRACTED;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_EXPANDED;
import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_PUBLIC;
@@ -31,7 +30,6 @@
import com.android.internal.util.NotificationMessagingUtil;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -73,7 +71,6 @@
private NotificationListContainer mListContainer;
private BindRowCallback mBindRowCallback;
private NotificationClicker mNotificationClicker;
- private FeatureFlags mFeatureFlags;
@Inject
public NotificationRowBinderImpl(
@@ -85,8 +82,7 @@
RowContentBindStage rowContentBindStage,
Provider<RowInflaterTask> rowInflaterTaskProvider,
ExpandableNotificationRowComponent.Builder expandableNotificationRowComponentBuilder,
- IconManager iconManager,
- FeatureFlags featureFlags) {
+ IconManager iconManager) {
mContext = context;
mNotifBindPipeline = notifBindPipeline;
mRowContentBindStage = rowContentBindStage;
@@ -96,7 +92,6 @@
mRowInflaterTaskProvider = rowInflaterTaskProvider;
mExpandableNotificationRowComponentBuilder = expandableNotificationRowComponentBuilder;
mIconManager = iconManager;
- mFeatureFlags = featureFlags;
}
/**
@@ -177,12 +172,9 @@
private void bindRow(NotificationEntry entry, ExpandableNotificationRow row) {
mListContainer.bindRow(row);
mNotificationRemoteInputManager.bindRow(row);
- row.setOnActivatedListener(mPresenter);
entry.setRow(row);
mNotifBindPipeline.manageRow(entry, row);
mBindRowCallback.onBindRow(row);
- row.setInlineReplyAnimationFlagEnabled(
- mFeatureFlags.isEnabled(NOTIFICATION_INLINE_REPLY_ANIMATION));
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptLogger.kt
index a352f23..115e0502 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptLogger.kt
@@ -16,6 +16,8 @@
package com.android.systemui.statusbar.notification.interruption
+import android.util.Log
+
import com.android.systemui.log.dagger.NotificationInterruptLog
import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogLevel.DEBUG
@@ -23,6 +25,7 @@
import com.android.systemui.plugins.log.LogLevel.WARNING
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.logKey
+import com.android.systemui.util.Compile
import javax.inject.Inject
class NotificationInterruptLogger @Inject constructor(
@@ -44,11 +47,13 @@
}
fun logNoBubbleNotAllowed(entry: NotificationEntry) {
- buffer.log(TAG, DEBUG, {
- str1 = entry.logKey
- }, {
- "No bubble up: not allowed to bubble: $str1"
- })
+ if (Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)) {
+ buffer.log(TAG, DEBUG, {
+ str1 = entry.logKey
+ }, {
+ "No bubble up: not allowed to bubble: $str1"
+ })
+ }
}
fun logNoBubbleNoMetadata(entry: NotificationEntry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java
index 9a1747a..88994b9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProvider.java
@@ -98,10 +98,6 @@
*/
NO_FSI_NO_HUN_OR_KEYGUARD(false),
/**
- * No conditions blocking FSI launch.
- */
- FSI_EXPECTED_NOT_TO_HUN(true),
- /**
* The notification is coming from a suspended packages, so FSI is suppressed.
*/
NO_FSI_SUSPENDED(false);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java
index a48870b..609f9d4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java
@@ -321,30 +321,22 @@
suppressedByDND);
}
- // Check whether FSI requires the keyguard to be showing.
- if (mFlags.fullScreenIntentRequiresKeyguard()) {
-
- // If notification won't HUN and keyguard is showing, launch the FSI.
- if (mKeyguardStateController.isShowing()) {
- if (mKeyguardStateController.isOccluded()) {
- return getDecisionGivenSuppression(
- FullScreenIntentDecision.FSI_KEYGUARD_OCCLUDED,
- suppressedByDND);
- } else {
- // Likely LOCKED_SHADE, but launch FSI anyway
- return getDecisionGivenSuppression(FullScreenIntentDecision.FSI_LOCKED_SHADE,
- suppressedByDND);
- }
+ // If notification won't HUN and keyguard is showing, launch the FSI.
+ if (mKeyguardStateController.isShowing()) {
+ if (mKeyguardStateController.isOccluded()) {
+ return getDecisionGivenSuppression(
+ FullScreenIntentDecision.FSI_KEYGUARD_OCCLUDED,
+ suppressedByDND);
+ } else {
+ // Likely LOCKED_SHADE, but launch FSI anyway
+ return getDecisionGivenSuppression(FullScreenIntentDecision.FSI_LOCKED_SHADE,
+ suppressedByDND);
}
-
- // Detect the case determined by b/231322873 to launch FSI while device is in use,
- // as blocked by the correct implementation, and report the event.
- return getDecisionGivenSuppression(FullScreenIntentDecision.NO_FSI_NO_HUN_OR_KEYGUARD,
- suppressedByDND);
}
- // If the notification won't HUN for some other reason (DND/snooze/etc), launch FSI.
- return getDecisionGivenSuppression(FullScreenIntentDecision.FSI_EXPECTED_NOT_TO_HUN,
+ // Detect the case determined by b/231322873 to launch FSI while device is in use,
+ // as blocked by the correct implementation, and report the event.
+ return getDecisionGivenSuppression(FullScreenIntentDecision.NO_FSI_NO_HUN_OR_KEYGUARD,
suppressedByDND);
}
@@ -409,14 +401,11 @@
}
final boolean isSnoozedPackage = isSnoozedPackage(sbn);
- final boolean fsiRequiresKeyguard = mFlags.fullScreenIntentRequiresKeyguard();
final boolean hasFsi = sbn.getNotification().fullScreenIntent != null;
// Assume any notification with an FSI is time-sensitive (like an alarm or incoming call)
// and ignore whether HUNs have been snoozed for the package.
- final boolean shouldBypassSnooze = fsiRequiresKeyguard && hasFsi;
-
- if (isSnoozedPackage && !shouldBypassSnooze) {
+ if (isSnoozedPackage && !hasFsi) {
if (log) mLogger.logNoHeadsUpPackageSnoozed(entry);
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index 68ad49be..766ad88 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -28,7 +28,6 @@
import android.view.Choreographer;
import android.view.MotionEvent;
import android.view.View;
-import android.view.accessibility.AccessibilityManager;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
@@ -57,30 +56,6 @@
public abstract class ActivatableNotificationView extends ExpandableOutlineView {
/**
- * The amount of width, which is kept in the end when performing a disappear animation (also
- * the amount from which the horizontal appearing begins)
- */
- private static final float HORIZONTAL_COLLAPSED_REST_PARTIAL = 0.05f;
-
- /**
- * At which point from [0,1] does the horizontal collapse animation end (or start when
- * expanding)? 1.0 meaning that it ends immediately and 0.0 that it is continuously animated.
- */
- private static final float HORIZONTAL_ANIMATION_END = 0.2f;
-
- /**
- * At which point from [0,1] does the horizontal collapse animation start (or start when
- * expanding)? 1.0 meaning that it starts immediately and 0.0 that it is animated at all.
- */
- private static final float HORIZONTAL_ANIMATION_START = 1.0f;
-
- /**
- * At which point from [0,1] does the vertical collapse animation start (or end when
- * expanding) 1.0 meaning that it starts immediately and 0.0 that it is animated at all.
- */
- private static final float VERTICAL_ANIMATION_START = 1.0f;
-
- /**
* A sentinel value when no color should be used. Can be used with {@link #setTintColor(int)}
* or {@link #setOverrideTintColor(int, float)}.
*/
@@ -95,10 +70,6 @@
* The start of the animation is at #ALPHA_APPEAR_START_FRACTION
*/
private static final float ALPHA_APPEAR_END_FRACTION = 1;
- private static final Interpolator ACTIVATE_INVERSE_INTERPOLATOR
- = new PathInterpolator(0.6f, 0, 0.5f, 1);
- private static final Interpolator ACTIVATE_INVERSE_ALPHA_INTERPOLATOR
- = new PathInterpolator(0, 0, 0.5f, 1);
private final Set<SourceType> mOnDetachResetRoundness = new HashSet<>();
private int mTintedRippleColor;
private int mNormalRippleColor;
@@ -112,10 +83,7 @@
*/
private boolean mActivated;
- private OnActivatedListener mOnActivatedListener;
-
private final Interpolator mSlowOutFastInInterpolator;
- private final Interpolator mSlowOutLinearInInterpolator;
private Interpolator mCurrentAppearInterpolator;
NotificationBackgroundView mBackgroundNormal;
@@ -142,13 +110,11 @@
protected Point mTargetPoint;
private boolean mDismissed;
private boolean mRefocusOnDismiss;
- private AccessibilityManager mAccessibilityManager;
protected boolean mUseRoundnessSourceTypes;
public ActivatableNotificationView(Context context, AttributeSet attrs) {
super(context, attrs);
mSlowOutFastInInterpolator = new PathInterpolator(0.8f, 0.0f, 0.6f, 1.0f);
- mSlowOutLinearInInterpolator = new PathInterpolator(0.8f, 0.0f, 1.0f, 1.0f);
setClipChildren(false);
setClipToPadding(false);
updateColors();
@@ -230,7 +196,7 @@
public void onTap() {}
/** Sets the last action up time this view was touched. */
- void setLastActionUpTime(long eventTime) {
+ public void setLastActionUpTime(long eventTime) {
mLastActionUpTime = eventTime;
}
@@ -249,10 +215,6 @@
return false;
}
- protected boolean handleSlideBack() {
- return false;
- }
-
/**
* @return whether this view is interactive and can be double tapped
*/
@@ -270,40 +232,12 @@
mBackgroundNormal.setPressedAllowed(allowed);
}
- void makeActive() {
- mActivated = true;
- if (mOnActivatedListener != null) {
- mOnActivatedListener.onActivated(this);
- }
- }
-
- public boolean isActive() {
- return mActivated;
- }
-
- /**
- * Cancels the hotspot and makes the notification inactive.
- */
- public void makeInactive(boolean animate) {
- if (mActivated) {
- mActivated = false;
- }
- if (mOnActivatedListener != null) {
- mOnActivatedListener.onActivationReset(this);
- }
- }
-
private void updateOutlineAlpha() {
float alpha = NotificationStackScrollLayout.BACKGROUND_ALPHA_DIMMED;
alpha = (alpha + (1.0f - alpha) * mNormalBackgroundVisibilityAmount);
setOutlineAlpha(alpha);
}
- private void setNormalBackgroundVisibilityAmount(float normalBackgroundVisibilityAmount) {
- mNormalBackgroundVisibilityAmount = normalBackgroundVisibilityAmount;
- updateOutlineAlpha();
- }
-
@Override
public void setBelowSpeedBump(boolean below) {
super.setBelowSpeedBump(below);
@@ -318,13 +252,6 @@
}
/**
- * @return whether we are below the speed bump
- */
- public boolean isBelowSpeedBump() {
- return mIsBelowSpeedBump;
- }
-
- /**
* Sets the tint color of the background
*/
protected void setTintColor(int color) {
@@ -728,10 +655,6 @@
}
}
- public void setOnActivatedListener(OnActivatedListener onActivatedListener) {
- mOnActivatedListener = onActivatedListener;
- }
-
@Override
public void setFakeShadowIntensity(float shadowIntensity, float outlineAlpha, int shadowYEnd,
int outlineTranslation) {
@@ -782,14 +705,10 @@
return mRefocusOnDismiss || isAccessibilityFocused();
}
- void setTouchHandler(Gefingerpoken touchHandler) {
+ public void setTouchHandler(Gefingerpoken touchHandler) {
mTouchHandler = touchHandler;
}
- public void setAccessibilityManager(AccessibilityManager accessibilityManager) {
- mAccessibilityManager = accessibilityManager;
- }
-
/**
* Enable the support for rounded corner based on the SourceType
* @param enabled true if is supported
@@ -832,9 +751,4 @@
});
}
}
-
- public interface OnActivatedListener {
- void onActivated(ActivatableNotificationView view);
- void onActivationReset(ActivatableNotificationView view);
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
index b084a76..028cd18 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationViewController.java
@@ -16,15 +16,12 @@
package com.android.systemui.statusbar.notification.row;
-import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
import com.android.systemui.Gefingerpoken;
-import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.statusbar.phone.NotificationTapHelper;
import com.android.systemui.util.ViewController;
import javax.inject.Inject;
@@ -37,44 +34,16 @@
private final ExpandableOutlineViewController mExpandableOutlineViewController;
private final AccessibilityManager mAccessibilityManager;
private final FalsingManager mFalsingManager;
- private final FalsingCollector mFalsingCollector;
- private final NotificationTapHelper mNotificationTapHelper;
private final TouchHandler mTouchHandler = new TouchHandler();
- private boolean mNeedsDimming;
-
@Inject
public ActivatableNotificationViewController(ActivatableNotificationView view,
- NotificationTapHelper.Factory notificationTapHelpFactory,
ExpandableOutlineViewController expandableOutlineViewController,
- AccessibilityManager accessibilityManager, FalsingManager falsingManager,
- FalsingCollector falsingCollector) {
+ AccessibilityManager accessibilityManager, FalsingManager falsingManager) {
super(view);
mExpandableOutlineViewController = expandableOutlineViewController;
mAccessibilityManager = accessibilityManager;
mFalsingManager = falsingManager;
- mFalsingCollector = falsingCollector;
-
- mNotificationTapHelper = notificationTapHelpFactory.create(
- (active) -> {
- if (active) {
- mView.makeActive();
- mFalsingCollector.onNotificationActive();
- } else {
- mView.makeInactive(true /* animate */);
- }
- }, mView::performClick, mView::handleSlideBack);
-
- mView.setOnActivatedListener(new ActivatableNotificationView.OnActivatedListener() {
- @Override
- public void onActivated(ActivatableNotificationView view) {
- mFalsingCollector.onNotificationActive();
- }
-
- @Override
- public void onActivationReset(ActivatableNotificationView view) {
- }
- });
}
/**
@@ -85,7 +54,6 @@
mExpandableOutlineViewController.init();
mView.setOnTouchListener(mTouchHandler);
mView.setTouchHandler(mTouchHandler);
- mView.setAccessibilityManager(mAccessibilityManager);
}
@Override
@@ -99,15 +67,9 @@
}
class TouchHandler implements Gefingerpoken, View.OnTouchListener {
- private boolean mBlockNextTouch;
-
@Override
public boolean onTouch(View v, MotionEvent ev) {
boolean result = false;
- if (mBlockNextTouch) {
- mBlockNextTouch = false;
- return true;
- }
if (ev.getAction() == MotionEvent.ACTION_UP) {
mView.setLastActionUpTime(ev.getEventTime());
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 950ab5d..10cdae3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -272,7 +272,6 @@
private OnExpandClickListener mOnExpandClickListener;
private View.OnClickListener mOnFeedbackClickListener;
private Path mExpandingClipPath;
- private boolean mIsInlineReplyAnimationFlagEnabled = false;
// Listener will be called when receiving a long click event.
// Use #setLongPressPosition to optionally assign positional data with the long press.
@@ -969,15 +968,6 @@
}
@Override
- protected boolean handleSlideBack() {
- if (mMenuRow != null && mMenuRow.isMenuVisible()) {
- animateResetTranslation();
- return true;
- }
- return false;
- }
-
- @Override
public boolean isSummaryWithChildren() {
return mIsSummaryWithChildren;
}
@@ -3095,10 +3085,6 @@
return showingLayout != null && showingLayout.requireRowToHaveOverlappingRendering();
}
- public void setInlineReplyAnimationFlagEnabled(boolean isEnabled) {
- mIsInlineReplyAnimationFlagEnabled = isEnabled;
- }
-
@Override
public void setActualHeight(int height, boolean notifyListeners) {
boolean changed = height != getActualHeight();
@@ -3118,11 +3104,7 @@
}
int contentHeight = Math.max(getMinHeight(), height);
for (NotificationContentView l : mLayouts) {
- if (mIsInlineReplyAnimationFlagEnabled) {
- l.setContentHeight(height);
- } else {
- l.setContentHeight(contentHeight);
- }
+ l.setContentHeight(height);
}
if (mIsSummaryWithChildren) {
mChildrenContainer.setActualHeight(height);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
index 5ca0866..9bf05cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java
@@ -376,8 +376,7 @@
public boolean offerToKeepInParentForAnimation() {
//If the User dismissed the notification's parent, we want to keep it attached until the
//dismiss animation is ongoing. Therefore we don't want to remove it in the ShadeViewDiffer.
- if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_GROUP_DISMISSAL_ANIMATION)
- && mView.isParentDismissed()) {
+ if (mView.isParentDismissed()) {
mView.setKeepInParentForDismissAnimation(true);
return true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index 451d837..f432af2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -635,8 +635,7 @@
int hint;
if (mHeadsUpChild != null && isVisibleOrTransitioning(VISIBLE_TYPE_HEADSUP)) {
hint = getViewHeight(VISIBLE_TYPE_HEADSUP);
- if (mHeadsUpRemoteInput != null && mHeadsUpRemoteInput.isAnimatingAppearance()
- && mHeadsUpRemoteInputController.isFocusAnimationFlagActive()) {
+ if (mHeadsUpRemoteInput != null && mHeadsUpRemoteInput.isAnimatingAppearance()) {
// While the RemoteInputView is animating its appearance, it should be allowed
// to overlap the hint, therefore no space is reserved for the hint during the
// appearance animation of the RemoteInputView
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt
new file mode 100644
index 0000000..54af107
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.ui.viewbinder
+
+import android.view.MotionEvent
+import android.view.View
+import android.view.View.OnTouchListener
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.systemui.Gefingerpoken
+import com.android.systemui.lifecycle.repeatWhenAttached
+import com.android.systemui.plugins.FalsingManager
+import com.android.systemui.statusbar.notification.row.ActivatableNotificationView
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel
+import kotlinx.coroutines.awaitCancellation
+import kotlinx.coroutines.launch
+
+/** Binds an [ActivatableNotificationView] to its [view model][ActivatableNotificationViewModel]. */
+object ActivatableNotificationViewBinder {
+
+ fun bind(
+ viewModel: ActivatableNotificationViewModel,
+ view: ActivatableNotificationView,
+ falsingManager: FalsingManager,
+ ) {
+ ExpandableOutlineViewBinder.bind(viewModel, view)
+ val touchHandler = TouchHandler(view, falsingManager)
+ view.repeatWhenAttached {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ viewModel.isTouchable.collect { isTouchable ->
+ touchHandler.isTouchEnabled = isTouchable
+ }
+ }
+ view.registerListenersWhileAttached(touchHandler)
+ }
+ }
+ }
+
+ private suspend fun ActivatableNotificationView.registerListenersWhileAttached(
+ touchHandler: TouchHandler,
+ ): Unit =
+ try {
+ setOnTouchListener(touchHandler)
+ setTouchHandler(touchHandler)
+ awaitCancellation()
+ } finally {
+ setTouchHandler(null)
+ setOnTouchListener(null)
+ }
+}
+
+private class TouchHandler(
+ private val view: ActivatableNotificationView,
+ private val falsingManager: FalsingManager,
+) : Gefingerpoken, OnTouchListener {
+
+ var isTouchEnabled = false
+
+ override fun onTouch(v: View, ev: MotionEvent): Boolean {
+ val result = false
+ if (ev.action == MotionEvent.ACTION_UP) {
+ view.setLastActionUpTime(ev.eventTime)
+ }
+ // With a11y, just do nothing.
+ if (!isTouchEnabled) {
+ return false
+ }
+ if (ev.action == MotionEvent.ACTION_UP) {
+ // If this is a false tap, capture the even so it doesn't result in a click.
+ val falseTap: Boolean = falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)
+ if (!falseTap && v is ActivatableNotificationView) {
+ v.onTap()
+ }
+ return falseTap
+ }
+ return result
+ }
+
+ override fun onInterceptTouchEvent(ev: MotionEvent): Boolean = false
+
+ /** Use [onTouch] instead. */
+ override fun onTouchEvent(ev: MotionEvent): Boolean = false
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableOutlineViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableOutlineViewBinder.kt
new file mode 100644
index 0000000..745ce77
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableOutlineViewBinder.kt
@@ -0,0 +1,13 @@
+package com.android.systemui.statusbar.notification.row.ui.viewbinder
+
+import com.android.systemui.statusbar.notification.row.ExpandableOutlineView
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ExpandableOutlineViewModel as ViewModel
+
+object ExpandableOutlineViewBinder {
+ fun bind(
+ viewModel: ViewModel,
+ view: ExpandableOutlineView,
+ ) {
+ ExpandableViewBinder.bind(viewModel, view)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableViewBinder.kt
new file mode 100644
index 0000000..49cfb576
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ExpandableViewBinder.kt
@@ -0,0 +1,8 @@
+package com.android.systemui.statusbar.notification.row.ui.viewbinder
+
+import com.android.systemui.statusbar.notification.row.ExpandableView
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ExpandableViewModel as ViewModel
+
+object ExpandableViewBinder {
+ fun bind(viewModel: ViewModel, view: ExpandableView) {}
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt
new file mode 100644
index 0000000..f46d424
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.ui.viewmodel
+
+import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
+import dagger.Module
+import dagger.Provides
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+
+/** ViewModel for [com.android.systemui.statusbar.notification.row.ActivatableNotificationView]. */
+interface ActivatableNotificationViewModel : ExpandableOutlineViewModel {
+ /** Does the view react to touches? */
+ val isTouchable: Flow<Boolean>
+
+ companion object {
+ operator fun invoke(
+ a11yInteractor: AccessibilityInteractor,
+ ): ActivatableNotificationViewModel = ActivatableNotificationViewModelImpl(a11yInteractor)
+ }
+}
+
+private class ActivatableNotificationViewModelImpl(
+ a11yInteractor: AccessibilityInteractor,
+) : ActivatableNotificationViewModel {
+ override val isTouchable: Flow<Boolean> =
+ // If a11y touch exploration is enabled, then the activatable view should ignore touches
+ a11yInteractor.isTouchExplorationEnabled.map { !it }
+}
+
+@Module
+object ActivatableNotificationViewModelModule {
+ @Provides
+ fun provideViewModel(interactor: AccessibilityInteractor) =
+ ActivatableNotificationViewModel(interactor)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableOutlineViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableOutlineViewModel.kt
new file mode 100644
index 0000000..5904c77
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableOutlineViewModel.kt
@@ -0,0 +1,4 @@
+package com.android.systemui.statusbar.notification.row.ui.viewmodel
+
+/** ViewModel for [com.android.systemui.statusbar.notification.row.ExpandableOutlineView]. */
+interface ExpandableOutlineViewModel : ExpandableViewModel
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableViewModel.kt
new file mode 100644
index 0000000..5efaf04
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ExpandableViewModel.kt
@@ -0,0 +1,4 @@
+package com.android.systemui.statusbar.notification.row.ui.viewmodel
+
+/** ViewModel for [com.android.systemui.statusbar.notification.row.ExpandableView]. */
+interface ExpandableViewModel
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt
index 8ba65f7..014406f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractor.kt
@@ -16,10 +16,14 @@
package com.android.systemui.statusbar.notification.shelf.domain.interactor
+import android.os.PowerManager
import com.android.systemui.keyguard.data.repository.DeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import com.android.systemui.statusbar.LockscreenShadeTransitionController
import com.android.systemui.statusbar.NotificationShelf
+import com.android.systemui.statusbar.phone.CentralSurfaces
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
+import com.android.systemui.util.time.SystemClock
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
@@ -31,6 +35,9 @@
constructor(
private val keyguardRepository: KeyguardRepository,
private val deviceEntryFaceAuthRepository: DeviceEntryFaceAuthRepository,
+ private val centralSurfaces: CentralSurfaces,
+ private val systemClock: SystemClock,
+ private val keyguardTransitionController: LockscreenShadeTransitionController,
) {
/** Is the shelf showing on the keyguard? */
val isShowingOnKeyguard: Flow<Boolean>
@@ -45,4 +52,14 @@
) { isKeyguardShowing, isBypassEnabled ->
isKeyguardShowing && isBypassEnabled
}
+
+ /** Transition keyguard to the locked shade, triggered by the shelf. */
+ fun goToLockedShadeFromShelf() {
+ centralSurfaces.wakeUpIfDozing(
+ systemClock.uptimeMillis(),
+ "SHADE_CLICK",
+ PowerManager.WAKE_REASON_GESTURE,
+ )
+ keyguardTransitionController.goToLockedShade(null)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt
index b190cf6..99c6ddb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt
@@ -17,10 +17,8 @@
package com.android.systemui.statusbar.notification.shelf.ui.viewbinder
import android.view.View
-import android.view.accessibility.AccessibilityManager
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
-import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.lifecycle.repeatWhenAttached
@@ -28,21 +26,16 @@
import com.android.systemui.statusbar.LegacyNotificationShelfControllerImpl
import com.android.systemui.statusbar.NotificationShelf
import com.android.systemui.statusbar.NotificationShelfController
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationViewController
-import com.android.systemui.statusbar.notification.row.ExpandableOutlineViewController
-import com.android.systemui.statusbar.notification.row.ExpandableViewController
+import com.android.systemui.statusbar.notification.row.ui.viewbinder.ActivatableNotificationViewBinder
import com.android.systemui.statusbar.notification.shelf.ui.viewmodel.NotificationShelfViewModel
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.phone.NotificationIconAreaController
import com.android.systemui.statusbar.phone.NotificationIconContainer
-import com.android.systemui.statusbar.phone.NotificationTapHelper
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
-import com.android.systemui.util.kotlin.getValue
-import dagger.Lazy
import javax.inject.Inject
-import kotlinx.coroutines.flow.launchIn
-import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.awaitCancellation
+import kotlinx.coroutines.launch
/**
* Controller class for [NotificationShelf]. This implementation serves as a temporary wrapper
@@ -51,85 +44,70 @@
* removed, this class can go away and the ViewBinder can be used directly.
*/
@CentralSurfacesScope
-class NotificationShelfViewBinderWrapperControllerImpl
-@Inject
-constructor(
- private val shelf: NotificationShelf,
- private val viewModel: NotificationShelfViewModel,
- featureFlags: FeatureFlags,
- private val notifTapHelperFactory: NotificationTapHelper.Factory,
- private val a11yManager: AccessibilityManager,
- private val falsingManager: FalsingManager,
- private val falsingCollector: FalsingCollector,
- hostControllerLazy: Lazy<NotificationStackScrollLayoutController>,
-) : NotificationShelfController {
-
- private val hostController: NotificationStackScrollLayoutController by hostControllerLazy
+class NotificationShelfViewBinderWrapperControllerImpl @Inject constructor() :
+ NotificationShelfController {
override val view: NotificationShelf
get() = unsupported
- init {
- shelf.apply {
- setRefactorFlagEnabled(featureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR))
- useRoundnessSourceTypes(featureFlags.isEnabled(Flags.USE_ROUNDNESS_SOURCETYPES))
- setSensitiveRevealAnimEndabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM))
- }
- }
-
- fun init() {
- NotificationShelfViewBinder.bind(viewModel, shelf)
-
- ActivatableNotificationViewController(
- shelf,
- notifTapHelperFactory,
- ExpandableOutlineViewController(shelf, ExpandableViewController(shelf)),
- a11yManager,
- falsingManager,
- falsingCollector,
- )
- .init()
- hostController.setShelf(shelf)
- hostController.setOnNotificationRemovedListener { child, _ ->
- view.requestRoundnessResetFor(child)
- }
- }
-
override val intrinsicHeight: Int
- get() = shelf.intrinsicHeight
+ get() = unsupported
override val shelfIcons: NotificationIconContainer
- get() = shelf.shelfIcons
+ get() = unsupported
override fun canModifyColorOfNotifications(): Boolean = unsupported
- override fun setOnActivatedListener(listener: ActivatableNotificationView.OnActivatedListener) {
- shelf.setOnActivatedListener(listener)
- }
-
override fun bind(
ambientState: AmbientState,
notificationStackScrollLayoutController: NotificationStackScrollLayoutController,
) = unsupported
- override fun setOnClickListener(listener: View.OnClickListener) {
- shelf.setOnClickListener(listener)
- }
+ override fun setOnClickListener(listener: View.OnClickListener) = unsupported
private val unsupported: Nothing
get() = NotificationShelfController.throwIllegalFlagStateError(expected = true)
}
-/** Binds a [NotificationShelf] to its backend. */
+/** Binds a [NotificationShelf] to its [view model][NotificationShelfViewModel]. */
object NotificationShelfViewBinder {
- fun bind(viewModel: NotificationShelfViewModel, shelf: NotificationShelf) {
- shelf.repeatWhenAttached {
- repeatOnLifecycle(Lifecycle.State.STARTED) {
- viewModel.canModifyColorOfNotifications
- .onEach(shelf::setCanModifyColorOfNotifications)
- .launchIn(this)
- viewModel.isClickable.onEach(shelf::setCanInteract).launchIn(this)
+ fun bind(
+ shelf: NotificationShelf,
+ viewModel: NotificationShelfViewModel,
+ falsingManager: FalsingManager,
+ featureFlags: FeatureFlags,
+ notificationIconAreaController: NotificationIconAreaController,
+ ) {
+ ActivatableNotificationViewBinder.bind(viewModel, shelf, falsingManager)
+ shelf.apply {
+ setRefactorFlagEnabled(true)
+ useRoundnessSourceTypes(featureFlags.isEnabled(Flags.USE_ROUNDNESS_SOURCETYPES))
+ setSensitiveRevealAnimEndabled(featureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM))
+ // TODO(278765923): Replace with eventual NotificationIconContainerViewBinder#bind()
+ notificationIconAreaController.setShelfIcons(shelfIcons)
+ repeatWhenAttached {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ viewModel.canModifyColorOfNotifications.collect(
+ ::setCanModifyColorOfNotifications
+ )
+ }
+ launch { viewModel.isClickable.collect(::setCanInteract) }
+ registerViewListenersWhileAttached(shelf, viewModel)
+ }
}
}
}
+
+ private suspend fun registerViewListenersWhileAttached(
+ shelf: NotificationShelf,
+ viewModel: NotificationShelfViewModel,
+ ) {
+ try {
+ shelf.setOnClickListener { viewModel.onShelfClicked() }
+ awaitCancellation()
+ } finally {
+ shelf.setOnClickListener(null)
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt
index 5e297c8..fb19443 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.shelf.ui.viewmodel
import com.android.systemui.statusbar.NotificationShelf
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel
import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
import javax.inject.Inject
@@ -29,7 +30,8 @@
@Inject
constructor(
private val interactor: NotificationShelfInteractor,
-) {
+ activatableViewModel: ActivatableNotificationViewModel,
+) : ActivatableNotificationViewModel by activatableViewModel {
/** Is the shelf allowed to be clickable when it has content? */
val isClickable: Flow<Boolean>
get() = interactor.isShowingOnKeyguard
@@ -37,4 +39,9 @@
/** Is the shelf allowed to modify the color of notifications in the host layout? */
val canModifyColorOfNotifications: Flow<Boolean>
get() = interactor.isShelfStatic.map { static -> !static }
+
+ /** Notifies that the user has clicked the shelf. */
+ fun onShelfClicked() {
+ interactor.goToLockedShadeFromShelf()
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
index 77ede04..ae7c216 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
@@ -34,7 +34,6 @@
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.ExpandableView;
import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.BypassController;
@@ -65,7 +64,6 @@
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private int mScrollY;
private boolean mDimmed;
- private ActivatableNotificationView mActivatedChild;
private float mOverScrollTopAmount;
private float mOverScrollBottomAmount;
private boolean mDozing;
@@ -360,14 +358,6 @@
mHideSensitive = hideSensitive;
}
- /**
- * In dimmed mode, a child can be activated, which happens on the first tap of the double-tap
- * interaction. This child is then scaled normally and its background is fully opaque.
- */
- public void setActivatedChild(ActivatableNotificationView activatedChild) {
- mActivatedChild = activatedChild;
- }
-
public boolean isDimmed() {
// While we are expanding from pulse, we want the notifications not to be dimmed, otherwise
// you'd see the difference to the pulsing notification
@@ -382,10 +372,6 @@
return mHideSensitive;
}
- public ActivatableNotificationView getActivatedChild() {
- return mActivatedChild;
- }
-
public void setOverScrollAmount(float amount, boolean onTop) {
if (onTop) {
mOverScrollTopAmount = amount;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index af608a7..587783d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -2839,6 +2839,7 @@
* @param listener callback for notification removed
*/
public void setOnNotificationRemovedListener(OnNotificationRemovedListener listener) {
+ NotificationShelfController.assertRefactorFlagDisabled(mAmbientState.getFeatureFlags());
mOnNotificationRemovedListener = listener;
}
@@ -2852,10 +2853,14 @@
if (!mChildTransferInProgress) {
onViewRemovedInternal(expandableView, this);
}
- if (mOnNotificationRemovedListener != null) {
- mOnNotificationRemovedListener.onNotificationRemoved(
- expandableView,
- mChildTransferInProgress);
+ if (mAmbientState.getFeatureFlags().isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+ mShelf.requestRoundnessResetFor(expandableView);
+ } else {
+ if (mOnNotificationRemovedListener != null) {
+ mOnNotificationRemovedListener.onNotificationRemoved(
+ expandableView,
+ mChildTransferInProgress);
+ }
}
}
@@ -4469,24 +4474,6 @@
}
}
- /**
- * See {@link AmbientState#setActivatedChild}.
- */
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- void setActivatedChild(ActivatableNotificationView activatedChild) {
- mAmbientState.setActivatedChild(activatedChild);
- if (mAnimationsEnabled) {
- mActivateNeedsAnimation = true;
- mNeedsAnimation = true;
- }
- requestChildrenUpdate();
- }
-
- @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
- public ActivatableNotificationView getActivatedChild() {
- return mAmbientState.getActivatedChild();
- }
-
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void applyCurrentState() {
int numChildren = getChildCount();
@@ -5137,6 +5124,15 @@
requestChildrenUpdate();
}
+ @Nullable
+ public ExpandableView getShelf() {
+ if (NotificationShelfController.checkRefactorFlagEnabled(mAmbientState.getFeatureFlags())) {
+ return mShelf;
+ } else {
+ return null;
+ }
+ }
+
public void setShelf(NotificationShelf shelf) {
if (!NotificationShelfController.checkRefactorFlagEnabled(
mAmbientState.getFeatureFlags())) {
@@ -5236,7 +5232,6 @@
void onStatePostChange(boolean fromShadeLocked) {
boolean onKeyguard = onKeyguard();
- mAmbientState.setActivatedChild(null);
mAmbientState.setDimmed(onKeyguard);
if (mHeadsUpAppearanceController != null) {
@@ -5245,11 +5240,6 @@
setDimmed(onKeyguard, fromShadeLocked);
setExpandingEnabled(!onKeyguard);
- ActivatableNotificationView activatedChild = getActivatedChild();
- setActivatedChild(null);
- if (activatedChild != null) {
- activatedChild.makeInactive(false /* animate */);
- }
updateFooter();
requestChildrenUpdate();
onUpdateRowStates();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
index 1c8727f..b69ce38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
@@ -105,11 +105,14 @@
import com.android.systemui.statusbar.notification.row.NotificationGuts;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationSnooze;
+import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationListViewBinder;
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.HeadsUpTouchHelper;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -122,16 +125,17 @@
import com.android.systemui.util.Compile;
import com.android.systemui.util.settings.SecureSettings;
+import kotlin.Unit;
+
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import javax.inject.Inject;
import javax.inject.Named;
-import kotlin.Unit;
-
/**
* Controller for {@link NotificationStackScrollLayout}.
*/
@@ -151,6 +155,8 @@
private final ConfigurationController mConfigurationController;
private final ZenModeController mZenModeController;
private final MetricsLogger mMetricsLogger;
+ private final Optional<NotificationListViewModel> mViewModel;
+
private final DumpManager mDumpManager;
private final FalsingCollector mFalsingCollector;
private final FalsingManager mFalsingManager;
@@ -175,12 +181,13 @@
private final NotificationStackSizeCalculator mNotificationStackSizeCalculator;
private final StackStateLogger mStackStateLogger;
private final NotificationStackScrollLogger mLogger;
+ private final NotificationIconAreaController mNotifIconAreaController;
+
private final GroupExpansionManager mGroupExpansionManager;
private final NotifPipelineFlags mNotifPipelineFlags;
private final SeenNotificationsProvider mSeenNotificationsProvider;
private NotificationStackScrollLayout mView;
- private boolean mFadeNotificationsOnDismiss;
private NotificationSwipeHelper mSwipeHelper;
@Nullable
private Boolean mHistoryEnabled;
@@ -548,7 +555,7 @@
public boolean updateSwipeProgress(View animView, boolean dismissable,
float swipeProgress) {
// Returning true prevents alpha fading.
- return !mFadeNotificationsOnDismiss;
+ return false;
}
@Override
@@ -628,6 +635,7 @@
@Inject
public NotificationStackScrollLayoutController(
+ NotificationStackScrollLayout view,
@Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME) boolean allowLongPress,
NotificationGutsManager notificationGutsManager,
NotificationVisibilityProvider visibilityProvider,
@@ -642,6 +650,7 @@
KeyguardBypassController keyguardBypassController,
ZenModeController zenModeController,
NotificationLockscreenUserManager lockscreenUserManager,
+ Optional<NotificationListViewModel> nsslViewModel,
MetricsLogger metricsLogger,
DumpManager dumpManager,
FalsingCollector falsingCollector,
@@ -665,10 +674,12 @@
StackStateLogger stackLogger,
NotificationStackScrollLogger logger,
NotificationStackSizeCalculator notificationStackSizeCalculator,
+ NotificationIconAreaController notifIconAreaController,
FeatureFlags featureFlags,
NotificationTargetsHelper notificationTargetsHelper,
SecureSettings secureSettings,
NotificationDismissibilityProvider dismissibilityProvider) {
+ mView = view;
mStackStateLogger = stackLogger;
mLogger = logger;
mAllowLongPress = allowLongPress;
@@ -685,6 +696,7 @@
mKeyguardBypassController = keyguardBypassController;
mZenModeController = zenModeController;
mLockscreenUserManager = lockscreenUserManager;
+ mViewModel = nsslViewModel;
mMetricsLogger = metricsLogger;
mDumpManager = dumpManager;
mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
@@ -706,16 +718,17 @@
mVisibilityLocationProviderDelegator = visibilityLocationProviderDelegator;
mSeenNotificationsProvider = seenNotificationsProvider;
mShadeController = shadeController;
+ mNotifIconAreaController = notifIconAreaController;
mFeatureFlags = featureFlags;
mUseRoundnessSourceTypes = featureFlags.isEnabled(Flags.USE_ROUNDNESS_SOURCETYPES);
mNotificationTargetsHelper = notificationTargetsHelper;
mSecureSettings = secureSettings;
mDismissibilityProvider = dismissibilityProvider;
updateResources();
+ setUpView();
}
- public void attach(NotificationStackScrollLayout view) {
- mView = view;
+ private void setUpView() {
mView.setLogger(mStackStateLogger);
mView.setController(this);
mView.setLogger(mLogger);
@@ -773,7 +786,6 @@
mLockscreenUserManager.addUserChangedListener(mLockscreenUserChangeListener);
- mFadeNotificationsOnDismiss = mFeatureFlags.isEnabled(Flags.NOTIFICATION_DISMISSAL_FADE);
if (!mUseRoundnessSourceTypes) {
mNotificationRoundnessManager.setOnRoundingChangedCallback(mView::invalidate);
mView.addOnExpandedHeightChangedListener(mNotificationRoundnessManager::setExpanded);
@@ -820,6 +832,10 @@
mGroupExpansionManager.registerGroupExpansionChangeListener(
(changedRow, expanded) -> mView.onGroupExpandChanged(changedRow, expanded));
+
+ mViewModel.ifPresent(
+ vm -> NotificationListViewBinder
+ .bind(mView, vm, mFalsingManager, mFeatureFlags, mNotifIconAreaController));
}
private boolean isInVisibleLocation(NotificationEntry entry) {
@@ -1237,7 +1253,8 @@
// Hide empty shade view when in transition to Keyguard.
// That avoids "No Notifications" to blink when transitioning to AOD.
// For more details, see: b/228790482
- && !isInTransitionToKeyguard();
+ && !isInTransitionToKeyguard()
+ && !mCentralSurfaces.isBouncerShowing();
mView.updateEmptyShadeView(shouldShow, mZenModeController.areNotificationsHiddenInShade());
@@ -1370,14 +1387,6 @@
mView.onUpdateRowStates();
}
- public ActivatableNotificationView getActivatedChild() {
- return mView.getActivatedChild();
- }
-
- public void setActivatedChild(ActivatableNotificationView view) {
- mView.setActivatedChild(view);
- }
-
public void runAfterAnimationFinished(Runnable r) {
mView.runAfterAnimationFinished(r);
}
@@ -1600,6 +1609,14 @@
mView.setShelf(shelf);
}
+ public int getShelfHeight() {
+ if (!NotificationShelfController.checkRefactorFlagEnabled(mFeatureFlags)) {
+ return 0;
+ }
+ ExpandableView shelf = mView.getShelf();
+ return shelf == null ? 0 : shelf.getIntrinsicHeight();
+ }
+
/**
* Enum for UiEvent logged from this class
*/
@@ -1942,8 +1959,7 @@
public void setNotifStats(@NonNull NotifStats notifStats) {
mNotifStats = notifStats;
mView.setHasFilteredOutSeenNotifications(
- mNotifPipelineFlags.getShouldFilterUnseenNotifsOnKeyguard()
- && mSeenNotificationsProvider.getHasFilteredOutSeenNotifications());
+ mSeenNotificationsProvider.getHasFilteredOutSeenNotifications());
updateFooter();
updateShowEmptyShadeView();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
index b1fb13e0..3060473 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithm.java
@@ -126,7 +126,7 @@
updateHeadsUpStates(algorithmState, ambientState);
updatePulsingStates(algorithmState, ambientState);
- updateDimmedActivatedHideSensitive(ambientState, algorithmState);
+ updateDimmedAndHideSensitive(ambientState, algorithmState);
updateClipping(algorithmState, ambientState);
updateSpeedBumpState(algorithmState, speedBumpIndex);
updateShelfState(algorithmState, ambientState);
@@ -341,25 +341,17 @@
}
}
- /**
- * Updates the dimmed, activated and hiding sensitive states of the children.
- */
- private void updateDimmedActivatedHideSensitive(AmbientState ambientState,
- StackScrollAlgorithmState algorithmState) {
+ /** Updates the dimmed and hiding sensitive states of the children. */
+ private void updateDimmedAndHideSensitive(AmbientState ambientState,
+ StackScrollAlgorithmState algorithmState) {
boolean dimmed = ambientState.isDimmed();
boolean hideSensitive = ambientState.isHideSensitive();
- View activatedChild = ambientState.getActivatedChild();
int childCount = algorithmState.visibleChildren.size();
for (int i = 0; i < childCount; i++) {
ExpandableView child = algorithmState.visibleChildren.get(i);
ExpandableViewState childViewState = child.getViewState();
childViewState.dimmed = dimmed;
childViewState.hideSensitive = hideSensitive;
- boolean isActivatedChild = activatedChild == child;
- if (dimmed && isActivatedChild) {
- childViewState.setZTranslation(childViewState.getZTranslation()
- + 2.0f * ambientState.getZDistanceBetweenElements());
- }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt
new file mode 100644
index 0000000..45ae4e0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationListViewBinder.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.stack.ui.viewbinder
+
+import android.view.LayoutInflater
+import com.android.systemui.R
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.plugins.FalsingManager
+import com.android.systemui.statusbar.NotificationShelf
+import com.android.systemui.statusbar.notification.shelf.ui.viewbinder.NotificationShelfViewBinder
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel
+import com.android.systemui.statusbar.phone.NotificationIconAreaController
+
+/** Binds a [NotificationStackScrollLayout] to its [view model][NotificationListViewModel]. */
+object NotificationListViewBinder {
+ @JvmStatic
+ fun bind(
+ view: NotificationStackScrollLayout,
+ viewModel: NotificationListViewModel,
+ falsingManager: FalsingManager,
+ featureFlags: FeatureFlags,
+ iconAreaController: NotificationIconAreaController,
+ ) {
+ val shelf =
+ LayoutInflater.from(view.context)
+ .inflate(R.layout.status_bar_notification_shelf, view, false) as NotificationShelf
+ NotificationShelfViewBinder.bind(
+ shelf,
+ viewModel.shelf,
+ falsingManager,
+ featureFlags,
+ iconAreaController
+ )
+ view.setShelf(shelf)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationListViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationListViewModel.kt
new file mode 100644
index 0000000..aab1c2b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationListViewModel.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.stack.ui.viewmodel
+
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.statusbar.notification.shelf.ui.viewmodel.NotificationShelfViewModel
+import dagger.Module
+import dagger.Provides
+import java.util.Optional
+import javax.inject.Provider
+
+/** ViewModel for the list of notifications. */
+class NotificationListViewModel(
+ val shelf: NotificationShelfViewModel,
+)
+
+@Module
+object NotificationListViewModelModule {
+ @JvmStatic
+ @Provides
+ fun maybeProvideViewModel(
+ featureFlags: FeatureFlags,
+ shelfViewModel: Provider<NotificationShelfViewModel>,
+ ): Optional<NotificationListViewModel> =
+ if (featureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+ Optional.of(NotificationListViewModel(shelfViewModel.get()))
+ } else {
+ Optional.empty()
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
index 0195d45..f579d30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
@@ -48,9 +48,9 @@
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
import com.android.systemui.qs.QSPanelController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.LightRevealScrim;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.util.Compile;
@@ -212,13 +212,14 @@
/**
* Wakes up the device if the device was dozing.
*/
- void wakeUpIfDozing(long time, View where, String why, @PowerManager.WakeReason int wakeReason);
+ void wakeUpIfDozing(long time, String why, @PowerManager.WakeReason int wakeReason);
NotificationShadeWindowView getNotificationShadeWindowView();
NotificationShadeWindowViewController getNotificationShadeWindowViewController();
- NotificationPanelViewController getNotificationPanelViewController();
+ /** */
+ ShadeViewController getShadeViewController();
/** Get the Keyguard Message Area that displays auth messages. */
AuthKeyguardMessageArea getKeyguardMessageArea();
@@ -326,6 +327,13 @@
@Nullable ActivityLaunchAnimator.Controller animationController,
UserHandle userHandle);
+ /** Starts an activity intent that dismisses keyguard. */
+ void startActivityDismissingKeyguard(Intent intent, boolean onlyProvisioned,
+ boolean dismissShade, boolean disallowEnterPictureInPictureWhileLaunching,
+ Callback callback, int flags,
+ @Nullable ActivityLaunchAnimator.Controller animationController,
+ UserHandle userHandle, @Nullable String customMessage);
+
void readyForKeyguardDone();
void executeRunnableDismissingKeyguard(Runnable runnable,
@@ -339,7 +347,8 @@
boolean dismissShade,
boolean afterKeyguardGone,
boolean deferred,
- boolean willAnimateOnKeyguard);
+ boolean willAnimateOnKeyguard,
+ @Nullable String customMessage);
void resetUserExpandedStates();
@@ -422,9 +431,6 @@
void collapseShade();
- /** Collapse the shade, but conditional on a flag specific to the trigger of a bugreport. */
- void collapseShadeForBugreport();
-
int getWakefulnessState();
boolean isScreenFullyOff();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
index 8b6617b..c0a7a34 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
@@ -54,9 +54,9 @@
import com.android.systemui.qs.QSPanelController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.CameraLauncher;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.QuickSettingsController;
import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.disableflags.DisableFlagsLogger;
@@ -80,7 +80,7 @@
private final Context mContext;
private final com.android.systemui.shade.ShadeController mShadeController;
private final CommandQueue mCommandQueue;
- private final NotificationPanelViewController mNotificationPanelViewController;
+ private final ShadeViewController mShadeViewController;
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
private final MetricsLogger mMetricsLogger;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -117,7 +117,7 @@
@Main Resources resources,
ShadeController shadeController,
CommandQueue commandQueue,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
RemoteInputQuickSettingsDisabler remoteInputQuickSettingsDisabler,
MetricsLogger metricsLogger,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -144,7 +144,7 @@
mContext = context;
mShadeController = shadeController;
mCommandQueue = commandQueue;
- mNotificationPanelViewController = notificationPanelViewController;
+ mShadeViewController = shadeViewController;
mRemoteInputQuickSettingsDisabler = remoteInputQuickSettingsDisabler;
mMetricsLogger = metricsLogger;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -218,7 +218,7 @@
return;
}
- mNotificationPanelViewController.expandToNotifications();
+ mShadeViewController.expandToNotifications();
}
@Override
@@ -234,7 +234,7 @@
// Settings are not available in setup
if (!mDeviceProvisionedController.isCurrentUserSetup()) return;
- mNotificationPanelViewController.expandToQs();
+ mShadeViewController.expandToQs();
}
@Override
@@ -300,7 +300,7 @@
}
}
- mNotificationPanelViewController.disableHeader(state1, state2, animate);
+ mShadeViewController.disableHeader(state1, state2, animate);
}
/**
@@ -322,22 +322,22 @@
if (KeyEvent.KEYCODE_SYSTEM_NAVIGATION_UP == key.getKeyCode()) {
mMetricsLogger.action(MetricsEvent.ACTION_SYSTEM_NAVIGATION_KEY_UP);
- mNotificationPanelViewController.collapse(
+ mShadeViewController.collapse(
false /* delayed */, 1.0f /* speedUpFactor */);
} else if (KeyEvent.KEYCODE_SYSTEM_NAVIGATION_DOWN == key.getKeyCode()) {
mMetricsLogger.action(MetricsEvent.ACTION_SYSTEM_NAVIGATION_KEY_DOWN);
- if (mNotificationPanelViewController.isFullyCollapsed()) {
+ if (mShadeViewController.isFullyCollapsed()) {
if (mVibrateOnOpening) {
mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK);
}
- mNotificationPanelViewController.expand(true /* animate */);
+ mShadeViewController.expand(true /* animate */);
mNotificationStackScrollLayoutController.setWillExpand(true);
mHeadsUpManager.unpinAll(true /* userUnpinned */);
mMetricsLogger.count("panel_open", 1);
} else if (!mQsController.getExpanded()
- && !mNotificationPanelViewController.isExpanding()) {
+ && !mShadeViewController.isExpanding()) {
mQsController.flingQs(0 /* velocity */,
- NotificationPanelViewController.FLING_EXPAND);
+ ShadeViewController.FLING_EXPAND);
mMetricsLogger.count("panel_open_qs", 1);
}
}
@@ -355,7 +355,7 @@
return;
}
if (!mCameraLauncherLazy.get().canCameraGestureBeLaunched(
- mNotificationPanelViewController.getBarState())) {
+ mShadeViewController.getBarState())) {
if (CentralSurfaces.DEBUG_CAMERA_LIFT) {
Slog.d(CentralSurfaces.TAG, "Can't launch camera right now");
}
@@ -394,7 +394,7 @@
mStatusBarKeyguardViewManager.reset(true /* hide */);
}
mCameraLauncherLazy.get().launchCamera(source,
- mNotificationPanelViewController.isFullyCollapsed());
+ mShadeViewController.isFullyCollapsed());
mCentralSurfaces.updateScrimController();
} else {
// We need to defer the camera launch until the screen comes on, since otherwise
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 0ec20ca..e66a8b1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -191,8 +191,10 @@
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionStateManager;
-import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.shade.ShadeLogger;
+import com.android.systemui.shade.ShadeSurface;
+import com.android.systemui.shade.ShadeViewController;
+import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.statusbar.AutoHideUiElement;
import com.android.systemui.statusbar.BackDropView;
import com.android.systemui.statusbar.CircleReveal;
@@ -230,6 +232,7 @@
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
+import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
@@ -452,6 +455,7 @@
private AuthRippleController mAuthRippleController;
@WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
protected final NotificationShadeWindowController mNotificationShadeWindowController;
+ private final StatusBarInitializer mStatusBarInitializer;
private final StatusBarWindowController mStatusBarWindowController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@VisibleForTesting
@@ -505,7 +509,7 @@
/** Controller for the Shade. */
@VisibleForTesting
- NotificationPanelViewController mNotificationPanelViewController;
+ ShadeSurface mShadeSurface;
private final ShadeLogger mShadeLogger;
// settings
@@ -698,9 +702,9 @@
@Override
public void onBackProgressed(BackEvent event) {
if (shouldBackBeHandled()) {
- if (mNotificationPanelViewController.canBeCollapsed()) {
+ if (mShadeSurface.canBeCollapsed()) {
float fraction = event.getProgress();
- mNotificationPanelViewController.onBackProgressed(fraction);
+ mShadeSurface.onBackProgressed(fraction);
}
}
}
@@ -720,6 +724,7 @@
FragmentService fragmentService,
LightBarController lightBarController,
AutoHideController autoHideController,
+ StatusBarInitializer statusBarInitializer,
StatusBarWindowController statusBarWindowController,
StatusBarWindowStateController statusBarWindowStateController,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -814,6 +819,7 @@
mFragmentService = fragmentService;
mLightBarController = lightBarController;
mAutoHideController = autoHideController;
+ mStatusBarInitializer = statusBarInitializer;
mStatusBarWindowController = statusBarWindowController;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mPulseExpansionHandler = pulseExpansionHandler;
@@ -951,11 +957,6 @@
mUiModeManager = mContext.getSystemService(UiModeManager.class);
mBubblesOptional.ifPresent(this::initBubbles);
- // Do not restart System UI when the bugreport flag changes.
- mFeatureFlags.addListener(Flags.LEAVE_SHADE_OPEN_FOR_BUGREPORT, event -> {
- event.requestNoRestart();
- });
-
mStatusBarSignalPolicy.init();
mKeyguardIndicationController.init();
@@ -1090,7 +1091,7 @@
this,
mStatusBarKeyguardViewManager,
mNotificationShadeWindowViewController,
- mNotificationPanelViewController,
+ mShadeSurface,
mAmbientIndicationContainer);
updateLightRevealScrimVisibility();
@@ -1253,7 +1254,9 @@
// TODO: Deal with the ugliness that comes from having some of the status bar broken out
// into fragments, but the rest here, it leaves some awkward lifecycle and whatnot.
- mNotificationIconAreaController.setupShelf(mNotificationShelfController);
+ if (!mFeatureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
+ mNotificationIconAreaController.setupShelf(mNotificationShelfController);
+ }
mShadeExpansionStateManager.addExpansionListener(mWakeUpCoordinator);
// Allow plugins to reference DarkIconDispatcher and StatusBarStateController
@@ -1261,8 +1264,7 @@
mPluginDependencyProvider.allowPluginDependency(StatusBarStateController.class);
// Set up CollapsedStatusBarFragment and PhoneStatusBarView
- StatusBarInitializer initializer = mCentralSurfacesComponent.getStatusBarInitializer();
- initializer.setStatusBarViewUpdatedListener(
+ mStatusBarInitializer.setStatusBarViewUpdatedListener(
(statusBarView, statusBarViewController, statusBarTransitions) -> {
mStatusBarView = statusBarView;
mPhoneStatusBarViewController = statusBarViewController;
@@ -1274,11 +1276,12 @@
// re-display the notification panel if necessary (for example, if
// a heads-up notification was being displayed and should continue being
// displayed).
- mNotificationPanelViewController.updateExpansionAndVisibility();
+ mShadeSurface.updateExpansionAndVisibility();
setBouncerShowingForStatusBarComponents(mBouncerShowing);
checkBarModes();
});
- initializer.initializeStatusBar(mCentralSurfacesComponent);
+ mStatusBarInitializer.initializeStatusBar(
+ mCentralSurfacesComponent::createCollapsedStatusBarFragment);
mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);
@@ -1349,7 +1352,7 @@
mScreenOffAnimationController.initialize(this, mLightRevealScrim);
updateLightRevealScrimVisibility();
- mNotificationPanelViewController.initDependencies(
+ mShadeSurface.initDependencies(
this,
mGestureRec,
mShadeController::makeExpandedInvisible,
@@ -1357,8 +1360,13 @@
mHeadsUpManager);
BackDropView backdrop = mNotificationShadeWindowView.findViewById(R.id.backdrop);
- mMediaManager.setup(backdrop, backdrop.findViewById(R.id.backdrop_front),
- backdrop.findViewById(R.id.backdrop_back), mScrimController, mLockscreenWallpaper);
+ if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
+ mMediaManager.setup(null, null, null, mScrimController, null);
+ } else {
+ mMediaManager.setup(backdrop, backdrop.findViewById(R.id.backdrop_front),
+ backdrop.findViewById(R.id.backdrop_back), mScrimController,
+ mLockscreenWallpaper);
+ }
float maxWallpaperZoom = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_wallpaperMaxScale);
mNotificationShadeDepthControllerLazy.get().addListener(depth -> {
@@ -1386,7 +1394,7 @@
.build());
mBrightnessMirrorController = new BrightnessMirrorController(
mNotificationShadeWindowView,
- mNotificationPanelViewController,
+ mShadeSurface,
mNotificationShadeDepthControllerLazy.get(),
mBrightnessSliderFactory,
(visible) -> {
@@ -1486,7 +1494,7 @@
|| !mKeyguardStateController.canDismissLockScreen()
|| mKeyguardViewMediator.isAnySimPinSecure()
|| (mQsController.getExpanded() && trackingTouch)
- || mNotificationPanelViewController.getBarState() == StatusBarState.SHADE_LOCKED) {
+ || mShadeSurface.getBarState() == StatusBarState.SHADE_LOCKED) {
return;
}
@@ -1506,14 +1514,15 @@
boolean tracking = event.getTracking();
dispatchPanelExpansionForKeyguardDismiss(fraction, tracking);
- if (getNotificationPanelViewController() != null) {
- getNotificationPanelViewController().updateSystemUiStateFlags();
- }
-
if (fraction == 0 || fraction == 1) {
if (getNavigationBarView() != null) {
getNavigationBarView().onStatusBarPanelStateChanged();
}
+ if (getShadeViewController() != null) {
+ // Needed to update SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED and
+ // SYSUI_STATE_QUICK_SETTINGS_EXPANDED
+ getShadeViewController().updateSystemUiStateFlags();
+ }
}
}
@@ -1521,6 +1530,10 @@
void onShadeExpansionFullyChanged(Boolean isExpanded) {
if (mPanelExpanded != isExpanded) {
mPanelExpanded = isExpanded;
+ if (getShadeViewController() != null) {
+ // Needed to update SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE
+ getShadeViewController().updateSystemUiStateFlags();
+ }
if (isExpanded && mStatusBarStateController.getState() != StatusBarState.KEYGUARD) {
if (DEBUG) {
Log.v(TAG, "clearing notification effects from Height");
@@ -1563,7 +1576,6 @@
mNotifListContainer,
mHeadsUpManager,
mJankMonitor);
- mNotificationShelfController.setOnActivatedListener(mPresenter);
mRemoteInputManager.addControllerCallback(mNotificationShadeWindowController);
mStackScrollerController.setNotificationActivityStarter(mNotificationActivityStarter);
mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
@@ -1590,12 +1602,10 @@
* Ask the display to wake up if currently dozing, else do nothing
*
* @param time when to wake up
- * @param where the view requesting the wakeup
* @param why the reason for the wake up
*/
@Override
- public void wakeUpIfDozing(long time, View where, String why,
- @PowerManager.WakeReason int wakeReason) {
+ public void wakeUpIfDozing(long time, String why, @PowerManager.WakeReason int wakeReason) {
if (mDozing && mScreenOffAnimationController.allowWakeUpIfDozing()) {
mPowerManager.wakeUp(
time, wakeReason, "com.android.systemui:" + why);
@@ -1631,16 +1641,21 @@
}
}
mCentralSurfacesComponent = mCentralSurfacesComponentFactory.create();
- mFragmentService.addFragmentInstantiationProvider(mCentralSurfacesComponent);
+ mFragmentService.addFragmentInstantiationProvider(
+ CollapsedStatusBarFragment.class,
+ mCentralSurfacesComponent::createCollapsedStatusBarFragment);
mNotificationShadeWindowView = mCentralSurfacesComponent.getNotificationShadeWindowView();
mNotificationShadeWindowViewController = mCentralSurfacesComponent
.getNotificationShadeWindowViewController();
+ // TODO(b/277762009): Inject [NotificationShadeWindowView] directly into the controller.
+ // (Right now, there's a circular dependency.)
mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
mNotificationShadeWindowViewController.setupExpandedStatusBar();
- mNotificationPanelViewController =
+ NotificationPanelViewController npvc =
mCentralSurfacesComponent.getNotificationPanelViewController();
- mShadeController.setNotificationPanelViewController(mNotificationPanelViewController);
+ mShadeSurface = npvc;
+ mShadeController.setNotificationPanelViewController(npvc);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mCentralSurfacesComponent.getLockIconViewController().init();
@@ -1706,7 +1721,7 @@
});
mKeyguardViewMediator.registerCentralSurfaces(
/* statusBar= */ this,
- mNotificationPanelViewController,
+ mShadeSurface,
mShadeExpansionStateManager,
mBiometricUnlockController,
mStackScroller,
@@ -1734,8 +1749,8 @@
}
@Override
- public NotificationPanelViewController getNotificationPanelViewController() {
- return mNotificationPanelViewController;
+ public ShadeViewController getShadeViewController() {
+ return mShadeSurface;
}
@Override
@@ -2092,16 +2107,16 @@
}
if (start) {
- mNotificationPanelViewController.startWaitingForExpandGesture();
+ mShadeSurface.startWaitingForExpandGesture();
} else {
- mNotificationPanelViewController.stopWaitingForExpandGesture(cancel, velocity);
+ mShadeSurface.stopWaitingForExpandGesture(cancel, velocity);
}
}
@Override
public void animateCollapseQuickSettings() {
if (mState == StatusBarState.SHADE) {
- mNotificationPanelViewController.collapse(
+ mShadeSurface.collapse(
true, false /* delayed */, 1.0f /* speedUpFactor */);
}
}
@@ -2414,11 +2429,22 @@
}
@Override
+ public void startActivityDismissingKeyguard(Intent intent, boolean onlyProvisioned,
+ boolean dismissShade, boolean disallowEnterPictureInPictureWhileLaunching,
+ Callback callback, int flags,
+ @androidx.annotation.Nullable ActivityLaunchAnimator.Controller animationController,
+ UserHandle userHandle) {
+ startActivityDismissingKeyguard(intent, onlyProvisioned, dismissShade,
+ disallowEnterPictureInPictureWhileLaunching, callback, flags, animationController,
+ userHandle, null /* customMessage */);
+ }
+
+ @Override
public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
final boolean dismissShade, final boolean disallowEnterPictureInPictureWhileLaunching,
final Callback callback, int flags,
@Nullable ActivityLaunchAnimator.Controller animationController,
- final UserHandle userHandle) {
+ final UserHandle userHandle, @Nullable String customMessage) {
if (onlyProvisioned && !mDeviceProvisionedController.isDeviceProvisioned()) return;
final boolean willLaunchResolverActivity =
@@ -2505,7 +2531,8 @@
&& mKeyguardStateController.isOccluded();
boolean deferred = !occluded;
executeRunnableDismissingKeyguard(runnable, cancelRunnable, dismissShadeDirectly,
- willLaunchResolverActivity, deferred /* deferred */, animate);
+ willLaunchResolverActivity, deferred /* deferred */, animate,
+ customMessage /* customMessage */);
}
/**
@@ -2558,7 +2585,7 @@
final boolean afterKeyguardGone,
final boolean deferred) {
executeRunnableDismissingKeyguard(runnable, cancelAction, dismissShade, afterKeyguardGone,
- deferred, false /* willAnimateOnKeyguard */);
+ deferred, false /* willAnimateOnKeyguard */, null /* customMessage */);
}
@Override
@@ -2567,7 +2594,8 @@
final boolean dismissShade,
final boolean afterKeyguardGone,
final boolean deferred,
- final boolean willAnimateOnKeyguard) {
+ final boolean willAnimateOnKeyguard,
+ @Nullable String customMessage) {
OnDismissAction onDismissAction = new OnDismissAction() {
@Override
public boolean onDismiss() {
@@ -2596,7 +2624,7 @@
return willAnimateOnKeyguard;
}
};
- dismissKeyguardThenExecute(onDismissAction, cancelAction, afterKeyguardGone);
+ dismissKeyguardThenExecute(onDismissAction, cancelAction, afterKeyguardGone, customMessage);
}
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -2677,6 +2705,12 @@
@Override
public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancelAction,
boolean afterKeyguardGone) {
+ dismissKeyguardThenExecute(action, cancelAction, afterKeyguardGone, null);
+ }
+
+ @Override
+ public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancelAction,
+ boolean afterKeyguardGone, String customMessage) {
if (!action.willRunAnimationOnKeyguard()
&& mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_ASLEEP
&& mKeyguardStateController.canDismissLockScreen()
@@ -2689,7 +2723,7 @@
}
if (mKeyguardStateController.isShowing()) {
mStatusBarKeyguardViewManager.dismissWithAction(action, cancelAction,
- afterKeyguardGone);
+ afterKeyguardGone, customMessage);
} else {
// If the keyguard isn't showing but the device is dreaming, we should exit the dream.
if (mKeyguardUpdateMonitor.isDreaming()) {
@@ -2697,7 +2731,9 @@
}
action.onDismiss();
}
+
}
+
/**
* Notify the shade controller that the current user changed
*
@@ -2705,7 +2741,7 @@
*/
@Override
public void setLockscreenUser(int newUserId) {
- if (mLockscreenWallpaper != null) {
+ if (mLockscreenWallpaper != null && !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
mLockscreenWallpaper.setCurrentUser(newUserId);
}
mScrimController.setCurrentUser(newUserId);
@@ -2731,8 +2767,8 @@
mStatusBarWindowController.refreshStatusBarHeight();
}
- if (mNotificationPanelViewController != null) {
- mNotificationPanelViewController.updateResources();
+ if (mShadeSurface != null) {
+ mShadeSurface.updateResources();
}
if (mBrightnessMirrorController != null) {
mBrightnessMirrorController.updateResources();
@@ -2902,6 +2938,14 @@
@Override
public void postStartActivityDismissingKeyguard(Intent intent, int delay,
@Nullable ActivityLaunchAnimator.Controller animationController) {
+ postStartActivityDismissingKeyguard(intent, delay, animationController,
+ null /* customMessage */);
+ }
+
+ @Override
+ public void postStartActivityDismissingKeyguard(Intent intent, int delay,
+ @Nullable ActivityLaunchAnimator.Controller animationController,
+ @Nullable String customMessage) {
mMainExecutor.executeDelayed(
() ->
startActivityDismissingKeyguard(intent, true /* onlyProvisioned */,
@@ -2910,7 +2954,7 @@
null /* callback */,
0 /* flags */,
animationController,
- getActivityUserHandle(intent)),
+ getActivityUserHandle(intent), customMessage),
delay);
}
@@ -2982,7 +3026,7 @@
public void showKeyguardImpl() {
Trace.beginSection("CentralSurfaces#showKeyguard");
if (mKeyguardStateController.isLaunchTransitionFadingAway()) {
- mNotificationPanelViewController.cancelAnimation();
+ mShadeSurface.cancelAnimation();
onLaunchTransitionFadingEnded();
}
mMessageRouter.cancelMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
@@ -3001,7 +3045,7 @@
}
private void onLaunchTransitionFadingEnded() {
- mNotificationPanelViewController.resetAlpha();
+ mShadeSurface.resetAlpha();
mCameraLauncherLazy.get().setLaunchingAffordance(false);
releaseGestureWakeLock();
runLaunchTransitionEndRunnable();
@@ -3031,8 +3075,8 @@
}
updateScrimController();
mPresenter.updateMediaMetaData(false, true);
- mNotificationPanelViewController.resetAlpha();
- mNotificationPanelViewController.fadeOut(
+ mShadeSurface.resetAlpha();
+ mShadeSurface.fadeOut(
FADE_KEYGUARD_START_DELAY, FADE_KEYGUARD_DURATION,
this::onLaunchTransitionFadingEnded);
mCommandQueue.appTransitionStarting(mDisplayId, SystemClock.uptimeMillis(),
@@ -3064,7 +3108,7 @@
Log.w(TAG, "Launch transition: Timeout!");
mCameraLauncherLazy.get().setLaunchingAffordance(false);
releaseGestureWakeLock();
- mNotificationPanelViewController.resetViews(false /* animate */);
+ mShadeSurface.resetViews(false /* animate */);
}
private void runLaunchTransitionEndRunnable() {
@@ -3104,7 +3148,7 @@
// Disable layout transitions in navbar for this transition because the load is just
// too heavy for the CPU and GPU on any device.
mNavigationBarController.disableAnimationsDuringHide(mDisplayId, delay);
- } else if (!mNotificationPanelViewController.isCollapsing()) {
+ } else if (!mShadeSurface.isCollapsing()) {
mShadeController.instantCollapseShade();
}
@@ -3116,9 +3160,9 @@
mMessageRouter.cancelMessages(MSG_LAUNCH_TRANSITION_TIMEOUT);
releaseGestureWakeLock();
mCameraLauncherLazy.get().setLaunchingAffordance(false);
- mNotificationPanelViewController.resetAlpha();
- mNotificationPanelViewController.resetTranslation();
- mNotificationPanelViewController.resetViewGroupFade();
+ mShadeSurface.resetAlpha();
+ mShadeSurface.resetTranslation();
+ mShadeSurface.resetViewGroupFade();
updateDozingState();
updateScrimController();
Trace.endSection();
@@ -3220,7 +3264,7 @@
boolean animate = (!mDozing && shouldAnimateDozeWakeup())
|| (mDozing && mDozeParameters.shouldControlScreenOff() && keyguardVisibleOrWillBe);
- mNotificationPanelViewController.setDozing(mDozing, animate);
+ mShadeSurface.setDozing(mDozing, animate);
updateQsExpansionEnabled();
Trace.endSection();
}
@@ -3300,16 +3344,16 @@
return true;
}
if (mQsController.getExpanded()) {
- mNotificationPanelViewController.animateCollapseQs(false);
+ mShadeSurface.animateCollapseQs(false);
return true;
}
- if (mNotificationPanelViewController.closeUserSwitcherIfOpen()) {
+ if (mShadeSurface.closeUserSwitcherIfOpen()) {
return true;
}
if (shouldBackBeHandled()) {
- if (mNotificationPanelViewController.canBeCollapsed()) {
+ if (mShadeSurface.canBeCollapsed()) {
// this is the Shade dismiss animation, so make sure QQS closes when it ends.
- mNotificationPanelViewController.onBackPressed();
+ mShadeSurface.onBackPressed();
mShadeController.animateCollapseShade();
}
return true;
@@ -3452,7 +3496,7 @@
mStatusBarHideIconsForBouncerManager.setBouncerShowingAndTriggerUpdate(bouncerShowing);
mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
if (mBouncerShowing) {
- wakeUpIfDozing(SystemClock.uptimeMillis(), null, "BOUNCER_VISIBLE",
+ wakeUpIfDozing(SystemClock.uptimeMillis(), "BOUNCER_VISIBLE",
PowerManager.WAKE_REASON_GESTURE);
}
updateScrimController();
@@ -3485,8 +3529,8 @@
if (mPhoneStatusBarViewController != null) {
mPhoneStatusBarViewController.setImportantForAccessibility(importance);
}
- mNotificationPanelViewController.setImportantForAccessibility(importance);
- mNotificationPanelViewController.setBouncerShowing(bouncerShowing);
+ mShadeSurface.setImportantForAccessibility(importance);
+ mShadeSurface.setBouncerShowing(bouncerShowing);
}
/**
@@ -3494,7 +3538,7 @@
*/
@Override
public void collapseShade() {
- if (mNotificationPanelViewController.isTracking()) {
+ if (mShadeSurface.isTracking()) {
mNotificationShadeWindowViewController.cancelCurrentTouch();
}
if (mPanelExpanded && mState == StatusBarState.SHADE) {
@@ -3502,13 +3546,6 @@
}
}
- @Override
- public void collapseShadeForBugreport() {
- if (!mFeatureFlags.isEnabled(Flags.LEAVE_SHADE_OPEN_FOR_BUGREPORT)) {
- collapseShade();
- }
- }
-
@VisibleForTesting
final WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() {
@Override
@@ -3605,7 +3642,7 @@
}
}
- mNotificationPanelViewController.setWillPlayDelayedDozeAmountAnimation(
+ mShadeSurface.setWillPlayDelayedDozeAmountAnimation(
mShouldDelayWakeUpAnimation);
mWakeUpCoordinator.setWakingUp(
/* wakingUp= */ true,
@@ -3647,12 +3684,12 @@
// So if AOD is off or unsupported we need to trigger these updates at screen on
// when the keyguard is occluded.
mLockscreenUserManager.updatePublicMode();
- mNotificationPanelViewController.getNotificationStackScrollLayoutController()
+ mShadeSurface.getNotificationStackScrollLayoutController()
.updateSensitivenessForOccludedWakeup();
}
if (mLaunchCameraWhenFinishedWaking) {
mCameraLauncherLazy.get().launchCamera(mLastCameraLaunchSource,
- mNotificationPanelViewController.isFullyCollapsed());
+ mShadeSurface.isFullyCollapsed());
mLaunchCameraWhenFinishedWaking = false;
}
if (mLaunchEmergencyActionWhenFinishedWaking) {
@@ -3683,7 +3720,7 @@
!mDozeParameters.shouldControlScreenOff(), !mDeviceInteractive,
!mDozeServiceHost.isPulsing(), mDeviceProvisionedController.isFrpActive());
- mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled);
+ mShadeSurface.setTouchAndAnimationDisabled(disabled);
mNotificationIconAreaController.setAnimationsEnabled(!disabled);
}
@@ -3691,7 +3728,7 @@
@Override
public void onScreenTurningOn() {
mFalsingCollector.onScreenTurningOn();
- mNotificationPanelViewController.onScreenTurningOn();
+ mShadeSurface.onScreenTurningOn();
}
@Override
@@ -4335,7 +4372,7 @@
}
// We need the new R.id.keyguard_indication_area before recreating
// mKeyguardIndicationController
- mNotificationPanelViewController.onThemeChanged();
+ mShadeSurface.onThemeChanged();
if (mStatusBarKeyguardViewManager != null) {
mStatusBarKeyguardViewManager.onThemeChanged();
@@ -4381,7 +4418,7 @@
mNavigationBarController.touchAutoDim(mDisplayId);
Trace.beginSection("CentralSurfaces#updateKeyguardState");
if (mState == StatusBarState.KEYGUARD) {
- mNotificationPanelViewController.cancelPendingCollapse();
+ mShadeSurface.cancelPendingCollapse();
}
updateDozingState();
checkBarModes();
@@ -4407,7 +4444,7 @@
&& mDozeParameters.shouldControlScreenOff();
// resetting views is already done when going into doze, there's no need to
// reset them again when we're waking up
- mNotificationPanelViewController.resetViews(dozingAnimated && isDozing);
+ mShadeSurface.resetViews(dozingAnimated && isDozing);
updateQsExpansionEnabled();
mKeyguardViewMediator.setDozing(mDozing);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
index 5196e10..89c3946 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -37,8 +37,8 @@
import com.android.systemui.doze.DozeLog;
import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
@@ -50,12 +50,12 @@
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
import com.android.systemui.util.Assert;
+import dagger.Lazy;
+
import java.util.ArrayList;
import javax.inject.Inject;
-import dagger.Lazy;
-
/**
* Implementation of DozeHost for SystemUI.
*/
@@ -90,7 +90,7 @@
private final AuthController mAuthController;
private final NotificationIconAreaController mNotificationIconAreaController;
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
- private NotificationPanelViewController mNotificationPanel;
+ private ShadeViewController mNotificationPanel;
private View mAmbientIndicationContainer;
private CentralSurfaces mCentralSurfaces;
private boolean mAlwaysOnSuppressed;
@@ -141,7 +141,7 @@
CentralSurfaces centralSurfaces,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
NotificationShadeWindowViewController notificationShadeWindowViewController,
- NotificationPanelViewController notificationPanel,
+ ShadeViewController notificationPanel,
View ambientIndicationContainer) {
mCentralSurfaces = centralSurfaces;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
index 171e3d0..e705afc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
@@ -31,8 +31,8 @@
import com.android.systemui.flags.Flags;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeHeadsUpTracker;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
@@ -76,7 +76,7 @@
private final NotificationStackScrollLayoutController mStackScrollerController;
private final DarkIconDispatcher mDarkIconDispatcher;
- private final NotificationPanelViewController mNotificationPanelViewController;
+ private final ShadeViewController mShadeViewController;
private final NotificationRoundnessManager mNotificationRoundnessManager;
private final boolean mUseRoundnessSourceTypes;
private final Consumer<ExpandableNotificationRow>
@@ -118,7 +118,7 @@
KeyguardStateController keyguardStateController,
CommandQueue commandQueue,
NotificationStackScrollLayoutController stackScrollerController,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
NotificationRoundnessManager notificationRoundnessManager,
FeatureFlags featureFlags,
HeadsUpStatusBarView headsUpStatusBarView,
@@ -134,13 +134,13 @@
// has started pulling down the notification shade from the HUN and then the font size
// changes). We need to re-fetch these values since they're used to correctly display the
// HUN during this shade expansion.
- mTrackedChild = notificationPanelViewController.getShadeHeadsUpTracker()
+ mTrackedChild = shadeViewController.getShadeHeadsUpTracker()
.getTrackedHeadsUpNotification();
mAppearFraction = stackScrollerController.getAppearFraction();
mExpandedHeight = stackScrollerController.getExpandedHeight();
mStackScrollerController = stackScrollerController;
- mNotificationPanelViewController = notificationPanelViewController;
+ mShadeViewController = shadeViewController;
mStackScrollerController.setHeadsUpAppearanceController(this);
mClockView = clockView;
mOperatorNameViewOptional = operatorNameViewOptional;
@@ -179,7 +179,7 @@
}
private ShadeHeadsUpTracker getShadeHeadsUpTracker() {
- return mNotificationPanelViewController.getShadeHeadsUpTracker();
+ return mShadeViewController.getShadeHeadsUpTracker();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
index c163a89..90a6d0f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -27,7 +27,7 @@
import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcherListView;
/**
@@ -84,7 +84,7 @@
private int mSplitShadeTargetTopMargin;
/**
- * @see NotificationPanelViewController#getExpandedFraction()
+ * @see ShadeViewController#getExpandedFraction()
*/
private float mPanelExpansion;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
index 2814e8d..e835c5ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
@@ -47,7 +47,7 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.log.LogLevel;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewStateProvider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.StatusBarState;
@@ -69,6 +69,8 @@
import com.android.systemui.util.ViewController;
import com.android.systemui.util.settings.SecureSettings;
+import kotlin.Unit;
+
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -76,8 +78,6 @@
import javax.inject.Inject;
-import kotlin.Unit;
-
/** View Controller for {@link com.android.systemui.statusbar.phone.KeyguardStatusBarView}. */
public class KeyguardStatusBarViewController extends ViewController<KeyguardStatusBarView> {
private static final String TAG = "KeyguardStatusBarViewController";
@@ -104,8 +104,7 @@
private final StatusBarIconController mStatusBarIconController;
private final StatusBarIconController.TintedIconManager.Factory mTintedIconManagerFactory;
private final BatteryMeterViewController mBatteryMeterViewController;
- private final NotificationPanelViewController.NotificationPanelViewStateProvider
- mNotificationPanelViewStateProvider;
+ private final ShadeViewStateProvider mShadeViewStateProvider;
private final KeyguardStateController mKeyguardStateController;
private final KeyguardBypassController mKeyguardBypassController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -274,8 +273,7 @@
StatusBarIconController statusBarIconController,
StatusBarIconController.TintedIconManager.Factory tintedIconManagerFactory,
BatteryMeterViewController batteryMeterViewController,
- NotificationPanelViewController.NotificationPanelViewStateProvider
- notificationPanelViewStateProvider,
+ ShadeViewStateProvider shadeViewStateProvider,
KeyguardStateController keyguardStateController,
KeyguardBypassController bypassController,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -299,7 +297,7 @@
mStatusBarIconController = statusBarIconController;
mTintedIconManagerFactory = tintedIconManagerFactory;
mBatteryMeterViewController = batteryMeterViewController;
- mNotificationPanelViewStateProvider = notificationPanelViewStateProvider;
+ mShadeViewStateProvider = shadeViewStateProvider;
mKeyguardStateController = keyguardStateController;
mKeyguardBypassController = bypassController;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -470,7 +468,7 @@
/**
* Updates the {@link KeyguardStatusBarView} state based on what the
- * {@link NotificationPanelViewController.NotificationPanelViewStateProvider} and other
+ * {@link ShadeViewController.NotificationPanelViewStateProvider} and other
* controllers provide.
*/
public void updateViewState() {
@@ -479,7 +477,7 @@
}
float alphaQsExpansion = 1 - Math.min(
- 1, mNotificationPanelViewStateProvider.getLockscreenShadeDragProgress() * 2);
+ 1, mShadeViewStateProvider.getLockscreenShadeDragProgress() * 2);
float newAlpha;
if (mExplicitAlpha != -1) {
@@ -530,12 +528,12 @@
if (isKeyguardShowing()) {
// When on Keyguard, we hide the header as soon as we expanded close enough to the
// header
- alpha = mNotificationPanelViewStateProvider.getPanelViewExpandedHeight()
+ alpha = mShadeViewStateProvider.getPanelViewExpandedHeight()
/ (mView.getHeight() + mNotificationsHeaderCollideDistance);
} else {
// In SHADE_LOCKED, the top card is already really close to the header. Hide it as
// soon as we start translating the stack.
- alpha = mNotificationPanelViewStateProvider.getPanelViewExpandedHeight()
+ alpha = mShadeViewStateProvider.getPanelViewExpandedHeight()
/ mView.getHeight();
}
alpha = MathUtils.saturate(alpha);
@@ -585,7 +583,7 @@
void updateForHeadsUp(boolean animate) {
boolean showingKeyguardHeadsUp =
- isKeyguardShowing() && mNotificationPanelViewStateProvider.shouldHeadsUpBeVisible();
+ isKeyguardShowing() && mShadeViewStateProvider.shouldHeadsUpBeVisible();
if (mShowingKeyguardHeadsUp != showingKeyguardHeadsUp) {
mShowingKeyguardHeadsUp = showingKeyguardHeadsUp;
if (isKeyguardShowing()) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt
index 2e3f0d0..61377e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxModule.kt
@@ -18,10 +18,12 @@
package com.android.systemui.statusbar.phone
import com.android.systemui.CoreStartable
+import com.android.systemui.statusbar.core.StatusBarInitializer
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
+import dagger.multibindings.IntoSet
@Module
abstract class LetterboxModule {
@@ -29,4 +31,10 @@
@IntoMap
@ClassKey(LetterboxBackgroundProvider::class)
abstract fun bindFeature(impl: LetterboxBackgroundProvider): CoreStartable
+
+ @Binds
+ @IntoSet
+ abstract fun statusBarInitializedListener(
+ letterboxAppearanceCalculator: LetterboxAppearanceCalculator
+ ): StatusBarInitializer.OnStatusBarViewInitializedListener
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
index c16877a..c07b5e0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
@@ -63,6 +63,11 @@
private static final String TAG = "LockscreenWallpaper";
+ // TODO(b/253507223): temporary; remove this
+ private static final String DISABLED_ERROR_MESSAGE = "Methods from LockscreenWallpaper.java "
+ + "should not be called in this version. The lock screen wallpaper should be "
+ + "managed by the WallpaperManagerService and not by this class.";
+
private final NotificationMediaManager mMediaManager;
private final WallpaperManager mWallpaperManager;
private final KeyguardUpdateMonitor mUpdateMonitor;
@@ -91,7 +96,7 @@
mMediaManager = mediaManager;
mH = mainHandler;
- if (iWallpaperManager != null) {
+ if (iWallpaperManager != null && !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
// Service is disabled on some devices like Automotive
try {
iWallpaperManager.setLockWallpaperCallback(this);
@@ -102,6 +107,8 @@
}
public Bitmap getBitmap() {
+ assertLockscreenLiveWallpaperNotEnabled();
+
if (mCached) {
return mCache;
}
@@ -122,9 +129,8 @@
public LoaderResult loadBitmap(int currentUserId, UserHandle selectedUser) {
// May be called on any thread - only use thread safe operations.
- if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
- return LoaderResult.success(null);
- }
+ assertLockscreenLiveWallpaperNotEnabled();
+
if (!mWallpaperManager.isWallpaperSupported()) {
// When wallpaper is not supported, show the system wallpaper
@@ -164,6 +170,8 @@
}
public void setCurrentUser(int user) {
+ assertLockscreenLiveWallpaperNotEnabled();
+
if (user != mCurrentUserId) {
if (mSelectedUser == null || user != mSelectedUser.getIdentifier()) {
mCached = false;
@@ -173,6 +181,8 @@
}
public void setSelectedUser(UserHandle selectedUser) {
+ assertLockscreenLiveWallpaperNotEnabled();
+
if (Objects.equals(selectedUser, mSelectedUser)) {
return;
}
@@ -182,16 +192,18 @@
@Override
public void onWallpaperChanged() {
+ assertLockscreenLiveWallpaperNotEnabled();
// Called on Binder thread.
postUpdateWallpaper();
}
@Override
public void onWallpaperColorsChanged(WallpaperColors colors, int which, int userId) {
-
+ assertLockscreenLiveWallpaperNotEnabled();
}
private void postUpdateWallpaper() {
+ assertLockscreenLiveWallpaperNotEnabled();
if (mH == null) {
Log.wtfStack(TAG, "Trying to use LockscreenWallpaper before initialization.");
return;
@@ -199,11 +211,12 @@
mH.removeCallbacks(this);
mH.post(this);
}
-
@Override
public void run() {
// Called in response to onWallpaperChanged on the main thread.
+ assertLockscreenLiveWallpaperNotEnabled();
+
if (mLoader != null) {
mLoader.cancel(false /* interrupt */);
}
@@ -358,4 +371,16 @@
}
}
}
+
+ /**
+ * Feature b/253507223 will adapt the logic to always use the
+ * WallpaperManagerService to render the lock screen wallpaper.
+ * Methods of this class should not be called at all if the project flag is enabled.
+ * TODO(b/253507223) temporary assertion; remove this
+ */
+ private void assertLockscreenLiveWallpaperNotEnabled() {
+ if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
+ throw new IllegalStateException(DISABLED_ERROR_MESSAGE);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
index 057fa42..55dc188 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java
@@ -23,6 +23,7 @@
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.demomode.DemoMode;
import com.android.systemui.demomode.DemoModeController;
+import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -92,6 +93,8 @@
private final DemoModeController mDemoModeController;
+ private final FeatureFlags mFeatureFlags;
+
private int mAodIconAppearTranslation;
private boolean mAnimationsEnabled;
@@ -122,11 +125,12 @@
Optional<Bubbles> bubblesOptional,
DemoModeController demoModeController,
DarkIconDispatcher darkIconDispatcher,
- StatusBarWindowController statusBarWindowController,
+ FeatureFlags featureFlags, StatusBarWindowController statusBarWindowController,
ScreenOffAnimationController screenOffAnimationController) {
mContrastColorUtil = ContrastColorUtil.getInstance(context);
mContext = context;
mStatusBarStateController = statusBarStateController;
+ mFeatureFlags = featureFlags;
mStatusBarStateController.addCallback(this);
mMediaManager = notificationMediaManager;
mDozeParameters = dozeParameters;
@@ -192,9 +196,16 @@
}
public void setupShelf(NotificationShelfController notificationShelfController) {
+ NotificationShelfController.assertRefactorFlagDisabled(mFeatureFlags);
mShelfIcons = notificationShelfController.getShelfIcons();
}
+ public void setShelfIcons(NotificationIconContainer icons) {
+ if (NotificationShelfController.checkRefactorFlagEnabled(mFeatureFlags)) {
+ mShelfIcons = icons;
+ }
+ }
+
public void onDensityOrFontScaleChanged(Context context) {
updateIconLayoutParams(context);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt
index 62d302f..e6cb68f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt
@@ -165,19 +165,19 @@
if (event.action == MotionEvent.ACTION_DOWN) {
// If the view that would receive the touch is disabled, just have status
// bar eat the gesture.
- if (!centralSurfaces.notificationPanelViewController.isViewEnabled) {
+ if (!centralSurfaces.shadeViewController.isViewEnabled) {
shadeLogger.logMotionEvent(event,
"onTouchForwardedFromStatusBar: panel view disabled")
return true
}
- if (centralSurfaces.notificationPanelViewController.isFullyCollapsed &&
+ if (centralSurfaces.shadeViewController.isFullyCollapsed &&
event.y < 1f) {
// b/235889526 Eat events on the top edge of the phone when collapsed
shadeLogger.logMotionEvent(event, "top edge touch ignored")
return true
}
}
- return centralSurfaces.notificationPanelViewController.handleExternalTouch(event)
+ return centralSurfaces.shadeViewController.handleExternalTouch(event)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index d3aa4bf..51c56a0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -64,7 +64,7 @@
import com.android.systemui.keyguard.shared.model.TransitionStep;
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel;
import com.android.systemui.scrim.ScrimView;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.statusbar.notification.stack.ViewState;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -649,7 +649,7 @@
calculateAndUpdatePanelExpansion();
}
- /** See {@link NotificationPanelViewController#setPanelScrimMinFraction(float)}. */
+ /** See {@link ShadeViewController#setPanelScrimMinFraction(float)}. */
public void setPanelScrimMinFraction(float minFraction) {
if (isNaN(minFraction)) {
throw new IllegalArgumentException("minFraction should not be NaN");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
index a7413d5..481cf3c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.phone;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
@@ -34,7 +34,7 @@
public class StatusBarHeadsUpChangeListener implements OnHeadsUpChangedListener {
private final NotificationShadeWindowController mNotificationShadeWindowController;
private final StatusBarWindowController mStatusBarWindowController;
- private final NotificationPanelViewController mNotificationPanelViewController;
+ private final ShadeViewController mShadeViewController;
private final KeyguardBypassController mKeyguardBypassController;
private final HeadsUpManagerPhone mHeadsUpManager;
private final StatusBarStateController mStatusBarStateController;
@@ -44,7 +44,7 @@
StatusBarHeadsUpChangeListener(
NotificationShadeWindowController notificationShadeWindowController,
StatusBarWindowController statusBarWindowController,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
KeyguardBypassController keyguardBypassController,
HeadsUpManagerPhone headsUpManager,
StatusBarStateController statusBarStateController,
@@ -52,7 +52,7 @@
mNotificationShadeWindowController = notificationShadeWindowController;
mStatusBarWindowController = statusBarWindowController;
- mNotificationPanelViewController = notificationPanelViewController;
+ mShadeViewController = shadeViewController;
mKeyguardBypassController = keyguardBypassController;
mHeadsUpManager = headsUpManager;
mStatusBarStateController = statusBarStateController;
@@ -64,14 +64,14 @@
if (inPinnedMode) {
mNotificationShadeWindowController.setHeadsUpShowing(true);
mStatusBarWindowController.setForceStatusBarVisible(true);
- if (mNotificationPanelViewController.isFullyCollapsed()) {
- mNotificationPanelViewController.updateTouchableRegion();
+ if (mShadeViewController.isFullyCollapsed()) {
+ mShadeViewController.updateTouchableRegion();
}
} else {
boolean bypassKeyguard = mKeyguardBypassController.getBypassEnabled()
&& mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
- if (!mNotificationPanelViewController.isFullyCollapsed()
- || mNotificationPanelViewController.isTracking()
+ if (!mShadeViewController.isFullyCollapsed()
+ || mShadeViewController.isTracking()
|| bypassKeyguard) {
// We are currently tracking or is open and the shade doesn't need to
//be kept
@@ -85,7 +85,7 @@
//animation
// is finished.
mHeadsUpManager.setHeadsUpGoingAway(true);
- mNotificationPanelViewController.getNotificationStackScrollLayoutController()
+ mShadeViewController.getNotificationStackScrollLayoutController()
.runAfterAnimationFinished(() -> {
if (!mHeadsUpManager.hasPinnedHeadsUp()) {
mNotificationShadeWindowController.setHeadsUpShowing(false);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 49b58df..f7646d7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -69,11 +69,11 @@
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.navigationbar.TaskbarDelegate;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionListener;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.NotificationMediaManager;
@@ -251,7 +251,7 @@
protected LockPatternUtils mLockPatternUtils;
protected ViewMediatorCallback mViewMediatorCallback;
@Nullable protected CentralSurfaces mCentralSurfaces;
- private NotificationPanelViewController mNotificationPanelViewController;
+ private ShadeViewController mShadeViewController;
private BiometricUnlockController mBiometricUnlockController;
private boolean mCentralSurfacesRegistered;
@@ -371,7 +371,7 @@
@Override
public void registerCentralSurfaces(CentralSurfaces centralSurfaces,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
ShadeExpansionStateManager shadeExpansionStateManager,
BiometricUnlockController biometricUnlockController,
View notificationContainer,
@@ -380,7 +380,7 @@
mBiometricUnlockController = biometricUnlockController;
mPrimaryBouncerCallbackInteractor.addBouncerExpansionCallback(mExpansionCallback);
- mNotificationPanelViewController = notificationPanelViewController;
+ mShadeViewController = shadeViewController;
if (shadeExpansionStateManager != null) {
shadeExpansionStateManager.addExpansionListener(this);
}
@@ -482,8 +482,8 @@
// Avoid having the shade and the bouncer open at the same time over a dream.
final boolean hideBouncerOverDream =
mDreamOverlayStateController.isOverlayActive()
- && (mNotificationPanelViewController.isExpanded()
- || mNotificationPanelViewController.isExpanding());
+ && (mShadeViewController.isExpanded()
+ || mShadeViewController.isExpanding());
final boolean isUserTrackingStarted =
event.getFraction() != EXPANSION_HIDDEN && event.getTracking();
@@ -495,7 +495,7 @@
&& !mKeyguardStateController.isOccluded()
&& !mKeyguardStateController.canDismissLockScreen()
&& !bouncerIsAnimatingAway()
- && !mNotificationPanelViewController.isUnlockHintRunning()
+ && !mShadeViewController.isUnlockHintRunning()
&& !(mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED);
}
@@ -656,9 +656,11 @@
}
updateAlternateBouncerShowing(mAlternateBouncerInteractor.show());
+ setKeyguardMessage(message, null);
return;
}
+ mViewMediatorCallback.setCustomMessage(message);
if (afterKeyguardGone) {
// we'll handle the dismiss action after keyguard is gone, so just show the
// bouncer
@@ -697,7 +699,7 @@
if (mKeyguardStateController.isShowing()) {
final boolean isOccluded = mKeyguardStateController.isOccluded();
// Hide quick settings.
- mNotificationPanelViewController.resetViews(/* animate= */ !isOccluded);
+ mShadeViewController.resetViews(/* animate= */ !isOccluded);
// Hide bouncer and quick-quick settings.
if (isOccluded && !mDozing) {
mCentralSurfaces.hideKeyguard();
@@ -860,7 +862,7 @@
public void startPreHideAnimation(Runnable finishRunnable) {
if (primaryBouncerIsShowing()) {
mPrimaryBouncerInteractor.startDisappearAnimation(finishRunnable);
- mNotificationPanelViewController.startBouncerPreHideAnimation();
+ mShadeViewController.startBouncerPreHideAnimation();
// We update the state (which will show the keyguard) only if an animation will run on
// the keyguard. If there is no animation, we wait before updating the state so that we
@@ -871,12 +873,12 @@
} else if (finishRunnable != null) {
finishRunnable.run();
}
- mNotificationPanelViewController.blockExpansionForCurrentTouch();
+ mShadeViewController.blockExpansionForCurrentTouch();
}
@Override
public void blockPanelExpansionFromCurrentTouch() {
- mNotificationPanelViewController.blockExpansionForCurrentTouch();
+ mShadeViewController.blockExpansionForCurrentTouch();
}
@Override
@@ -973,7 +975,7 @@
public void onKeyguardFadedAway() {
mNotificationContainer.postDelayed(() -> mNotificationShadeWindowController
.setKeyguardFadingAway(false), 100);
- mNotificationPanelViewController.resetViewGroupFade();
+ mShadeViewController.resetViewGroupFade();
mCentralSurfaces.finishKeyguardFadingAway();
mBiometricUnlockController.finishKeyguardFadingAway();
WindowManagerGlobal.getInstance().trimMemory(
@@ -1048,7 +1050,7 @@
if (hideImmediately) {
mStatusBarStateController.setLeaveOpenOnKeyguardHide(false);
} else {
- mNotificationPanelViewController.expandToNotifications();
+ mShadeViewController.expandToNotifications();
}
}
return;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarLaunchAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarLaunchAnimatorController.kt
index b1642d6..9f69db9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarLaunchAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarLaunchAnimatorController.kt
@@ -21,7 +21,7 @@
override fun onIntentStarted(willAnimate: Boolean) {
delegate.onIntentStarted(willAnimate)
if (willAnimate) {
- centralSurfaces.notificationPanelViewController.setIsLaunchAnimationRunning(true)
+ centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(true)
} else {
centralSurfaces.collapsePanelOnMainThread()
}
@@ -29,16 +29,16 @@
override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
delegate.onLaunchAnimationStart(isExpandingFullyAbove)
- centralSurfaces.notificationPanelViewController.setIsLaunchAnimationRunning(true)
+ centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(true)
if (!isExpandingFullyAbove) {
- centralSurfaces.notificationPanelViewController.collapseWithDuration(
+ centralSurfaces.shadeViewController.collapseWithDuration(
ActivityLaunchAnimator.TIMINGS.totalDuration.toInt())
}
}
override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
delegate.onLaunchAnimationEnd(isExpandingFullyAbove)
- centralSurfaces.notificationPanelViewController.setIsLaunchAnimationRunning(false)
+ centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(false)
centralSurfaces.onLaunchAnimationEnd(isExpandingFullyAbove)
}
@@ -48,12 +48,12 @@
linearProgress: Float
) {
delegate.onLaunchAnimationProgress(state, progress, linearProgress)
- centralSurfaces.notificationPanelViewController.applyLaunchAnimationProgress(linearProgress)
+ centralSurfaces.shadeViewController.applyLaunchAnimationProgress(linearProgress)
}
override fun onLaunchAnimationCancelled(newKeyguardOccludedState: Boolean?) {
delegate.onLaunchAnimationCancelled()
- centralSurfaces.notificationPanelViewController.setIsLaunchAnimationRunning(false)
+ centralSurfaces.shadeViewController.setIsLaunchAnimationRunning(false)
centralSurfaces.onLaunchAnimationCancelled(isLaunchForActivity)
}
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index c623201..bd5815aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -55,11 +55,10 @@
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationClickNotifier;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationPresenter;
@@ -122,7 +121,7 @@
private final CentralSurfaces mCentralSurfaces;
private final NotificationPresenter mPresenter;
- private final NotificationPanelViewController mNotificationPanel;
+ private final ShadeViewController mNotificationPanel;
private final ActivityLaunchAnimator mActivityLaunchAnimator;
private final NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider;
private final UserTracker mUserTracker;
@@ -157,7 +156,7 @@
OnUserInteractionCallback onUserInteractionCallback,
CentralSurfaces centralSurfaces,
NotificationPresenter presenter,
- NotificationPanelViewController panel,
+ ShadeViewController panel,
ActivityLaunchAnimator activityLaunchAnimator,
NotificationLaunchAnimatorControllerProvider notificationAnimationProvider,
LaunchFullScreenIntentProvider launchFullScreenIntentProvider,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
index 39362cf..dfaee4c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
@@ -31,15 +31,14 @@
import android.view.View;
import android.view.accessibility.AccessibilityManager;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.InitController;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.QuickSettingsController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
@@ -58,14 +57,12 @@
import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptSuppressor;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager.OnSettingsClickListener;
import com.android.systemui.statusbar.notification.row.NotificationInfo.CheckSaveListener;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -84,9 +81,8 @@
private final NotifShadeEventSource mNotifShadeEventSource;
private final NotificationMediaManager mMediaManager;
private final NotificationGutsManager mGutsManager;
- private final LockscreenGestureLogger mLockscreenGestureLogger;
- private final NotificationPanelViewController mNotificationPanel;
+ private final ShadeViewController mNotificationPanel;
private final HeadsUpManagerPhone mHeadsUpManager;
private final AboveShelfObserver mAboveShelfObserver;
private final DozeScrimController mDozeScrimController;
@@ -109,7 +105,7 @@
@Inject
StatusBarNotificationPresenter(
Context context,
- NotificationPanelViewController panel,
+ ShadeViewController panel,
QuickSettingsController quickSettingsController,
HeadsUpManagerPhone headsUp,
NotificationShadeWindowView statusBarWindow,
@@ -151,7 +147,6 @@
mNotifShadeEventSource = notifShadeEventSource;
mMediaManager = notificationMediaManager;
mGutsManager = notificationGutsManager;
- mLockscreenGestureLogger = lockscreenGestureLogger;
mAboveShelfObserver = new AboveShelfObserver(stackScrollerController.getView());
mNotificationShadeWindowController = notificationShadeWindowController;
mNotifPipelineFlags = notifPipelineFlags;
@@ -239,34 +234,6 @@
}
@Override
- public void onActivated(ActivatableNotificationView view) {
- onActivated();
- if (view != null) {
- mNotificationPanel.getShadeNotificationPresenter().setActivatedChild(view);
- }
- }
-
- public void onActivated() {
- mLockscreenGestureLogger.write(
- MetricsEvent.ACTION_LS_NOTE,
- 0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
- mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_NOTIFICATION_FALSE_TOUCH);
- ActivatableNotificationView previousView =
- mNotificationPanel.getShadeNotificationPresenter().getActivatedChild();
- if (previousView != null) {
- previousView.makeInactive(true /* animate */);
- }
- }
-
- @Override
- public void onActivationReset(ActivatableNotificationView view) {
- if (view == mNotificationPanel.getShadeNotificationPresenter().getActivatedChild()) {
- mNotificationPanel.getShadeNotificationPresenter().setActivatedChild(null);
- mKeyguardIndicationController.hideTransientIndication();
- }
- }
-
- @Override
public void updateMediaMetaData(boolean metaDataChanged, boolean allowEnterAnimation) {
mMediaManager.updateMediaMetaData(metaDataChanged, allowEnterAnimation);
}
@@ -276,7 +243,7 @@
boolean nowExpanded) {
mHeadsUpManager.setExpanded(clickedEntry, nowExpanded);
mCentralSurfaces.wakeUpIfDozing(
- SystemClock.uptimeMillis(), clickedView, "NOTIFICATION_CLICK",
+ SystemClock.uptimeMillis(), "NOTIFICATION_CLICK",
PowerManager.WAKE_REASON_GESTURE);
if (nowExpanded) {
if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
@@ -364,26 +331,6 @@
return true;
}
- if (sbn.getNotification().fullScreenIntent != null
- && !mNotifPipelineFlags.fullScreenIntentRequiresKeyguard()) {
- // we don't allow head-up on the lockscreen (unless there's a
- // "showWhenLocked" activity currently showing) if
- // the potential HUN has a fullscreen intent
- if (mKeyguardStateController.isShowing() && !mCentralSurfaces.isOccluded()) {
- if (DEBUG) {
- Log.d(TAG, "No heads up: entry has fullscreen intent on lockscreen "
- + sbn.getKey());
- }
- return true;
- }
-
- if (mAccessibilityManager.isTouchExplorationEnabled()) {
- if (DEBUG) {
- Log.d(TAG, "No heads up: accessible fullscreen: " + sbn.getKey());
- }
- return true;
- }
- }
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
index 0cd3401..8fa803e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
@@ -277,7 +277,7 @@
// Show AOD. That'll cause the KeyguardVisibilityHelper to call
// #animateInKeyguard.
- mCentralSurfaces.notificationPanelViewController.showAodUi()
+ mCentralSurfaces.shadeViewController.showAodUi()
}
}, (ANIMATE_IN_KEYGUARD_DELAY * animatorDurationScale).toLong())
@@ -326,7 +326,7 @@
// already expanded and showing notifications/QS, the animation looks really messy. For now,
// disable it if the notification panel is expanded.
if ((!this::mCentralSurfaces.isInitialized ||
- mCentralSurfaces.notificationPanelViewController.isPanelExpanded) &&
+ mCentralSurfaces.shadeViewController.isPanelExpanded) &&
// Status bar might be expanded because we have started
// playing the animation already
!isAnimationPlaying()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
index 8e59a8b..d80e1d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/CentralSurfacesComponent.java
@@ -29,7 +29,6 @@
import com.android.systemui.shade.ShadeHeaderController;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.NotificationShelfController;
-import com.android.systemui.statusbar.core.StatusBarInitializer;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
@@ -42,6 +41,8 @@
import com.android.systemui.statusbar.phone.StatusBarNotificationPresenterModule;
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
+import dagger.Subcomponent;
+
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.util.Set;
@@ -49,8 +50,6 @@
import javax.inject.Named;
import javax.inject.Scope;
-import dagger.Subcomponent;
-
/**
* Dagger subcomponent for classes (semi-)related to the status bar. The component is created once
* inside {@link CentralSurfacesImpl} and never re-created.
@@ -150,11 +149,6 @@
CollapsedStatusBarFragment createCollapsedStatusBarFragment();
/**
- * Creates a StatusBarInitializer
- */
- StatusBarInitializer getStatusBarInitializer();
-
- /**
* Set of startables to be run after a CentralSurfacesComponent has been constructed.
*/
Set<Startable> getStartables();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
index 5d4adda..ef86162 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarViewModule.java
@@ -44,18 +44,19 @@
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.NotificationsQuickSettingsContainer;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.LegacyNotificationShelfControllerImpl;
import com.android.systemui.statusbar.NotificationShelf;
import com.android.systemui.statusbar.NotificationShelfController;
import com.android.systemui.statusbar.OperatorNameViewController;
-import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent;
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModelModule;
import com.android.systemui.statusbar.notification.shelf.ui.viewbinder.NotificationShelfViewBinderWrapperControllerImpl;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModelModule;
import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
-import com.android.systemui.statusbar.phone.LetterboxAppearanceCalculator;
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.StatusBarBoundsProvider;
import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
@@ -76,17 +77,21 @@
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.settings.SecureSettings;
-import java.util.concurrent.Executor;
-
-import javax.inject.Named;
-import javax.inject.Provider;
-
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoSet;
-@Module(subcomponents = StatusBarFragmentComponent.class)
+import java.util.concurrent.Executor;
+
+import javax.inject.Named;
+import javax.inject.Provider;
+
+@Module(subcomponents = StatusBarFragmentComponent.class,
+ includes = {
+ ActivatableNotificationViewModelModule.class,
+ NotificationListViewModelModule.class,
+ })
public abstract class StatusBarViewModule {
public static final String SHADE_HEADER = "large_screen_shade_header";
@@ -95,29 +100,6 @@
/** */
@Provides
@CentralSurfacesComponent.CentralSurfacesScope
- public static NotificationShadeWindowView providesNotificationShadeWindowView(
- LayoutInflater layoutInflater) {
- NotificationShadeWindowView notificationShadeWindowView = (NotificationShadeWindowView)
- layoutInflater.inflate(R.layout.super_notification_shade, /* root= */ null);
- if (notificationShadeWindowView == null) {
- throw new IllegalStateException(
- "R.layout.super_notification_shade could not be properly inflated");
- }
-
- return notificationShadeWindowView;
- }
-
- /** */
- @Provides
- @CentralSurfacesComponent.CentralSurfacesScope
- public static NotificationStackScrollLayout providesNotificationStackScrollLayout(
- NotificationShadeWindowView notificationShadeWindowView) {
- return notificationShadeWindowView.findViewById(R.id.notification_stack_scroller);
- }
-
- /** */
- @Provides
- @CentralSurfacesComponent.CentralSurfacesScope
public static NotificationShelf providesNotificationShelf(LayoutInflater layoutInflater,
NotificationStackScrollLayout notificationStackScrollLayout) {
NotificationShelf view = (NotificationShelf) layoutInflater.inflate(
@@ -139,9 +121,7 @@
NotificationShelfComponent.Builder notificationShelfComponentBuilder,
NotificationShelf notificationShelf) {
if (featureFlags.isEnabled(Flags.NOTIFICATION_SHELF_REFACTOR)) {
- NotificationShelfViewBinderWrapperControllerImpl impl = newImpl.get();
- impl.init();
- return impl;
+ return newImpl.get();
} else {
NotificationShelfComponent component = notificationShelfComponentBuilder
.notificationShelf(notificationShelf)
@@ -155,12 +135,10 @@
}
/** */
- @Provides
+ @Binds
@CentralSurfacesComponent.CentralSurfacesScope
- public static NotificationPanelView getNotificationPanelView(
- NotificationShadeWindowView notificationShadeWindowView) {
- return notificationShadeWindowView.getNotificationPanelView();
- }
+ abstract ShadeViewController bindsShadeViewController(
+ NotificationPanelViewController notificationPanelViewController);
/** */
@Provides
@@ -267,12 +245,6 @@
@Binds
@IntoSet
- abstract OnStatusBarViewInitializedListener statusBarInitializedListener(
- LetterboxAppearanceCalculator letterboxAppearanceCalculator
- );
-
- @Binds
- @IntoSet
abstract StatusBarBoundsProvider.BoundsChangeListener sysBarAttrsListenerAsBoundsListener(
SystemBarAttributesListener systemBarAttributesListener);
@@ -301,7 +273,7 @@
StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory,
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
KeyguardStateController keyguardStateController,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
StatusBarStateController statusBarStateController,
CommandQueue commandQueue,
CarrierConfigTracker carrierConfigTracker,
@@ -324,7 +296,7 @@
darkIconManagerFactory,
statusBarHideIconsForBouncerManager,
keyguardStateController,
- notificationPanelViewController,
+ shadeViewController,
statusBarStateController,
commandQueue,
carrierConfigTracker,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
index fe63994..453dd1b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java
@@ -52,8 +52,8 @@
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.OperatorNameView;
import com.android.systemui.statusbar.OperatorNameViewController;
@@ -107,7 +107,7 @@
private PhoneStatusBarView mStatusBar;
private final StatusBarStateController mStatusBarStateController;
private final KeyguardStateController mKeyguardStateController;
- private final NotificationPanelViewController mNotificationPanelViewController;
+ private final ShadeViewController mShadeViewController;
private LinearLayout mEndSideContent;
private View mClockView;
private View mOngoingCallChip;
@@ -198,7 +198,7 @@
StatusBarIconController.DarkIconManager.Factory darkIconManagerFactory,
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
KeyguardStateController keyguardStateController,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
StatusBarStateController statusBarStateController,
CommandQueue commandQueue,
CarrierConfigTracker carrierConfigTracker,
@@ -221,7 +221,7 @@
mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
mDarkIconManagerFactory = darkIconManagerFactory;
mKeyguardStateController = keyguardStateController;
- mNotificationPanelViewController = notificationPanelViewController;
+ mShadeViewController = shadeViewController;
mStatusBarStateController = statusBarStateController;
mCommandQueue = commandQueue;
mCarrierConfigTracker = carrierConfigTracker;
@@ -509,7 +509,7 @@
private boolean shouldHideNotificationIcons() {
if (!mShadeExpansionStateManager.isClosed()
- && mNotificationPanelViewController.shouldHideStatusBarIconsWhenExpanded()) {
+ && mShadeViewController.shouldHideStatusBarIconsWhenExpanded()) {
return true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/model/SignalIconModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/model/SignalIconModel.kt
index 16e1766..be2e41a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/model/SignalIconModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/model/SignalIconModel.kt
@@ -45,10 +45,6 @@
}
companion object {
- /** Creates a [SignalIconModel] representing an empty and invalidated state. */
- fun createEmptyState(numberOfLevels: Int) =
- SignalIconModel(level = 0, numberOfLevels, showExclamationMark = true)
-
private const val COL_LEVEL = "level"
private const val COL_NUM_LEVELS = "numLevels"
private const val COL_SHOW_EXCLAMATION = "showExclamation"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
index bfd133e..54730ed 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel
import com.android.settingslib.AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH
-import com.android.settingslib.AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH_NONE
import com.android.settingslib.graph.SignalDrawable
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
@@ -78,13 +77,24 @@
scope: CoroutineScope,
) : MobileIconViewModelCommon {
/** Whether or not to show the error state of [SignalDrawable] */
- private val showExclamationMark: Flow<Boolean> =
+ private val showExclamationMark: StateFlow<Boolean> =
combine(
- iconInteractor.isDefaultDataEnabled,
- iconInteractor.isDefaultConnectionFailed,
- ) { isDefaultDataEnabled, isDefaultConnectionFailed ->
- !isDefaultDataEnabled || isDefaultConnectionFailed
- }
+ iconInteractor.isDefaultDataEnabled,
+ iconInteractor.isDefaultConnectionFailed,
+ iconInteractor.isInService,
+ ) { isDefaultDataEnabled, isDefaultConnectionFailed, isInService ->
+ !isDefaultDataEnabled || isDefaultConnectionFailed || !isInService
+ }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), true)
+
+ private val shownLevel: StateFlow<Int> =
+ combine(
+ iconInteractor.level,
+ iconInteractor.isInService,
+ ) { level, isInService ->
+ if (isInService) level else 0
+ }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), 0)
override val isVisible: StateFlow<Boolean> =
if (!constants.hasDataCapabilities) {
@@ -107,18 +117,18 @@
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
override val icon: Flow<SignalIconModel> = run {
- val initial = SignalIconModel.createEmptyState(iconInteractor.numberOfLevels.value)
+ val initial =
+ SignalIconModel(
+ level = shownLevel.value,
+ numberOfLevels = iconInteractor.numberOfLevels.value,
+ showExclamationMark = showExclamationMark.value,
+ )
combine(
- iconInteractor.level,
+ shownLevel,
iconInteractor.numberOfLevels,
showExclamationMark,
- iconInteractor.isInService,
- ) { level, numberOfLevels, showExclamationMark, isInService ->
- if (!isInService) {
- SignalIconModel.createEmptyState(numberOfLevels)
- } else {
- SignalIconModel(level, numberOfLevels, showExclamationMark)
- }
+ ) { shownLevel, numberOfLevels, showExclamationMark ->
+ SignalIconModel(shownLevel, numberOfLevels, showExclamationMark)
}
.distinctUntilChanged()
.logDiffsForTable(
@@ -130,19 +140,9 @@
}
override val contentDescription: Flow<ContentDescription> = run {
- val initial = ContentDescription.Resource(PHONE_SIGNAL_STRENGTH_NONE)
- combine(
- iconInteractor.level,
- iconInteractor.isInService,
- ) { level, isInService ->
- val resId =
- when {
- isInService -> PHONE_SIGNAL_STRENGTH[level]
- else -> PHONE_SIGNAL_STRENGTH_NONE
- }
- ContentDescription.Resource(resId)
- }
- .distinctUntilChanged()
+ val initial = ContentDescription.Resource(PHONE_SIGNAL_STRENGTH[0])
+ shownLevel
+ .map { ContentDescription.Resource(PHONE_SIGNAL_STRENGTH[it]) }
.stateIn(scope, SharingStarted.WhileSubscribed(), initial)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt
index b37c44a..4e52be9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImpl.kt
@@ -160,8 +160,10 @@
val wifi = currentWifi
if (
- wifi is WifiNetworkModel.Active &&
- wifi.networkId == network.getNetId()
+ (wifi is WifiNetworkModel.Active &&
+ wifi.networkId == network.getNetId()) ||
+ (wifi is WifiNetworkModel.CarrierMerged &&
+ wifi.networkId == network.getNetId())
) {
val newNetworkModel = WifiNetworkModel.Inactive
currentWifi = newNetworkModel
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java
index a4cb99b..6186c43 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java
@@ -28,8 +28,8 @@
import com.android.systemui.R;
import com.android.systemui.settings.brightness.BrightnessSliderController;
import com.android.systemui.settings.brightness.ToggleSlider;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import java.util.Objects;
@@ -43,7 +43,7 @@
private final NotificationShadeWindowView mStatusBarWindow;
private final Consumer<Boolean> mVisibilityCallback;
- private final NotificationPanelViewController mNotificationPanel;
+ private final ShadeViewController mNotificationPanel;
private final NotificationShadeDepthController mDepthController;
private final ArraySet<BrightnessMirrorListener> mBrightnessMirrorListeners = new ArraySet<>();
private final BrightnessSliderController.Factory mToggleSliderFactory;
@@ -54,7 +54,7 @@
private int mLastBrightnessSliderWidth = -1;
public BrightnessMirrorController(NotificationShadeWindowView statusBarWindow,
- NotificationPanelViewController notificationPanelViewController,
+ ShadeViewController shadeViewController,
NotificationShadeDepthController notificationShadeDepthController,
BrightnessSliderController.Factory factory,
@NonNull Consumer<Boolean> visibilityCallback) {
@@ -62,7 +62,7 @@
mToggleSliderFactory = factory;
mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror_container);
mToggleSliderController = setMirrorLayout();
- mNotificationPanel = notificationPanelViewController;
+ mNotificationPanel = shadeViewController;
mDepthController = notificationShadeDepthController;
mNotificationPanel.setAlphaChangeAnimationEndAction(() -> {
mBrightnessMirror.setVisibility(View.INVISIBLE);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index a08aa88..403a7e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -21,7 +21,6 @@
import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_STANDARD;
import android.app.ActivityManager;
-import android.app.Notification;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
@@ -135,7 +134,6 @@
@Nullable
private RevealParams mRevealParams;
private Rect mContentBackgroundBounds;
- private boolean mIsFocusAnimationFlagActive;
private boolean mIsAnimatingAppearance = false;
// TODO(b/193539698): move these to a Controller
@@ -433,7 +431,7 @@
// case to prevent flicker.
if (!mRemoved) {
ViewGroup parent = (ViewGroup) getParent();
- if (animate && parent != null && mIsFocusAnimationFlagActive) {
+ if (animate && parent != null) {
ViewGroup grandParent = (ViewGroup) parent.getParent();
ViewGroupOverlay overlay = parent.getOverlay();
@@ -598,24 +596,10 @@
}
/**
- * Sets whether the feature flag for the revised inline reply animation is active or not.
- * @param active
- */
- public void setIsFocusAnimationFlagActive(boolean active) {
- mIsFocusAnimationFlagActive = active;
- }
-
- /**
* Focuses the RemoteInputView and animates its appearance
*/
public void focusAnimated() {
- if (!mIsFocusAnimationFlagActive && getVisibility() != VISIBLE
- && mRevealParams != null) {
- android.animation.Animator animator = mRevealParams.createCircularRevealAnimator(this);
- animator.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
- animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
- animator.start();
- } else if (mIsFocusAnimationFlagActive && getVisibility() != VISIBLE) {
+ if (getVisibility() != VISIBLE) {
mIsAnimatingAppearance = true;
setAlpha(0f);
Animator focusAnimator = getFocusAnimator(getActionsContainerLayout());
@@ -670,37 +654,19 @@
}
private void reset() {
- if (mIsFocusAnimationFlagActive) {
- mProgressBar.setVisibility(INVISIBLE);
- mResetting = true;
- mSending = false;
- onDefocus(true /* animate */, false /* logClose */, () -> {
- mEntry.remoteInputTextWhenReset = SpannedString.valueOf(mEditText.getText());
- mEditText.getText().clear();
- mEditText.setEnabled(isAggregatedVisible());
- mSendButton.setVisibility(VISIBLE);
- mController.removeSpinning(mEntry.getKey(), mToken);
- updateSendButton();
- setAttachment(null);
- mResetting = false;
- });
- return;
- }
-
+ mProgressBar.setVisibility(INVISIBLE);
mResetting = true;
mSending = false;
- mEntry.remoteInputTextWhenReset = SpannedString.valueOf(mEditText.getText());
-
- mEditText.getText().clear();
- mEditText.setEnabled(isAggregatedVisible());
- mSendButton.setVisibility(VISIBLE);
- mProgressBar.setVisibility(INVISIBLE);
- mController.removeSpinning(mEntry.getKey(), mToken);
- updateSendButton();
- onDefocus(false /* animate */, false /* logClose */, null /* doAfterDefocus */);
- setAttachment(null);
-
- mResetting = false;
+ onDefocus(true /* animate */, false /* logClose */, () -> {
+ mEntry.remoteInputTextWhenReset = SpannedString.valueOf(mEditText.getText());
+ mEditText.getText().clear();
+ mEditText.setEnabled(isAggregatedVisible());
+ mSendButton.setVisibility(VISIBLE);
+ mController.removeSpinning(mEntry.getKey(), mToken);
+ updateSendButton();
+ setAttachment(null);
+ mResetting = false;
+ });
}
@Override
@@ -844,7 +810,7 @@
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
- if (mIsFocusAnimationFlagActive) setPivotY(getMeasuredHeight());
+ setPivotY(getMeasuredHeight());
if (mContentBackgroundBounds != null) {
mContentBackground.setBounds(mContentBackgroundBounds);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt
index 22b4c9d..e9b1d54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputViewController.kt
@@ -30,8 +30,6 @@
import android.view.View
import com.android.internal.logging.UiEventLogger
import com.android.systemui.R
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags.NOTIFICATION_INLINE_REPLY_ANIMATION
import com.android.systemui.statusbar.NotificationRemoteInputManager
import com.android.systemui.statusbar.RemoteInputController
import com.android.systemui.statusbar.notification.collection.NotificationEntry
@@ -63,8 +61,6 @@
var revealParams: RevealParams?
- val isFocusAnimationFlagActive: Boolean
-
/**
* Sets the smart reply that should be inserted in the remote input, or `null` if the user is
* not editing a smart reply.
@@ -122,7 +118,6 @@
private val remoteInputController: RemoteInputController,
private val shortcutManager: ShortcutManager,
private val uiEventLogger: UiEventLogger,
- private val mFlags: FeatureFlags
) : RemoteInputViewController {
private val onSendListeners = ArraySet<OnSendRemoteInputListener>()
@@ -154,9 +149,6 @@
override val isActive: Boolean get() = view.isActive
- override val isFocusAnimationFlagActive: Boolean
- get() = mFlags.isEnabled(NOTIFICATION_INLINE_REPLY_ANIMATION)
-
override fun bind() {
if (isBound) return
isBound = true
@@ -167,7 +159,6 @@
view.setSupportedMimeTypes(it.allowedDataTypes)
}
view.setRevealParameters(revealParams)
- view.setIsFocusAnimationFlagActive(isFocusAnimationFlagActive)
view.addOnEditTextFocusChangedListener(onFocusChangeListener)
view.addOnSendRemoteInputListener(onSendRemoteInputListener)
diff --git a/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt b/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt
index 3805019..412b315 100644
--- a/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/stylus/StylusManager.kt
@@ -353,6 +353,8 @@
// before CoreStartables run, and will not be removed.
// In many cases, it reports the battery level of the stylus.
registerBatteryListener(deviceId)
+ } else if (device.bluetoothAddress != null) {
+ onStylusBluetoothConnected(deviceId, device.bluetoothAddress)
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt b/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
index 39dda8c..6026d2c 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt
@@ -50,6 +50,7 @@
Pair.create("surface_variant", MDC.surfaceVariant),
Pair.create("on_surface_variant", MDC.onSurfaceVariant),
Pair.create("outline", MDC.outline),
+ Pair.create("outline_variant", MDC.outlineVariant),
Pair.create("error", MDC.error),
Pair.create("on_error", MDC.onError),
Pair.create("error_container", MDC.errorContainer),
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
index d1bd73a..d74906a 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
@@ -39,11 +39,11 @@
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.systemui.util.settings.GlobalSettings
import dagger.Lazy
-import java.util.function.Consumer
-import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
+import java.util.function.Consumer
+import javax.inject.Inject
/**
* Controls folding to AOD animation: when AOD is enabled and foldable device is folded we play a
@@ -128,7 +128,7 @@
}
private fun getShadeFoldAnimator(): ShadeFoldAnimator =
- centralSurfaces.notificationPanelViewController.shadeFoldAnimator
+ centralSurfaces.shadeViewController.shadeFoldAnimator
private fun setAnimationState(playing: Boolean) {
shouldPlayAnimation = playing
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
index e4ebea9..972895d 100644
--- a/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/DelayedWakeLock.java
@@ -62,6 +62,7 @@
*/
public static class Builder {
private final Context mContext;
+ private final WakeLockLogger mLogger;
private String mTag;
private Handler mHandler;
@@ -69,8 +70,9 @@
* Constructor for DelayedWakeLock.Builder
*/
@Inject
- public Builder(Context context) {
+ public Builder(Context context, WakeLockLogger logger) {
mContext = context;
+ mLogger = logger;
}
/**
@@ -95,7 +97,7 @@
* Build the DelayedWakeLock.
*/
public DelayedWakeLock build() {
- return new DelayedWakeLock(mHandler, WakeLock.createPartial(mContext, mTag));
+ return new DelayedWakeLock(mHandler, WakeLock.createPartial(mContext, mLogger, mTag));
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListener.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListener.java
index 283be86..dcc9435 100644
--- a/packages/SystemUI/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListener.java
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/KeepAwakeAnimationListener.java
@@ -33,7 +33,7 @@
public KeepAwakeAnimationListener(Context context) {
Assert.isMainThread();
if (sWakeLock == null) {
- sWakeLock = WakeLock.createPartial(context, "animation");
+ sWakeLock = WakeLock.createPartial(context, null, "animation");
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java
index f320d07..6128fee 100644
--- a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java
@@ -29,8 +29,8 @@
/** WakeLock wrapper for testability */
public interface WakeLock {
- static final String TAG = "WakeLock";
- static final String REASON_WRAP = "wrap";
+ String TAG = "WakeLock";
+ String REASON_WRAP = "wrap";
/**
* Default wake-lock timeout in milliseconds, to avoid battery regressions.
@@ -57,22 +57,32 @@
/** @see android.os.PowerManager.WakeLock#wrap(Runnable) */
Runnable wrap(Runnable r);
- static WakeLock createPartial(Context context, String tag) {
- return createPartial(context, tag, DEFAULT_MAX_TIMEOUT);
- }
-
- /**
- * Creates a {@link WakeLock} that has a default release timeout.
- * @see android.os.PowerManager.WakeLock#acquire(long) */
- static WakeLock createPartial(Context context, String tag, long maxTimeout) {
- return wrap(createWakeLockInner(context, tag, DEFAULT_LEVELS_AND_FLAGS), maxTimeout);
- }
-
/**
* Creates a {@link WakeLock} that has a default release timeout and flags.
+ * @see android.os.PowerManager.WakeLock#acquire(long)
*/
- static WakeLock createWakeLock(Context context, String tag, int flags, long maxTimeout) {
- return wrap(createWakeLockInner(context, tag, flags), maxTimeout);
+ static WakeLock createPartial(Context context, WakeLockLogger logger, String tag) {
+ return createPartial(context, logger, tag, DEFAULT_MAX_TIMEOUT);
+ }
+
+ /**
+ * Creates a {@link WakeLock} that has default flags.
+ * @see android.os.PowerManager.WakeLock#acquire(long)
+ */
+ static WakeLock createPartial(
+ Context context, WakeLockLogger logger, String tag, long maxTimeout) {
+ return wrap(
+ createWakeLockInner(context, tag, DEFAULT_LEVELS_AND_FLAGS), logger, maxTimeout);
+ }
+
+ /**
+ * Creates a {@link WakeLock}.
+ * @see android.os.PowerManager.WakeLock#acquire(long)
+ */
+ static WakeLock createWakeLock(
+ Context context, WakeLockLogger logger, String tag, int flags, long maxTimeout) {
+ return wrap(
+ createWakeLockInner(context, tag, flags), logger, maxTimeout);
}
@VisibleForTesting
@@ -100,14 +110,19 @@
* @return The new wake lock.
*/
@VisibleForTesting
- static WakeLock wrap(final PowerManager.WakeLock inner, long maxTimeout) {
+ static WakeLock wrap(
+ final PowerManager.WakeLock inner, WakeLockLogger logger, long maxTimeout) {
return new WakeLock() {
private final HashMap<String, Integer> mActiveClients = new HashMap<>();
/** @see PowerManager.WakeLock#acquire() */
public void acquire(String why) {
mActiveClients.putIfAbsent(why, 0);
- mActiveClients.put(why, mActiveClients.get(why) + 1);
+ int count = mActiveClients.get(why) + 1;
+ mActiveClients.put(why, count);
+ if (logger != null) {
+ logger.logAcquire(inner, why, count);
+ }
inner.acquire(maxTimeout);
}
@@ -118,10 +133,15 @@
Log.wtf(TAG, "Releasing WakeLock with invalid reason: " + why,
new Throwable());
return;
- } else if (count == 1) {
+ }
+ count--;
+ if (count == 0) {
mActiveClients.remove(why);
} else {
- mActiveClients.put(why, count - 1);
+ mActiveClients.put(why, count);
+ }
+ if (logger != null) {
+ logger.logRelease(inner, why, count);
}
inner.release();
}
@@ -133,7 +153,7 @@
@Override
public String toString() {
- return "active clients= " + mActiveClients.toString();
+ return "active clients= " + mActiveClients;
}
};
}
@@ -143,13 +163,15 @@
*/
class Builder {
private final Context mContext;
+ private final WakeLockLogger mLogger;
private String mTag;
private int mLevelsAndFlags = DEFAULT_LEVELS_AND_FLAGS;
private long mMaxTimeout = DEFAULT_MAX_TIMEOUT;
@Inject
- public Builder(Context context) {
+ public Builder(Context context, WakeLockLogger logger) {
mContext = context;
+ mLogger = logger;
}
public Builder setTag(String tag) {
@@ -168,7 +190,7 @@
}
public WakeLock build() {
- return WakeLock.createWakeLock(mContext, mTag, mLevelsAndFlags, mMaxTimeout);
+ return WakeLock.createWakeLock(mContext, mLogger, mTag, mLevelsAndFlags, mMaxTimeout);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLog.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLog.java
new file mode 100644
index 0000000..59cb052
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLog.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.util.wakelock;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.plugins.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/** A {@link LogBuffer} for BroadcastSender-related messages. */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface WakeLockLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLogger.kt b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLogger.kt
new file mode 100644
index 0000000..951903d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLockLogger.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.util.wakelock
+
+import android.os.PowerManager
+import com.android.systemui.plugins.log.LogBuffer
+import com.android.systemui.plugins.log.LogLevel
+import javax.inject.Inject
+
+class WakeLockLogger @Inject constructor(@WakeLockLog private val buffer: LogBuffer) {
+ fun logAcquire(wakeLock: PowerManager.WakeLock, reason: String, count: Int) {
+ buffer.log(
+ WakeLock.TAG,
+ LogLevel.DEBUG,
+ {
+ str1 = wakeLock.tag
+ str2 = reason
+ int1 = count
+ },
+ { "Acquire tag=$str1 reason=$str2 count=$int1" }
+ )
+ }
+
+ fun logRelease(wakeLock: PowerManager.WakeLock, reason: String, count: Int) {
+ buffer.log(
+ WakeLock.TAG,
+ LogLevel.DEBUG,
+ {
+ str1 = wakeLock.tag
+ str2 = reason
+ int1 = count
+ },
+ { "Release tag=$str1 reason=$str2 count=$int1" }
+ )
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index 3c007f9..77210b7 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -2343,6 +2343,13 @@
}
}
+ @VisibleForTesting
+ void clearInternalHandlerAfterTest() {
+ if (mHandler != null) {
+ mHandler.removeCallbacksAndMessages(null);
+ }
+ }
+
private final class CustomDialog extends Dialog implements DialogInterface {
public CustomDialog(Context context) {
super(context, R.style.volume_dialog_theme);
diff --git a/packages/SystemUI/tests/robolectric/config/robolectric.properties b/packages/SystemUI/tests/robolectric/config/robolectric.properties
index 2a75bd9..438d54c 100644
--- a/packages/SystemUI/tests/robolectric/config/robolectric.properties
+++ b/packages/SystemUI/tests/robolectric/config/robolectric.properties
@@ -13,4 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-sdk=NEWEST_SDK
\ No newline at end of file
+sdk=NEWEST_SDK
+shadows=\
+ com.android.systemui.testutils.shadow.ShadowLockPatternUtils \
+ com.android.systemui.testutils.shadow.ShadowTestableLooper
\ No newline at end of file
diff --git a/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowLockPatternUtils.java b/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowLockPatternUtils.java
new file mode 100644
index 0000000..b248ce3
--- /dev/null
+++ b/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowLockPatternUtils.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.testutils.shadow;
+
+import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
+
+import com.android.internal.widget.LockPatternUtils;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(LockPatternUtils.class)
+public class ShadowLockPatternUtils {
+
+ @Implementation
+ protected int getCredentialTypeForUser(int userHandle) {
+ return CREDENTIAL_TYPE_NONE;
+ }
+}
diff --git a/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowTestableLooper.java b/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowTestableLooper.java
new file mode 100644
index 0000000..a9b8bc0
--- /dev/null
+++ b/packages/SystemUI/tests/robolectric/src/com/android/systemui/testutils/shadow/ShadowTestableLooper.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.testutils.shadow;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.testing.TestableLooper;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.RealObject;
+
+@Implements(TestableLooper.class)
+public class ShadowTestableLooper {
+ @RealObject private TestableLooper mRealTestableLooper;
+ /**
+ * Process messages in the queue until no more are found.
+ */
+ @Implementation
+ protected void processAllMessages() {
+ shadowOf(mRealTestableLooper.getLooper()).idle();
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
index a9920ec7..8f4b320 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/ClockEventControllerTest.kt
@@ -101,7 +101,8 @@
whenever(smallClockController.events).thenReturn(smallClockEvents)
whenever(largeClockController.events).thenReturn(largeClockEvents)
whenever(clock.events).thenReturn(events)
- whenever(clock.animations).thenReturn(animations)
+ whenever(smallClockController.animations).thenReturn(animations)
+ whenever(largeClockController.animations).thenReturn(animations)
whenever(smallClockController.config)
.thenReturn(ClockFaceConfig(tickRate = ClockTickRate.PER_MINUTE))
whenever(largeClockController.config)
@@ -184,7 +185,7 @@
keyguardCaptor.value.onKeyguardVisibilityChanged(true)
batteryCaptor.value.onBatteryLevelChanged(10, false, true)
- verify(animations).charge()
+ verify(animations, times(2)).charge()
}
@Test
@@ -198,7 +199,7 @@
batteryCaptor.value.onBatteryLevelChanged(10, false, true)
batteryCaptor.value.onBatteryLevelChanged(10, false, true)
- verify(animations, times(1)).charge()
+ verify(animations, times(2)).charge()
}
@Test
@@ -246,7 +247,7 @@
verify(animations, never()).doze(0f)
captor.value.onKeyguardVisibilityChanged(false)
- verify(animations, times(1)).doze(0f)
+ verify(animations, times(2)).doze(0f)
}
@Test
@@ -284,7 +285,7 @@
yield()
- verify(animations).doze(0.4f)
+ verify(animations, times(2)).doze(0.4f)
job.cancel()
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
index fc906de..95db0c0 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
@@ -184,13 +184,14 @@
when(mClockController.getEvents()).thenReturn(mClockEvents);
when(mSmallClockController.getEvents()).thenReturn(mClockFaceEvents);
when(mLargeClockController.getEvents()).thenReturn(mClockFaceEvents);
- when(mClockController.getAnimations()).thenReturn(mClockAnimations);
+ when(mLargeClockController.getAnimations()).thenReturn(mClockAnimations);
+ when(mSmallClockController.getAnimations()).thenReturn(mClockAnimations);
when(mClockRegistry.createCurrentClock()).thenReturn(mClockController);
when(mClockEventController.getClock()).thenReturn(mClockController);
when(mSmallClockController.getConfig())
- .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, false));
+ .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, false, false));
when(mLargeClockController.getConfig())
- .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, false));
+ .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, false, false));
mSliceView = new View(getContext());
when(mView.findViewById(R.id.keyguard_slice_view)).thenReturn(mSliceView);
@@ -384,9 +385,9 @@
assertEquals(View.VISIBLE, mFakeDateView.getVisibility());
when(mSmallClockController.getConfig())
- .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, true));
+ .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, true, false));
when(mLargeClockController.getConfig())
- .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, true));
+ .thenReturn(new ClockFaceConfig(ClockTickRate.PER_MINUTE, true, false));
verify(mClockRegistry).registerClockChangeListener(listenerArgumentCaptor.capture());
listenerArgumentCaptor.getValue().onCurrentClockChanged();
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
index 3e4fd89..f4df26d 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
@@ -16,8 +16,6 @@
package com.android.keyguard;
-import static android.view.WindowInsets.Type.ime;
-
import static com.android.keyguard.KeyguardSecurityContainer.MODE_DEFAULT;
import static com.android.keyguard.KeyguardSecurityContainer.MODE_ONE_HANDED;
@@ -29,9 +27,9 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -164,6 +162,10 @@
@Captor
private ArgumentCaptor<KeyguardSecurityContainer.SwipeListener> mSwipeListenerArgumentCaptor;
+ @Captor
+ private ArgumentCaptor<KeyguardSecurityViewFlipperController.OnViewInflatedCallback>
+ mOnViewInflatedCallbackArgumentCaptor;
+
private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
private KeyguardPasswordViewController mKeyguardPasswordViewController;
private KeyguardPasswordView mKeyguardPasswordView;
@@ -184,8 +186,6 @@
when(mAdminSecondaryLockScreenControllerFactory.create(any(KeyguardSecurityCallback.class)))
.thenReturn(mAdminSecondaryLockScreenController);
when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
- when(mKeyguardSecurityViewFlipperController.getSecurityView(any(SecurityMode.class),
- any(KeyguardSecurityCallback.class))).thenReturn(mInputViewController);
mKeyguardPasswordView = spy((KeyguardPasswordView) LayoutInflater.from(mContext).inflate(
R.layout.keyguard_password_view, null));
when(mKeyguardPasswordView.getRootView()).thenReturn(mSecurityViewFlipper);
@@ -230,29 +230,19 @@
mKeyguardSecurityContainerController.showSecurityScreen(mode);
if (mode == SecurityMode.Invalid) {
verify(mKeyguardSecurityViewFlipperController, never()).getSecurityView(
- any(SecurityMode.class), any(KeyguardSecurityCallback.class));
+ any(SecurityMode.class), any(KeyguardSecurityCallback.class), any(
+ KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class)
+ );
} else {
verify(mKeyguardSecurityViewFlipperController).getSecurityView(
- eq(mode), any(KeyguardSecurityCallback.class));
+ eq(mode), any(KeyguardSecurityCallback.class), any(
+ KeyguardSecurityViewFlipperController.OnViewInflatedCallback.class)
+ );
}
}
}
@Test
- public void startDisappearAnimation_animatesKeyboard() {
- when(mKeyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(
- SecurityMode.Password);
- when(mKeyguardSecurityViewFlipperController.getSecurityView(
- eq(SecurityMode.Password), any(KeyguardSecurityCallback.class)))
- .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewController);
- mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
-
- mKeyguardSecurityContainerController.startDisappearAnimation(null);
- verify(mWindowInsetsController).controlWindowInsetsAnimation(
- eq(ime()), anyLong(), any(), any(), any());
- }
-
- @Test
public void onResourcesUpdate_callsThroughOnRotationChange() {
clearInvocations(mView);
@@ -300,9 +290,7 @@
@Test
public void showSecurityScreen_oneHandedMode_flagDisabled_noOneHandedMode() {
mTestableResources.addOverride(R.bool.can_use_one_handed_bouncer, false);
- when(mKeyguardSecurityViewFlipperController.getSecurityView(
- eq(SecurityMode.Pattern), any(KeyguardSecurityCallback.class)))
- .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewController);
+ setupGetSecurityView(SecurityMode.Pattern);
mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern);
verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
@@ -314,11 +302,7 @@
@Test
public void showSecurityScreen_oneHandedMode_flagEnabled_oneHandedMode() {
mTestableResources.addOverride(R.bool.can_use_one_handed_bouncer, true);
- when(mKeyguardSecurityViewFlipperController.getSecurityView(
- eq(SecurityMode.Pattern), any(KeyguardSecurityCallback.class)))
- .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewController);
-
- mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Pattern);
+ setupGetSecurityView(SecurityMode.Pattern);
verify(mView).initMode(eq(MODE_ONE_HANDED), eq(mGlobalSettings), eq(mFalsingManager),
eq(mUserSwitcherController),
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
@@ -328,9 +312,8 @@
@Test
public void showSecurityScreen_twoHandedMode_flagEnabled_noOneHandedMode() {
mTestableResources.addOverride(R.bool.can_use_one_handed_bouncer, true);
- setupGetSecurityView();
+ setupGetSecurityView(SecurityMode.Password);
- mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
verify(mView).initMode(eq(MODE_DEFAULT), eq(mGlobalSettings), eq(mFalsingManager),
eq(mUserSwitcherController),
any(KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class),
@@ -342,17 +325,18 @@
ArgumentCaptor<KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback>
captor = ArgumentCaptor.forClass(
KeyguardSecurityContainer.UserSwitcherViewMode.UserSwitcherCallback.class);
+ setupGetSecurityView(SecurityMode.Password);
- setupGetSecurityView();
-
- mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
verify(mView).initMode(anyInt(), any(GlobalSettings.class), any(FalsingManager.class),
any(UserSwitcherController.class),
captor.capture(),
eq(mFalsingA11yDelegate));
captor.getValue().showUnlockToContinueMessage();
+ getViewControllerImmediately();
verify(mKeyguardPasswordViewControllerMock).showMessage(
- getContext().getString(R.string.keyguard_unlock_to_continue), null);
+ /* message= */ getContext().getString(R.string.keyguard_unlock_to_continue),
+ /* colorState= */ null,
+ /* animated= */ true);
}
@Test
@@ -455,7 +439,7 @@
KeyguardSecurityContainer.SwipeListener registeredSwipeListener =
getRegisteredSwipeListener();
when(mKeyguardUpdateMonitor.isFaceDetectionRunning()).thenReturn(false);
- setupGetSecurityView();
+ setupGetSecurityView(SecurityMode.Password);
registeredSwipeListener.onSwipeUp();
@@ -481,11 +465,14 @@
getRegisteredSwipeListener();
when(mKeyguardUpdateMonitor.requestFaceAuth(FaceAuthApiRequestReason.SWIPE_UP_ON_BOUNCER))
.thenReturn(true);
- setupGetSecurityView();
+ setupGetSecurityView(SecurityMode.Password);
+ clearInvocations(mKeyguardSecurityViewFlipperController);
registeredSwipeListener.onSwipeUp();
+ getViewControllerImmediately();
- verify(mKeyguardPasswordViewControllerMock).showMessage(null, null);
+ verify(mKeyguardPasswordViewControllerMock).showMessage(/* message= */
+ null, /* colorState= */ null, /* animated= */ true);
}
@Test
@@ -494,11 +481,12 @@
getRegisteredSwipeListener();
when(mKeyguardUpdateMonitor.requestFaceAuth(FaceAuthApiRequestReason.SWIPE_UP_ON_BOUNCER))
.thenReturn(false);
- setupGetSecurityView();
+ setupGetSecurityView(SecurityMode.Password);
registeredSwipeListener.onSwipeUp();
- verify(mKeyguardPasswordViewControllerMock, never()).showMessage(null, null);
+ verify(mKeyguardPasswordViewControllerMock, never()).showMessage(/* message= */
+ null, /* colorState= */ null, /* animated= */ true);
}
@Test
@@ -512,10 +500,15 @@
configurationListenerArgumentCaptor.getValue().onDensityOrFontScaleChanged();
- verify(mView).onDensityOrFontScaleChanged();
verify(mKeyguardSecurityViewFlipperController).clearViews();
- verify(mKeyguardSecurityViewFlipperController).getSecurityView(eq(SecurityMode.PIN),
- any(KeyguardSecurityCallback.class));
+ verify(mKeyguardSecurityViewFlipperController).asynchronouslyInflateView(
+ eq(SecurityMode.PIN),
+ any(KeyguardSecurityCallback.class),
+ mOnViewInflatedCallbackArgumentCaptor.capture());
+
+ mOnViewInflatedCallbackArgumentCaptor.getValue().onViewInflated(mInputViewController);
+
+ verify(mView).onDensityOrFontScaleChanged();
}
@Test
@@ -529,12 +522,17 @@
configurationListenerArgumentCaptor.getValue().onThemeChanged();
- verify(mView).reloadColors();
verify(mKeyguardSecurityViewFlipperController).clearViews();
- verify(mKeyguardSecurityViewFlipperController).getSecurityView(eq(SecurityMode.PIN),
- any(KeyguardSecurityCallback.class));
+ verify(mKeyguardSecurityViewFlipperController).asynchronouslyInflateView(
+ eq(SecurityMode.PIN),
+ any(KeyguardSecurityCallback.class),
+ mOnViewInflatedCallbackArgumentCaptor.capture());
+
+ mOnViewInflatedCallbackArgumentCaptor.getValue().onViewInflated(mInputViewController);
+
verify(mView).reset();
verify(mKeyguardSecurityViewFlipperController).reset();
+ verify(mView).reloadColors();
}
@Test
@@ -548,10 +546,15 @@
configurationListenerArgumentCaptor.getValue().onUiModeChanged();
- verify(mView).reloadColors();
verify(mKeyguardSecurityViewFlipperController).clearViews();
- verify(mKeyguardSecurityViewFlipperController).getSecurityView(eq(SecurityMode.PIN),
- any(KeyguardSecurityCallback.class));
+ verify(mKeyguardSecurityViewFlipperController).asynchronouslyInflateView(
+ eq(SecurityMode.PIN),
+ any(KeyguardSecurityCallback.class),
+ mOnViewInflatedCallbackArgumentCaptor.capture());
+
+ mOnViewInflatedCallbackArgumentCaptor.getValue().onViewInflated(mInputViewController);
+
+ verify(mView).reloadColors();
}
@Test
@@ -614,6 +617,11 @@
@Test
public void testOnStartingToHide() {
mKeyguardSecurityContainerController.onStartingToHide();
+ verify(mKeyguardSecurityViewFlipperController).getSecurityView(any(SecurityMode.class),
+ any(KeyguardSecurityCallback.class),
+ mOnViewInflatedCallbackArgumentCaptor.capture());
+
+ mOnViewInflatedCallbackArgumentCaptor.getValue().onViewInflated(mInputViewController);
verify(mInputViewController).onStartingToHide();
}
@@ -673,26 +681,17 @@
verify(mView).updatePositionByTouchX(1.0f);
}
-
- @Test
- public void testReinflateViewFlipper() {
- mKeyguardSecurityContainerController.reinflateViewFlipper(() -> {});
- verify(mKeyguardSecurityViewFlipperController).clearViews();
- verify(mKeyguardSecurityViewFlipperController).getSecurityView(any(SecurityMode.class),
- any(KeyguardSecurityCallback.class));
- }
-
@Test
public void testReinflateViewFlipper_asyncBouncerFlagOn() {
when(mFeatureFlags.isEnabled(Flags.ASYNC_INFLATE_BOUNCER)).thenReturn(true);
- KeyguardSecurityViewFlipperController.OnViewInflatedListener onViewInflatedListener =
- () -> {
+ KeyguardSecurityViewFlipperController.OnViewInflatedCallback onViewInflatedCallback =
+ controller -> {
};
- mKeyguardSecurityContainerController.reinflateViewFlipper(onViewInflatedListener);
+ mKeyguardSecurityContainerController.reinflateViewFlipper(onViewInflatedCallback);
verify(mKeyguardSecurityViewFlipperController).clearViews();
verify(mKeyguardSecurityViewFlipperController).asynchronouslyInflateView(
any(SecurityMode.class),
- any(KeyguardSecurityCallback.class), eq(onViewInflatedListener));
+ any(KeyguardSecurityCallback.class), eq(onViewInflatedCallback));
}
@Test
@@ -715,14 +714,17 @@
return mSwipeListenerArgumentCaptor.getValue();
}
- private void attachView() {
- mKeyguardSecurityContainerController.onViewAttached();
- verify(mKeyguardUpdateMonitor).registerCallback(mKeyguardUpdateMonitorCallback.capture());
+ private void setupGetSecurityView(SecurityMode securityMode) {
+ mKeyguardSecurityContainerController.showSecurityScreen(securityMode);
+ getViewControllerImmediately();
}
- private void setupGetSecurityView() {
- when(mKeyguardSecurityViewFlipperController.getSecurityView(
- any(), any(KeyguardSecurityCallback.class)))
- .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewControllerMock);
+ private void getViewControllerImmediately() {
+ verify(mKeyguardSecurityViewFlipperController, atLeastOnce()).getSecurityView(
+ any(SecurityMode.class), any(),
+ mOnViewInflatedCallbackArgumentCaptor.capture());
+ mOnViewInflatedCallbackArgumentCaptor.getValue().onViewInflated(
+ (KeyguardInputViewController) mKeyguardPasswordViewControllerMock);
+
}
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java
index eaf7b1e..cd18754 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityViewFlipperControllerTest.java
@@ -78,8 +78,6 @@
private KeyguardSecurityCallback mKeyguardSecurityCallback;
@Mock
private FeatureFlags mFeatureFlags;
- @Mock
- private ViewMediatorCallback mViewMediatorCallback;
private KeyguardSecurityViewFlipperController mKeyguardSecurityViewFlipperController;
@@ -96,7 +94,7 @@
mKeyguardSecurityViewFlipperController = new KeyguardSecurityViewFlipperController(mView,
mLayoutInflater, mAsyncLayoutInflater, mKeyguardSecurityViewControllerFactory,
- mEmergencyButtonControllerFactory, mFeatureFlags, mViewMediatorCallback);
+ mEmergencyButtonControllerFactory, mFeatureFlags);
}
@Test
@@ -108,17 +106,29 @@
reset(mLayoutInflater);
when(mLayoutInflater.inflate(anyInt(), eq(mView), eq(false)))
.thenReturn(mInputView);
- mKeyguardSecurityViewFlipperController.getSecurityView(mode, mKeyguardSecurityCallback);
- if (mode == SecurityMode.Invalid || mode == SecurityMode.None) {
- verify(mLayoutInflater, never()).inflate(
- anyInt(), any(ViewGroup.class), anyBoolean());
- } else {
- verify(mLayoutInflater).inflate(anyInt(), eq(mView), eq(false));
- }
+ mKeyguardSecurityViewFlipperController.getSecurityView(mode, mKeyguardSecurityCallback,
+ controller -> {
+ if (mode == SecurityMode.Invalid || mode == SecurityMode.None) {
+ verify(mLayoutInflater, never()).inflate(
+ anyInt(), any(ViewGroup.class), anyBoolean());
+ } else {
+ verify(mLayoutInflater).inflate(anyInt(), eq(mView), eq(false));
+ }
+ });
}
}
@Test
+ public void getSecurityView_NotInflated() {
+ mKeyguardSecurityViewFlipperController.clearViews();
+ mKeyguardSecurityViewFlipperController.getSecurityView(SecurityMode.PIN,
+ mKeyguardSecurityCallback,
+ controller -> {});
+ verify(mAsyncLayoutInflater).inflate(anyInt(), eq(mView), any(
+ AsyncLayoutInflater.OnInflateFinishedListener.class));
+ }
+
+ @Test
public void asynchronouslyInflateView() {
mKeyguardSecurityViewFlipperController.asynchronouslyInflateView(SecurityMode.PIN,
mKeyguardSecurityCallback, null);
@@ -136,7 +146,6 @@
argumentCaptor.getValue().onInflateFinished(
LayoutInflater.from(getContext()).inflate(R.layout.keyguard_password_view, null),
R.layout.keyguard_password_view, mView);
- verify(mViewMediatorCallback).setNeedsInput(anyBoolean());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
index 2c1d2ad..a2c6329 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
@@ -130,7 +130,7 @@
public void updatePosition_primaryClockAnimation() {
ClockController mockClock = mock(ClockController.class);
when(mKeyguardClockSwitchController.getClock()).thenReturn(mockClock);
- when(mockClock.getConfig()).thenReturn(new ClockConfig(false, false, true));
+ when(mockClock.getConfig()).thenReturn(new ClockConfig(false, true));
mController.updatePosition(10, 15, 20f, true);
@@ -145,7 +145,7 @@
public void updatePosition_alternateClockAnimation() {
ClockController mockClock = mock(ClockController.class);
when(mKeyguardClockSwitchController.getClock()).thenReturn(mockClock);
- when(mockClock.getConfig()).thenReturn(new ClockConfig(false, true, true));
+ when(mockClock.getConfig()).thenReturn(new ClockConfig(true, true));
mController.updatePosition(10, 15, 20f, true);
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 3eb9590..2962c14 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -155,6 +155,7 @@
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
import org.mockito.internal.util.reflection.FieldSetter;
+import org.mockito.quality.Strictness;
import java.util.ArrayList;
import java.util.Arrays;
@@ -290,7 +291,7 @@
when(mSessionTracker.getSessionId(SESSION_KEYGUARD)).thenReturn(mKeyguardInstanceId);
when(mUserManager.isUserUnlocked(anyInt())).thenReturn(true);
- when(mUserManager.isPrimaryUser()).thenReturn(true);
+ currentUserIsSystem();
when(mStrongAuthTracker.getStub()).thenReturn(mock(IStrongAuthTracker.Stub.class));
when(mStrongAuthTracker
.isUnlockingWithBiometricAllowed(anyBoolean() /* isClass3Biometric */))
@@ -303,6 +304,7 @@
mMockitoSession = ExtendedMockito.mockitoSession()
.spyStatic(SubscriptionManager.class)
+ .strictness(Strictness.WARN)
.startMocking();
ExtendedMockito.doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
.when(SubscriptionManager::getDefaultSubscriptionId);
@@ -958,7 +960,7 @@
public void requestFaceAuth_whenFaceAuthWasStarted_returnsTrue() throws RemoteException {
// This satisfies all the preconditions to run face auth.
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1465,7 +1467,7 @@
// Preconditions for sfps auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1501,7 +1503,7 @@
// GIVEN Preconditions for sfps auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1530,7 +1532,7 @@
// GIVEN Preconditions for sfps auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1682,7 +1684,7 @@
// Face auth should run when the following is true.
keyguardNotGoingAway();
occludingAppRequestsFaceAuth();
- currentUserIsPrimary();
+ currentUserIsSystem();
primaryAuthNotRequiredByStrongAuthTracker();
biometricsEnabledForCurrentUser();
currentUserDoesNotHaveTrust();
@@ -1703,7 +1705,7 @@
// Face auth should run when the following is true.
bouncerFullyVisibleAndNotGoingToSleep();
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
primaryAuthNotRequiredByStrongAuthTracker();
biometricsEnabledForCurrentUser();
currentUserDoesNotHaveTrust();
@@ -1726,7 +1728,7 @@
// Face auth should run when the following is true.
bouncerFullyVisibleAndNotGoingToSleep();
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
primaryAuthNotRequiredByStrongAuthTracker();
biometricsEnabledForCurrentUser();
currentUserDoesNotHaveTrust();
@@ -1747,7 +1749,7 @@
public void testShouldListenForFace_whenUserIsNotPrimary_returnsFalse() throws RemoteException {
cleanupKeyguardUpdateMonitor();
// This disables face auth
- when(mUserManager.isPrimaryUser()).thenReturn(false);
+ when(mUserManager.isSystemUser()).thenReturn(false);
mKeyguardUpdateMonitor =
new TestableKeyguardUpdateMonitor(mContext);
@@ -1771,7 +1773,7 @@
// Face auth should run when the following is true.
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
biometricsEnabledForCurrentUser();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
@@ -1789,7 +1791,7 @@
throws RemoteException {
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1811,7 +1813,7 @@
// Face auth should run when the following is true.
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1831,7 +1833,7 @@
throws RemoteException {
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1852,7 +1854,7 @@
// Face auth should run when the following is true.
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1874,7 +1876,7 @@
throws RemoteException {
// Face auth should run when the following is true.
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1894,7 +1896,7 @@
throws RemoteException {
// Face auth should run when the following is true.
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1913,7 +1915,7 @@
public void testShouldListenForFace_whenKeyguardIsAwake_returnsTrue() throws RemoteException {
// Preconditions for face auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1938,7 +1940,7 @@
public void testShouldListenForFace_whenUdfpsFingerDown_returnsTrue() throws RemoteException {
// Preconditions for face auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1957,7 +1959,7 @@
throws RemoteException {
// Preconditions for face auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -1975,7 +1977,7 @@
throws RemoteException {
// Preconditions for face auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -2000,7 +2002,7 @@
throws RemoteException {
// Preconditions for face auth to run
keyguardNotGoingAway();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -2322,7 +2324,7 @@
throws RemoteException {
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -2453,7 +2455,7 @@
mKeyguardUpdateMonitor.mConfigFaceAuthSupportedPosture = DEVICE_POSTURE_CLOSED;
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -2477,7 +2479,7 @@
mKeyguardUpdateMonitor.mConfigFaceAuthSupportedPosture = DEVICE_POSTURE_UNKNOWN;
keyguardNotGoingAway();
bouncerFullyVisibleAndNotGoingToSleep();
- currentUserIsPrimary();
+ currentUserIsSystem();
currentUserDoesNotHaveTrust();
biometricsNotDisabledThroughDevicePolicyManager();
biometricsEnabledForCurrentUser();
@@ -2528,19 +2530,6 @@
}
@Test
- public void testBatteryChangedIntent_unplugDevice_resetIncompatibleCharger() {
- mKeyguardUpdateMonitor.mIncompatibleCharger = true;
- Intent batteryChangedIntent =
- getBatteryIntent().putExtra(BatteryManager.EXTRA_PLUGGED, -1);
-
- mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(mContext, batteryChangedIntent);
-
- BatteryStatus status = verifyRefreshBatteryInfo();
- assertThat(status.incompatibleCharger.get()).isFalse();
- assertThat(mKeyguardUpdateMonitor.mIncompatibleCharger).isFalse();
- }
-
- @Test
public void unfoldWakeup_requestActiveUnlock_forceDismissKeyguard()
throws RemoteException {
// GIVEN shouldTriggerActiveUnlock
@@ -2888,8 +2877,8 @@
new FaceManager.AuthenticationResult(null, null, mCurrentUserId, false));
}
- private void currentUserIsPrimary() {
- when(mUserManager.isPrimaryUser()).thenReturn(true);
+ private void currentUserIsSystem() {
+ when(mUserManager.isSystemUser()).thenReturn(true);
}
private void biometricsNotDisabledThroughDevicePolicyManager() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/data/repository/AccessibilityRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/accessibility/data/repository/AccessibilityRepositoryTest.kt
new file mode 100644
index 0000000..aff52f5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/data/repository/AccessibilityRepositoryTest.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.accessibility.data.repository
+
+import android.testing.AndroidTestingRunner
+import android.view.accessibility.AccessibilityManager
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.util.mockito.whenever
+import com.android.systemui.util.mockito.withArgCaptor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class AccessibilityRepositoryTest : SysuiTestCase() {
+
+ @Rule @JvmField val mockitoRule: MockitoRule = MockitoJUnit.rule()
+
+ // mocks
+ @Mock private lateinit var a11yManager: AccessibilityManager
+
+ // real impls
+ private val underTest by lazy { AccessibilityRepository(a11yManager) }
+
+ @Test
+ fun isTouchExplorationEnabled_reflectsA11yManager_initFalse() = runTest {
+ whenever(a11yManager.isTouchExplorationEnabled).thenReturn(false)
+ val isTouchExplorationEnabled by collectLastValue(underTest.isTouchExplorationEnabled)
+ assertThat(isTouchExplorationEnabled).isFalse()
+ }
+
+ @Test
+ fun isTouchExplorationEnabled_reflectsA11yManager_initTrue() = runTest {
+ whenever(a11yManager.isTouchExplorationEnabled).thenReturn(true)
+ val isTouchExplorationEnabled by collectLastValue(underTest.isTouchExplorationEnabled)
+ assertThat(isTouchExplorationEnabled).isTrue()
+ }
+
+ @Test
+ fun isTouchExplorationEnabled_reflectsA11yManager_changeTrue() = runTest {
+ whenever(a11yManager.isTouchExplorationEnabled).thenReturn(false)
+ val isTouchExplorationEnabled by collectLastValue(underTest.isTouchExplorationEnabled)
+ runCurrent()
+ withArgCaptor { verify(a11yManager).addTouchExplorationStateChangeListener(capture()) }
+ .onTouchExplorationStateChanged(/* enabled = */ true)
+ assertThat(isTouchExplorationEnabled).isTrue()
+ }
+
+ @Test
+ fun isTouchExplorationEnabled_reflectsA11yManager_changeFalse() = runTest {
+ whenever(a11yManager.isTouchExplorationEnabled).thenReturn(true)
+ val isTouchExplorationEnabled by collectLastValue(underTest.isTouchExplorationEnabled)
+ runCurrent()
+ withArgCaptor { verify(a11yManager).addTouchExplorationStateChangeListener(capture()) }
+ .onTouchExplorationStateChanged(/* enabled = */ false)
+ assertThat(isTouchExplorationEnabled).isFalse()
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt
index 58d9069..f4dacab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintAndFaceViewTest.kt
@@ -18,10 +18,12 @@
import android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE
import android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT
-import android.testing.AndroidTestingRunner
+import android.hardware.biometrics.BiometricConstants
+import android.hardware.face.FaceManager
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import android.view.View
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
@@ -34,9 +36,11 @@
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
+import org.mockito.Mockito.times
import org.mockito.junit.MockitoJUnit
-@RunWith(AndroidTestingRunner::class)
+
+@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
class AuthBiometricFingerprintAndFaceViewTest : SysuiTestCase() {
@@ -97,7 +101,7 @@
}
@Test
- fun ignoresFaceErrors() {
+ fun ignoresFaceErrors_faceIsNotClass3_notLockoutError() {
biometricView.onDialogAnimatedIn()
biometricView.onError(TYPE_FACE, "not a face")
waitForIdleSync()
@@ -112,5 +116,47 @@
verify(callback).onAction(AuthBiometricView.Callback.ACTION_ERROR)
}
+ @Test
+ fun doNotIgnoresFaceErrors_faceIsClass3_notLockoutError() {
+ biometricView.isFaceClass3 = true
+ biometricView.onDialogAnimatedIn()
+ biometricView.onError(TYPE_FACE, "not a face")
+ waitForIdleSync()
+
+ assertThat(biometricView.isAuthenticating).isTrue()
+ verify(callback, never()).onAction(AuthBiometricView.Callback.ACTION_ERROR)
+
+ biometricView.onError(TYPE_FINGERPRINT, "that's a nope")
+ TestableLooper.get(this).moveTimeForward(1000)
+ waitForIdleSync()
+
+ verify(callback).onAction(AuthBiometricView.Callback.ACTION_ERROR)
+ }
+
+ @Test
+ fun doNotIgnoresFaceErrors_faceIsClass3_lockoutError() {
+ biometricView.isFaceClass3 = true
+ biometricView.onDialogAnimatedIn()
+ biometricView.onError(
+ TYPE_FACE,
+ FaceManager.getErrorString(
+ biometricView.context,
+ BiometricConstants.BIOMETRIC_ERROR_LOCKOUT_PERMANENT,
+ 0 /*vendorCode */
+ )
+ )
+ waitForIdleSync()
+
+ assertThat(biometricView.isAuthenticating).isTrue()
+ verify(callback).onAction(AuthBiometricView.Callback.ACTION_ERROR)
+
+ biometricView.onError(TYPE_FINGERPRINT, "that's a nope")
+ TestableLooper.get(this).moveTimeForward(1000)
+ waitForIdleSync()
+
+ verify(callback, times(2)).onAction(AuthBiometricView.Callback.ACTION_ERROR)
+ }
+
+
override fun waitForIdleSync() = TestableLooper.get(this).processAllMessages()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt
index bce98cf..9f789e4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricFingerprintViewTest.kt
@@ -17,7 +17,7 @@
import android.hardware.biometrics.BiometricAuthenticator
import android.os.Bundle
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import android.view.View
@@ -37,7 +37,7 @@
import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
class AuthBiometricFingerprintViewTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
index f914e75..6d4c467 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -25,7 +25,6 @@
import android.os.Handler
import android.os.IBinder
import android.os.UserManager
-import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import android.testing.ViewUtils
@@ -34,6 +33,7 @@
import android.view.WindowInsets
import android.view.WindowManager
import android.widget.ScrollView
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.widget.LockPatternUtils
@@ -62,7 +62,7 @@
import org.mockito.Mockito.`when` as whenever
import org.mockito.junit.MockitoJUnit
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
class AuthContainerViewTest : SysuiTestCase() {
@@ -481,7 +481,7 @@
private fun AuthContainerView.addToView() {
ViewUtils.attachView(this)
waitForIdleSync()
- assertThat(isAttachedToWindow).isTrue()
+ assertThat(isAttachedToWindow()).isTrue()
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
index c068efb..0f20ace 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
@@ -75,7 +75,6 @@
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserManager;
-import android.testing.AndroidTestingRunner;
import android.testing.TestableContext;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -83,6 +82,7 @@
import android.view.Surface;
import android.view.WindowManager;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.internal.R;
@@ -117,7 +117,7 @@
import java.util.List;
import java.util.Random;
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@RunWithLooper
@SmallTest
public class AuthControllerTest extends SysuiTestCase {
@@ -265,7 +265,7 @@
mFaceAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(faceProps);
// Ensures that the operations posted on the handler get executed.
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
}
// Callback tests
@@ -285,14 +285,14 @@
mFpAuthenticatorsRegisteredCaptor.capture());
verify(mFaceManager).addAuthenticatorsRegisteredCallback(
mFaceAuthenticatorsRegisteredCaptor.capture());
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
verify(mFingerprintManager, never()).registerBiometricStateListener(any());
verify(mFaceManager, never()).registerBiometricStateListener(any());
mFpAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(List.of());
mFaceAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(List.of());
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
verify(mFingerprintManager).registerBiometricStateListener(any());
verify(mFaceManager).registerBiometricStateListener(any());
@@ -316,7 +316,7 @@
// Emulates a device with no authenticators (empty list).
mFpAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(List.of());
mFaceAuthenticatorsRegisteredCaptor.getValue().onAllAuthenticatorsRegistered(List.of());
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
verify(mFingerprintManager).registerBiometricStateListener(
mBiometricStateCaptor.capture());
@@ -328,7 +328,7 @@
listener.onEnrollmentsChanged(0 /* userId */,
0xbeef /* sensorId */, true /* hasEnrollments */);
}
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
// Nothing should crash.
}
@@ -692,7 +692,7 @@
switchTask("other_package");
showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
assertNull(mAuthController.mCurrentDialog);
assertNull(mAuthController.mReceiver);
@@ -709,7 +709,7 @@
switchTask("other_package");
mAuthController.mTaskStackListener.onTaskStackChanged();
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
assertNull(mAuthController.mCurrentDialog);
assertNull(mAuthController.mReceiver);
@@ -742,7 +742,7 @@
showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mAuthController.mBroadcastReceiver.onReceive(mContext, intent);
- mTestableLooper.processAllMessages();
+ waitForIdleSync();
assertNull(mAuthController.mCurrentDialog);
assertNull(mAuthController.mReceiver);
@@ -1021,4 +1021,9 @@
return dialog;
}
}
+
+ @Override
+ protected void waitForIdleSync() {
+ mTestableLooper.processAllMessages();
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricDisplayListenerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricDisplayListenerTest.java
index 69c7f36..24a13a5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricDisplayListenerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricDisplayListenerTest.java
@@ -32,17 +32,20 @@
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.Handler;
-import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import android.view.Display;
import android.view.Surface;
import android.view.Surface.Rotation;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import kotlin.Unit;
+import kotlin.jvm.functions.Function0;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -51,11 +54,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import kotlin.Unit;
-import kotlin.jvm.functions.Function0;
-
@SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@RunWithLooper(setAsMainLooper = true)
public class BiometricDisplayListenerTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationDialogFactoryTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationDialogFactoryTest.java
new file mode 100644
index 0000000..362d26b0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationDialogFactoryTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.face.FaceManager;
+import android.hardware.fingerprint.FingerprintManager;
+import android.provider.Settings;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.concurrent.ExecutionException;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class BiometricNotificationDialogFactoryTest extends SysuiTestCase {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Mock
+ FingerprintManager mFingerprintManager;
+ @Mock
+ FaceManager mFaceManager;
+ @Mock
+ SystemUIDialog mDialog;
+
+ private Context mContextSpy;
+ private final ArgumentCaptor<DialogInterface.OnClickListener> mOnClickListenerArgumentCaptor =
+ ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
+ private final ArgumentCaptor<Intent> mIntentArgumentCaptor =
+ ArgumentCaptor.forClass(Intent.class);
+ private BiometricNotificationDialogFactory mDialogFactory;
+
+ @Before
+ public void setUp() throws ExecutionException, InterruptedException {
+ mContext.addMockSystemService(FingerprintManager.class, mFingerprintManager);
+ mContext.addMockSystemService(FaceManager.class, mFaceManager);
+
+ when(mFingerprintManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
+ when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
+
+ mContextSpy = spy(mContext);
+ mDialogFactory = new BiometricNotificationDialogFactory();
+ }
+
+ @Test
+ public void testFingerprintReEnrollDialog_onRemovalSucceeded() {
+ mDialogFactory.createReenrollDialog(mContextSpy, mDialog,
+ BiometricSourceType.FINGERPRINT);
+
+ verify(mDialog).setPositiveButton(anyInt(), mOnClickListenerArgumentCaptor.capture());
+
+ DialogInterface.OnClickListener positiveOnClickListener =
+ mOnClickListenerArgumentCaptor.getValue();
+ positiveOnClickListener.onClick(null, DialogInterface.BUTTON_POSITIVE);
+ ArgumentCaptor<FingerprintManager.RemovalCallback> removalCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(FingerprintManager.RemovalCallback.class);
+
+ verify(mFingerprintManager).removeAll(anyInt(), removalCallbackArgumentCaptor.capture());
+
+ removalCallbackArgumentCaptor.getValue().onRemovalSucceeded(null /* fp */,
+ 0 /* remaining */);
+
+ verify(mContextSpy).startActivity(mIntentArgumentCaptor.capture());
+ assertThat(mIntentArgumentCaptor.getValue().getAction()).isEqualTo(
+ Settings.ACTION_FINGERPRINT_ENROLL);
+ }
+
+ @Test
+ public void testFingerprintReEnrollDialog_onRemovalError() {
+ mDialogFactory.createReenrollDialog(mContextSpy, mDialog,
+ BiometricSourceType.FINGERPRINT);
+
+ verify(mDialog).setPositiveButton(anyInt(), mOnClickListenerArgumentCaptor.capture());
+
+ DialogInterface.OnClickListener positiveOnClickListener =
+ mOnClickListenerArgumentCaptor.getValue();
+ positiveOnClickListener.onClick(null, DialogInterface.BUTTON_POSITIVE);
+ ArgumentCaptor<FingerprintManager.RemovalCallback> removalCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(FingerprintManager.RemovalCallback.class);
+
+ verify(mFingerprintManager).removeAll(anyInt(), removalCallbackArgumentCaptor.capture());
+
+ removalCallbackArgumentCaptor.getValue().onRemovalError(null /* fp */,
+ 0 /* errmsgId */, "Error" /* errString */);
+
+ verify(mContextSpy, never()).startActivity(any());
+ }
+
+ @Test
+ public void testFaceReEnrollDialog_onRemovalSucceeded() {
+ mDialogFactory.createReenrollDialog(mContextSpy, mDialog,
+ BiometricSourceType.FACE);
+
+ verify(mDialog).setPositiveButton(anyInt(), mOnClickListenerArgumentCaptor.capture());
+
+ DialogInterface.OnClickListener positiveOnClickListener =
+ mOnClickListenerArgumentCaptor.getValue();
+ positiveOnClickListener.onClick(null, DialogInterface.BUTTON_POSITIVE);
+ ArgumentCaptor<FaceManager.RemovalCallback> removalCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(FaceManager.RemovalCallback.class);
+
+ verify(mFaceManager).removeAll(anyInt(), removalCallbackArgumentCaptor.capture());
+
+ removalCallbackArgumentCaptor.getValue().onRemovalSucceeded(null /* fp */,
+ 0 /* remaining */);
+
+ verify(mContextSpy).startActivity(mIntentArgumentCaptor.capture());
+ assertThat(mIntentArgumentCaptor.getValue().getAction()).isEqualTo(
+ "android.settings.FACE_ENROLL");
+ }
+
+ @Test
+ public void testFaceReEnrollDialog_onRemovalError() {
+ mDialogFactory.createReenrollDialog(mContextSpy, mDialog,
+ BiometricSourceType.FACE);
+
+ verify(mDialog).setPositiveButton(anyInt(), mOnClickListenerArgumentCaptor.capture());
+
+ DialogInterface.OnClickListener positiveOnClickListener =
+ mOnClickListenerArgumentCaptor.getValue();
+ positiveOnClickListener.onClick(null, DialogInterface.BUTTON_POSITIVE);
+ ArgumentCaptor<FaceManager.RemovalCallback> removalCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(FaceManager.RemovalCallback.class);
+
+ verify(mFaceManager).removeAll(anyInt(), removalCallbackArgumentCaptor.capture());
+
+ removalCallbackArgumentCaptor.getValue().onRemovalError(null /* face */,
+ 0 /* errmsgId */, "Error" /* errString */);
+
+ verify(mContextSpy, never()).startActivity(any());
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java
new file mode 100644
index 0000000..b8bca3a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FACE_REENROLL_DIALOG;
+import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Handler;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class BiometricNotificationServiceTest extends SysuiTestCase {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Mock
+ KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @Mock
+ KeyguardStateController mKeyguardStateController;
+ @Mock
+ NotificationManager mNotificationManager;
+
+ private static final String TAG = "BiometricNotificationService";
+ private static final int FACE_NOTIFICATION_ID = 1;
+ private static final int FINGERPRINT_NOTIFICATION_ID = 2;
+ private static final long SHOW_NOTIFICATION_DELAY_MS = 5_000L; // 5 seconds
+
+ private final ArgumentCaptor<Notification> mNotificationArgumentCaptor =
+ ArgumentCaptor.forClass(Notification.class);
+ private TestableLooper mLooper;
+ private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback;
+ private KeyguardStateController.Callback mKeyguardStateControllerCallback;
+
+ @Before
+ public void setUp() {
+ mLooper = TestableLooper.get(this);
+ Handler handler = new Handler(mLooper.getLooper());
+ BiometricNotificationDialogFactory dialogFactory = new BiometricNotificationDialogFactory();
+ BiometricNotificationBroadcastReceiver broadcastReceiver =
+ new BiometricNotificationBroadcastReceiver(mContext, dialogFactory);
+ BiometricNotificationService biometricNotificationService =
+ new BiometricNotificationService(mContext,
+ mKeyguardUpdateMonitor, mKeyguardStateController, handler,
+ mNotificationManager,
+ broadcastReceiver);
+ biometricNotificationService.start();
+
+ ArgumentCaptor<KeyguardUpdateMonitorCallback> updateMonitorCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class);
+ ArgumentCaptor<KeyguardStateController.Callback> stateControllerCallbackArgumentCaptor =
+ ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
+
+ verify(mKeyguardUpdateMonitor).registerCallback(
+ updateMonitorCallbackArgumentCaptor.capture());
+ verify(mKeyguardStateController).addCallback(
+ stateControllerCallbackArgumentCaptor.capture());
+
+ mKeyguardUpdateMonitorCallback = updateMonitorCallbackArgumentCaptor.getValue();
+ mKeyguardStateControllerCallback = stateControllerCallbackArgumentCaptor.getValue();
+ }
+
+ @Test
+ public void testShowFingerprintReEnrollNotification() {
+ when(mKeyguardStateController.isShowing()).thenReturn(false);
+
+ mKeyguardUpdateMonitorCallback.onBiometricError(
+ BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL,
+ "Testing Fingerprint Re-enrollment" /* errString */,
+ BiometricSourceType.FINGERPRINT
+ );
+ mKeyguardStateControllerCallback.onKeyguardShowingChanged();
+
+ mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS);
+ mLooper.processAllMessages();
+
+ verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FINGERPRINT_NOTIFICATION_ID),
+ mNotificationArgumentCaptor.capture(), any());
+
+ Notification fingerprintNotification = mNotificationArgumentCaptor.getValue();
+
+ assertThat(fingerprintNotification.contentIntent.getIntent().getAction())
+ .isEqualTo(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG);
+ }
+ @Test
+ public void testShowFaceReEnrollNotification() {
+ when(mKeyguardStateController.isShowing()).thenReturn(false);
+
+ mKeyguardUpdateMonitorCallback.onBiometricError(
+ BiometricFaceConstants.BIOMETRIC_ERROR_RE_ENROLL,
+ "Testing Face Re-enrollment" /* errString */,
+ BiometricSourceType.FACE
+ );
+ mKeyguardStateControllerCallback.onKeyguardShowingChanged();
+
+ mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS);
+ mLooper.processAllMessages();
+
+ verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID),
+ mNotificationArgumentCaptor.capture(), any());
+
+ Notification fingerprintNotification = mNotificationArgumentCaptor.getValue();
+
+ assertThat(fingerprintNotification.contentIntent.getIntent().getAction())
+ .isEqualTo(ACTION_SHOW_FACE_REENROLL_DIALOG);
+ }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/FaceHelpMessageDeferralTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/FaceHelpMessageDeferralTest.kt
index c9ccdb3..88b6c39 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/FaceHelpMessageDeferralTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/FaceHelpMessageDeferralTest.kt
@@ -16,7 +16,7 @@
package com.android.systemui.biometrics
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.keyguard.logging.BiometricMessageDeferralLogger
import com.android.systemui.SysuiTestCase
@@ -33,7 +33,7 @@
import org.mockito.MockitoAnnotations
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
class FaceHelpMessageDeferralTest : SysuiTestCase() {
val threshold = .75f
@Mock lateinit var logger: BiometricMessageDeferralLogger
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt
index 33345b5..c554af6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SideFpsControllerTest.kt
@@ -34,7 +34,6 @@
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.hardware.fingerprint.ISidefpsController
import android.os.Handler
-import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.Display
import android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS
@@ -49,6 +48,7 @@
import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
import android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
import android.view.WindowMetrics
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.airbnb.lottie.LottieAnimationView
import com.android.systemui.R
@@ -90,7 +90,7 @@
private const val SENSOR_ID = 1
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
class SideFpsControllerTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt
index b2c2ae7..1faad80 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt
@@ -25,7 +25,7 @@
import android.hardware.biometrics.BiometricOverlayConstants.ShowReason
import android.hardware.fingerprint.FingerprintManager
import android.hardware.fingerprint.IUdfpsOverlayControllerCallback
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
import android.testing.TestableLooper.RunWithLooper
import android.view.LayoutInflater
import android.view.MotionEvent
@@ -80,7 +80,7 @@
private const val SENSOR_HEIGHT = 60
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
class UdfpsControllerOverlayTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
index eae95a5..8d8b190 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
@@ -58,7 +58,6 @@
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.VibrationAttributes;
-import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -68,6 +67,7 @@
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.InstanceIdSequence;
@@ -125,7 +125,7 @@
import javax.inject.Provider;
@SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@RunWithLooper(setAsMainLooper = true)
public class UdfpsControllerTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java
index 78fb5b0..cd9189b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java
@@ -23,8 +23,8 @@
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
-import android.testing.AndroidTestingRunner;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
@@ -35,7 +35,7 @@
import java.util.ArrayList;
import java.util.List;
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@SmallTest
public class UdfpsDialogMeasureAdapterTest extends SysuiTestCase {
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDisplayModeTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDisplayModeTest.java
index 1bc237d..5239966 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDisplayModeTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDisplayModeTest.java
@@ -25,9 +25,9 @@
import android.content.Context;
import android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback;
import android.os.RemoteException;
-import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
@@ -40,7 +40,7 @@
import org.mockito.MockitoAnnotations;
@SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@RunWithLooper(setAsMainLooper = true)
public class UdfpsDisplayModeTest extends SysuiTestCase {
private static final int DISPLAY_ID = 0;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
index 6d9acb9..af3a06b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
@@ -27,10 +27,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.MotionEvent;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.systemui.shade.ShadeExpansionListener;
@@ -40,7 +40,7 @@
import org.junit.runner.RunWith;
@SmallTest
-@RunWith(AndroidTestingRunner.class)
+@RunWith(AndroidJUnit4.class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class UdfpsKeyguardViewControllerTest extends UdfpsKeyguardViewControllerBaseTest {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt
index b848413..fea9d2d5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerWithCoroutinesTest.kt
@@ -17,8 +17,8 @@
package com.android.systemui.biometrics
import android.os.Handler
-import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.keyguard.KeyguardSecurityModel
import com.android.systemui.classifier.FalsingCollector
@@ -39,10 +39,9 @@
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.util.time.SystemClock
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.runBlocking
-import kotlinx.coroutines.test.TestCoroutineScope
-import kotlinx.coroutines.yield
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
@@ -54,22 +53,27 @@
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@SmallTest
@TestableLooper.RunWithLooper
+@kotlinx.coroutines.ExperimentalCoroutinesApi
class UdfpsKeyguardViewControllerWithCoroutinesTest : UdfpsKeyguardViewControllerBaseTest() {
lateinit var keyguardBouncerRepository: KeyguardBouncerRepository
@Mock private lateinit var bouncerLogger: TableLogBuffer
+ private lateinit var testScope: TestScope
+
@Before
override fun setUp() {
+ testScope = TestScope()
+
allowTestableLooperAsMainThread() // repeatWhenAttached requires the main thread
MockitoAnnotations.initMocks(this)
keyguardBouncerRepository =
KeyguardBouncerRepositoryImpl(
mock(com.android.keyguard.ViewMediatorCallback::class.java),
FakeSystemClock(),
- TestCoroutineScope(),
+ testScope.backgroundScope,
bouncerLogger,
)
super.setUp()
@@ -107,7 +111,7 @@
@Test
fun shadeLocked_showAlternateBouncer_unpauseAuth() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
// GIVEN view is attached + on the SHADE_LOCKED (udfps view not showing)
mController.onViewAttached()
captureStatusBarStateListeners()
@@ -116,7 +120,7 @@
// WHEN alternate bouncer is requested
val job = mController.listenForAlternateBouncerVisibility(this)
keyguardBouncerRepository.setAlternateVisible(true)
- yield()
+ runCurrent()
// THEN udfps view will animate in & pause auth is updated to NOT pause
verify(mView).animateInUdfpsBouncer(any())
@@ -128,7 +132,7 @@
/** After migration to MODERN_BOUNCER, replaces UdfpsKeyguardViewControllerTest version */
@Test
fun shouldPauseAuthBouncerShowing() =
- runBlocking(IMMEDIATE) {
+ testScope.runTest {
// GIVEN view attached and we're on the keyguard
mController.onViewAttached()
captureStatusBarStateListeners()
@@ -138,15 +142,11 @@
val job = mController.listenForBouncerExpansion(this)
keyguardBouncerRepository.setPrimaryShow(true)
keyguardBouncerRepository.setPanelExpansion(KeyguardBouncerConstants.EXPANSION_VISIBLE)
- yield()
+ runCurrent()
// THEN UDFPS shouldPauseAuth == true
assertTrue(mController.shouldPauseAuth())
job.cancel()
}
-
- companion object {
- private val IMMEDIATE = Dispatchers.Main.immediate
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsShellTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsShellTest.kt
index c2a129b..8b374ae 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsShellTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsShellTest.kt
@@ -17,9 +17,9 @@
package com.android.systemui.biometrics
import android.graphics.Rect
-import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.MotionEvent
+import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.UdfpsController.UdfpsOverlayController
@@ -39,7 +39,7 @@
import org.mockito.junit.MockitoJUnit
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
class UdfpsShellTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt
index 07b4a64..f075967 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsViewTest.kt
@@ -19,7 +19,7 @@
import android.graphics.PointF
import android.graphics.RectF
import android.hardware.biometrics.SensorLocationInternal
-import android.testing.AndroidTestingRunner
+import androidx.test.ext.junit.runners.AndroidJUnit4
import android.testing.TestableLooper
import android.testing.ViewUtils
import android.view.LayoutInflater
@@ -49,7 +49,7 @@
private const val SENSOR_RADIUS = 10
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
class UdfpsViewTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt
index 80c3e5e..937a7a9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt
@@ -172,64 +172,64 @@
}
@Test
- fun `canCameraGestureBeLaunched - status bar state is keyguard - returns true`() {
+ fun canCameraGestureBeLaunched_statusBarStateIsKeyguard_returnsTrue() {
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isTrue()
}
@Test
- fun `canCameraGestureBeLaunched - state is shade-locked - returns true`() {
+ fun canCameraGestureBeLaunched_stateIsShadeLocked_returnsTrue() {
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE_LOCKED)).isTrue()
}
@Test
- fun `canCameraGestureBeLaunched - state is keyguard - camera activity on top - returns true`() {
+ fun canCameraGestureBeLaunched_stateIsKeyguard_cameraActivityOnTop_returnsTrue() {
prepare(isCameraActivityRunningOnTop = true)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isTrue()
}
@Test
- fun `canCameraGestureBeLaunched - state is shade-locked - camera activity on top - true`() {
+ fun canCameraGestureBeLaunched_stateIsShadeLocked_cameraActivityOnTop_true() {
prepare(isCameraActivityRunningOnTop = true)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE_LOCKED)).isTrue()
}
@Test
- fun `canCameraGestureBeLaunched - not allowed by admin - returns false`() {
+ fun canCameraGestureBeLaunched_notAllowedByAdmin_returnsFalse() {
prepare(isCameraAllowedByAdmin = false)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isFalse()
}
@Test
- fun `canCameraGestureBeLaunched - intent does not resolve to any app - returns false`() {
+ fun canCameraGestureBeLaunched_intentDoesNotResolveToAnyApp_returnsFalse() {
prepare(installedCameraAppCount = 0)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isFalse()
}
@Test
- fun `canCameraGestureBeLaunched - state is shade - no running tasks - returns true`() {
+ fun canCameraGestureBeLaunched_stateIsShade_noRunningTasks_returnsTrue() {
prepare(isCameraActivityRunningOnTop = false, isTaskListEmpty = true)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isTrue()
}
@Test
- fun `canCameraGestureBeLaunched - state is shade - camera activity on top - returns false`() {
+ fun canCameraGestureBeLaunched_stateIsShade_cameraActivityOnTop_returnsFalse() {
prepare(isCameraActivityRunningOnTop = true)
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isFalse()
}
@Test
- fun `canCameraGestureBeLaunched - state is shade - camera activity not on top - true`() {
+ fun canCameraGestureBeLaunched_stateIsShade_cameraActivityNotOnTop_true() {
assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isTrue()
}
@Test
- fun `launchCamera - only one camera app installed - using secure screen lock option`() {
+ fun launchCamera_onlyOneCameraAppInstalled_usingSecureScreenLockOption() {
val source = 1337
underTest.launchCamera(source)
@@ -238,7 +238,7 @@
}
@Test
- fun `launchCamera - only one camera app installed - using non-secure screen lock option`() {
+ fun launchCamera_onlyOneCameraAppInstalled_usingNonSecureScreenLockOption() {
prepare(isUsingSecureScreenLockOption = false)
val source = 1337
@@ -248,7 +248,7 @@
}
@Test
- fun `launchCamera - multiple camera apps installed - using secure screen lock option`() {
+ fun launchCamera_multipleCameraAppsInstalled_usingSecureScreenLockOption() {
prepare(installedCameraAppCount = 2)
val source = 1337
@@ -262,7 +262,7 @@
}
@Test
- fun `launchCamera - multiple camera apps installed - using non-secure screen lock option`() {
+ fun launchCamera_multipleCameraAppsInstalled_usingNonSecureScreenLockOption() {
prepare(
isUsingSecureScreenLockOption = false,
installedCameraAppCount = 2,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java
index 8600b7c..fe5fa1f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/clipboardoverlay/ClipboardOverlayControllerTest.java
@@ -25,7 +25,6 @@
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SHOWN_EXPANDED;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SHOWN_MINIMIZED;
import static com.android.systemui.clipboardoverlay.ClipboardOverlayEvent.CLIPBOARD_OVERLAY_SWIPE_DISMISSED;
-import static com.android.systemui.flags.Flags.CLIPBOARD_REMOTE_BEHAVIOR;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -121,7 +120,6 @@
mSampleClipData = new ClipData("Test", new String[]{"text/plain"},
new ClipData.Item("Test Item"));
- mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, false);
mOverlayController = new ClipboardOverlayController(
mContext,
@@ -234,7 +232,6 @@
@Test
public void test_remoteCopy_withFlagOn() {
- mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, true);
when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(true);
mOverlayController.setClipData(mSampleClipData, "");
@@ -243,17 +240,7 @@
}
@Test
- public void test_remoteCopy_withFlagOff() {
- when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(true);
-
- mOverlayController.setClipData(mSampleClipData, "");
-
- verify(mTimeoutHandler).resetTimeout();
- }
-
- @Test
public void test_nonRemoteCopy() {
- mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, true);
when(mClipboardUtils.isRemoteCopy(any(), any(), any())).thenReturn(false);
mOverlayController.setClipData(mSampleClipData, "");
@@ -279,7 +266,6 @@
public void test_logOnClipboardActionsShown() {
ClipData.Item item = mSampleClipData.getItemAt(0);
item.setTextLinks(Mockito.mock(TextLinks.class));
- mFeatureFlags.set(CLIPBOARD_REMOTE_BEHAVIOR, true);
when(mClipboardUtils.isRemoteCopy(any(Context.class), any(ClipData.class), anyString()))
.thenReturn(true);
when(mClipboardUtils.getAction(any(TextLinks.class), anyString()))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/LongPressHandlingViewInteractionHandlerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/LongPressHandlingViewInteractionHandlerTest.kt
index fe352fd..1b2fc93d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/LongPressHandlingViewInteractionHandlerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/common/ui/view/LongPressHandlingViewInteractionHandlerTest.kt
@@ -72,7 +72,7 @@
}
@Test
- fun `long-press`() = runTest {
+ fun longPress() = runTest {
val downX = 123
val downY = 456
dispatchTouchEvents(
@@ -91,7 +91,7 @@
}
@Test
- fun `long-press but feature not enabled`() = runTest {
+ fun longPressButFeatureNotEnabled() = runTest {
underTest.isLongPressHandlingEnabled = false
dispatchTouchEvents(
Down(
@@ -106,7 +106,7 @@
}
@Test
- fun `long-press but view not attached`() = runTest {
+ fun longPressButViewNotAttached() = runTest {
isAttachedToWindow = false
dispatchTouchEvents(
Down(
@@ -121,7 +121,7 @@
}
@Test
- fun `dragged too far to be considered a long-press`() = runTest {
+ fun draggedTooFarToBeConsideredAlongPress() = runTest {
dispatchTouchEvents(
Down(
x = 123,
@@ -138,7 +138,7 @@
}
@Test
- fun `held down too briefly to be considered a long-press`() = runTest {
+ fun heldDownTooBrieflyToBeConsideredAlongPress() = runTest {
dispatchTouchEvents(
Down(
x = 123,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationCollectionLiveDataTest.java
similarity index 98%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveDataTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationCollectionLiveDataTest.java
index 8fdc491..ca6282c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationCollectionLiveDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationCollectionLiveDataTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static com.google.common.truth.Truth.assertThat;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationHostViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java
similarity index 99%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationHostViewControllerTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java
index 95c6897..c43df17 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationHostViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationHostViewControllerTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
similarity index 99%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
index 06a944e..a1d4fb4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutEngineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutEngineTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static com.google.common.truth.Truth.assertThat;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutParamsTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
similarity index 99%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutParamsTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
index e414942..286972d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationLayoutParamsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationLayoutParamsTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static com.google.common.truth.Truth.assertThat;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationTypesUpdaterTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationTypesUpdaterTest.java
similarity index 98%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationTypesUpdaterTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationTypesUpdaterTest.java
index 0e16b47..8cd23b2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationTypesUpdaterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationTypesUpdaterTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.never;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationUtilsTest.java
similarity index 78%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationUtilsTest.java
index ea16cb5..235c56b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationUtilsTest.java
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_AIR_QUALITY;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_CAST_INFO;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_DATE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_SMARTSPACE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_TIME;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_WEATHER;
-import static com.android.systemui.dreams.complication.ComplicationUtils.convertComplicationType;
-import static com.android.systemui.dreams.complication.ComplicationUtils.convertComplicationTypes;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_AIR_QUALITY;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_CAST_INFO;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_DATE;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_SMARTSPACE;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_TIME;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_WEATHER;
+import static com.android.systemui.complication.ComplicationUtils.convertComplicationType;
+import static com.android.systemui.complication.ComplicationUtils.convertComplicationTypes;
import static com.google.common.truth.Truth.assertThat;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformerTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationViewModelTransformerTest.java
similarity index 96%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformerTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationViewModelTransformerTest.java
index 2bc427d..206babf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationViewModelTransformerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/ComplicationViewModelTransformerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -26,7 +26,7 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.complication.dagger.ComplicationViewModelComponent;
+import com.android.systemui.complication.dagger.ComplicationViewModelComponent;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockTimeComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamClockTimeComplicationTest.java
similarity index 98%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockTimeComplicationTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/DreamClockTimeComplicationTest.java
index f6662d0..57d3a01 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockTimeComplicationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamClockTimeComplicationTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static com.google.common.truth.Truth.assertThat;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamHomeControlsComplicationTest.java
similarity index 97%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/DreamHomeControlsComplicationTest.java
index aad49f9..3cbb249 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamHomeControlsComplicationTest.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_HOME_CONTROLS;
import static com.google.common.truth.Truth.assertThat;
@@ -37,6 +37,7 @@
import com.android.internal.logging.UiEventLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.view.LaunchableImageView;
+import com.android.systemui.complication.dagger.DreamHomeControlsComplicationComponent;
import com.android.systemui.condition.SelfExecutingMonitor;
import com.android.systemui.controls.ControlsServiceInfo;
import com.android.systemui.controls.controller.ControlsController;
@@ -44,7 +45,6 @@
import com.android.systemui.controls.dagger.ControlsComponent;
import com.android.systemui.controls.management.ControlsListingController;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.dagger.DreamHomeControlsComplicationComponent;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.shared.condition.Monitor;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamMediaEntryComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamMediaEntryComplicationTest.java
similarity index 97%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamMediaEntryComplicationTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/DreamMediaEntryComplicationTest.java
index 0295030..2bf9ab2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamMediaEntryComplicationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/DreamMediaEntryComplicationTest.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
-import static com.android.systemui.dreams.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
+import static com.android.systemui.complication.Complication.COMPLICATION_TYPE_MEDIA_ENTRY;
import static com.android.systemui.flags.Flags.DREAM_MEDIA_TAP_TO_OPEN;
import static com.google.common.truth.Truth.assertThat;
@@ -34,8 +34,8 @@
import com.android.systemui.ActivityIntentHelper;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.complication.dagger.DreamMediaEntryComplicationComponent;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.dagger.DreamMediaEntryComplicationComponent;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.controls.ui.MediaCarouselController;
import com.android.systemui.media.dream.MediaDreamComplication;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/complication/SmartSpaceComplicationTest.java
similarity index 99%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/complication/SmartSpaceComplicationTest.java
index 175da0b..87de865 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/complication/SmartSpaceComplicationTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.systemui.dreams.complication;
+package com.android.systemui.complication;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/demomode/DemoModeControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/demomode/DemoModeControllerTest.kt
index 87c66b5..75eec72 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/demomode/DemoModeControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/demomode/DemoModeControllerTest.kt
@@ -74,7 +74,7 @@
}
@Test
- fun `demo command flow - returns args`() =
+ fun demoCommandFlow_returnsArgs() =
testScope.runTest {
var latest: Bundle? = null
val flow = underTest.demoFlowForCommand(TEST_COMMAND)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt
index 0a94706..b7c6246 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt
@@ -7,7 +7,7 @@
import android.view.View
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.dreams.complication.ComplicationHostViewController
+import com.android.systemui.complication.ComplicationHostViewController
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel
import com.android.systemui.statusbar.BlurUtils
import com.android.systemui.statusbar.policy.ConfigurationController
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
index 18abfa5..47b7d49 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
@@ -39,7 +39,7 @@
import com.android.dream.lowlight.LowLightTransitionCoordinator;
import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.complication.ComplicationHostViewController;
+import com.android.systemui.complication.ComplicationHostViewController;
import com.android.systemui.dreams.touch.scrim.BouncerlessScrimController;
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInteractor;
import com.android.systemui.keyguard.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java
index ed73797..cfd51e3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java
@@ -49,10 +49,10 @@
import com.android.internal.logging.UiEventLogger;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.complication.ComplicationLayoutEngine;
+import com.android.systemui.complication.ComplicationLayoutEngine;
+import com.android.systemui.dreams.complication.HideComplicationTouchHandler;
import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
-import com.android.systemui.dreams.dreamcomplication.HideComplicationTouchHandler;
import com.android.systemui.dreams.touch.DreamOverlayTouchMonitor;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -98,21 +98,20 @@
WindowManagerImpl mWindowManager;
@Mock
- ComplicationComponent.Factory mComplicationComponentFactory;
+ com.android.systemui.complication.dagger.ComplicationComponent.Factory
+ mComplicationComponentFactory;
@Mock
- ComplicationComponent mComplicationComponent;
+ com.android.systemui.complication.dagger.ComplicationComponent mComplicationComponent;
@Mock
ComplicationLayoutEngine mComplicationVisibilityController;
@Mock
- com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent.Factory
- mDreamComplicationComponentFactory;
+ ComplicationComponent.Factory mDreamComplicationComponentFactory;
@Mock
- com.android.systemui.dreams.dreamcomplication.dagger.ComplicationComponent
- mDreamComplicationComponent;
+ ComplicationComponent mDreamComplicationComponent;
@Mock
HideComplicationTouchHandler mHideComplicationTouchHandler;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java
index b88dbe6..f143c467 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java
@@ -31,7 +31,7 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.complication.Complication;
+import com.android.systemui.complication.Complication;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -235,6 +235,23 @@
}
@Test
+ public void testComplicationsNotShownForLowLight() {
+ final Complication complication = Mockito.mock(Complication.class);
+ final DreamOverlayStateController stateController = getDreamOverlayStateController(true);
+
+ // Add a complication and verify it's returned in getComplications.
+ stateController.addComplication(complication);
+ mExecutor.runAllReady();
+ assertThat(stateController.getComplications().contains(complication))
+ .isTrue();
+
+ stateController.setLowLightActive(true);
+ mExecutor.runAllReady();
+
+ assertThat(stateController.getComplications()).isEmpty();
+ }
+
+ @Test
public void testNotifyLowLightChanged() {
final DreamOverlayStateController stateController = getDreamOverlayStateController(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
similarity index 98%
rename from packages/SystemUI/tests/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandlerTest.java
rename to packages/SystemUI/tests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
index d68f032..eed4dbc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/dreamcomplication/HideComplicationTouchHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/HideComplicationTouchHandlerTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.systemui.dreams.dreamcomplication;
+package com.android.systemui.dreams.complication;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -31,8 +31,8 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.complication.Complication;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.Complication;
import com.android.systemui.dreams.touch.DreamTouchHandler;
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/ShadeTouchHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/ShadeTouchHandlerTest.java
index 5704ef3..872c079 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/ShadeTouchHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/ShadeTouchHandlerTest.java
@@ -28,7 +28,7 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -49,7 +49,7 @@
CentralSurfaces mCentralSurfaces;
@Mock
- NotificationPanelViewController mNotificationPanelViewController;
+ ShadeViewController mShadeViewController;
@Mock
DreamTouchHandler.TouchSession mTouchSession;
@@ -63,8 +63,8 @@
MockitoAnnotations.initMocks(this);
mTouchHandler = new ShadeTouchHandler(Optional.of(mCentralSurfaces),
TOUCH_HEIGHT);
- when(mCentralSurfaces.getNotificationPanelViewController())
- .thenReturn(mNotificationPanelViewController);
+ when(mCentralSurfaces.getShadeViewController())
+ .thenReturn(mShadeViewController);
}
/**
@@ -97,7 +97,7 @@
}
/**
- * Ensure touches are propagated to the {@link NotificationPanelViewController}.
+ * Ensure touches are propagated to the {@link ShadeViewController}.
*/
@Test
public void testEventPropagation() {
@@ -110,7 +110,7 @@
mTouchHandler.onSessionStart(mTouchSession);
verify(mTouchSession).registerInputListener(inputEventListenerArgumentCaptor.capture());
inputEventListenerArgumentCaptor.getValue().onInputEvent(motionEvent);
- verify(mNotificationPanelViewController).handleExternalTouch(motionEvent);
+ verify(mShadeViewController).handleExternalTouch(motionEvent);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/fragments/FragmentServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/fragments/FragmentServiceTest.kt
index a2dc1eb..4ba1bc6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/fragments/FragmentServiceTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/fragments/FragmentServiceTest.kt
@@ -5,7 +5,6 @@
import android.test.suitebuilder.annotation.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
-import com.android.systemui.qs.QSFragment
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import org.junit.Before
@@ -13,9 +12,7 @@
@SmallTest
class FragmentServiceTest : SysuiTestCase() {
- private val fragmentCreator = TestFragmentCreator()
- private val fragmenetHostManagerFactory: FragmentHostManager.Factory = mock()
- private val fragmentCreatorFactory = FragmentService.FragmentCreator.Factory { fragmentCreator }
+ private val fragmentHostManagerFactory: FragmentHostManager.Factory = mock()
private lateinit var fragmentService: FragmentService
@@ -25,65 +22,29 @@
Looper.prepare()
}
- fragmentService =
- FragmentService(
- fragmentCreatorFactory,
- fragmenetHostManagerFactory,
- mock(),
- DumpManager()
- )
- }
-
- @Test
- fun constructor_addsFragmentCreatorMethodsToMap() {
- val map = fragmentService.injectionMap
- assertThat(map).hasSize(2)
- assertThat(map.keys).contains(QSFragment::class.java.name)
- assertThat(map.keys).contains(TestFragmentInCreator::class.java.name)
+ fragmentService = FragmentService(fragmentHostManagerFactory, mock(), DumpManager())
}
@Test
fun addFragmentInstantiationProvider_objectHasNoFragmentMethods_nothingAdded() {
- fragmentService.addFragmentInstantiationProvider(Object())
+ fragmentService.addFragmentInstantiationProvider(TestFragment::class.java) {
+ TestFragment()
+ }
- assertThat(fragmentService.injectionMap).hasSize(2)
- }
-
- @Test
- fun addFragmentInstantiationProvider_objectHasFragmentMethods_methodsAdded() {
- fragmentService.addFragmentInstantiationProvider(
- @Suppress("unused")
- object : Any() {
- fun createTestFragment2() = TestFragment2()
- fun createTestFragment3() = TestFragment3()
- }
- )
-
- val map = fragmentService.injectionMap
- assertThat(map).hasSize(4)
- assertThat(map.keys).contains(TestFragment2::class.java.name)
- assertThat(map.keys).contains(TestFragment3::class.java.name)
+ assertThat(fragmentService.injectionMap).hasSize(1)
}
@Test
fun addFragmentInstantiationProvider_objectFragmentMethodsAlreadyProvided_nothingAdded() {
- fragmentService.addFragmentInstantiationProvider(
- @Suppress("unused")
- object : Any() {
- fun createTestFragment() = TestFragmentInCreator()
- }
- )
+ fragmentService.addFragmentInstantiationProvider(TestFragment::class.java) {
+ TestFragment()
+ }
+ fragmentService.addFragmentInstantiationProvider(TestFragment::class.java) {
+ TestFragment()
+ }
- assertThat(fragmentService.injectionMap).hasSize(2)
+ assertThat(fragmentService.injectionMap).hasSize(1)
}
- class TestFragmentCreator : FragmentService.FragmentCreator {
- override fun createQSFragment(): QSFragment = mock()
- @Suppress("unused")
- fun createTestFragment(): TestFragmentInCreator = TestFragmentInCreator()
- }
-
- class TestFragmentInCreator : Fragment()
- class TestFragment2 : Fragment()
- class TestFragment3 : Fragment()
+ class TestFragment : Fragment()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
index 1044131..4daecd9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
@@ -211,7 +211,7 @@
}
@Test
- fun `onAttachInfo - reportsContext`() {
+ fun onAttachInfo_reportsContext() {
val callback: SystemUIAppComponentFactoryBase.ContextAvailableCallback = mock()
underTest.setContextAvailableCallback(callback)
@@ -254,7 +254,7 @@
}
@Test
- fun `insert and query selection`() =
+ fun insertAndQuerySelection() =
testScope.runTest {
val slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START
val affordanceId = AFFORDANCE_2
@@ -278,7 +278,7 @@
}
@Test
- fun `query slots`() =
+ fun querySlotsProvidesTwoSlots() =
testScope.runTest {
assertThat(querySlots())
.isEqualTo(
@@ -296,7 +296,7 @@
}
@Test
- fun `query affordances`() =
+ fun queryAffordancesProvidesTwoAffordances() =
testScope.runTest {
assertThat(queryAffordances())
.isEqualTo(
@@ -316,7 +316,7 @@
}
@Test
- fun `delete and query selection`() =
+ fun deleteAndQuerySelection() =
testScope.runTest {
insertSelection(
slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
@@ -351,7 +351,7 @@
}
@Test
- fun `delete all selections in a slot`() =
+ fun deleteAllSelectionsInAslot() =
testScope.runTest {
insertSelection(
slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 0de9608..8f58140 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -502,7 +502,7 @@
TestableLooper.get(this).processAllMessages();
assertTrue(mViewMediator.isShowingAndNotOccluded());
- verify(mStatusBarKeyguardViewManager).reset(anyBoolean());
+ verify(mStatusBarKeyguardViewManager).reset(false);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfigTest.kt
index 5bb8367..e20d3af 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfigTest.kt
@@ -73,7 +73,7 @@
}
@Test
- fun `affordance triggered -- camera launch called`() {
+ fun affordanceTriggered_cameraLaunchCalled() {
// When
val result = underTest.onTriggered(null)
@@ -84,7 +84,7 @@
}
@Test
- fun `getPickerScreenState - default when launchable`() =
+ fun getPickerScreenState_defaultWhenLaunchable() =
testScope.runTest {
setLaunchable(true)
@@ -93,7 +93,7 @@
}
@Test
- fun `getPickerScreenState - unavailable when camera app not installed`() =
+ fun getPickerScreenState_unavailableWhenCameraAppNotInstalled() =
testScope.runTest {
setLaunchable(isCameraAppInstalled = false)
@@ -102,7 +102,7 @@
}
@Test
- fun `getPickerScreenState - unavailable when camera disabled by admin`() =
+ fun getPickerScreenState_unavailableWhenCameraDisabledByAdmin() =
testScope.runTest {
setLaunchable(isCameraDisabledByDeviceAdmin = true)
@@ -111,7 +111,7 @@
}
@Test
- fun `getPickerScreenState - unavailable when secure camera disabled by admin`() =
+ fun getPickerScreenState_unavailableWhenSecureCameraDisabledByAdmin() =
testScope.runTest {
setLaunchable(isSecureCameraDisabledByDeviceAdmin = true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt
index 64839e2..c326a86 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfigTest.kt
@@ -97,7 +97,7 @@
}
@Test
- fun `dnd not available - picker state hidden`() =
+ fun dndNotAvailable_pickerStateHidden() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(false)
@@ -113,7 +113,7 @@
}
@Test
- fun `dnd available - picker state visible`() =
+ fun dndAvailable_pickerStateVisible() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
@@ -132,7 +132,7 @@
}
@Test
- fun `onTriggered - dnd mode is not ZEN_MODE_OFF - set to ZEN_MODE_OFF`() =
+ fun onTriggered_dndModeIsNotZEN_MODE_OFF_setToZEN_MODE_OFF() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
@@ -157,7 +157,7 @@
}
@Test
- fun `onTriggered - dnd mode is ZEN_MODE_OFF - setting FOREVER - set zen without condition`() =
+ fun onTriggered_dndModeIsZEN_MODE_OFF_settingFOREVER_setZenWithoutCondition() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
@@ -182,7 +182,7 @@
}
@Test
- fun `onTriggered - dnd ZEN_MODE_OFF - setting not FOREVER or PROMPT - zen with condition`() =
+ fun onTriggered_dndZEN_MODE_OFF_settingNotFOREVERorPROMPT_zenWithCondition() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
@@ -207,7 +207,7 @@
}
@Test
- fun `onTriggered - dnd mode is ZEN_MODE_OFF - setting is PROMPT - show dialog`() =
+ fun onTriggered_dndModeIsZEN_MODE_OFF_settingIsPROMPT_showDialog() =
testScope.runTest {
// given
val expandable: Expandable = mock()
@@ -230,7 +230,7 @@
}
@Test
- fun `lockScreenState - dndAvailable starts as true - change to false - State is Hidden`() =
+ fun lockScreenState_dndAvailableStartsAsTrue_changeToFalse_StateIsHidden() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
@@ -249,7 +249,7 @@
}
@Test
- fun `lockScreenState - dndMode starts as ZEN_MODE_OFF - change to not OFF - State Visible`() =
+ fun lockScreenState_dndModeStartsAsZEN_MODE_OFF_changeToNotOFF_StateVisible() =
testScope.runTest {
// given
whenever(zenModeController.isZenAvailable).thenReturn(true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt
index 31391ee..292d067 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/FlashlightQuickAffordanceConfigTest.kt
@@ -60,7 +60,7 @@
}
@Test
- fun `flashlight is off -- triggered -- icon is on and active`() = runTest {
+ fun flashlightIsOff_triggered_iconIsOnAndActive() = runTest {
// given
flashlightController.isEnabled = false
flashlightController.isAvailable = true
@@ -83,7 +83,7 @@
}
@Test
- fun `flashlight is on -- triggered -- icon is off and inactive`() = runTest {
+ fun flashlightIsOn_triggered_iconIsOffAndInactive() = runTest {
// given
flashlightController.isEnabled = true
flashlightController.isAvailable = true
@@ -106,7 +106,7 @@
}
@Test
- fun `flashlight is on -- receives error -- icon is off and inactive`() = runTest {
+ fun flashlightIsOn_receivesError_iconIsOffAndInactive() = runTest {
// given
flashlightController.isEnabled = true
flashlightController.isAvailable = false
@@ -129,7 +129,7 @@
}
@Test
- fun `flashlight availability now off -- hidden`() = runTest {
+ fun flashlightAvailabilityNowOff_hidden() = runTest {
// given
flashlightController.isEnabled = true
flashlightController.isAvailable = false
@@ -146,7 +146,7 @@
}
@Test
- fun `flashlight availability now on -- flashlight on -- inactive and icon off`() = runTest {
+ fun flashlightAvailabilityNowOn_flashlightOn_inactiveAndIconOff() = runTest {
// given
flashlightController.isEnabled = true
flashlightController.isAvailable = false
@@ -168,7 +168,7 @@
}
@Test
- fun `flashlight availability now on -- flashlight off -- inactive and icon off`() = runTest {
+ fun flashlightAvailabilityNowOn_flashlightOff_inactiveAndIconOff() = runTest {
// given
flashlightController.isEnabled = false
flashlightController.isAvailable = false
@@ -190,7 +190,7 @@
}
@Test
- fun `flashlight available -- picker state default`() = runTest {
+ fun flashlightAvailable_pickerStateDefault() = runTest {
// given
flashlightController.isAvailable = true
@@ -202,7 +202,7 @@
}
@Test
- fun `flashlight not available -- picker state unavailable`() = runTest {
+ fun flashlightNotAvailable_pickerStateUnavailable() = runTest {
// given
flashlightController.isAvailable = false
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt
index 2c1c04c..26f0cdb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt
@@ -61,7 +61,7 @@
}
@Test
- fun `state - when cannot show while locked - returns Hidden`() = runBlockingTest {
+ fun state_whenCannotShowWhileLocked_returnsHidden() = runBlockingTest {
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false))
whenever(component.isEnabled()).thenReturn(true)
whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon)
@@ -81,7 +81,7 @@
}
@Test
- fun `state - when listing controller is missing - returns Hidden`() = runBlockingTest {
+ fun state_whenListingControllerIsMissing_returnsHidden() = runBlockingTest {
whenever(component.isEnabled()).thenReturn(true)
whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon)
whenever(component.getTileTitleId()).thenReturn(R.string.quick_controls_title)
@@ -100,7 +100,7 @@
}
@Test
- fun `onQuickAffordanceTriggered - canShowWhileLockedSetting is true`() = runBlockingTest {
+ fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsTrue() = runBlockingTest {
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true))
val onClickedResult = underTest.onTriggered(expandable)
@@ -110,7 +110,7 @@
}
@Test
- fun `onQuickAffordanceTriggered - canShowWhileLockedSetting is false`() = runBlockingTest {
+ fun onQuickAffordanceTriggered_canShowWhileLockedSettingIsFalse() = runBlockingTest {
whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false))
val onClickedResult = underTest.onTriggered(expandable)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt
index 3bae7f7..9a18ba8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLegacySettingSyncerTest.kt
@@ -106,7 +106,7 @@
}
@Test
- fun `Setting a setting selects the affordance`() =
+ fun settingAsettingSelectsTheAffordance() =
testScope.runTest {
val job = underTest.startSyncing()
@@ -129,7 +129,7 @@
}
@Test
- fun `Clearing a setting selects the affordance`() =
+ fun clearingAsettingSelectsTheAffordance() =
testScope.runTest {
val job = underTest.startSyncing()
@@ -156,7 +156,7 @@
}
@Test
- fun `Selecting an affordance sets its setting`() =
+ fun selectingAnAffordanceSetsItsSetting() =
testScope.runTest {
val job = underTest.startSyncing()
@@ -172,7 +172,7 @@
}
@Test
- fun `Unselecting an affordance clears its setting`() =
+ fun unselectingAnAffordanceClearsItsSetting() =
testScope.runTest {
val job = underTest.startSyncing()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt
index 1259b47..6989f44 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceLocalUserSelectionManagerTest.kt
@@ -164,7 +164,7 @@
}
@Test
- fun `remembers selections by user`() = runTest {
+ fun remembersSelectionsByUser() = runTest {
overrideResource(
R.array.config_keyguardQuickAffordanceDefaults,
arrayOf<String>(),
@@ -246,7 +246,7 @@
}
@Test
- fun `selections respects defaults`() = runTest {
+ fun selectionsRespectsDefaults() = runTest {
val slotId1 = "slot1"
val slotId2 = "slot2"
val affordanceId1 = "affordance1"
@@ -277,7 +277,7 @@
}
@Test
- fun `selections ignores defaults after selecting an affordance`() = runTest {
+ fun selectionsIgnoresDefaultsAfterSelectingAnAffordance() = runTest {
val slotId1 = "slot1"
val slotId2 = "slot2"
val affordanceId1 = "affordance1"
@@ -309,7 +309,7 @@
}
@Test
- fun `selections ignores defaults after clearing a slot`() = runTest {
+ fun selectionsIgnoresDefaultsAfterClearingAslot() = runTest {
val slotId1 = "slot1"
val slotId2 = "slot2"
val affordanceId1 = "affordance1"
@@ -341,7 +341,7 @@
}
@Test
- fun `responds to backup and restore by reloading the selections from disk`() = runTest {
+ fun respondsToBackupAndRestoreByReloadingTheSelectionsFromDisk() = runTest {
overrideResource(R.array.config_keyguardQuickAffordanceDefaults, arrayOf<String>())
val affordanceIdsBySlotId = mutableListOf<Map<String, List<String>>>()
val job =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceRemoteUserSelectionManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceRemoteUserSelectionManagerTest.kt
index c08ef42..a1c9f87 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceRemoteUserSelectionManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceRemoteUserSelectionManagerTest.kt
@@ -112,7 +112,7 @@
}
@Test
- fun `selections - primary user process`() =
+ fun selections_primaryUserProcess() =
testScope.runTest {
val values = mutableListOf<Map<String, List<String>>>()
val job = launch { underTest.selections.toList(values) }
@@ -163,7 +163,7 @@
}
@Test
- fun `selections - secondary user process - always empty`() =
+ fun selections_secondaryUserProcess_alwaysEmpty() =
testScope.runTest {
whenever(userHandle.isSystem).thenReturn(false)
val values = mutableListOf<Map<String, List<String>>>()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfigTest.kt
index 925c06f..c38827a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceConfigTest.kt
@@ -85,7 +85,7 @@
}
@Test
- fun `picker state - volume fixed - not available`() = testScope.runTest {
+ fun pickerState_volumeFixed_notAvailable() = testScope.runTest {
//given
whenever(audioManager.isVolumeFixed).thenReturn(true)
@@ -97,7 +97,7 @@
}
@Test
- fun `picker state - volume not fixed - available`() = testScope.runTest {
+ fun pickerState_volumeNotFixed_available() = testScope.runTest {
//given
whenever(audioManager.isVolumeFixed).thenReturn(false)
@@ -109,7 +109,7 @@
}
@Test
- fun `triggered - state was previously NORMAL - currently SILENT - move to previous state`() = testScope.runTest {
+ fun triggered_stateWasPreviouslyNORMAL_currentlySILENT_moveToPreviousState() = testScope.runTest {
//given
val ringerModeCapture = argumentCaptor<Int>()
whenever(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_NORMAL)
@@ -127,7 +127,7 @@
}
@Test
- fun `triggered - state is not SILENT - move to SILENT ringer`() = testScope.runTest {
+ fun triggered_stateIsNotSILENT_moveToSILENTringer() = testScope.runTest {
//given
val ringerModeCapture = argumentCaptor<Int>()
whenever(audioManager.ringerModeInternal).thenReturn(AudioManager.RINGER_MODE_NORMAL)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceCoreStartableTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceCoreStartableTest.kt
index facc747..f243d7b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceCoreStartableTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/MuteQuickAffordanceCoreStartableTest.kt
@@ -101,7 +101,7 @@
}
@Test
- fun `feature flag is OFF - do nothing with keyguardQuickAffordanceRepository`() = testScope.runTest {
+ fun featureFlagIsOFF_doNothingWithKeyguardQuickAffordanceRepository() = testScope.runTest {
//given
whenever(featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)).thenReturn(false)
@@ -114,7 +114,7 @@
}
@Test
- fun `feature flag is ON - call to keyguardQuickAffordanceRepository`() = testScope.runTest {
+ fun featureFlagIsON_callToKeyguardQuickAffordanceRepository() = testScope.runTest {
//given
val ringerModeInternal = mock<MutableLiveData<Int>>()
whenever(ringerModeTracker.ringerModeInternal).thenReturn(ringerModeInternal)
@@ -129,7 +129,7 @@
}
@Test
- fun `ringer mode is changed to SILENT - do not save to shared preferences`() = testScope.runTest {
+ fun ringerModeIsChangedToSILENT_doNotSaveToSharedPreferences() = testScope.runTest {
//given
val ringerModeInternal = mock<MutableLiveData<Int>>()
val observerCaptor = argumentCaptor<Observer<Int>>()
@@ -147,7 +147,7 @@
}
@Test
- fun `ringerModeInternal changes to something not SILENT - is set in sharedpreferences`() = testScope.runTest {
+ fun ringerModeInternalChangesToSomethingNotSILENT_isSetInSharedpreferences() = testScope.runTest {
//given
val newRingerMode = 99
val observerCaptor = argumentCaptor<Observer<Int>>()
@@ -172,7 +172,7 @@
}
@Test
- fun `MUTE is in selections - observe ringerModeInternal`() = testScope.runTest {
+ fun MUTEisInSelections_observeRingerModeInternal() = testScope.runTest {
//given
val ringerModeInternal = mock<MutableLiveData<Int>>()
whenever(ringerModeTracker.ringerModeInternal).thenReturn(ringerModeInternal)
@@ -187,7 +187,7 @@
}
@Test
- fun `MUTE is in selections 2x - observe ringerModeInternal`() = testScope.runTest {
+ fun MUTEisInSelections2x_observeRingerModeInternal() = testScope.runTest {
//given
val config: KeyguardQuickAffordanceConfig = mock()
whenever(config.key).thenReturn(BuiltInKeyguardQuickAffordanceKeys.MUTE)
@@ -206,7 +206,7 @@
}
@Test
- fun `MUTE is not in selections - stop observing ringerModeInternal`() = testScope.runTest {
+ fun MUTEisNotInSelections_stopObservingRingerModeInternal() = testScope.runTest {
//given
val config: KeyguardQuickAffordanceConfig = mock()
whenever(config.key).thenReturn("notmutequickaffordance")
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt
index 1adf808..faf18d3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt
@@ -55,7 +55,7 @@
}
@Test
- fun `affordance - sets up registration and delivers initial model`() = runBlockingTest {
+ fun affordance_setsUpRegistrationAndDeliversInitialModel() = runBlockingTest {
whenever(controller.isEnabledForLockScreenButton).thenReturn(true)
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -75,7 +75,7 @@
}
@Test
- fun `affordance - scanner activity changed - delivers model with updated intent`() =
+ fun affordance_scannerActivityChanged_deliversModelWithUpdatedIntent() =
runBlockingTest {
whenever(controller.isEnabledForLockScreenButton).thenReturn(true)
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -93,7 +93,7 @@
}
@Test
- fun `affordance - scanner preference changed - delivers visible model`() = runBlockingTest {
+ fun affordance_scannerPreferenceChanged_deliversVisibleModel() = runBlockingTest {
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this)
val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
@@ -109,7 +109,7 @@
}
@Test
- fun `affordance - scanner preference changed - delivers none`() = runBlockingTest {
+ fun affordance_scannerPreferenceChanged_deliversNone() = runBlockingTest {
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
val job = underTest.lockScreenState.onEach { latest = it }.launchIn(this)
val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
@@ -136,7 +136,7 @@
}
@Test
- fun `getPickerScreenState - enabled if configured on device - can open camera`() = runTest {
+ fun getPickerScreenState_enabledIfConfiguredOnDevice_canOpenCamera() = runTest {
whenever(controller.isAvailableOnDevice).thenReturn(true)
whenever(controller.isAbleToOpenCameraApp).thenReturn(true)
@@ -145,7 +145,7 @@
}
@Test
- fun `getPickerScreenState - disabled if configured on device - cannot open camera`() = runTest {
+ fun getPickerScreenState_disabledIfConfiguredOnDevice_cannotOpenCamera() = runTest {
whenever(controller.isAvailableOnDevice).thenReturn(true)
whenever(controller.isAbleToOpenCameraApp).thenReturn(false)
@@ -154,7 +154,7 @@
}
@Test
- fun `getPickerScreenState - unavailable if not configured on device`() = runTest {
+ fun getPickerScreenState_unavailableIfNotConfiguredOnDevice() = runTest {
whenever(controller.isAvailableOnDevice).thenReturn(false)
whenever(controller.isAbleToOpenCameraApp).thenReturn(true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt
index 752963f..952882d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt
@@ -69,7 +69,7 @@
}
@Test
- fun `affordance - keyguard showing - has wallet card - visible model`() = runBlockingTest {
+ fun affordance_keyguardShowing_hasWalletCard_visibleModel() = runBlockingTest {
setUpState()
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -90,7 +90,7 @@
}
@Test
- fun `affordance - wallet not enabled - model is none`() = runBlockingTest {
+ fun affordance_walletNotEnabled_modelIsNone() = runBlockingTest {
setUpState(isWalletEnabled = false)
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -102,7 +102,7 @@
}
@Test
- fun `affordance - query not successful - model is none`() = runBlockingTest {
+ fun affordance_queryNotSuccessful_modelIsNone() = runBlockingTest {
setUpState(isWalletQuerySuccessful = false)
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -114,7 +114,7 @@
}
@Test
- fun `affordance - no selected card - model is none`() = runBlockingTest {
+ fun affordance_noSelectedCard_modelIsNone() = runBlockingTest {
setUpState(hasSelectedCard = false)
var latest: KeyguardQuickAffordanceConfig.LockScreenState? = null
@@ -143,7 +143,7 @@
}
@Test
- fun `getPickerScreenState - default`() = runTest {
+ fun getPickerScreenState_default() = runTest {
setUpState()
assertThat(underTest.getPickerScreenState())
@@ -151,7 +151,7 @@
}
@Test
- fun `getPickerScreenState - unavailable`() = runTest {
+ fun getPickerScreenState_unavailable() = runTest {
setUpState(
isWalletServiceAvailable = false,
)
@@ -161,7 +161,7 @@
}
@Test
- fun `getPickerScreenState - disabled when the feature is not enabled`() = runTest {
+ fun getPickerScreenState_disabledWhenTheFeatureIsNotEnabled() = runTest {
setUpState(
isWalletEnabled = false,
)
@@ -171,7 +171,7 @@
}
@Test
- fun `getPickerScreenState - disabled when there is no card`() = runTest {
+ fun getPickerScreenState_disabledWhenThereIsNoCard() = runTest {
setUpState(
hasSelectedCard = false,
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfigTest.kt
index f1b9c5f..a9b9c90 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfigTest.kt
@@ -73,7 +73,7 @@
}
@Test
- fun `lockScreenState - visible when launchable`() =
+ fun lockScreenState_visibleWhenLaunchable() =
testScope.runTest {
setLaunchable()
@@ -84,7 +84,7 @@
}
@Test
- fun `lockScreenState - hidden when app not installed on device`() =
+ fun lockScreenState_hiddenWhenAppNotInstalledOnDevice() =
testScope.runTest {
setLaunchable(isVideoCameraAppInstalled = false)
@@ -95,7 +95,7 @@
}
@Test
- fun `lockScreenState - hidden when camera disabled by admin`() =
+ fun lockScreenState_hiddenWhenCameraDisabledByAdmin() =
testScope.runTest {
setLaunchable(isCameraDisabledByAdmin = true)
@@ -106,7 +106,7 @@
}
@Test
- fun `getPickerScreenState - default when launchable`() =
+ fun getPickerScreenState_defaultWhenLaunchable() =
testScope.runTest {
setLaunchable()
@@ -115,7 +115,7 @@
}
@Test
- fun `getPickerScreenState - unavailable when app not installed on device`() =
+ fun getPickerScreenState_unavailableWhenAppNotInstalledOnDevice() =
testScope.runTest {
setLaunchable(isVideoCameraAppInstalled = false)
@@ -124,7 +124,7 @@
}
@Test
- fun `getPickerScreenState - unavailable when camera disabled by admin`() =
+ fun getPickerScreenState_unavailableWhenCameraDisabledByAdmin() =
testScope.runTest {
setLaunchable(isCameraDisabledByAdmin = true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
index 5d83f56..726728a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/BiometricSettingsRepositoryTest.kt
@@ -227,10 +227,14 @@
assertThat(faceEnrolled()).isFalse()
+ whenever(authController.isFaceAuthEnrolled(ANOTHER_USER_ID)).thenReturn(true)
+
enrollmentChange(FACE, ANOTHER_USER_ID, true)
assertThat(faceEnrolled()).isFalse()
+ whenever(authController.isFaceAuthEnrolled(PRIMARY_USER_ID)).thenReturn(true)
+
enrollmentChange(FACE, PRIMARY_USER_ID, true)
assertThat(faceEnrolled()).isTrue()
@@ -264,6 +268,7 @@
verify(authController).addCallback(authControllerCallback.capture())
+ whenever(authController.isFaceAuthEnrolled(ANOTHER_USER_ID)).thenReturn(true)
enrollmentChange(FACE, ANOTHER_USER_ID, true)
assertThat(faceEnrolled()).isTrue()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
index fc75d47..fa40fc4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
@@ -21,6 +21,7 @@
import android.content.pm.UserInfo
import android.content.pm.UserInfo.FLAG_PRIMARY
import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_CANCELED
+import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE
import android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT
import android.hardware.biometrics.ComponentInfoInternal
import android.hardware.face.FaceAuthenticateOptions
@@ -71,7 +72,6 @@
import java.io.PrintWriter
import java.io.StringWriter
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.launch
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestDispatcher
import kotlinx.coroutines.test.TestScope
@@ -541,14 +541,6 @@
}
@Test
- fun authenticateDoesNotRunWhenCurrentUserIsNotPrimary() =
- testScope.runTest {
- testGatingCheckForFaceAuth {
- launch { fakeUserRepository.setSelectedUserInfo(secondaryUser) }
- }
- }
-
- @Test
fun authenticateDoesNotRunWhenSecureCameraIsActive() =
testScope.runTest {
testGatingCheckForFaceAuth {
@@ -652,6 +644,58 @@
}
@Test
+ fun isAuthenticatedIsResetToFalseWhenDeviceStartsGoingToSleep() =
+ testScope.runTest {
+ initCollectors()
+ allPreconditionsToRunFaceAuthAreTrue()
+
+ triggerFaceAuth(false)
+
+ authenticationCallback.value.onAuthenticationSucceeded(
+ mock(FaceManager.AuthenticationResult::class.java)
+ )
+
+ assertThat(authenticated()).isTrue()
+
+ keyguardRepository.setWakefulnessModel(
+ WakefulnessModel(
+ WakefulnessState.STARTING_TO_SLEEP,
+ isWakingUpOrAwake = false,
+ lastWakeReason = WakeSleepReason.POWER_BUTTON,
+ lastSleepReason = WakeSleepReason.POWER_BUTTON
+ )
+ )
+
+ assertThat(authenticated()).isFalse()
+ }
+
+ @Test
+ fun isAuthenticatedIsResetToFalseWhenDeviceGoesToSleep() =
+ testScope.runTest {
+ initCollectors()
+ allPreconditionsToRunFaceAuthAreTrue()
+
+ triggerFaceAuth(false)
+
+ authenticationCallback.value.onAuthenticationSucceeded(
+ mock(FaceManager.AuthenticationResult::class.java)
+ )
+
+ assertThat(authenticated()).isTrue()
+
+ keyguardRepository.setWakefulnessModel(
+ WakefulnessModel(
+ WakefulnessState.ASLEEP,
+ isWakingUpOrAwake = false,
+ lastWakeReason = WakeSleepReason.POWER_BUTTON,
+ lastSleepReason = WakeSleepReason.POWER_BUTTON
+ )
+ )
+
+ assertThat(authenticated()).isFalse()
+ }
+
+ @Test
fun isAuthenticatedIsResetToFalseWhenUserIsSwitching() =
testScope.runTest {
initCollectors()
@@ -824,6 +868,26 @@
verify(faceManager).scheduleWatchdog()
}
+ @Test
+ fun retryFaceIfThereIsAHardwareError() =
+ testScope.runTest {
+ initCollectors()
+ allPreconditionsToRunFaceAuthAreTrue()
+
+ triggerFaceAuth(fallbackToDetect = false)
+ clearInvocations(faceManager)
+
+ authenticationCallback.value.onAuthenticationError(
+ FACE_ERROR_HW_UNAVAILABLE,
+ "HW unavailable"
+ )
+
+ advanceTimeBy(DeviceEntryFaceAuthRepositoryImpl.HAL_ERROR_RETRY_TIMEOUT)
+ runCurrent()
+
+ faceAuthenticateIsCalled()
+ }
+
private suspend fun TestScope.testGatingCheckForFaceAuth(gatingCheckModifier: () -> Unit) {
initCollectors()
allPreconditionsToRunFaceAuthAreTrue()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt
index a668af3..12b8261 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryTest.kt
@@ -258,7 +258,7 @@
}
@Test
- fun `selections for secondary user`() =
+ fun selectionsForSecondaryUser() =
testScope.runTest {
userTracker.set(
userInfos =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
index 3fd97da..b53a434 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
@@ -281,7 +281,7 @@
}
@Test
- fun `isDozing - starts with correct initial value for isDozing`() =
+ fun isDozing_startsWithCorrectInitialValueForIsDozing() =
testScope.runTest {
var latest: Boolean? = null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepositoryTest.kt
index d9d4013..d0bfaa9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepositoryTest.kt
@@ -70,7 +70,7 @@
}
@Test
- fun `startTransition runs animator to completion`() =
+ fun startTransitionRunsAnimatorToCompletion() =
TestScope().runTest {
val steps = mutableListOf<TransitionStep>()
val job = underTest.transition(AOD, LOCKSCREEN).onEach { steps.add(it) }.launchIn(this)
@@ -86,7 +86,7 @@
}
@Test
- fun `starting second transition will cancel the first transition`() =
+ fun startingSecondTransitionWillCancelTheFirstTransition() =
TestScope().runTest {
val steps = mutableListOf<TransitionStep>()
val job = underTest.transition(AOD, LOCKSCREEN).onEach { steps.add(it) }.launchIn(this)
@@ -114,7 +114,7 @@
}
@Test
- fun `Null animator enables manual control with updateTransition`() =
+ fun nullAnimatorEnablesManualControlWithUpdateTransition() =
TestScope().runTest {
val steps = mutableListOf<TransitionStep>()
val job = underTest.transition(AOD, LOCKSCREEN).onEach { steps.add(it) }.launchIn(this)
@@ -146,13 +146,13 @@
}
@Test
- fun `Attempt to manually update transition with invalid UUID throws exception`() {
+ fun attemptTomanuallyUpdateTransitionWithInvalidUUIDthrowsException() {
underTest.updateTransition(UUID.randomUUID(), 0f, TransitionState.RUNNING)
assertThat(wtfHandler.failed).isTrue()
}
@Test
- fun `Attempt to manually update transition after FINISHED state throws exception`() {
+ fun attemptToManuallyUpdateTransitionAfterFINISHEDstateThrowsException() {
val uuid =
underTest.startTransition(
TransitionInfo(
@@ -171,7 +171,7 @@
}
@Test
- fun `Attempt to manually update transition after CANCELED state throws exception`() {
+ fun attemptToManuallyUpdateTransitionAfterCANCELEDstateThrowsException() {
val uuid =
underTest.startTransition(
TransitionInfo(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepositoryTest.kt
index f9493d1..9daf3f3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/LightRevealScrimRepositoryTest.kt
@@ -48,7 +48,7 @@
}
@Test
- fun `nextRevealEffect - effect switches between default and biometric with no dupes`() =
+ fun nextRevealEffect_effectSwitchesBetweenDefaultAndBiometricWithNoDupes() =
runTest {
val values = mutableListOf<LightRevealEffect>()
val job = launch { underTest.revealEffect.collect { values.add(it) } }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
index 3d1d2f4..5da1a84 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardFaceAuthInteractorTest.kt
@@ -279,6 +279,23 @@
}
@Test
+ fun faceAuthIsCancelledWhenUserInputOnPrimaryBouncer() =
+ testScope.runTest {
+ underTest.start()
+
+ underTest.onSwipeUpOnBouncer()
+
+ runCurrent()
+ assertThat(faceAuthRepository.isAuthRunning.value).isTrue()
+
+ underTest.onPrimaryBouncerUserInput()
+
+ runCurrent()
+
+ assertThat(faceAuthRepository.isAuthRunning.value).isFalse()
+ }
+
+ @Test
fun faceAuthIsRequestedWhenSwipeUpOnBouncer() =
testScope.runTest {
underTest.start()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt
index 77bb12c..8a0cf4f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardLongPressInteractorTest.kt
@@ -92,7 +92,7 @@
}
@Test
- fun `isEnabled - always false when quick settings are visible`() =
+ fun isEnabled_alwaysFalseWhenQuickSettingsAreVisible() =
testScope.runTest {
val isEnabled = collectLastValue(underTest.isLongPressHandlingEnabled)
KeyguardState.values().forEach { keyguardState ->
@@ -163,7 +163,7 @@
}
@Test
- fun `long pressed - close dialogs broadcast received - popup dismissed`() =
+ fun longPressed_closeDialogsBroadcastReceived_popupDismissed() =
testScope.runTest {
val isMenuVisible by collectLastValue(underTest.isMenuVisible)
runCurrent()
@@ -211,7 +211,7 @@
}
@Test
- fun `logs when menu is shown`() =
+ fun logsWhenMenuIsShown() =
testScope.runTest {
collectLastValue(underTest.isMenuVisible)
runCurrent()
@@ -223,7 +223,7 @@
}
@Test
- fun `logs when menu is clicked`() =
+ fun logsWhenMenuIsClicked() =
testScope.runTest {
collectLastValue(underTest.isMenuVisible)
runCurrent()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
index 503e002..23f0523 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
@@ -195,7 +195,7 @@
}
@Test
- fun `quickAffordance - bottom start affordance is visible`() =
+ fun quickAffordance_bottomStartAffordanceIsVisible() =
testScope.runTest {
val configKey = BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS
homeControls.setState(
@@ -221,7 +221,7 @@
}
@Test
- fun `quickAffordance - bottom end affordance is visible`() =
+ fun quickAffordance_bottomEndAffordanceIsVisible() =
testScope.runTest {
val configKey = BuiltInKeyguardQuickAffordanceKeys.QUICK_ACCESS_WALLET
quickAccessWallet.setState(
@@ -246,7 +246,7 @@
}
@Test
- fun `quickAffordance - hidden when all features are disabled by device policy`() =
+ fun quickAffordance_hiddenWhenAllFeaturesAreDisabledByDevicePolicy() =
testScope.runTest {
whenever(devicePolicyManager.getKeyguardDisabledFeatures(null, userTracker.userId))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_ALL)
@@ -265,7 +265,7 @@
}
@Test
- fun `quickAffordance - hidden when shortcuts feature is disabled by device policy`() =
+ fun quickAffordance_hiddenWhenShortcutsFeatureIsDisabledByDevicePolicy() =
testScope.runTest {
whenever(devicePolicyManager.getKeyguardDisabledFeatures(null, userTracker.userId))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_SHORTCUTS_ALL)
@@ -284,7 +284,7 @@
}
@Test
- fun `quickAffordance - hidden when quick settings is visible`() =
+ fun quickAffordance_hiddenWhenQuickSettingsIsVisible() =
testScope.runTest {
repository.setQuickSettingsVisible(true)
quickAccessWallet.setState(
@@ -302,7 +302,7 @@
}
@Test
- fun `quickAffordance - bottom start affordance hidden while dozing`() =
+ fun quickAffordance_bottomStartAffordanceHiddenWhileDozing() =
testScope.runTest {
repository.setDozing(true)
homeControls.setState(
@@ -319,7 +319,7 @@
}
@Test
- fun `quickAffordance - bottom start affordance hidden when lockscreen is not showing`() =
+ fun quickAffordance_bottomStartAffordanceHiddenWhenLockscreenIsNotShowing() =
testScope.runTest {
repository.setKeyguardShowing(false)
homeControls.setState(
@@ -336,7 +336,7 @@
}
@Test
- fun `quickAffordanceAlwaysVisible - even when lock screen not showing and dozing`() =
+ fun quickAffordanceAlwaysVisible_evenWhenLockScreenNotShowingAndDozing() =
testScope.runTest {
repository.setKeyguardShowing(false)
repository.setDozing(true)
@@ -511,7 +511,7 @@
}
@Test
- fun `unselect - one`() =
+ fun unselect_one() =
testScope.runTest {
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
homeControls.setState(
@@ -588,7 +588,7 @@
}
@Test
- fun `unselect - all`() =
+ fun unselect_all() =
testScope.runTest {
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
homeControls.setState(
@@ -635,14 +635,14 @@
}
companion object {
- private val ICON: Icon = mock {
- whenever(this.contentDescription)
- .thenReturn(
+ private const val CONTENT_DESCRIPTION_RESOURCE_ID = 1337
+ private val ICON: Icon =
+ Icon.Resource(
+ res = CONTENT_DESCRIPTION_RESOURCE_ID,
+ contentDescription =
ContentDescription.Resource(
res = CONTENT_DESCRIPTION_RESOURCE_ID,
- )
- )
- }
- private const val CONTENT_DESCRIPTION_RESOURCE_ID = 1337
+ ),
+ )
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
index 276b3e3..503687d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
@@ -52,7 +52,7 @@
}
@Test
- fun `transition collectors receives only appropriate events`() = runTest {
+ fun transitionCollectorsReceivesOnlyAppropriateEvents() = runTest {
val lockscreenToAodSteps by collectValues(underTest.lockscreenToAodTransition)
val aodToLockscreenSteps by collectValues(underTest.aodToLockscreenTransition)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
index e2d0ec3..fe65236 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
@@ -180,7 +180,7 @@
}
@Test
- fun `DREAMING to LOCKSCREEN`() =
+ fun DREAMINGtoLOCKSCREEN() =
testScope.runTest {
// GIVEN a device is dreaming
keyguardRepository.setDreamingWithOverlay(true)
@@ -215,7 +215,7 @@
}
@Test
- fun `LOCKSCREEN to PRIMARY_BOUNCER via bouncer showing call`() =
+ fun LOCKSCREENtoPRIMARY_BOUNCERviaBouncerShowingCall() =
testScope.runTest {
// GIVEN a device that has at least woken up
keyguardRepository.setWakefulnessModel(startingToWake())
@@ -242,7 +242,7 @@
}
@Test
- fun `OCCLUDED to DOZING`() =
+ fun OCCLUDEDtoDOZING() =
testScope.runTest {
// GIVEN a device with AOD not available
keyguardRepository.setAodAvailable(false)
@@ -269,7 +269,7 @@
}
@Test
- fun `OCCLUDED to AOD`() =
+ fun OCCLUDEDtoAOD() =
testScope.runTest {
// GIVEN a device with AOD available
keyguardRepository.setAodAvailable(true)
@@ -296,7 +296,7 @@
}
@Test
- fun `LOCKSCREEN to DREAMING`() =
+ fun LOCKSCREENtoDREAMING() =
testScope.runTest {
// GIVEN a device that is not dreaming or dozing
keyguardRepository.setDreamingWithOverlay(false)
@@ -327,7 +327,7 @@
}
@Test
- fun `LOCKSCREEN to DOZING`() =
+ fun LOCKSCREENtoDOZING() =
testScope.runTest {
// GIVEN a device with AOD not available
keyguardRepository.setAodAvailable(false)
@@ -354,7 +354,7 @@
}
@Test
- fun `LOCKSCREEN to AOD`() =
+ fun LOCKSCREENtoAOD() =
testScope.runTest {
// GIVEN a device with AOD available
keyguardRepository.setAodAvailable(true)
@@ -381,7 +381,7 @@
}
@Test
- fun `DOZING to LOCKSCREEN`() =
+ fun DOZINGtoLOCKSCREEN() =
testScope.runTest {
// GIVEN a prior transition has run to DOZING
runTransition(KeyguardState.LOCKSCREEN, KeyguardState.DOZING)
@@ -404,7 +404,7 @@
}
@Test
- fun `DOZING to LOCKSCREEN cannot be interruped by DREAMING`() =
+ fun DOZINGtoLOCKSCREENcannotBeInterrupedByDREAMING() =
testScope.runTest {
// GIVEN a prior transition has started to LOCKSCREEN
transitionRepository.sendTransitionStep(
@@ -430,7 +430,7 @@
}
@Test
- fun `DOZING to GONE`() =
+ fun DOZINGtoGONE() =
testScope.runTest {
// GIVEN a prior transition has run to DOZING
runTransition(KeyguardState.LOCKSCREEN, KeyguardState.DOZING)
@@ -453,7 +453,7 @@
}
@Test
- fun `GONE to DOZING`() =
+ fun GONEtoDOZING() =
testScope.runTest {
// GIVEN a device with AOD not available
keyguardRepository.setAodAvailable(false)
@@ -480,7 +480,7 @@
}
@Test
- fun `GONE to AOD`() =
+ fun GONEtoAOD() =
testScope.runTest {
// GIVEN a device with AOD available
keyguardRepository.setAodAvailable(true)
@@ -507,7 +507,7 @@
}
@Test
- fun `GONE to LOCKSREEN`() =
+ fun GONEtoLOCKSREEN() =
testScope.runTest {
// GIVEN a prior transition has run to GONE
runTransition(KeyguardState.LOCKSCREEN, KeyguardState.GONE)
@@ -530,7 +530,7 @@
}
@Test
- fun `GONE to DREAMING`() =
+ fun GONEtoDREAMING() =
testScope.runTest {
// GIVEN a device that is not dreaming or dozing
keyguardRepository.setDreamingWithOverlay(false)
@@ -561,7 +561,7 @@
}
@Test
- fun `ALTERNATE_BOUNCER to PRIMARY_BOUNCER`() =
+ fun ALTERNATE_BOUNCERtoPRIMARY_BOUNCER() =
testScope.runTest {
// GIVEN a prior transition has run to ALTERNATE_BOUNCER
runTransition(KeyguardState.LOCKSCREEN, KeyguardState.ALTERNATE_BOUNCER)
@@ -584,7 +584,7 @@
}
@Test
- fun `ALTERNATE_BOUNCER to AOD`() =
+ fun ALTERNATE_BOUNCERtoAOD() =
testScope.runTest {
// GIVEN a prior transition has run to ALTERNATE_BOUNCER
bouncerRepository.setAlternateVisible(true)
@@ -613,7 +613,7 @@
}
@Test
- fun `ALTERNATE_BOUNCER to DOZING`() =
+ fun ALTERNATE_BOUNCERtoDOZING() =
testScope.runTest {
// GIVEN a prior transition has run to ALTERNATE_BOUNCER
bouncerRepository.setAlternateVisible(true)
@@ -643,7 +643,7 @@
}
@Test
- fun `ALTERNATE_BOUNCER to LOCKSCREEN`() =
+ fun ALTERNATE_BOUNCERtoLOCKSCREEN() =
testScope.runTest {
// GIVEN a prior transition has run to ALTERNATE_BOUNCER
bouncerRepository.setAlternateVisible(true)
@@ -671,7 +671,7 @@
}
@Test
- fun `PRIMARY_BOUNCER to AOD`() =
+ fun PRIMARY_BOUNCERtoAOD() =
testScope.runTest {
// GIVEN a prior transition has run to PRIMARY_BOUNCER
bouncerRepository.setPrimaryShow(true)
@@ -699,7 +699,7 @@
}
@Test
- fun `PRIMARY_BOUNCER to DOZING`() =
+ fun PRIMARY_BOUNCERtoDOZING() =
testScope.runTest {
// GIVEN a prior transition has run to PRIMARY_BOUNCER
bouncerRepository.setPrimaryShow(true)
@@ -727,7 +727,7 @@
}
@Test
- fun `PRIMARY_BOUNCER to LOCKSCREEN`() =
+ fun PRIMARY_BOUNCERtoLOCKSCREEN() =
testScope.runTest {
// GIVEN a prior transition has run to PRIMARY_BOUNCER
bouncerRepository.setPrimaryShow(true)
@@ -754,7 +754,7 @@
}
@Test
- fun `OCCLUDED to GONE`() =
+ fun OCCLUDEDtoGONE() =
testScope.runTest {
// GIVEN a device on lockscreen
keyguardRepository.setKeyguardShowing(true)
@@ -785,7 +785,7 @@
}
@Test
- fun `OCCLUDED to LOCKSCREEN`() =
+ fun OCCLUDEDtoLOCKSCREEN() =
testScope.runTest {
// GIVEN a device on lockscreen
keyguardRepository.setKeyguardShowing(true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/LightRevealScrimInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/LightRevealScrimInteractorTest.kt
index 6236616..359854b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/LightRevealScrimInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/LightRevealScrimInteractorTest.kt
@@ -69,7 +69,7 @@
}
@Test
- fun `lightRevealEffect - does not change during keyguard transition`() =
+ fun lightRevealEffect_doesNotChangeDuringKeyguardTransition() =
runTest(UnconfinedTestDispatcher()) {
val values = mutableListOf<LightRevealEffect>()
val job = underTest.lightRevealEffect.onEach(values::add).launchIn(this)
@@ -103,7 +103,7 @@
}
@Test
- fun `revealAmount - inverted when appropriate`() =
+ fun revealAmount_invertedWhenAppropriate() =
runTest(UnconfinedTestDispatcher()) {
val values = mutableListOf<Float>()
val job = underTest.revealAmount.onEach(values::add).launchIn(this)
@@ -132,7 +132,7 @@
}
@Test
- fun `revealAmount - ignores transitions that do not affect reveal amount`() =
+ fun revealAmount_ignoresTransitionsThatDoNotAffectRevealAmount() =
runTest(UnconfinedTestDispatcher()) {
val values = mutableListOf<Float>()
val job = underTest.revealAmount.onEach(values::add).launchIn(this)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
index 224eec1..2361c59 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
@@ -251,7 +251,7 @@
}
@Test
- fun `startButton - present - visible model - starts activity on click`() =
+ fun startButton_present_visibleModel_startsActivityOnClick() =
testScope.runTest {
repository.setKeyguardShowing(true)
val latest = collectLastValue(underTest.startButton)
@@ -280,7 +280,7 @@
}
@Test
- fun `startButton - hidden when device policy disables all keyguard features`() =
+ fun startButton_hiddenWhenDevicePolicyDisablesAllKeyguardFeatures() =
testScope.runTest {
whenever(devicePolicyManager.getKeyguardDisabledFeatures(null, userTracker.userId))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_ALL)
@@ -315,7 +315,7 @@
}
@Test
- fun `startButton - in preview mode - visible even when keyguard not showing`() =
+ fun startButton_inPreviewMode_visibleEvenWhenKeyguardNotShowing() =
testScope.runTest {
underTest.enablePreviewMode(
initiallySelectedSlotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
@@ -359,7 +359,7 @@
}
@Test
- fun `endButton - in higlighted preview mode - dimmed when other is selected`() =
+ fun endButton_inHiglightedPreviewMode_dimmedWhenOtherIsSelected() =
testScope.runTest {
underTest.enablePreviewMode(
initiallySelectedSlotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START,
@@ -416,7 +416,7 @@
}
@Test
- fun `endButton - present - visible model - do nothing on click`() =
+ fun endButton_present_visibleModel_doNothingOnClick() =
testScope.runTest {
repository.setKeyguardShowing(true)
val latest = collectLastValue(underTest.endButton)
@@ -445,7 +445,7 @@
}
@Test
- fun `startButton - not present - model is hidden`() =
+ fun startButton_notPresent_modelIsHidden() =
testScope.runTest {
val latest = collectLastValue(underTest.startButton)
@@ -524,7 +524,7 @@
}
@Test
- fun `alpha - in preview mode - does not change`() =
+ fun alpha_inPreviewMode_doesNotChange() =
testScope.runTest {
underTest.enablePreviewMode(
initiallySelectedSlotId = null,
@@ -629,7 +629,7 @@
}
@Test
- fun `isClickable - true when alpha at threshold`() =
+ fun isClickable_trueWhenAlphaAtThreshold() =
testScope.runTest {
repository.setKeyguardShowing(true)
repository.setBottomAreaAlpha(
@@ -661,7 +661,7 @@
}
@Test
- fun `isClickable - true when alpha above threshold`() =
+ fun isClickable_trueWhenAlphaAboveThreshold() =
testScope.runTest {
repository.setKeyguardShowing(true)
val latest = collectLastValue(underTest.startButton)
@@ -692,7 +692,7 @@
}
@Test
- fun `isClickable - false when alpha below threshold`() =
+ fun isClickable_falseWhenAlphaBelowThreshold() =
testScope.runTest {
repository.setKeyguardShowing(true)
val latest = collectLastValue(underTest.startButton)
@@ -723,7 +723,7 @@
}
@Test
- fun `isClickable - false when alpha at zero`() =
+ fun isClickable_falseWhenAlphaAtZero() =
testScope.runTest {
repository.setKeyguardShowing(true)
val latest = collectLastValue(underTest.startButton)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt
index 0c4e845..efa5f0c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/OccludedToLockscreenTransitionViewModelTest.kt
@@ -92,6 +92,21 @@
job.cancel()
}
+ @Test
+ fun lockscreenTranslationYResettedAfterJobCancelled() =
+ runTest(UnconfinedTestDispatcher()) {
+ val values = mutableListOf<Float>()
+
+ val pixels = 100
+ val job =
+ underTest.lockscreenTranslationY(pixels).onEach { values.add(it) }.launchIn(this)
+ repository.sendTransitionStep(step(0.5f, TransitionState.CANCELED))
+
+ assertThat(values.last()).isEqualTo(0f)
+
+ job.cancel()
+ }
+
private fun step(
value: Float,
state: TransitionState = TransitionState.RUNNING
diff --git a/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt
index ea11f01..afab250 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt
@@ -88,7 +88,7 @@
}
@Test(expected = IllegalStateException::class)
- fun `repeatWhenAttached - enforces main thread`() =
+ fun repeatWhenAttached_enforcesMainThread() =
testScope.runTest {
Assert.setTestThread(null)
@@ -96,7 +96,7 @@
}
@Test(expected = IllegalStateException::class)
- fun `repeatWhenAttached - dispose enforces main thread`() =
+ fun repeatWhenAttached_disposeEnforcesMainThread() =
testScope.runTest {
val disposableHandle = repeatWhenAttached()
Assert.setTestThread(null)
@@ -105,7 +105,7 @@
}
@Test
- fun `repeatWhenAttached - view starts detached - runs block when attached`() =
+ fun repeatWhenAttached_viewStartsDetached_runsBlockWhenAttached() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(false)
repeatWhenAttached()
@@ -120,7 +120,7 @@
}
@Test
- fun `repeatWhenAttached - view already attached - immediately runs block`() =
+ fun repeatWhenAttached_viewAlreadyAttached_immediatelyRunsBlock() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
@@ -132,7 +132,7 @@
}
@Test
- fun `repeatWhenAttached - starts visible without focus - STARTED`() =
+ fun repeatWhenAttached_startsVisibleWithoutFocus_STARTED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
whenever(view.windowVisibility).thenReturn(View.VISIBLE)
@@ -145,7 +145,7 @@
}
@Test
- fun `repeatWhenAttached - starts with focus but invisible - CREATED`() =
+ fun repeatWhenAttached_startsWithFocusButInvisible_CREATED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
whenever(view.hasWindowFocus()).thenReturn(true)
@@ -158,7 +158,7 @@
}
@Test
- fun `repeatWhenAttached - starts visible and with focus - RESUMED`() =
+ fun repeatWhenAttached_startsVisibleAndWithFocus_RESUMED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
whenever(view.windowVisibility).thenReturn(View.VISIBLE)
@@ -172,7 +172,7 @@
}
@Test
- fun `repeatWhenAttached - becomes visible without focus - STARTED`() =
+ fun repeatWhenAttached_becomesVisibleWithoutFocus_STARTED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
repeatWhenAttached()
@@ -188,7 +188,7 @@
}
@Test
- fun `repeatWhenAttached - gains focus but invisible - CREATED`() =
+ fun repeatWhenAttached_gainsFocusButInvisible_CREATED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
repeatWhenAttached()
@@ -204,7 +204,7 @@
}
@Test
- fun `repeatWhenAttached - becomes visible and gains focus - RESUMED`() =
+ fun repeatWhenAttached_becomesVisibleAndGainsFocus_RESUMED() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
repeatWhenAttached()
@@ -224,7 +224,7 @@
}
@Test
- fun `repeatWhenAttached - view gets detached - destroys the lifecycle`() =
+ fun repeatWhenAttached_viewGetsDetached_destroysTheLifecycle() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
repeatWhenAttached()
@@ -238,7 +238,7 @@
}
@Test
- fun `repeatWhenAttached - view gets reattached - recreates a lifecycle`() =
+ fun repeatWhenAttached_viewGetsReattached_recreatesAlifecycle() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
repeatWhenAttached()
@@ -255,7 +255,7 @@
}
@Test
- fun `repeatWhenAttached - dispose attached`() =
+ fun repeatWhenAttached_disposeAttached() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
val handle = repeatWhenAttached()
@@ -269,7 +269,7 @@
}
@Test
- fun `repeatWhenAttached - dispose never attached`() =
+ fun repeatWhenAttached_disposeNeverAttached() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(false)
val handle = repeatWhenAttached()
@@ -281,7 +281,7 @@
}
@Test
- fun `repeatWhenAttached - dispose previously attached now detached`() =
+ fun repeatWhenAttached_disposePreviouslyAttachedNowDetached() =
testScope.runTest {
whenever(view.isAttachedToWindow).thenReturn(true)
val handle = repeatWhenAttached()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/log/table/TableLogBufferFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/log/table/TableLogBufferFactoryTest.kt
index 411b1bd..af83a56 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/log/table/TableLogBufferFactoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/log/table/TableLogBufferFactoryTest.kt
@@ -31,7 +31,7 @@
private val underTest = TableLogBufferFactory(dumpManager, systemClock)
@Test
- fun `create - always creates new instance`() {
+ fun create_alwaysCreatesNewInstance() {
val b1 = underTest.create(NAME_1, SIZE)
val b1_copy = underTest.create(NAME_1, SIZE)
val b2 = underTest.create(NAME_2, SIZE)
@@ -43,7 +43,7 @@
}
@Test
- fun `getOrCreate - reuses instance`() {
+ fun getOrCreate_reusesInstance() {
val b1 = underTest.getOrCreate(NAME_1, SIZE)
val b1_copy = underTest.getOrCreate(NAME_1, SIZE)
val b2 = underTest.getOrCreate(NAME_2, SIZE)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarViewModelTest.kt
index 56c91bc..e3c8b05 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/models/player/SeekBarViewModelTest.kt
@@ -22,6 +22,7 @@
import android.media.session.PlaybackState
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
+import android.view.MotionEvent
import android.widget.SeekBar
import androidx.arch.core.executor.ArchTaskExecutor
import androidx.arch.core.executor.TaskExecutor
@@ -466,21 +467,63 @@
whenever(mockController.getTransportControls()).thenReturn(mockTransport)
whenever(falsingManager.isFalseTouch(Classifier.MEDIA_SEEKBAR)).thenReturn(true)
whenever(falsingManager.isFalseTap(anyInt())).thenReturn(true)
- viewModel.updateController(mockController)
- val pos = 169
- viewModel.attachTouchHandlers(mockBar)
+ viewModel.updateController(mockController)
+ val pos = 40
+ val bar = SeekBar(context).apply { progress = pos }
with(viewModel.seekBarListener) {
- onStartTrackingTouch(mockBar)
- onProgressChanged(mockBar, pos, true)
- onStopTrackingTouch(mockBar)
+ onStartTrackingTouch(bar)
+ onStopTrackingTouch(bar)
}
+ fakeExecutor.runAllReady()
// THEN transport controls should not be used
verify(mockTransport, never()).seekTo(pos.toLong())
}
@Test
+ fun onSeekbarGrabInvalidTouch() {
+ whenever(mockController.getTransportControls()).thenReturn(mockTransport)
+ viewModel.firstMotionEvent =
+ MotionEvent.obtain(12L, 13L, MotionEvent.ACTION_DOWN, 76F, 0F, 0)
+ viewModel.lastMotionEvent = MotionEvent.obtain(12L, 14L, MotionEvent.ACTION_UP, 78F, 4F, 0)
+ val pos = 78
+
+ viewModel.updateController(mockController)
+ // WHEN user ends drag
+ val bar = SeekBar(context).apply { progress = pos }
+ with(viewModel.seekBarListener) {
+ onStartTrackingTouch(bar)
+ onStopTrackingTouch(bar)
+ }
+ fakeExecutor.runAllReady()
+
+ // THEN transport controls should not be used
+ verify(mockTransport, never()).seekTo(pos.toLong())
+ }
+
+ @Test
+ fun onSeekbarGrabValidTouch() {
+ whenever(mockController.transportControls).thenReturn(mockTransport)
+ viewModel.firstMotionEvent =
+ MotionEvent.obtain(12L, 13L, MotionEvent.ACTION_DOWN, 36F, 0F, 0)
+ viewModel.lastMotionEvent = MotionEvent.obtain(12L, 14L, MotionEvent.ACTION_UP, 40F, 1F, 0)
+ val pos = 40
+
+ viewModel.updateController(mockController)
+ // WHEN user ends drag
+ val bar = SeekBar(context).apply { progress = pos }
+ with(viewModel.seekBarListener) {
+ onStartTrackingTouch(bar)
+ onStopTrackingTouch(bar)
+ }
+ fakeExecutor.runAllReady()
+
+ // THEN transport controls should be used
+ verify(mockTransport).seekTo(pos.toLong())
+ }
+
+ @Test
fun queuePollTaskWhenPlaying() {
// GIVEN that the track is playing
val state =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt
index d428db7b..0a1db60 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/pipeline/MediaDataManagerTest.kt
@@ -40,6 +40,7 @@
import androidx.media.utils.MediaConstants
import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
+import com.android.internal.statusbar.IStatusBarService
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.InstanceIdSequenceFake
import com.android.systemui.R
@@ -130,6 +131,7 @@
@Mock lateinit var activityStarter: ActivityStarter
@Mock lateinit var smartspaceManager: SmartspaceManager
@Mock lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
+ @Mock lateinit var statusBarService: IStatusBarService
lateinit var smartspaceMediaDataProvider: SmartspaceMediaDataProvider
@Mock lateinit var mediaSmartspaceTarget: SmartspaceTarget
@Mock private lateinit var mediaRecommendationItem: SmartspaceAction
@@ -192,7 +194,8 @@
mediaFlags = mediaFlags,
logger = logger,
smartspaceManager = smartspaceManager,
- keyguardUpdateMonitor = keyguardUpdateMonitor
+ keyguardUpdateMonitor = keyguardUpdateMonitor,
+ statusBarService = statusBarService,
)
verify(tunerService)
.addTunable(capture(tunableCaptor), eq(Settings.Secure.MEDIA_CONTROLS_RECOMMENDATION))
@@ -517,19 +520,136 @@
}
@Test
- fun testOnNotificationRemoved_emptyTitle_notConverted() {
- // GIVEN that the manager has a notification with a resume action and empty title.
+ fun testOnNotificationAdded_emptyTitle_notLoaded() {
+ // GIVEN that the manager has a notification with an empty title.
whenever(controller.metadata)
.thenReturn(
metadataBuilder
.putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_EMPTY_TITLE)
.build()
)
+ mediaDataManager.onNotificationAdded(KEY, mediaNotification)
+
+ assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
+ assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
+ verify(statusBarService)
+ .onNotificationError(
+ eq(PACKAGE_NAME),
+ eq(mediaNotification.tag),
+ eq(mediaNotification.id),
+ eq(mediaNotification.uid),
+ eq(mediaNotification.initialPid),
+ eq(MEDIA_TITLE_ERROR_MESSAGE),
+ eq(mediaNotification.user.identifier)
+ )
+ verify(listener, never())
+ .onMediaDataLoaded(
+ eq(KEY),
+ eq(null),
+ capture(mediaDataCaptor),
+ eq(true),
+ eq(0),
+ eq(false)
+ )
+ verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any())
+ verify(logger, never()).logMediaRemoved(anyInt(), eq(PACKAGE_NAME), any())
+ }
+
+ @Test
+ fun testOnNotificationAdded_blankTitle_notLoaded() {
+ // GIVEN that the manager has a notification with a blank title.
+ whenever(controller.metadata)
+ .thenReturn(
+ metadataBuilder
+ .putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_BLANK_TITLE)
+ .build()
+ )
+ mediaDataManager.onNotificationAdded(KEY, mediaNotification)
+
+ assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
+ assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
+ verify(statusBarService)
+ .onNotificationError(
+ eq(PACKAGE_NAME),
+ eq(mediaNotification.tag),
+ eq(mediaNotification.id),
+ eq(mediaNotification.uid),
+ eq(mediaNotification.initialPid),
+ eq(MEDIA_TITLE_ERROR_MESSAGE),
+ eq(mediaNotification.user.identifier)
+ )
+ verify(listener, never())
+ .onMediaDataLoaded(
+ eq(KEY),
+ eq(null),
+ capture(mediaDataCaptor),
+ eq(true),
+ eq(0),
+ eq(false)
+ )
+ verify(logger, never()).logResumeMediaAdded(anyInt(), eq(PACKAGE_NAME), any())
+ verify(logger, never()).logMediaRemoved(anyInt(), eq(PACKAGE_NAME), any())
+ }
+
+ @Test
+ fun testOnNotificationUpdated_invalidTitle_logMediaRemoved() {
+ addNotificationAndLoad()
+ val data = mediaDataCaptor.value
+
+ verify(listener)
+ .onMediaDataLoaded(
+ eq(KEY),
+ eq(null),
+ capture(mediaDataCaptor),
+ eq(true),
+ eq(0),
+ eq(false)
+ )
+
+ reset(listener)
+ whenever(controller.metadata)
+ .thenReturn(
+ metadataBuilder
+ .putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_BLANK_TITLE)
+ .build()
+ )
+ mediaDataManager.onNotificationAdded(KEY, mediaNotification)
+ assertThat(backgroundExecutor.runAllReady()).isEqualTo(1)
+ assertThat(foregroundExecutor.runAllReady()).isEqualTo(1)
+ verify(statusBarService)
+ .onNotificationError(
+ eq(PACKAGE_NAME),
+ eq(mediaNotification.tag),
+ eq(mediaNotification.id),
+ eq(mediaNotification.uid),
+ eq(mediaNotification.initialPid),
+ eq(MEDIA_TITLE_ERROR_MESSAGE),
+ eq(mediaNotification.user.identifier)
+ )
+ verify(listener, never())
+ .onMediaDataLoaded(
+ eq(KEY),
+ eq(null),
+ capture(mediaDataCaptor),
+ eq(true),
+ eq(0),
+ eq(false)
+ )
+ verify(logger).logMediaRemoved(anyInt(), eq(PACKAGE_NAME), eq(data.instanceId))
+ }
+
+ @Test
+ fun testOnNotificationRemoved_emptyTitle_notConverted() {
+ // GIVEN that the manager has a notification with a resume action and empty title.
addNotificationAndLoad()
val data = mediaDataCaptor.value
val instanceId = data.instanceId
assertThat(data.resumption).isFalse()
- mediaDataManager.onMediaDataLoaded(KEY, null, data.copy(resumeAction = Runnable {}))
+ mediaDataManager.onMediaDataLoaded(
+ KEY,
+ null,
+ data.copy(song = SESSION_EMPTY_TITLE, resumeAction = Runnable {})
+ )
// WHEN the notification is removed
reset(listener)
@@ -554,17 +674,15 @@
@Test
fun testOnNotificationRemoved_blankTitle_notConverted() {
// GIVEN that the manager has a notification with a resume action and blank title.
- whenever(controller.metadata)
- .thenReturn(
- metadataBuilder
- .putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_BLANK_TITLE)
- .build()
- )
addNotificationAndLoad()
val data = mediaDataCaptor.value
val instanceId = data.instanceId
assertThat(data.resumption).isFalse()
- mediaDataManager.onMediaDataLoaded(KEY, null, data.copy(resumeAction = Runnable {}))
+ mediaDataManager.onMediaDataLoaded(
+ KEY,
+ null,
+ data.copy(song = SESSION_BLANK_TITLE, resumeAction = Runnable {})
+ )
// WHEN the notification is removed
reset(listener)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt
index 4565762..c9956f3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaViewControllerTest.kt
@@ -24,6 +24,8 @@
import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.media.controls.models.player.MediaViewHolder
+import com.android.systemui.media.controls.models.recommendation.RecommendationViewHolder
import com.android.systemui.media.controls.util.MediaFlags
import com.android.systemui.util.animation.MeasurementInput
import com.android.systemui.util.animation.TransitionLayout
@@ -55,13 +57,12 @@
@Mock private lateinit var mockCopiedState: TransitionViewState
@Mock private lateinit var detailWidgetState: WidgetState
@Mock private lateinit var controlWidgetState: WidgetState
- @Mock private lateinit var bgWidgetState: WidgetState
@Mock private lateinit var mediaTitleWidgetState: WidgetState
@Mock private lateinit var mediaSubTitleWidgetState: WidgetState
@Mock private lateinit var mediaContainerWidgetState: WidgetState
@Mock private lateinit var mediaFlags: MediaFlags
- val delta = 0.1F
+ private val delta = 0.1F
private lateinit var mediaViewController: MediaViewController
@@ -84,13 +85,13 @@
mediaViewController.attach(player, MediaViewController.TYPE.PLAYER)
// Change the height to see the effect of orientation change.
- MediaViewController.backgroundIds.forEach { id ->
+ MediaViewHolder.backgroundIds.forEach { id ->
mediaViewController.expandedLayout.getConstraint(id).layout.mHeight = 10
}
newConfig.orientation = ORIENTATION_LANDSCAPE
configurationController.onConfigurationChanged(newConfig)
- MediaViewController.backgroundIds.forEach { id ->
+ MediaViewHolder.backgroundIds.forEach { id ->
assertTrue(
mediaViewController.expandedLayout.getConstraint(id).layout.mHeight ==
context.resources.getDimensionPixelSize(
@@ -107,7 +108,7 @@
mediaViewController.attach(recommendation, MediaViewController.TYPE.RECOMMENDATION)
// Change the height to see the effect of orientation change.
mediaViewController.expandedLayout
- .getConstraint(MediaViewController.recSizingViewId)
+ .getConstraint(RecommendationViewHolder.backgroundId)
.layout
.mHeight = 10
newConfig.orientation = ORIENTATION_LANDSCAPE
@@ -115,7 +116,7 @@
assertTrue(
mediaViewController.expandedLayout
- .getConstraint(MediaViewController.recSizingViewId)
+ .getConstraint(RecommendationViewHolder.backgroundId)
.layout
.mHeight ==
context.resources.getDimensionPixelSize(R.dimen.qs_media_session_height_expanded)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
index c3fabfe..21a7a34 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java
@@ -39,7 +39,7 @@
import android.util.FeatureFlagUtils;
import android.view.View;
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.MediumTest;
import com.android.internal.logging.UiEventLogger;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
@@ -65,7 +65,7 @@
import java.util.List;
import java.util.Optional;
-@SmallTest
+@MediumTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class MediaOutputDialogTest extends SysuiTestCase {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
index ed928a3..8a31664 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dream/MediaDreamSentinelTest.java
@@ -30,8 +30,8 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.complication.DreamMediaEntryComplication;
import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.DreamMediaEntryComplication;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.media.controls.models.player.MediaData;
import com.android.systemui.media.controls.pipeline.MediaDataManager;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
index 22a5b21..7dc622b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
@@ -36,6 +36,7 @@
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.content.pm.UserInfo
+import android.graphics.drawable.Icon
import android.os.UserHandle
import android.os.UserManager
import androidx.test.ext.truth.content.IntentSubject.assertThat
@@ -64,7 +65,6 @@
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.doNothing
-import org.mockito.Mockito.isNull
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
@@ -98,7 +98,7 @@
whenever(context.getString(R.string.note_task_button_label))
.thenReturn(NOTE_TASK_SHORT_LABEL)
whenever(context.packageManager).thenReturn(packageManager)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(NOTE_TASK_INFO)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(NOTE_TASK_INFO)
whenever(userManager.isUserUnlocked).thenReturn(true)
whenever(
devicePolicyManager.getKeyguardDisabledFeatures(
@@ -142,7 +142,7 @@
.apply { infoReference.set(expectedInfo) }
.onBubbleExpandChanged(
isExpanding = true,
- key = Bubble.KEY_APP_BUBBLE,
+ key = Bubble.getAppBubbleKeyForApp(expectedInfo.packageName, expectedInfo.user),
)
verify(eventLogger).logNoteTaskOpened(expectedInfo)
@@ -157,7 +157,7 @@
.apply { infoReference.set(expectedInfo) }
.onBubbleExpandChanged(
isExpanding = false,
- key = Bubble.KEY_APP_BUBBLE,
+ key = Bubble.getAppBubbleKeyForApp(expectedInfo.packageName, expectedInfo.user),
)
verify(eventLogger).logNoteTaskClosed(expectedInfo)
@@ -172,7 +172,7 @@
.apply { infoReference.set(expectedInfo) }
.onBubbleExpandChanged(
isExpanding = true,
- key = Bubble.KEY_APP_BUBBLE,
+ key = Bubble.getAppBubbleKeyForApp(expectedInfo.packageName, expectedInfo.user),
)
verifyZeroInteractions(context, bubbles, keyguardManager, userManager, eventLogger)
@@ -186,7 +186,7 @@
.apply { infoReference.set(expectedInfo) }
.onBubbleExpandChanged(
isExpanding = false,
- key = Bubble.KEY_APP_BUBBLE,
+ key = Bubble.getAppBubbleKeyForApp(expectedInfo.packageName, expectedInfo.user),
)
verifyZeroInteractions(context, bubbles, keyguardManager, userManager, eventLogger)
@@ -208,7 +208,7 @@
createNoteTaskController(isEnabled = false)
.onBubbleExpandChanged(
isExpanding = true,
- key = Bubble.KEY_APP_BUBBLE,
+ key = Bubble.getAppBubbleKeyForApp(NOTE_TASK_INFO.packageName, NOTE_TASK_INFO.user),
)
verifyZeroInteractions(context, bubbles, keyguardManager, userManager, eventLogger)
@@ -224,7 +224,7 @@
isKeyguardLocked = true,
)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(expectedInfo)
createNoteTaskController()
.showNoteTask(
@@ -256,9 +256,10 @@
NOTE_TASK_INFO.copy(
entryPoint = NoteTaskEntryPoint.TAIL_BUTTON,
isKeyguardLocked = true,
+ user = user10,
)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(expectedInfo)
createNoteTaskController()
.showNoteTaskAsUser(
@@ -292,7 +293,7 @@
isKeyguardLocked = true,
)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(expectedInfo)
whenever(activityManager.getRunningTasks(anyInt()))
.thenReturn(listOf(NOTE_RUNNING_TASK_INFO))
@@ -318,7 +319,7 @@
entryPoint = NoteTaskEntryPoint.TAIL_BUTTON,
isKeyguardLocked = false,
)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(expectedInfo)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
createNoteTaskController()
@@ -326,7 +327,8 @@
entryPoint = expectedInfo.entryPoint!!,
)
- verifyZeroInteractions(context)
+ // Context package name used to create bubble icon from drawable resource id
+ verify(context).packageName
verifyNoteTaskOpenInBubbleInUser(userTracker.userHandle)
verifyZeroInteractions(eventLogger)
}
@@ -343,7 +345,7 @@
@Test
fun showNoteTask_intentResolverReturnsNull_shouldShowToast() {
- whenever(resolver.resolveInfo(any(), any())).thenReturn(null)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(null)
val noteTaskController = spy(createNoteTaskController())
doNothing().whenever(noteTaskController).showNoDefaultNotesAppToast()
@@ -383,7 +385,7 @@
isKeyguardLocked = true,
)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
- whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
+ whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(expectedInfo)
createNoteTaskController()
.showNoteTask(
@@ -603,14 +605,19 @@
private fun verifyNoteTaskOpenInBubbleInUser(userHandle: UserHandle) {
val intentCaptor = argumentCaptor<Intent>()
+ val iconCaptor = argumentCaptor<Icon>()
verify(bubbles)
- .showOrHideAppBubble(capture(intentCaptor), eq(userHandle), /* icon = */ isNull())
+ .showOrHideAppBubble(capture(intentCaptor), eq(userHandle), capture(iconCaptor))
intentCaptor.value.let { intent ->
assertThat(intent.action).isEqualTo(Intent.ACTION_CREATE_NOTE)
assertThat(intent.`package`).isEqualTo(NOTE_TASK_PACKAGE_NAME)
assertThat(intent.flags).isEqualTo(FLAG_ACTIVITY_NEW_TASK)
assertThat(intent.getBooleanExtra(Intent.EXTRA_USE_STYLUS_MODE, false)).isTrue()
}
+ iconCaptor.value.let { icon ->
+ assertThat(icon).isNotNull()
+ assertThat(icon.resId).isEqualTo(R.drawable.ic_note_task_shortcut_widget)
+ }
}
// region updateNoteTaskAsUser
@@ -711,6 +718,7 @@
NoteTaskInfo(
packageName = NOTE_TASK_PACKAGE_NAME,
uid = NOTE_TASK_UID,
+ user = UserHandle.of(0),
)
private val NOTE_RUNNING_TASK_INFO =
ActivityManager.RunningTaskInfo().apply {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskEventLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskEventLoggerTest.kt
index a4df346..b4f5528 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskEventLoggerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskEventLoggerTest.kt
@@ -15,6 +15,7 @@
*/
package com.android.systemui.notetask
+import android.os.UserHandle
import android.test.suitebuilder.annotation.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.internal.logging.UiEventLogger
@@ -44,7 +45,7 @@
NoteTaskEventLogger(uiEventLogger)
private fun createNoteTaskInfo(): NoteTaskInfo =
- NoteTaskInfo(packageName = NOTES_PACKAGE_NAME, uid = NOTES_UID)
+ NoteTaskInfo(packageName = NOTES_PACKAGE_NAME, uid = NOTES_UID, UserHandle.of(0))
@Before
fun setUp() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoResolverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoResolverTest.kt
index 0c945df..e09c804 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoResolverTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoResolverTest.kt
@@ -22,8 +22,6 @@
import android.test.suitebuilder.annotation.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.systemui.SysuiTestCase
-import com.android.systemui.settings.FakeUserTracker
-import com.android.systemui.settings.UserTracker
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
@@ -46,14 +44,13 @@
@Mock lateinit var packageManager: PackageManager
@Mock lateinit var roleManager: RoleManager
- private val userTracker: UserTracker = FakeUserTracker()
private lateinit var underTest: NoteTaskInfoResolver
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
- underTest = NoteTaskInfoResolver(roleManager, packageManager, userTracker)
+ underTest = NoteTaskInfoResolver(roleManager, packageManager)
}
@Test
@@ -72,11 +69,12 @@
)
.thenReturn(ApplicationInfo().apply { this.uid = uid })
- val actual = underTest.resolveInfo()
+ val actual = underTest.resolveInfo(user = context.user)
requireNotNull(actual) { "Note task info must not be null" }
assertThat(actual.packageName).isEqualTo(packageName)
assertThat(actual.uid).isEqualTo(uid)
+ assertThat(actual.user).isEqualTo(context.user)
}
@Test
@@ -94,11 +92,12 @@
)
.thenThrow(PackageManager.NameNotFoundException(packageName))
- val actual = underTest.resolveInfo()
+ val actual = underTest.resolveInfo(user = context.user)
requireNotNull(actual) { "Note task info must not be null" }
assertThat(actual.packageName).isEqualTo(packageName)
assertThat(actual.uid).isEqualTo(0)
+ assertThat(actual.user).isEqualTo(context.user)
}
@Test
@@ -107,7 +106,7 @@
emptyList<String>()
}
- val actual = underTest.resolveInfo()
+ val actual = underTest.resolveInfo(user = context.user)
assertThat(actual).isNull()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoTest.kt
index 91cd6ae..3435450 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskInfoTest.kt
@@ -15,6 +15,7 @@
*/
package com.android.systemui.notetask
+import android.os.UserHandle
import android.test.suitebuilder.annotation.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.systemui.SysuiTestCase
@@ -28,7 +29,7 @@
internal class NoteTaskInfoTest : SysuiTestCase() {
private fun createNoteTaskInfo(): NoteTaskInfo =
- NoteTaskInfo(packageName = NOTES_PACKAGE_NAME, uid = NOTES_UID)
+ NoteTaskInfo(packageName = NOTES_PACKAGE_NAME, uid = NOTES_UID, UserHandle.of(0))
@Test
fun launchMode_keyguardLocked_launchModeActivity() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
index 249a91b..bb3b3f7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
@@ -66,7 +66,7 @@
}
@Test
- fun `isInteractive - registers for broadcasts`() =
+ fun isInteractive_registersForBroadcasts() =
runBlocking(IMMEDIATE) {
val job = underTest.isInteractive.onEach {}.launchIn(this)
@@ -78,7 +78,7 @@
}
@Test
- fun `isInteractive - unregisters from broadcasts`() =
+ fun isInteractive_unregistersFromBroadcasts() =
runBlocking(IMMEDIATE) {
val job = underTest.isInteractive.onEach {}.launchIn(this)
verifyRegistered()
@@ -89,7 +89,7 @@
}
@Test
- fun `isInteractive - emits initial true value if screen was on`() =
+ fun isInteractive_emitsInitialTrueValueIfScreenWasOn() =
runBlocking(IMMEDIATE) {
isInteractive = true
var value: Boolean? = null
@@ -102,7 +102,7 @@
}
@Test
- fun `isInteractive - emits initial false value if screen was off`() =
+ fun isInteractive_emitsInitialFalseValueIfScreenWasOff() =
runBlocking(IMMEDIATE) {
isInteractive = false
var value: Boolean? = null
@@ -115,7 +115,7 @@
}
@Test
- fun `isInteractive - emits true when the screen turns on`() =
+ fun isInteractive_emitsTrueWhenTheScreenTurnsOn() =
runBlocking(IMMEDIATE) {
var value: Boolean? = null
val job = underTest.isInteractive.onEach { value = it }.launchIn(this)
@@ -129,7 +129,7 @@
}
@Test
- fun `isInteractive - emits false when the screen turns off`() =
+ fun isInteractive_emitsFalseWhenTheScreenTurnsOff() =
runBlocking(IMMEDIATE) {
var value: Boolean? = null
val job = underTest.isInteractive.onEach { value = it }.launchIn(this)
@@ -143,7 +143,7 @@
}
@Test
- fun `isInteractive - emits correctly over time`() =
+ fun isInteractive_emitsCorrectlyOverTime() =
runBlocking(IMMEDIATE) {
val values = mutableListOf<Boolean>()
val job = underTest.isInteractive.onEach(values::add).launchIn(this)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt
index bf6a37e..31d4512 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/domain/interactor/PowerInteractorTest.kt
@@ -47,7 +47,7 @@
}
@Test
- fun `isInteractive - screen turns off`() =
+ fun isInteractive_screenTurnsOff() =
runBlocking(IMMEDIATE) {
repository.setInteractive(true)
var value: Boolean? = null
@@ -60,7 +60,7 @@
}
@Test
- fun `isInteractive - becomes interactive`() =
+ fun isInteractive_becomesInteractive() =
runBlocking(IMMEDIATE) {
repository.setInteractive(false)
var value: Boolean? = null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/AutoAddSettingsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/AutoAddSettingsRepositoryTest.kt
new file mode 100644
index 0000000..77b3e69f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/pipeline/data/repository/AutoAddSettingsRepositoryTest.kt
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.pipeline.data.repository
+
+import android.provider.Settings
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.qs.pipeline.shared.TileSpec
+import com.android.systemui.util.settings.FakeSettings
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class AutoAddSettingsRepositoryTest : SysuiTestCase() {
+ private val secureSettings = FakeSettings()
+
+ private val testDispatcher = StandardTestDispatcher()
+ private val testScope = TestScope(testDispatcher)
+
+ private lateinit var underTest: AutoAddSettingRepository
+
+ @Before
+ fun setUp() {
+ underTest =
+ AutoAddSettingRepository(
+ secureSettings,
+ testDispatcher,
+ )
+ }
+
+ @Test
+ fun nonExistentSetting_emptySet() =
+ testScope.runTest {
+ val specs by collectLastValue(underTest.autoAddedTiles(0))
+
+ assertThat(specs).isEmpty()
+ }
+
+ @Test
+ fun settingsChange_correctValues() =
+ testScope.runTest {
+ val userId = 0
+ val specs by collectLastValue(underTest.autoAddedTiles(userId))
+
+ val value = "a,custom(b/c)"
+ storeForUser(value, userId)
+
+ assertThat(specs).isEqualTo(value.toSet())
+
+ val newValue = "a"
+ storeForUser(newValue, userId)
+
+ assertThat(specs).isEqualTo(newValue.toSet())
+ }
+
+ @Test
+ fun tilesForCorrectUsers() =
+ testScope.runTest {
+ val tilesFromUser0 by collectLastValue(underTest.autoAddedTiles(0))
+ val tilesFromUser1 by collectLastValue(underTest.autoAddedTiles(1))
+
+ val user0Tiles = "a"
+ val user1Tiles = "custom(b/c)"
+ storeForUser(user0Tiles, 0)
+ storeForUser(user1Tiles, 1)
+
+ assertThat(tilesFromUser0).isEqualTo(user0Tiles.toSet())
+ assertThat(tilesFromUser1).isEqualTo(user1Tiles.toSet())
+ }
+
+ @Test
+ fun noInvalidTileSpecs() =
+ testScope.runTest {
+ val userId = 0
+ val tiles by collectLastValue(underTest.autoAddedTiles(userId))
+
+ val specs = "d,custom(bad)"
+ storeForUser(specs, userId)
+
+ assertThat(tiles).isEqualTo("d".toSet())
+ }
+
+ @Test
+ fun markAdded() =
+ testScope.runTest {
+ val userId = 0
+ val specs = mutableSetOf(TileSpec.create("a"))
+ underTest.markTileAdded(userId, TileSpec.create("a"))
+
+ assertThat(loadForUser(userId).toSet()).containsExactlyElementsIn(specs)
+
+ specs.add(TileSpec.create("b"))
+ underTest.markTileAdded(userId, TileSpec.create("b"))
+
+ assertThat(loadForUser(userId).toSet()).containsExactlyElementsIn(specs)
+ }
+
+ @Test
+ fun markAdded_multipleUsers() =
+ testScope.runTest {
+ underTest.markTileAdded(userId = 1, TileSpec.create("a"))
+
+ assertThat(loadForUser(0).toSet()).isEmpty()
+ assertThat(loadForUser(1).toSet())
+ .containsExactlyElementsIn(setOf(TileSpec.create("a")))
+ }
+
+ @Test
+ fun markAdded_Invalid_noop() =
+ testScope.runTest {
+ val userId = 0
+ underTest.markTileAdded(userId, TileSpec.Invalid)
+
+ assertThat(loadForUser(userId).toSet()).isEmpty()
+ }
+
+ @Test
+ fun unmarkAdded() =
+ testScope.runTest {
+ val userId = 0
+ val specs = "a,custom(b/c)"
+ storeForUser(specs, userId)
+
+ underTest.unmarkTileAdded(userId, TileSpec.create("a"))
+
+ assertThat(loadForUser(userId).toSet())
+ .containsExactlyElementsIn(setOf(TileSpec.create("custom(b/c)")))
+ }
+
+ @Test
+ fun unmarkAdded_multipleUsers() =
+ testScope.runTest {
+ val specs = "a,b"
+ storeForUser(specs, 0)
+ storeForUser(specs, 1)
+
+ underTest.unmarkTileAdded(1, TileSpec.create("a"))
+
+ assertThat(loadForUser(0).toSet()).isEqualTo(specs.toSet())
+ assertThat(loadForUser(1).toSet()).isEqualTo(setOf(TileSpec.create("b")))
+ }
+
+ private fun storeForUser(specs: String, userId: Int) {
+ secureSettings.putStringForUser(SETTING, specs, userId)
+ }
+
+ private fun loadForUser(userId: Int): String {
+ return secureSettings.getStringForUser(SETTING, userId) ?: ""
+ }
+
+ companion object {
+ private const val SETTING = Settings.Secure.QS_AUTO_ADDED_TILES
+ private const val DELIMITER = ","
+
+ fun Set<TileSpec>.toSeparatedString() = joinToString(DELIMITER, transform = TileSpec::spec)
+
+ fun String.toSet(): Set<TileSpec> {
+ return if (isNullOrBlank()) {
+ emptySet()
+ } else {
+ split(DELIMITER).map(TileSpec::create).toSet()
+ }
+ }
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt
index 8cb5d31..355c4b6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/recents/OverviewProxyServiceTest.kt
@@ -153,7 +153,7 @@
}
@Test
- fun `WakefulnessLifecycle - dispatchFinishedWakingUp sets SysUI flag to AWAKE`() {
+ fun wakefulnessLifecycle_dispatchFinishedWakingUpSetsSysUIflagToAWAKE() {
// WakefulnessLifecycle is initialized to AWAKE initially, and won't emit a noop.
wakefulnessLifecycle.dispatchFinishedGoingToSleep()
clearInvocations(overviewProxy)
@@ -167,7 +167,7 @@
}
@Test
- fun `WakefulnessLifecycle - dispatchStartedWakingUp sets SysUI flag to WAKING`() {
+ fun wakefulnessLifecycle_dispatchStartedWakingUpSetsSysUIflagToWAKING() {
wakefulnessLifecycle.dispatchStartedWakingUp(PowerManager.WAKE_REASON_UNKNOWN)
verify(overviewProxy)
@@ -177,7 +177,7 @@
}
@Test
- fun `WakefulnessLifecycle - dispatchFinishedGoingToSleep sets SysUI flag to ASLEEP`() {
+ fun wakefulnessLifecycle_dispatchFinishedGoingToSleepSetsSysUIflagToASLEEP() {
wakefulnessLifecycle.dispatchFinishedGoingToSleep()
verify(overviewProxy)
@@ -187,7 +187,7 @@
}
@Test
- fun `WakefulnessLifecycle - dispatchStartedGoingToSleep sets SysUI flag to GOING_TO_SLEEP`() {
+ fun wakefulnessLifecycle_dispatchStartedGoingToSleepSetsSysUIflagToGOING_TO_SLEEP() {
wakefulnessLifecycle.dispatchStartedGoingToSleep(
PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplReceiveTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplReceiveTest.kt
index 57b6b2b..beb981d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplReceiveTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/settings/UserTrackerImplReceiveTest.kt
@@ -73,7 +73,7 @@
}
@Test
- fun `calls callback and updates profiles when an intent received`() {
+ fun callsCallbackAndUpdatesProfilesWhenAnIntentReceived() {
tracker.initialize(0)
tracker.addCallback(callback, executor)
val profileID = tracker.userId + 10
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt
index 76aa08a..d7c06a7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt
@@ -17,11 +17,11 @@
package com.android.systemui.shade
import android.hardware.display.AmbientDisplayConfiguration
+import android.os.PowerManager
import android.provider.Settings.Secure.DOZE_DOUBLE_TAP_GESTURE
import android.provider.Settings.Secure.DOZE_TAP_SCREEN_GESTURE
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
-import android.os.PowerManager
import android.view.MotionEvent
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
@@ -38,15 +38,14 @@
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyLong
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when` as whenever
import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
@RunWith(AndroidTestingRunner::class)
@RunWithLooper(setAsMainLooper = true)
@@ -112,7 +111,7 @@
// THEN wake up device if dozing
verify(centralSurfaces).wakeUpIfDozing(
- anyLong(), any(), anyString(), eq(PowerManager.WAKE_REASON_TAP))
+ anyLong(), anyString(), eq(PowerManager.WAKE_REASON_TAP))
}
@Test
@@ -132,7 +131,7 @@
// THEN wake up device if dozing
verify(centralSurfaces).wakeUpIfDozing(
- anyLong(), any(), anyString(), eq(PowerManager.WAKE_REASON_TAP))
+ anyLong(), anyString(), eq(PowerManager.WAKE_REASON_TAP))
}
@Test
@@ -164,7 +163,7 @@
// THEN the device doesn't wake up
verify(centralSurfaces, never()).wakeUpIfDozing(
- anyLong(), any(), anyString(), anyInt())
+ anyLong(), anyString(), anyInt())
}
@Test
@@ -212,7 +211,7 @@
// THEN the device doesn't wake up
verify(centralSurfaces, never()).wakeUpIfDozing(
- anyLong(), any(), anyString(), anyInt())
+ anyLong(), anyString(), anyInt())
}
@Test
@@ -232,7 +231,7 @@
// THEN the device doesn't wake up
verify(centralSurfaces, never()).wakeUpIfDozing(
- anyLong(), any(), anyString(), anyInt())
+ anyLong(), anyString(), anyInt())
}
@Test
@@ -252,7 +251,7 @@
// THEN the device doesn't wake up
verify(centralSurfaces, never()).wakeUpIfDozing(
- anyLong(), any(), anyString(), anyInt())
+ anyLong(), anyString(), anyInt())
}
fun updateSettings() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt
index b547318..d421aca 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QsBatteryModeControllerTest.kt
@@ -54,7 +54,7 @@
}
@Test
- fun `returns MODE_ON for qqs with center cutout`() {
+ fun returnsMODE_ONforQqsWithCenterCutout() {
assertThat(
controller.getBatteryMode(CENTER_TOP_CUTOUT, QQS_START_FRAME.prevFrameToFraction())
)
@@ -62,13 +62,13 @@
}
@Test
- fun `returns MODE_ESTIMATE for qs with center cutout`() {
+ fun returnsMODE_ESTIMATEforQsWithCenterCutout() {
assertThat(controller.getBatteryMode(CENTER_TOP_CUTOUT, QS_END_FRAME.nextFrameToFraction()))
.isEqualTo(BatteryMeterView.MODE_ESTIMATE)
}
@Test
- fun `returns MODE_ON for qqs with corner cutout`() {
+ fun returnsMODE_ONforQqsWithCornerCutout() {
whenever(insetsProvider.currentRotationHasCornerCutout()).thenReturn(true)
assertThat(
@@ -78,7 +78,7 @@
}
@Test
- fun `returns MODE_ESTIMATE for qs with corner cutout`() {
+ fun returnsMODE_ESTIMATEforQsWithCornerCutout() {
whenever(insetsProvider.currentRotationHasCornerCutout()).thenReturn(true)
assertThat(controller.getBatteryMode(CENTER_TOP_CUTOUT, QS_END_FRAME.nextFrameToFraction()))
@@ -86,7 +86,7 @@
}
@Test
- fun `returns null in-between`() {
+ fun returnsNullInBetween() {
assertThat(
controller.getBatteryMode(CENTER_TOP_CUTOUT, QQS_START_FRAME.nextFrameToFraction())
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
index 76f7401..9fe75ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ShadeHeaderControllerTest.kt
@@ -366,7 +366,7 @@
}
@Test
- fun `battery mode controller called when qsExpandedFraction changes`() {
+ fun batteryModeControllerCalledWhenQsExpandedFractionChanges() {
whenever(qsBatteryModeController.getBatteryMode(Mockito.same(null), eq(0f)))
.thenReturn(BatteryMeterView.MODE_ON)
whenever(qsBatteryModeController.getBatteryMode(Mockito.same(null), eq(1f)))
@@ -825,7 +825,7 @@
}
@Test
- fun `carrier left padding is set when clock layout changes`() {
+ fun carrierLeftPaddingIsSetWhenClockLayoutChanges() {
val width = 200
whenever(clock.width).thenReturn(width)
whenever(clock.scaleX).thenReturn(2.57f) // 2.57 comes from qs_header.xml
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
index 7fa27f3..3f3faf7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
@@ -201,7 +201,7 @@
@Test
fun test_aodClock_always_whiteColor() {
val clock = provider.createClock(DEFAULT_CLOCK_ID)
- clock.animations.doze(0.9f) // set AOD mode to active
+ clock.smallClock.animations.doze(0.9f) // set AOD mode to active
clock.smallClock.events.onRegionDarknessChanged(true)
verify((clock.smallClock.view as AnimatableClockView), never()).animateAppearOnLockscreen()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/condition/ConditionExtensionsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/condition/ConditionExtensionsTest.kt
new file mode 100644
index 0000000..2b4a7fb
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/condition/ConditionExtensionsTest.kt
@@ -0,0 +1,135 @@
+package com.android.systemui.shared.condition
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.emptyFlow
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class ConditionExtensionsTest : SysuiTestCase() {
+ private lateinit var testScope: TestScope
+
+ @Before
+ fun setUp() {
+ testScope = TestScope(StandardTestDispatcher())
+ }
+
+ @Test
+ fun flowInitiallyTrue() =
+ testScope.runTest {
+ val flow = flowOf(true)
+ val condition = flow.toCondition(this)
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isFalse()
+
+ condition.start()
+ runCurrent()
+ assertThat(condition.isConditionSet).isTrue()
+ assertThat(condition.isConditionMet).isTrue()
+ }
+
+ @Test
+ fun flowInitiallyFalse() =
+ testScope.runTest {
+ val flow = flowOf(false)
+ val condition = flow.toCondition(this)
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isFalse()
+
+ condition.start()
+ runCurrent()
+ assertThat(condition.isConditionSet).isTrue()
+ assertThat(condition.isConditionMet).isFalse()
+ }
+
+ @Test
+ fun emptyFlowWithNoInitialValue() =
+ testScope.runTest {
+ val flow = emptyFlow<Boolean>()
+ val condition = flow.toCondition(this)
+ condition.start()
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isFalse()
+ assertThat(condition.isConditionMet).isFalse()
+ }
+
+ @Test
+ fun emptyFlowWithInitialValueOfTrue() =
+ testScope.runTest {
+ val flow = emptyFlow<Boolean>()
+ val condition = flow.toCondition(scope = this, initialValue = true)
+ condition.start()
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isTrue()
+ assertThat(condition.isConditionMet).isTrue()
+ }
+
+ @Test
+ fun emptyFlowWithInitialValueOfFalse() =
+ testScope.runTest {
+ val flow = emptyFlow<Boolean>()
+ val condition = flow.toCondition(scope = this, initialValue = false)
+ condition.start()
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isTrue()
+ assertThat(condition.isConditionMet).isFalse()
+ }
+
+ @Test
+ fun conditionUpdatesWhenFlowEmitsNewValue() =
+ testScope.runTest {
+ val flow = MutableStateFlow(false)
+ val condition = flow.toCondition(this)
+ condition.start()
+
+ runCurrent()
+ assertThat(condition.isConditionSet).isTrue()
+ assertThat(condition.isConditionMet).isFalse()
+
+ flow.value = true
+ runCurrent()
+ assertThat(condition.isConditionMet).isTrue()
+
+ flow.value = false
+ runCurrent()
+ assertThat(condition.isConditionMet).isFalse()
+
+ condition.stop()
+ }
+
+ @Test
+ fun stoppingConditionUnsubscribesFromFlow() =
+ testScope.runTest {
+ val flow = MutableSharedFlow<Boolean>()
+ val condition = flow.toCondition(this)
+ runCurrent()
+ assertThat(flow.subscriptionCount.value).isEqualTo(0)
+
+ condition.start()
+ runCurrent()
+ assertThat(flow.subscriptionCount.value).isEqualTo(1)
+
+ condition.stop()
+ runCurrent()
+ assertThat(flow.subscriptionCount.value).isEqualTo(0)
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
index 932a1f9..d017ffd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -13,7 +13,7 @@
import com.android.systemui.media.controls.ui.MediaHierarchyManager
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.QS
-import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.NotificationTestHelper
import com.android.systemui.statusbar.notification.stack.AmbientState
@@ -44,8 +44,8 @@
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.Mockito.`when` as whenever
import org.mockito.junit.MockitoJUnit
+import org.mockito.Mockito.`when` as whenever
private fun <T> anyObject(): T {
return Mockito.anyObject<T>()
@@ -69,7 +69,7 @@
@Mock lateinit var mediaHierarchyManager: MediaHierarchyManager
@Mock lateinit var scrimController: ScrimController
@Mock lateinit var falsingManager: FalsingManager
- @Mock lateinit var notificationPanelController: NotificationPanelViewController
+ @Mock lateinit var shadeViewController: ShadeViewController
@Mock lateinit var nsslController: NotificationStackScrollLayoutController
@Mock lateinit var depthController: NotificationShadeDepthController
@Mock lateinit var stackscroller: NotificationStackScrollLayout
@@ -128,7 +128,7 @@
transitionController.addCallback(transitionControllerCallback)
whenever(nsslController.view).thenReturn(stackscroller)
whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback)
- transitionController.notificationPanelController = notificationPanelController
+ transitionController.shadeViewController = shadeViewController
transitionController.centralSurfaces = mCentralSurfaces
transitionController.qS = qS
transitionController.setStackScroller(nsslController)
@@ -223,7 +223,7 @@
fun testGoToLockedShadeCreatesQSAnimation() {
transitionController.goToLockedShade(null)
verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
- verify(notificationPanelController).transitionToExpandedShade(anyLong())
+ verify(shadeViewController).transitionToExpandedShade(anyLong())
assertNotNull(transitionController.dragDownAnimator)
}
@@ -231,7 +231,7 @@
fun testGoToLockedShadeDoesntCreateQSAnimation() {
transitionController.goToLockedShade(null, needsQSAnimation = false)
verify(statusbarStateController).setState(StatusBarState.SHADE_LOCKED)
- verify(notificationPanelController).transitionToExpandedShade(anyLong())
+ verify(shadeViewController).transitionToExpandedShade(anyLong())
assertNull(transitionController.dragDownAnimator)
}
@@ -239,7 +239,7 @@
fun testGoToLockedShadeAlwaysCreatesQSAnimationInSplitShade() {
enableSplitShade()
transitionController.goToLockedShade(null, needsQSAnimation = true)
- verify(notificationPanelController).transitionToExpandedShade(anyLong())
+ verify(shadeViewController).transitionToExpandedShade(anyLong())
assertNotNull(transitionController.dragDownAnimator)
}
@@ -293,7 +293,7 @@
fun setDragAmount_setsKeyguardTransitionProgress() {
transitionController.dragDownAmount = 10f
- verify(notificationPanelController).setKeyguardTransitionProgress(anyFloat(), anyInt())
+ verify(shadeViewController).setKeyguardTransitionProgress(anyFloat(), anyInt())
}
@Test
@@ -303,7 +303,7 @@
transitionController.dragDownAmount = 10f
val expectedAlpha = 1 - 10f / alphaDistance
- verify(notificationPanelController)
+ verify(shadeViewController)
.setKeyguardTransitionProgress(eq(expectedAlpha), anyInt())
}
@@ -317,7 +317,7 @@
transitionController.dragDownAmount = 10f
- verify(notificationPanelController).setKeyguardTransitionProgress(anyFloat(), eq(0))
+ verify(shadeViewController).setKeyguardTransitionProgress(anyFloat(), eq(0))
}
@Test
@@ -330,7 +330,7 @@
transitionController.dragDownAmount = 10f
- verify(notificationPanelController)
+ verify(shadeViewController)
.setKeyguardTransitionProgress(anyFloat(), eq(mediaTranslationY))
}
@@ -349,7 +349,7 @@
context.resources.getDimensionPixelSize(
R.dimen.lockscreen_shade_keyguard_transition_vertical_offset)
val expectedTranslation = 10f / distance * offset
- verify(notificationPanelController)
+ verify(shadeViewController)
.setKeyguardTransitionProgress(anyFloat(), eq(expectedTranslation.toInt()))
}
@@ -468,7 +468,7 @@
transitionController.dragDownAmount = dragDownAmount
val expectedAlpha = 1 - dragDownAmount / alphaDistance
- verify(notificationPanelController).setKeyguardStatusBarAlpha(expectedAlpha)
+ verify(shadeViewController).setKeyguardStatusBarAlpha(expectedAlpha)
}
@Test
@@ -477,7 +477,7 @@
transitionController.dragDownAmount = 10f
- verify(notificationPanelController).setKeyguardStatusBarAlpha(-1f)
+ verify(shadeViewController).setKeyguardStatusBarAlpha(-1f)
}
private fun enableSplitShade() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt
new file mode 100644
index 0000000..9d6ea85
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationMediaManagerTest.kt
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.whenever
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.anyBoolean
+import org.mockito.Mockito.doCallRealMethod
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+/**
+ * Temporary test for the lock screen live wallpaper project.
+ *
+ * TODO(b/273443374): remove this test
+ */
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class NotificationMediaManagerTest : SysuiTestCase() {
+
+ @Mock private lateinit var notificationMediaManager: NotificationMediaManager
+
+ @Mock private lateinit var mockBackDropView: BackDropView
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ doCallRealMethod()
+ .whenever(notificationMediaManager)
+ .updateMediaMetaData(anyBoolean(), anyBoolean())
+ doReturn(mockBackDropView).whenever(notificationMediaManager).backDropView
+ }
+
+ @After fun tearDown() {}
+
+ /** Check that updateMediaMetaData is a no-op with mIsLockscreenLiveWallpaperEnabled = true */
+ @Test
+ fun testUpdateMediaMetaDataDisabled() {
+ notificationMediaManager.mIsLockscreenLiveWallpaperEnabled = true
+ for (metaDataChanged in listOf(true, false)) {
+ for (allowEnterAnimation in listOf(true, false)) {
+ notificationMediaManager.updateMediaMetaData(metaDataChanged, allowEnterAnimation)
+ verify(notificationMediaManager, never()).mediaMetadata
+ }
+ }
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinatorTest.kt
index aff705f..da3a9f6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinatorTest.kt
@@ -23,7 +23,7 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.shade.NotificationPanelViewController.WAKEUP_ANIMATION_DELAY_MS
+import com.android.systemui.shade.ShadeViewController.Companion.WAKEUP_ANIMATION_DELAY_MS
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_WAKEUP
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
index ba91d87..67128ff 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt
@@ -22,7 +22,6 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.logcatLogBuffer
-import com.android.systemui.flags.Flags
import com.android.systemui.statusbar.NotificationRemoteInputManager
import com.android.systemui.statusbar.notification.NotifPipelineFlags
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
@@ -171,9 +170,6 @@
// Set the default FSI decision
setShouldFullScreen(any(), FullScreenIntentDecision.NO_FULL_SCREEN_INTENT)
-
- // Run tests with default feature flag state
- whenever(flags.fsiOnDNDUpdate()).thenReturn(Flags.FSI_ON_DND_UPDATE.default)
}
@Test
@@ -258,7 +254,7 @@
@Test
fun testOnEntryAdded_shouldFullScreen() {
- setShouldFullScreen(entry, FullScreenIntentDecision.FSI_EXPECTED_NOT_TO_HUN)
+ setShouldFullScreen(entry, FullScreenIntentDecision.FSI_KEYGUARD_SHOWING)
collectionListener.onEntryAdded(entry)
verify(launchFullScreenIntentProvider).launchFullScreenIntent(entry)
}
@@ -854,38 +850,7 @@
}
@Test
- fun testOnRankingApplied_noFSIOnUpdateWhenFlagOff() {
- // Ensure the feature flag is off
- whenever(flags.fsiOnDNDUpdate()).thenReturn(false)
-
- // GIVEN that mEntry was previously suppressed from full-screen only by DND
- setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND)
- collectionListener.onEntryAdded(entry)
-
- // Verify that this causes a log
- verifyLoggedFullScreenIntentDecision(
- entry,
- FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND
- )
- clearInterruptionProviderInvocations()
-
- // and it is then updated to allow full screen
- setShouldFullScreen(entry, FullScreenIntentDecision.FSI_DEVICE_NOT_INTERACTIVE)
- whenever(notifPipeline.allNotifs).thenReturn(listOf(entry))
- collectionListener.onRankingApplied()
-
- // THEN it should not full screen because the feature is off
- verify(launchFullScreenIntentProvider, never()).launchFullScreenIntent(any())
-
- // VERIFY that no additional logging happens either
- verifyNoFullScreenIntentDecisionLogged()
- }
-
- @Test
fun testOnRankingApplied_updateToFullScreen() {
- // Turn on the feature
- whenever(flags.fsiOnDNDUpdate()).thenReturn(true)
-
// GIVEN that mEntry was previously suppressed from full-screen only by DND
setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND)
collectionListener.onEntryAdded(entry)
@@ -929,9 +894,6 @@
@Test
fun testOnRankingApplied_withOnlyDndSuppressionAllowsFsiLater() {
- // Turn on the feature
- whenever(flags.fsiOnDNDUpdate()).thenReturn(true)
-
// GIVEN that mEntry was previously suppressed from full-screen only by DND
setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND)
collectionListener.onEntryAdded(entry)
@@ -980,9 +942,6 @@
@Test
fun testOnRankingApplied_newNonFullScreenAnswerInvalidatesCandidate() {
- // Turn on the feature
- whenever(flags.fsiOnDNDUpdate()).thenReturn(true)
-
// GIVEN that mEntry was previously suppressed from full-screen only by DND
whenever(notifPipeline.allNotifs).thenReturn(listOf(entry))
setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND)
@@ -1018,9 +977,6 @@
@Test
fun testOnRankingApplied_noFSIWhenAlsoSuppressedForOtherReasons() {
- // Feature on
- whenever(flags.fsiOnDNDUpdate()).thenReturn(true)
-
// GIVEN that mEntry is suppressed by DND (functionally), but not *only* DND
setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_BY_DND)
collectionListener.onEntryAdded(entry)
@@ -1035,9 +991,6 @@
@Test
fun testOnRankingApplied_noFSIWhenTooOld() {
- // Feature on
- whenever(flags.fsiOnDNDUpdate()).thenReturn(true)
-
// GIVEN that mEntry is suppressed only by DND
setShouldFullScreen(entry, FullScreenIntentDecision.NO_FSI_SUPPRESSED_ONLY_BY_DND)
collectionListener.onEntryAdded(entry)
@@ -1046,7 +999,7 @@
coordinator.addForFSIReconsideration(entry, systemClock.currentTimeMillis() - 10000)
// and it is updated to full screen later
- setShouldFullScreen(entry, FullScreenIntentDecision.FSI_EXPECTED_NOT_TO_HUN)
+ setShouldFullScreen(entry, FullScreenIntentDecision.FSI_KEYGUARD_SHOWING)
collectionListener.onRankingApplied()
// THEN it should still not full screen because it's too old
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
index c2a2a40..c3f5123 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
@@ -24,6 +24,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.advanceTimeBy
+import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -97,8 +98,6 @@
@Test
fun unseenFilterSuppressesSeenNotifWhileKeyguardShowing() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is expanded, and a notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
@@ -124,8 +123,6 @@
@Test
fun unseenFilterStopsMarkingSeenNotifWhenTransitionToAod() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is not expanded, and a notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(false)
@@ -151,8 +148,6 @@
@Test
fun unseenFilter_headsUpMarkedAsSeen() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is not expanded
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(false)
@@ -183,14 +178,12 @@
@Test
fun unseenFilterDoesNotSuppressSeenOngoingNotifWhileKeyguardShowing() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is expanded, and an ongoing notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
runKeyguardCoordinatorTest {
val fakeEntry = NotificationEntryBuilder()
- .setNotification(Notification.Builder(mContext).setOngoing(true).build())
+ .setNotification(Notification.Builder(mContext, "id").setOngoing(true).build())
.build()
collectionListener.onEntryAdded(fakeEntry)
@@ -205,8 +198,6 @@
@Test
fun unseenFilterDoesNotSuppressSeenMediaNotifWhileKeyguardShowing() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is expanded, and a media notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
@@ -229,8 +220,6 @@
@Test
fun unseenFilterUpdatesSeenProviderWhenSuppressing() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is expanded, and a notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
@@ -255,8 +244,6 @@
@Test
fun unseenFilterInvalidatesWhenSettingChanges() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, and shade is expanded
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
@@ -292,8 +279,6 @@
@Test
fun unseenFilterAllowsNewNotif() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is showing, no notifications present
keyguardRepository.setKeyguardShowing(true)
runKeyguardCoordinatorTest {
@@ -308,8 +293,6 @@
@Test
fun unseenFilterSeenGroupSummaryWithUnseenChild() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is not showing, shade is expanded, and a notification is present
keyguardRepository.setKeyguardShowing(false)
whenever(statusBarStateController.isExpanded).thenReturn(true)
@@ -342,8 +325,6 @@
@Test
fun unseenNotificationIsMarkedAsSeenWhenKeyguardGoesAway() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is showing, not dozing, unseen notification is present
keyguardRepository.setKeyguardShowing(true)
keyguardRepository.setDozing(false)
@@ -370,8 +351,6 @@
@Test
fun unseenNotificationIsNotMarkedAsSeenIfShadeNotExpanded() {
- whenever(notifPipelineFlags.shouldFilterUnseenNotifsOnKeyguard).thenReturn(true)
-
// GIVEN: Keyguard is showing, unseen notification is present
keyguardRepository.setKeyguardShowing(true)
runKeyguardCoordinatorTest {
@@ -402,10 +381,12 @@
val keyguardCoordinator =
KeyguardCoordinator(
testDispatcher,
+ mock<DumpManager>(),
headsUpManager,
keyguardNotifVisibilityProvider,
keyguardRepository,
keyguardTransitionRepository,
+ mock<KeyguardCoordinatorLogger>(),
notifPipelineFlags,
testScope.backgroundScope,
sectionHeaderVisibilityProvider,
@@ -441,20 +422,15 @@
val unseenFilter: NotifFilter
get() = keyguardCoordinator.unseenNotifFilter
- // TODO(254647461): Remove lazy from these properties once
- // Flags.FILTER_UNSEEN_NOTIFS_ON_KEYGUARD is enabled and removed
-
- val collectionListener: NotifCollectionListener by lazy {
- withArgCaptor { verify(notifPipeline).addCollectionListener(capture()) }
+ val collectionListener: NotifCollectionListener = withArgCaptor {
+ verify(notifPipeline).addCollectionListener(capture())
}
- val onHeadsUpChangedListener: OnHeadsUpChangedListener by lazy {
+ val onHeadsUpChangedListener: OnHeadsUpChangedListener get() =
withArgCaptor { verify(headsUpManager).addListener(capture()) }
- }
- val statusBarStateListener: StatusBarStateController.StateListener by lazy {
+ val statusBarStateListener: StatusBarStateController.StateListener get() =
withArgCaptor { verify(statusBarStateController).addCallback(capture()) }
- }
var showOnlyUnseenNotifsOnKeyguardSetting: Boolean
get() =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java
index ae6ced4..d3e5816 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java
@@ -123,7 +123,6 @@
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false);
when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser());
mUiEventLoggerFake = new UiEventLoggerFake();
@@ -544,12 +543,6 @@
}
@Test
- public void testShouldNotFullScreen_notPendingIntent_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldNotFullScreen_notPendingIntent();
- }
-
- @Test
public void testShouldNotFullScreen_notPendingIntent() throws RemoteException {
NotificationEntry entry = createNotification(IMPORTANCE_HIGH);
when(mPowerManager.isInteractive()).thenReturn(true);
@@ -604,12 +597,6 @@
}
@Test
- public void testShouldNotFullScreen_notHighImportance_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldNotFullScreen_notHighImportance();
- }
-
- @Test
public void testShouldNotFullScreen_notHighImportance() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_DEFAULT, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
@@ -626,12 +613,6 @@
}
@Test
- public void testShouldNotFullScreen_isGroupAlertSilenced_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldNotFullScreen_isGroupAlertSilenced();
- }
-
- @Test
public void testShouldNotFullScreen_isGroupAlertSilenced() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ true);
when(mPowerManager.isInteractive()).thenReturn(false);
@@ -656,12 +637,6 @@
}
@Test
- public void testShouldNotFullScreen_isSuppressedByBubbleMetadata_withStrictFlag() {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldNotFullScreen_isSuppressedByBubbleMetadata();
- }
-
- @Test
public void testShouldNotFullScreen_isSuppressedByBubbleMetadata() {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
Notification.BubbleMetadata bubbleMetadata = new Notification.BubbleMetadata.Builder("foo")
@@ -689,12 +664,6 @@
}
@Test
- public void testShouldFullScreen_notInteractive_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldFullScreen_notInteractive();
- }
-
- @Test
public void testShouldFullScreen_notInteractive() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
Notification.BubbleMetadata bubbleMetadata = new Notification.BubbleMetadata.Builder("foo")
@@ -714,12 +683,6 @@
}
@Test
- public void testShouldFullScreen_isDreaming_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldFullScreen_isDreaming();
- }
-
- @Test
public void testShouldFullScreen_isDreaming() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
@@ -736,12 +699,6 @@
}
@Test
- public void testShouldFullScreen_onKeyguard_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldFullScreen_onKeyguard();
- }
-
- @Test
public void testShouldFullScreen_onKeyguard() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
@@ -758,12 +715,6 @@
}
@Test
- public void testShouldNotFullScreen_willHun_withStrictFlag() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
- testShouldNotFullScreen_willHun();
- }
-
- @Test
public void testShouldNotFullScreen_willHun() throws RemoteException {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
@@ -781,26 +732,7 @@
}
@Test
- public void testShouldFullScreen_packageSnoozed() throws RemoteException {
- NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
- when(mPowerManager.isInteractive()).thenReturn(true);
- when(mPowerManager.isScreenOn()).thenReturn(true);
- when(mStatusBarStateController.isDreaming()).thenReturn(false);
- when(mStatusBarStateController.getState()).thenReturn(SHADE);
- when(mHeadsUpManager.isSnoozed("a")).thenReturn(true);
-
- assertThat(mNotifInterruptionStateProvider.getFullScreenIntentDecision(entry))
- .isEqualTo(FullScreenIntentDecision.FSI_EXPECTED_NOT_TO_HUN);
- assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
- .isTrue();
- verify(mLogger, never()).logNoFullscreen(any(), any());
- verify(mLogger, never()).logNoFullscreenWarning(any(), any());
- verify(mLogger).logFullscreen(entry, "FSI_EXPECTED_NOT_TO_HUN");
- }
-
- @Test
- public void testShouldNotFullScreen_snoozed_occluding_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldNotFullScreen_snoozed_occluding() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
@@ -820,8 +752,7 @@
}
@Test
- public void testShouldHeadsUp_snoozed_occluding_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldHeadsUp_snoozed_occluding() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
@@ -845,8 +776,7 @@
}
@Test
- public void testShouldNotFullScreen_snoozed_lockedShade_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldNotFullScreen_snoozed_lockedShade() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
@@ -866,8 +796,7 @@
}
@Test
- public void testShouldHeadsUp_snoozed_lockedShade_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldHeadsUp_snoozed_lockedShade() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
@@ -891,8 +820,7 @@
}
@Test
- public void testShouldNotFullScreen_snoozed_unlocked_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldNotFullScreen_snoozed_unlocked() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
@@ -955,8 +883,7 @@
}
@Test
- public void testShouldHeadsUp_snoozed_unlocked_withStrictRules() throws Exception {
- when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testShouldHeadsUp_snoozed_unlocked() throws Exception {
NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
when(mPowerManager.isInteractive()).thenReturn(true);
when(mPowerManager.isScreenOn()).thenReturn(true);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
index 60bc3a4..c2f1f61 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt
@@ -25,7 +25,6 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.PluginManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
@@ -145,8 +144,6 @@
@Test
fun offerKeepInParent_parentDismissed() {
- whenever(featureFlags.isEnabled(Flags.NOTIFICATION_GROUP_DISMISSAL_ANIMATION))
- .thenReturn(true)
whenever(view.isParentDismissed).thenReturn(true)
Assert.assertTrue(controller.offerToKeepInParentForAnimation())
@@ -155,9 +152,6 @@
@Test
fun offerKeepInParent_parentNotDismissed() {
- whenever(featureFlags.isEnabled(Flags.NOTIFICATION_GROUP_DISMISSAL_ANIMATION))
- .thenReturn(true)
-
Assert.assertFalse(controller.offerToKeepInParentForAnimation())
Mockito.verify(view, never()).setKeepInParentForDismissAnimation(anyBoolean())
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt
new file mode 100644
index 0000000..c960230
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.statusbar.notification.row.ui.viewmodel
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository
+import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
+import com.android.systemui.coroutines.collectLastValue
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class ActivatableNotificationViewModelTest : SysuiTestCase() {
+
+ // fakes
+ private val a11yRepo = FakeAccessibilityRepository()
+
+ // real impls
+ private val a11yInteractor = AccessibilityInteractor(a11yRepo)
+ private val underTest = ActivatableNotificationViewModel(a11yInteractor)
+
+ @Test
+ fun isTouchable_whenA11yTouchExplorationDisabled() = runTest {
+ a11yRepo.isTouchExplorationEnabled.value = false
+ val isTouchable: Boolean? by collectLastValue(underTest.isTouchable)
+ assertThat(isTouchable).isTrue()
+ }
+
+ @Test
+ fun isNotTouchable_whenA11yTouchExplorationEnabled() = runTest {
+ a11yRepo.isTouchExplorationEnabled.value = true
+ val isTouchable: Boolean? by collectLastValue(underTest.isTouchable)
+ assertThat(isTouchable).isFalse()
+ }
+
+ @Test
+ fun isTouchable_whenA11yTouchExplorationChangesToDisabled() = runTest {
+ a11yRepo.isTouchExplorationEnabled.value = true
+ val isTouchable: Boolean? by collectLastValue(underTest.isTouchable)
+ runCurrent()
+ a11yRepo.isTouchExplorationEnabled.value = false
+ assertThat(isTouchable).isTrue()
+ }
+
+ @Test
+ fun isNotTouchable_whenA11yTouchExplorationChangesToEnabled() = runTest {
+ a11yRepo.isTouchExplorationEnabled.value = false
+ val isTouchable: Boolean? by collectLastValue(underTest.isTouchable)
+ runCurrent()
+ a11yRepo.isTouchExplorationEnabled.value = true
+ assertThat(isTouchable).isFalse()
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt
index 2cc375b..944eb2d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/domain/interactor/NotificationShelfInteractorTest.kt
@@ -18,17 +18,27 @@
package com.android.systemui.statusbar.notification.shelf.domain.interactor
+import android.os.PowerManager
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.statusbar.LockscreenShadeTransitionController
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyLong
+import org.mockito.Mockito.isNull
+import org.mockito.Mockito.verify
@RunWith(AndroidTestingRunner::class)
@SmallTest
@@ -36,8 +46,17 @@
private val keyguardRepository = FakeKeyguardRepository()
private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository()
+ private val centralSurfaces: CentralSurfaces = mock()
+ private val systemClock = FakeSystemClock()
+ private val keyguardTransitionController: LockscreenShadeTransitionController = mock()
private val underTest =
- NotificationShelfInteractor(keyguardRepository, deviceEntryFaceAuthRepository)
+ NotificationShelfInteractor(
+ keyguardRepository,
+ deviceEntryFaceAuthRepository,
+ centralSurfaces,
+ systemClock,
+ keyguardTransitionController,
+ )
@Test
fun shelfIsNotStatic_whenKeyguardNotShowing() = runTest {
@@ -85,4 +104,19 @@
assertThat(onKeyguard).isFalse()
}
+
+ @Test
+ fun goToLockedShadeFromShelf_wakesUpFromDoze() {
+ underTest.goToLockedShadeFromShelf()
+
+ verify(centralSurfaces)
+ .wakeUpIfDozing(anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE))
+ }
+
+ @Test
+ fun goToLockedShadeFromShelf_invokesKeyguardTransitionController() {
+ underTest.goToLockedShadeFromShelf()
+
+ verify(keyguardTransitionController).goToLockedShade(isNull(), eq(true))
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
index 439edaf..e9a8f3f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
@@ -18,28 +18,64 @@
package com.android.systemui.statusbar.notification.shelf.ui.viewmodel
+import android.os.PowerManager
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository
+import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.FakeDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.statusbar.LockscreenShadeTransitionController
+import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel
import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
@RunWith(AndroidTestingRunner::class)
@SmallTest
class NotificationShelfViewModelTest : SysuiTestCase() {
+ @Rule @JvmField val mockitoRule: MockitoRule = MockitoJUnit.rule()
+
+ // mocks
+ @Mock private lateinit var centralSurfaces: CentralSurfaces
+ @Mock private lateinit var keyguardTransitionController: LockscreenShadeTransitionController
+
+ // fakes
private val keyguardRepository = FakeKeyguardRepository()
private val deviceEntryFaceAuthRepository = FakeDeviceEntryFaceAuthRepository()
- private val interactor =
- NotificationShelfInteractor(keyguardRepository, deviceEntryFaceAuthRepository)
- private val underTest = NotificationShelfViewModel(interactor)
+ private val systemClock = FakeSystemClock()
+ private val a11yRepo = FakeAccessibilityRepository()
+
+ // real impls
+ private val a11yInteractor = AccessibilityInteractor(a11yRepo)
+ private val activatableViewModel = ActivatableNotificationViewModel(a11yInteractor)
+ private val interactor by lazy {
+ NotificationShelfInteractor(
+ keyguardRepository,
+ deviceEntryFaceAuthRepository,
+ centralSurfaces,
+ systemClock,
+ keyguardTransitionController,
+ )
+ }
+ private val underTest by lazy { NotificationShelfViewModel(interactor, activatableViewModel) }
@Test
fun canModifyColorOfNotifications_whenKeyguardNotShowing() = runTest {
@@ -87,4 +123,13 @@
assertThat(isClickable).isFalse()
}
+
+ @Test
+ fun onClicked_goesToLockedShade() {
+ underTest.onShelfClicked()
+
+ verify(centralSurfaces)
+ .wakeUpIfDozing(ArgumentMatchers.anyLong(), any(), eq(PowerManager.WAKE_REASON_GESTURE))
+ verify(keyguardTransitionController).goToLockedShade(Mockito.isNull(), eq(true))
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
index 485f2be..fbbb921 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
@@ -72,9 +72,11 @@
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent;
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.NotificationIconAreaController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -92,6 +94,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.Optional;
+
/**
* Tests for {@link NotificationStackScrollLayoutController}.
*/
@@ -138,6 +142,7 @@
@Mock private FeatureFlags mFeatureFlags;
@Mock private NotificationTargetsHelper mNotificationTargetsHelper;
@Mock private SecureSettings mSecureSettings;
+ @Mock private NotificationIconAreaController mIconAreaController;
@Captor
private ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerArgumentCaptor;
@@ -152,67 +157,18 @@
MockitoAnnotations.initMocks(this);
when(mNotificationSwipeHelperBuilder.build()).thenReturn(mNotificationSwipeHelper);
-
- mController = new NotificationStackScrollLayoutController(
- true,
- mNotificationGutsManager,
- mVisibilityProvider,
- mHeadsUpManager,
- mNotificationRoundnessManager,
- mTunerService,
- mDeviceProvisionedController,
- mDynamicPrivacyController,
- mConfigurationController,
- mSysuiStatusBarStateController,
- mKeyguardMediaController,
- mKeyguardBypassController,
- mZenModeController,
- mNotificationLockscreenUserManager,
- mMetricsLogger,
- mDumpManager,
- new FalsingCollectorFake(),
- new FalsingManagerFake(),
- mResources,
- mNotificationSwipeHelperBuilder,
- mCentralSurfaces,
- mScrimController,
- mGroupExpansionManager,
- mSilentHeaderController,
- mNotifPipeline,
- mNotifPipelineFlags,
- mNotifCollection,
- mLockscreenShadeTransitionController,
- mUiEventLogger,
- mRemoteInputManager,
- mVisibilityLocationProviderDelegator,
- mSeenNotificationsProvider,
- mShadeController,
- mJankMonitor,
- mStackLogger,
- mLogger,
- mNotificationStackSizeCalculator,
- mFeatureFlags,
- mNotificationTargetsHelper,
- mSecureSettings,
- mock(NotificationDismissibilityProvider.class)
- );
-
- when(mNotificationStackScrollLayout.isAttachedToWindow()).thenReturn(true);
}
@Test
public void testAttach_viewAlreadyAttached() {
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mConfigurationController).addCallback(
any(ConfigurationController.ConfigurationListener.class));
}
@Test
public void testAttach_viewAttachedAfterInit() {
- when(mNotificationStackScrollLayout.isAttachedToWindow()).thenReturn(false);
-
- mController.attach(mNotificationStackScrollLayout);
-
+ initController(/* viewIsAttached= */ false);
verify(mConfigurationController, never()).addCallback(
any(ConfigurationController.ConfigurationListener.class));
@@ -225,7 +181,8 @@
@Test
public void testOnDensityOrFontScaleChanged_reInflatesFooterViews() {
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
+
mController.mConfigurationListener.onDensityOrFontScaleChanged();
verify(mNotificationStackScrollLayout).reinflateViews();
}
@@ -233,7 +190,7 @@
@Test
public void testUpdateEmptyShadeView_notificationsVisible_zenHiding() {
when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(true);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
setupShowEmptyShadeViewState(true);
reset(mNotificationStackScrollLayout);
@@ -253,7 +210,7 @@
@Test
public void testUpdateEmptyShadeView_notificationsHidden_zenNotHiding() {
when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
setupShowEmptyShadeViewState(true);
reset(mNotificationStackScrollLayout);
@@ -273,7 +230,8 @@
@Test
public void testUpdateEmptyShadeView_splitShadeMode_alwaysShowEmptyView() {
when(mZenModeController.areNotificationsHiddenInShade()).thenReturn(false);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
+
verify(mSysuiStatusBarStateController).addCallback(
mStateListenerArgumentCaptor.capture(), anyInt());
StatusBarStateController.StateListener stateListener =
@@ -299,11 +257,11 @@
@Test
public void testOnUserChange_verifySensitiveProfile() {
when(mNotificationLockscreenUserManager.isAnyProfilePublicMode()).thenReturn(true);
+ initController(/* viewIsAttached= */ true);
ArgumentCaptor<UserChangedListener> userChangedCaptor = ArgumentCaptor
.forClass(UserChangedListener.class);
- mController.attach(mNotificationStackScrollLayout);
verify(mNotificationLockscreenUserManager)
.addUserChangedListener(userChangedCaptor.capture());
reset(mNotificationStackScrollLayout);
@@ -317,7 +275,7 @@
public void testOnStatePostChange_verifyIfProfileIsPublic() {
when(mNotificationLockscreenUserManager.isAnyProfilePublicMode()).thenReturn(true);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mSysuiStatusBarStateController).addCallback(
mStateListenerArgumentCaptor.capture(), anyInt());
@@ -337,7 +295,7 @@
ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor =
ArgumentCaptor.forClass(OnMenuEventListener.class);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mNotificationSwipeHelperBuilder).setOnMenuEventListener(
onMenuEventListenerArgumentCaptor.capture());
@@ -358,7 +316,7 @@
ArgumentCaptor<OnMenuEventListener> onMenuEventListenerArgumentCaptor =
ArgumentCaptor.forClass(OnMenuEventListener.class);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mNotificationSwipeHelperBuilder).setOnMenuEventListener(
onMenuEventListenerArgumentCaptor.capture());
@@ -377,7 +335,7 @@
dismissListenerArgumentCaptor = ArgumentCaptor.forClass(
NotificationStackScrollLayout.ClearAllListener.class);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mNotificationStackScrollLayout).setClearAllListener(
dismissListenerArgumentCaptor.capture());
@@ -394,7 +352,7 @@
ArgumentCaptor.forClass(RemoteInputController.Callback.class);
doNothing().when(mRemoteInputManager).addControllerCallback(callbackCaptor.capture());
when(mRemoteInputManager.isRemoteInputActive()).thenReturn(false);
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
verify(mNotificationStackScrollLayout).setIsRemoteInputActive(false);
RemoteInputController.Callback callback = callbackCaptor.getValue();
callback.onRemoteInputActive(true);
@@ -403,9 +361,8 @@
@Test
public void testSetNotifStats_updatesHasFilteredOutSeenNotifications() {
- when(mNotifPipelineFlags.getShouldFilterUnseenNotifsOnKeyguard()).thenReturn(true);
+ initController(/* viewIsAttached= */ true);
mSeenNotificationsProvider.setHasFilteredOutSeenNotifications(true);
- mController.attach(mNotificationStackScrollLayout);
mController.getNotifStackController().setNotifStats(NotifStats.getEmpty());
verify(mNotificationStackScrollLayout).setHasFilteredOutSeenNotifications(true);
verify(mNotificationStackScrollLayout).updateFooter();
@@ -415,7 +372,7 @@
@Test
public void testAttach_updatesViewStatusBarState() {
// GIVEN: Controller is attached
- mController.attach(mNotificationStackScrollLayout);
+ initController(/* viewIsAttached= */ true);
ArgumentCaptor<StatusBarStateController.StateListener> captor =
ArgumentCaptor.forClass(StatusBarStateController.StateListener.class);
verify(mSysuiStatusBarStateController).addCallback(captor.capture(), anyInt());
@@ -459,6 +416,57 @@
}
}
+ private void initController(boolean viewIsAttached) {
+ when(mNotificationStackScrollLayout.isAttachedToWindow()).thenReturn(viewIsAttached);
+
+ mController = new NotificationStackScrollLayoutController(
+ mNotificationStackScrollLayout,
+ true,
+ mNotificationGutsManager,
+ mVisibilityProvider,
+ mHeadsUpManager,
+ mNotificationRoundnessManager,
+ mTunerService,
+ mDeviceProvisionedController,
+ mDynamicPrivacyController,
+ mConfigurationController,
+ mSysuiStatusBarStateController,
+ mKeyguardMediaController,
+ mKeyguardBypassController,
+ mZenModeController,
+ mNotificationLockscreenUserManager,
+ Optional.<NotificationListViewModel>empty(),
+ mMetricsLogger,
+ mDumpManager,
+ new FalsingCollectorFake(),
+ new FalsingManagerFake(),
+ mResources,
+ mNotificationSwipeHelperBuilder,
+ mCentralSurfaces,
+ mScrimController,
+ mGroupExpansionManager,
+ mSilentHeaderController,
+ mNotifPipeline,
+ mNotifPipelineFlags,
+ mNotifCollection,
+ mLockscreenShadeTransitionController,
+ mUiEventLogger,
+ mRemoteInputManager,
+ mVisibilityLocationProviderDelegator,
+ mSeenNotificationsProvider,
+ mShadeController,
+ mJankMonitor,
+ mStackLogger,
+ mLogger,
+ mNotificationStackSizeCalculator,
+ mIconAreaController,
+ mFeatureFlags,
+ mNotificationTargetsHelper,
+ mSecureSettings,
+ mock(NotificationDismissibilityProvider.class)
+ );
+ }
+
static class LogMatcher implements ArgumentMatcher<LogMaker> {
private int mCategory, mType;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java
index 775d267..872c560 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java
@@ -46,9 +46,9 @@
import com.android.systemui.qs.QSHost;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.CameraLauncher;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.QuickSettingsController;
import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.disableflags.DisableFlagsLogger;
@@ -76,7 +76,7 @@
@Mock private ShadeController mShadeController;
@Mock private CommandQueue mCommandQueue;
@Mock private QuickSettingsController mQuickSettingsController;
- @Mock private NotificationPanelViewController mNotificationPanelViewController;
+ @Mock private ShadeViewController mShadeViewController;
@Mock private RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -110,7 +110,7 @@
mContext.getResources(),
mShadeController,
mCommandQueue,
- mNotificationPanelViewController,
+ mShadeViewController,
mRemoteInputQuickSettingsDisabler,
mMetricsLogger,
mKeyguardUpdateMonitor,
@@ -153,9 +153,9 @@
// Trying to open it does nothing.
mSbcqCallbacks.animateExpandNotificationsPanel();
- verify(mNotificationPanelViewController, never()).expandToNotifications();
+ verify(mShadeViewController, never()).expandToNotifications();
mSbcqCallbacks.animateExpandSettingsPanel(null);
- verify(mNotificationPanelViewController, never()).expand(anyBoolean());
+ verify(mShadeViewController, never()).expand(anyBoolean());
}
@Test
@@ -171,9 +171,9 @@
// Can now be opened.
mSbcqCallbacks.animateExpandNotificationsPanel();
- verify(mNotificationPanelViewController).expandToNotifications();
+ verify(mShadeViewController).expandToNotifications();
mSbcqCallbacks.animateExpandSettingsPanel(null);
- verify(mNotificationPanelViewController).expandToQs();
+ verify(mShadeViewController).expandToQs();
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index 48710a4..219e6a9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -44,6 +44,8 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static java.util.Collections.emptySet;
+
import android.app.ActivityManager;
import android.app.IWallpaperManager;
import android.app.Notification;
@@ -147,6 +149,7 @@
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
+import com.android.systemui.statusbar.core.StatusBarInitializer;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.NotifPipelineFlags;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
@@ -387,7 +390,6 @@
when(mStackScroller.generateLayoutParams(any())).thenReturn(new LayoutParams(0, 0));
when(mNotificationPanelView.getLayoutParams()).thenReturn(new LayoutParams(0, 0));
when(mPowerManagerService.isInteractive()).thenReturn(true);
- when(mStackScroller.getActivatedChild()).thenReturn(null);
doAnswer(invocation -> {
OnDismissAction onDismissAction = (OnDismissAction) invocation.getArguments()[0];
@@ -451,6 +453,7 @@
mock(FragmentService.class),
mLightBarController,
mAutoHideController,
+ new StatusBarInitializer(mStatusBarWindowController, emptySet()),
mStatusBarWindowController,
mStatusBarWindowStateController,
mKeyguardUpdateMonitor,
@@ -562,7 +565,7 @@
// TODO: we should be able to call mCentralSurfaces.start() and have all the below values
// initialized automatically and make NPVC private.
mCentralSurfaces.mNotificationShadeWindowView = mNotificationShadeWindowView;
- mCentralSurfaces.mNotificationPanelViewController = mNotificationPanelViewController;
+ mCentralSurfaces.mShadeSurface = mNotificationPanelViewController;
mCentralSurfaces.mQsController = mQuickSettingsController;
mCentralSurfaces.mDozeScrimController = mDozeScrimController;
mCentralSurfaces.mPresenter = mNotificationPresenter;
@@ -1206,34 +1209,6 @@
}
@Test
- public void collapseShadeForBugReport_callsanimateCollapseShade_whenFlagDisabled() {
- // GIVEN the shade is expanded & flag enabled
- mCentralSurfaces.onShadeExpansionFullyChanged(true);
- mCentralSurfaces.setBarStateForTest(SHADE);
- mFeatureFlags.set(Flags.LEAVE_SHADE_OPEN_FOR_BUGREPORT, false);
-
- // WHEN collapseShadeForBugreport is called
- mCentralSurfaces.collapseShadeForBugreport();
-
- // VERIFY that animateCollapseShade is called
- verify(mShadeController).animateCollapseShade();
- }
-
- @Test
- public void collapseShadeForBugReport_doesNotCallanimateCollapseShade_whenFlagEnabled() {
- // GIVEN the shade is expanded & flag enabled
- mCentralSurfaces.onShadeExpansionFullyChanged(true);
- mCentralSurfaces.setBarStateForTest(SHADE);
- mFeatureFlags.set(Flags.LEAVE_SHADE_OPEN_FOR_BUGREPORT, true);
-
- // WHEN collapseShadeForBugreport is called
- mCentralSurfaces.collapseShadeForBugreport();
-
- // VERIFY that animateCollapseShade is called
- verify(mShadeController, never()).animateCollapseShade();
- }
-
- @Test
public void deviceStateChange_unfolded_shadeOpen_setsLeaveOpenOnKeyguardHide() {
setFoldedStates(FOLD_STATE_FOLDED);
setGoToSleepStates(FOLD_STATE_FOLDED);
@@ -1278,12 +1253,13 @@
new Intent(),
/* onlyProvisioned = */false,
/* dismissShade = */false);
- verify(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any(Runnable.class));
ArgumentCaptor<OnDismissAction> onDismissActionCaptor =
ArgumentCaptor.forClass(OnDismissAction.class);
verify(mStatusBarKeyguardViewManager)
- .dismissWithAction(onDismissActionCaptor.capture(), any(Runnable.class), eq(true));
+ .dismissWithAction(onDismissActionCaptor.capture(), any(Runnable.class), eq(true),
+ eq(null));
assertThat(onDismissActionCaptor.getValue().onDismiss()).isFalse();
+ verify(mStatusBarKeyguardViewManager).addAfterKeyguardGoneRunnable(any(Runnable.class));
}
@Test
@@ -1326,7 +1302,7 @@
// WHEN wakeup is requested
final int wakeReason = PowerManager.WAKE_REASON_TAP;
- mCentralSurfaces.wakeUpIfDozing(0, null, "", wakeReason);
+ mCentralSurfaces.wakeUpIfDozing(0, "", wakeReason);
// THEN power manager receives wakeup
verify(mPowerManagerService).wakeUp(eq(0L), eq(wakeReason), anyString(), anyString());
@@ -1340,7 +1316,7 @@
// WHEN wakeup is requested
final int wakeReason = PowerManager.WAKE_REASON_TAP;
- mCentralSurfaces.wakeUpIfDozing(0, null, "", wakeReason);
+ mCentralSurfaces.wakeUpIfDozing(0, "", wakeReason);
// THEN power manager receives wakeup
verify(mPowerManagerService, never()).wakeUp(anyLong(), anyInt(), anyString(), anyString());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
index 996851e..2831d2f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
@@ -41,8 +41,8 @@
import com.android.systemui.doze.DozeHost;
import com.android.systemui.doze.DozeLog;
import com.android.systemui.keyguard.WakefulnessLifecycle;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
@@ -87,7 +87,7 @@
@Mock private NotificationIconAreaController mNotificationIconAreaController;
@Mock private NotificationShadeWindowViewController mNotificationShadeWindowViewController;
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
- @Mock private NotificationPanelViewController mNotificationPanel;
+ @Mock private ShadeViewController mShadeViewController;
@Mock private View mAmbientIndicationContainer;
@Mock private BiometricUnlockController mBiometricUnlockController;
@Mock private AuthController mAuthController;
@@ -108,7 +108,7 @@
mCentralSurfaces,
mStatusBarKeyguardViewManager,
mNotificationShadeWindowViewController,
- mNotificationPanel,
+ mShadeViewController,
mAmbientIndicationContainer);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
index 3372dc3..205cebd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceControllerTest.java
@@ -38,8 +38,8 @@
import com.android.systemui.flags.Flags;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeHeadsUpTracker;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
@@ -65,8 +65,8 @@
private final NotificationStackScrollLayoutController mStackScrollerController =
mock(NotificationStackScrollLayoutController.class);
- private final NotificationPanelViewController mPanelView =
- mock(NotificationPanelViewController.class);
+ private final ShadeViewController mShadeViewController =
+ mock(ShadeViewController.class);
private final ShadeHeadsUpTracker mShadeHeadsUpTracker = mock(ShadeHeadsUpTracker.class);
private final DarkIconDispatcher mDarkIconDispatcher = mock(DarkIconDispatcher.class);
private HeadsUpAppearanceController mHeadsUpAppearanceController;
@@ -104,7 +104,7 @@
mCommandQueue = mock(CommandQueue.class);
mNotificationRoundnessManager = mock(NotificationRoundnessManager.class);
mFeatureFlag = mock(FeatureFlags.class);
- when(mPanelView.getShadeHeadsUpTracker()).thenReturn(mShadeHeadsUpTracker);
+ when(mShadeViewController.getShadeHeadsUpTracker()).thenReturn(mShadeHeadsUpTracker);
when(mFeatureFlag.isEnabled(Flags.USE_ROUNDNESS_SOURCETYPES)).thenReturn(true);
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
mock(NotificationIconAreaController.class),
@@ -116,7 +116,7 @@
mKeyguardStateController,
mCommandQueue,
mStackScrollerController,
- mPanelView,
+ mShadeViewController,
mNotificationRoundnessManager,
mFeatureFlag,
mHeadsUpStatusBarView,
@@ -200,7 +200,7 @@
mKeyguardStateController,
mCommandQueue,
mStackScrollerController,
- mPanelView,
+ mShadeViewController,
mNotificationRoundnessManager,
mFeatureFlag,
mHeadsUpStatusBarView,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java
index 760a90b..e838a480 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.java
@@ -52,7 +52,7 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeViewStateProvider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -123,14 +123,14 @@
@Mock private NotificationMediaManager mNotificationMediaManager;
- private TestNotificationPanelViewStateProvider mNotificationPanelViewStateProvider;
+ private TestShadeViewStateProvider mShadeViewStateProvider;
private KeyguardStatusBarView mKeyguardStatusBarView;
private KeyguardStatusBarViewController mController;
private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
@Before
public void setup() throws Exception {
- mNotificationPanelViewStateProvider = new TestNotificationPanelViewStateProvider();
+ mShadeViewStateProvider = new TestShadeViewStateProvider();
MockitoAnnotations.initMocks(this);
@@ -158,7 +158,7 @@
mStatusBarIconController,
mIconManagerFactory,
mBatteryMeterViewController,
- mNotificationPanelViewStateProvider,
+ mShadeViewStateProvider,
mKeyguardStateController,
mKeyguardBypassController,
mKeyguardUpdateMonitor,
@@ -358,7 +358,7 @@
mController.onViewAttached();
updateStateToKeyguard();
- mNotificationPanelViewStateProvider.setPanelViewExpandedHeight(0);
+ mShadeViewStateProvider.setPanelViewExpandedHeight(0);
mController.updateViewState();
@@ -370,7 +370,7 @@
mController.onViewAttached();
updateStateToKeyguard();
- mNotificationPanelViewStateProvider.setLockscreenShadeDragProgress(1f);
+ mShadeViewStateProvider.setLockscreenShadeDragProgress(1f);
mController.updateViewState();
@@ -451,7 +451,7 @@
updateStateToKeyguard();
mKeyguardStatusBarView.setVisibility(View.VISIBLE);
- mNotificationPanelViewStateProvider.setShouldHeadsUpBeVisible(true);
+ mShadeViewStateProvider.setShouldHeadsUpBeVisible(true);
mController.updateForHeadsUp(/* animate= */ false);
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.INVISIBLE);
@@ -463,10 +463,10 @@
updateStateToKeyguard();
// Start with the opposite state.
- mNotificationPanelViewStateProvider.setShouldHeadsUpBeVisible(true);
+ mShadeViewStateProvider.setShouldHeadsUpBeVisible(true);
mController.updateForHeadsUp(/* animate= */ false);
- mNotificationPanelViewStateProvider.setShouldHeadsUpBeVisible(false);
+ mShadeViewStateProvider.setShouldHeadsUpBeVisible(false);
mController.updateForHeadsUp(/* animate= */ false);
assertThat(mKeyguardStatusBarView.getVisibility()).isEqualTo(View.VISIBLE);
@@ -591,10 +591,10 @@
return captor.getValue();
}
- private static class TestNotificationPanelViewStateProvider
- implements NotificationPanelViewController.NotificationPanelViewStateProvider {
+ private static class TestShadeViewStateProvider
+ implements ShadeViewStateProvider {
- TestNotificationPanelViewStateProvider() {}
+ TestShadeViewStateProvider() {}
private float mPanelViewExpandedHeight = 100f;
private boolean mShouldHeadsUpBeVisible = false;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
index 7d9c091..8e1dcf0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconAreaControllerTest.java
@@ -27,6 +27,7 @@
import com.android.systemui.SysuiTestCase;
import com.android.systemui.demomode.DemoModeController;
+import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationListener;
@@ -75,6 +76,8 @@
@Mock private DemoModeController mDemoModeController;
@Mock
private NotificationIconContainer mAodIcons;
+ @Mock
+ private FeatureFlags mFeatureFlags;
@Before
public void setup() {
@@ -91,6 +94,7 @@
Optional.of(mBubbles),
mDemoModeController,
mDarkIconDispatcher,
+ mFeatureFlags,
mStatusBarWindowController,
mScreenOffAnimationController);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt
index 3edf33b..2d96e59 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewControllerTest.kt
@@ -27,9 +27,9 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
-import com.android.systemui.shade.NotificationPanelViewController
import com.android.systemui.shade.ShadeControllerImpl
import com.android.systemui.shade.ShadeLogger
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.config.UnfoldTransitionConfig
@@ -43,11 +43,11 @@
import org.junit.Test
import org.mockito.ArgumentCaptor
import org.mockito.Mock
-import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.util.Optional
@@ -55,7 +55,7 @@
class PhoneStatusBarViewControllerTest : SysuiTestCase() {
@Mock
- private lateinit var notificationPanelViewController: NotificationPanelViewController
+ private lateinit var shadeViewController: ShadeViewController
@Mock
private lateinit var featureFlags: FeatureFlags
@Mock
@@ -134,58 +134,58 @@
val returnVal = view.onTouchEvent(
MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0))
assertThat(returnVal).isFalse()
- verify(notificationPanelViewController, never()).handleExternalTouch(any())
+ verify(shadeViewController, never()).handleExternalTouch(any())
}
@Test
fun handleTouchEventFromStatusBar_viewNotEnabled_returnsTrueAndNoViewEvent() {
`when`(centralSurfacesImpl.commandQueuePanelsEnabled).thenReturn(true)
- `when`(centralSurfacesImpl.notificationPanelViewController)
- .thenReturn(notificationPanelViewController)
- `when`(notificationPanelViewController.isViewEnabled).thenReturn(false)
+ `when`(centralSurfacesImpl.shadeViewController)
+ .thenReturn(shadeViewController)
+ `when`(shadeViewController.isViewEnabled).thenReturn(false)
val returnVal = view.onTouchEvent(
MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0))
assertThat(returnVal).isTrue()
- verify(notificationPanelViewController, never()).handleExternalTouch(any())
+ verify(shadeViewController, never()).handleExternalTouch(any())
}
@Test
fun handleTouchEventFromStatusBar_viewNotEnabledButIsMoveEvent_viewReceivesEvent() {
`when`(centralSurfacesImpl.commandQueuePanelsEnabled).thenReturn(true)
- `when`(centralSurfacesImpl.notificationPanelViewController)
- .thenReturn(notificationPanelViewController)
- `when`(notificationPanelViewController.isViewEnabled).thenReturn(false)
+ `when`(centralSurfacesImpl.shadeViewController)
+ .thenReturn(shadeViewController)
+ `when`(shadeViewController.isViewEnabled).thenReturn(false)
val event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)
view.onTouchEvent(event)
- verify(notificationPanelViewController).handleExternalTouch(event)
+ verify(shadeViewController).handleExternalTouch(event)
}
@Test
fun handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {
`when`(centralSurfacesImpl.commandQueuePanelsEnabled).thenReturn(true)
- `when`(centralSurfacesImpl.notificationPanelViewController)
- .thenReturn(notificationPanelViewController)
- `when`(notificationPanelViewController.isViewEnabled).thenReturn(true)
+ `when`(centralSurfacesImpl.shadeViewController)
+ .thenReturn(shadeViewController)
+ `when`(shadeViewController.isViewEnabled).thenReturn(true)
val event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 2f, 0)
view.onTouchEvent(event)
- verify(notificationPanelViewController).handleExternalTouch(event)
+ verify(shadeViewController).handleExternalTouch(event)
}
@Test
fun handleTouchEventFromStatusBar_topEdgeTouch_viewNeverReceivesEvent() {
`when`(centralSurfacesImpl.commandQueuePanelsEnabled).thenReturn(true)
- `when`(centralSurfacesImpl.notificationPanelViewController)
- .thenReturn(notificationPanelViewController)
- `when`(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+ `when`(centralSurfacesImpl.shadeViewController)
+ .thenReturn(shadeViewController)
+ `when`(shadeViewController.isFullyCollapsed).thenReturn(true)
val event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
view.onTouchEvent(event)
- verify(notificationPanelViewController, never()).handleExternalTouch(any())
+ verify(shadeViewController, never()).handleExternalTouch(any())
}
private fun createViewMock(): PhoneStatusBarView {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
index 3ed454f..9c10131 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewTest.kt
@@ -21,7 +21,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.Gefingerpoken
import com.android.systemui.SysuiTestCase
-import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.shade.ShadeViewController
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
@@ -32,7 +32,7 @@
class PhoneStatusBarViewTest : SysuiTestCase() {
@Mock
- private lateinit var notificationPanelViewController: NotificationPanelViewController
+ private lateinit var shadeViewController: ShadeViewController
@Mock
private lateinit var panelView: ViewGroup
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 14aee4e..4ff225c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -73,11 +73,11 @@
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.navigationbar.TaskbarDelegate;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
@@ -110,7 +110,7 @@
@Mock private LockPatternUtils mLockPatternUtils;
@Mock private CentralSurfaces mCentralSurfaces;
@Mock private ViewGroup mContainer;
- @Mock private NotificationPanelViewController mNotificationPanelView;
+ @Mock private ShadeViewController mShadeViewController;
@Mock private BiometricUnlockController mBiometricUnlockController;
@Mock private SysuiStatusBarStateController mStatusBarStateController;
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -202,7 +202,7 @@
.thenReturn(mOnBackInvokedDispatcher);
mStatusBarKeyguardViewManager.registerCentralSurfaces(
mCentralSurfaces,
- mNotificationPanelView,
+ mShadeViewController,
new ShadeExpansionStateManager(),
mBiometricUnlockController,
mNotificationContainer,
@@ -250,7 +250,7 @@
@Test
public void onPanelExpansionChanged_neverShowsDuringHintAnimation() {
- when(mNotificationPanelView.isUnlockHintRunning()).thenReturn(true);
+ when(mShadeViewController.isUnlockHintRunning()).thenReturn(true);
mStatusBarKeyguardViewManager.onPanelExpansionChanged(EXPANSION_EVENT);
verify(mPrimaryBouncerInteractor, never()).setPanelExpansion(anyFloat());
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
index ee7e082..d6ae2b7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java
@@ -66,9 +66,9 @@
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowViewController;
import com.android.systemui.shade.ShadeControllerImpl;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.NotificationClickNotifier;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationPresenter;
@@ -232,7 +232,7 @@
mOnUserInteractionCallback,
mCentralSurfaces,
mock(NotificationPresenter.class),
- mock(NotificationPanelViewController.class),
+ mock(ShadeViewController.class),
mActivityLaunchAnimator,
notificationAnimationProvider,
mock(LaunchFullScreenIntentProvider.class),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
index e83e50d..fdfe028 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenterTest.java
@@ -25,15 +25,12 @@
import android.app.Notification;
import android.app.PendingIntent;
import android.app.StatusBarManager;
-import android.metrics.LogMaker;
-import android.support.test.metricshelper.MetricsAsserts;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.ForegroundServiceNotificationListener;
import com.android.systemui.InitController;
@@ -41,11 +38,11 @@
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.FakeDisplayTracker;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.QuickSettingsController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeNotificationPresenter;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
@@ -61,7 +58,6 @@
import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
import com.android.systemui.statusbar.notification.interruption.NotificationInterruptSuppressor;
-import com.android.systemui.statusbar.notification.row.ActivatableNotificationView;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
@@ -111,12 +107,12 @@
mock(NotificationStackScrollLayout.class));
when(notificationShadeWindowView.getResources()).thenReturn(mContext.getResources());
- NotificationPanelViewController npvc = mock(NotificationPanelViewController.class);
- when(npvc.getShadeNotificationPresenter())
+ ShadeViewController shadeViewController = mock(ShadeViewController.class);
+ when(shadeViewController.getShadeNotificationPresenter())
.thenReturn(mock(ShadeNotificationPresenter.class));
mStatusBarNotificationPresenter = new StatusBarNotificationPresenter(
mContext,
- npvc,
+ shadeViewController,
mock(QuickSettingsController.class),
mock(HeadsUpManagerPhone.class),
notificationShadeWindowView,
@@ -198,46 +194,7 @@
}
@Test
- public void testNoSuppressHeadsUp_FSI_occludedKeygaurd() {
- when(mNotifPipelineFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false);
- Notification n = new Notification.Builder(getContext(), "a")
- .setFullScreenIntent(mock(PendingIntent.class), true)
- .build();
- NotificationEntry entry = new NotificationEntryBuilder()
- .setPkg("a")
- .setOpPkg("a")
- .setTag("a")
- .setNotification(n)
- .build();
-
- when(mKeyguardStateController.isShowing()).thenReturn(true);
- when(mKeyguardStateController.isOccluded()).thenReturn(true);
- when(mCentralSurfaces.isOccluded()).thenReturn(true);
- assertFalse(mInterruptSuppressor.suppressAwakeHeadsUp(entry));
- }
-
- @Test
- public void testSuppressHeadsUp_FSI_nonOccludedKeygaurd() {
- when(mNotifPipelineFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false);
- Notification n = new Notification.Builder(getContext(), "a")
- .setFullScreenIntent(mock(PendingIntent.class), true)
- .build();
- NotificationEntry entry = new NotificationEntryBuilder()
- .setPkg("a")
- .setOpPkg("a")
- .setTag("a")
- .setNotification(n)
- .build();
-
- when(mKeyguardStateController.isShowing()).thenReturn(true);
- when(mKeyguardStateController.isOccluded()).thenReturn(false);
- when(mCentralSurfaces.isOccluded()).thenReturn(false);
- assertTrue(mInterruptSuppressor.suppressAwakeHeadsUp(entry));
- }
-
- @Test
- public void testNoSuppressHeadsUp_FSI_nonOccludedKeygaurd_withNewFlag() {
- when(mNotifPipelineFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+ public void testNoSuppressHeadsUp_FSI_nonOccludedKeyguard() {
Notification n = new Notification.Builder(getContext(), "a")
.setFullScreenIntent(mock(PendingIntent.class), true)
.build();
@@ -283,15 +240,4 @@
assertTrue("CentralSurfaces alerts disabled shouldn't allow interruptions",
mInterruptSuppressor.suppressInterruptions(entry));
}
-
- @Test
- public void onActivatedMetrics() {
- ActivatableNotificationView view = mock(ActivatableNotificationView.class);
- mStatusBarNotificationPresenter.onActivated(view);
-
- MetricsAsserts.assertHasLog("missing lockscreen note tap log",
- mMetricsLogger.getLogs(),
- new LogMaker(MetricsEvent.ACTION_LS_NOTE)
- .setType(MetricsEvent.TYPE_ACTION));
- }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationControllerTest.kt
index 02c459b..3c644a5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationControllerTest.kt
@@ -25,7 +25,7 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle
-import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.StatusBarStateControllerImpl
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -59,9 +59,9 @@
@Mock
private lateinit var globalSettings: GlobalSettings
@Mock
- private lateinit var mCentralSurfaces: CentralSurfaces
+ private lateinit var centralSurfaces: CentralSurfaces
@Mock
- private lateinit var notificationPanelViewController: NotificationPanelViewController
+ private lateinit var shadeViewController: ShadeViewController
@Mock
private lateinit var lightRevealScrim: LightRevealScrim
@Mock
@@ -91,13 +91,13 @@
powerManager,
handler = handler
)
- controller.initialize(mCentralSurfaces, lightRevealScrim)
- `when`(mCentralSurfaces.notificationPanelViewController).thenReturn(
- notificationPanelViewController)
+ controller.initialize(centralSurfaces, lightRevealScrim)
+ `when`(centralSurfaces.shadeViewController).thenReturn(
+ shadeViewController)
// Screen off does not run if the panel is expanded, so we should say it's collapsed to test
// screen off.
- `when`(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+ `when`(shadeViewController.isFullyCollapsed).thenReturn(true)
}
@After
@@ -127,7 +127,7 @@
callbackCaptor.value.run()
- verify(notificationPanelViewController, times(1)).showAodUi()
+ verify(shadeViewController, times(1)).showAodUi()
}
/**
@@ -149,7 +149,7 @@
verify(handler).postDelayed(callbackCaptor.capture(), anyLong())
callbackCaptor.value.run()
- verify(notificationPanelViewController, never()).showAodUi()
+ verify(shadeViewController, never()).showAodUi()
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
index be0c83f..2a3c775 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragmentTest.java
@@ -56,8 +56,8 @@
import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.plugins.log.LogcatEchoTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeExpansionStateManager;
+import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.disableflags.DisableFlagsLogger;
@@ -117,7 +117,7 @@
@Mock
private HeadsUpAppearanceController mHeadsUpAppearanceController;
@Mock
- private NotificationPanelViewController mNotificationPanelViewController;
+ private ShadeViewController mShadeViewController;
@Mock
private StatusBarIconController.DarkIconManager.Factory mIconManagerFactory;
@Mock
@@ -507,7 +507,7 @@
mIconManagerFactory,
mStatusBarHideIconsForBouncerManager,
mKeyguardStateController,
- mNotificationPanelViewController,
+ mShadeViewController,
mStatusBarStateController,
mCommandQueue,
mCarrierConfigTracker,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/model/SystemUiCarrierConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/model/SystemUiCarrierConfigTest.kt
index 63cb30c..95b132d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/model/SystemUiCarrierConfigTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/model/SystemUiCarrierConfigTest.kt
@@ -39,7 +39,7 @@
}
@Test
- fun `process new config - reflected by isUsingDefault`() {
+ fun processNewConfig_reflectedByIsUsingDefault() {
// Starts out using the defaults
assertThat(underTest.isUsingDefault).isTrue()
@@ -50,7 +50,7 @@
}
@Test
- fun `process new config - updates all flows`() {
+ fun processNewConfig_updatesAllFlows() {
assertThat(underTest.shouldInflateSignalStrength.value).isFalse()
assertThat(underTest.showOperatorNameInStatusBar.value).isFalse()
@@ -66,7 +66,7 @@
}
@Test
- fun `process new config - defaults to false for config overrides`() {
+ fun processNewConfig_defaultsToFalseForConfigOverrides() {
// This case is only apparent when:
// 1. The default is true
// 2. The override config has no value for a given key
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt
index dfef62e..6e3af26 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/CarrierConfigRepositoryTest.kt
@@ -96,7 +96,7 @@
}
@Test
- fun `carrier config stream produces int-bundle pairs`() =
+ fun carrierConfigStreamProducesIntBundlePairs() =
testScope.runTest {
var latest: Pair<Int, PersistableBundle>? = null
val job = underTest.carrierConfigStream.onEach { latest = it }.launchIn(this)
@@ -111,7 +111,7 @@
}
@Test
- fun `carrier config stream ignores invalid subscriptions`() =
+ fun carrierConfigStreamIgnoresInvalidSubscriptions() =
testScope.runTest {
var latest: Pair<Int, PersistableBundle>? = null
val job = underTest.carrierConfigStream.onEach { latest = it }.launchIn(this)
@@ -124,19 +124,19 @@
}
@Test
- fun `getOrCreateConfig - uses default config if no override`() {
+ fun getOrCreateConfig_usesDefaultConfigIfNoOverride() {
val config = underTest.getOrCreateConfigForSubId(123)
assertThat(config.isUsingDefault).isTrue()
}
@Test
- fun `getOrCreateConfig - uses override if exists`() {
+ fun getOrCreateConfig_usesOverrideIfExists() {
val config = underTest.getOrCreateConfigForSubId(SUB_ID_1)
assertThat(config.isUsingDefault).isFalse()
}
@Test
- fun `config - updates while config stream is collected`() =
+ fun config_updatesWhileConfigStreamIsCollected() =
testScope.runTest {
CONFIG_1.putBoolean(CarrierConfigManager.KEY_INFLATE_SIGNAL_STRENGTH_BOOL, false)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
index 1fdcf7f..3ec9690 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/MobileRepositorySwitcherTest.kt
@@ -156,7 +156,7 @@
}
@Test
- fun `active repo matches demo mode setting`() =
+ fun activeRepoMatchesDemoModeSetting() =
runBlocking(IMMEDIATE) {
whenever(demoModeController.isInDemoMode).thenReturn(false)
@@ -177,7 +177,7 @@
}
@Test
- fun `subscription list updates when demo mode changes`() =
+ fun subscriptionListUpdatesWhenDemoModeChanges() =
runBlocking(IMMEDIATE) {
whenever(demoModeController.isInDemoMode).thenReturn(false)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepositoryTest.kt
index 47f8cd3..1251dfa 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/demo/DemoMobileConnectionsRepositoryTest.kt
@@ -105,7 +105,7 @@
}
@Test
- fun `network event - create new subscription`() =
+ fun networkEvent_createNewSubscription() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -121,7 +121,7 @@
}
@Test
- fun `wifi carrier merged event - create new subscription`() =
+ fun wifiCarrierMergedEvent_createNewSubscription() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -137,7 +137,7 @@
}
@Test
- fun `network event - reuses subscription when same Id`() =
+ fun networkEvent_reusesSubscriptionWhenSameId() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -159,7 +159,7 @@
}
@Test
- fun `wifi carrier merged event - reuses subscription when same Id`() =
+ fun wifiCarrierMergedEvent_reusesSubscriptionWhenSameId() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -181,7 +181,7 @@
}
@Test
- fun `multiple subscriptions`() =
+ fun multipleSubscriptions() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -195,7 +195,7 @@
}
@Test
- fun `mobile subscription and carrier merged subscription`() =
+ fun mobileSubscriptionAndCarrierMergedSubscription() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -209,7 +209,7 @@
}
@Test
- fun `multiple mobile subscriptions and carrier merged subscription`() =
+ fun multipleMobileSubscriptionsAndCarrierMergedSubscription() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -224,7 +224,7 @@
}
@Test
- fun `mobile disabled event - disables connection - subId specified - single conn`() =
+ fun mobileDisabledEvent_disablesConnection_subIdSpecified_singleConn() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -239,7 +239,7 @@
}
@Test
- fun `mobile disabled event - disables connection - subId not specified - single conn`() =
+ fun mobileDisabledEvent_disablesConnection_subIdNotSpecified_singleConn() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -254,7 +254,7 @@
}
@Test
- fun `mobile disabled event - disables connection - subId specified - multiple conn`() =
+ fun mobileDisabledEvent_disablesConnection_subIdSpecified_multipleConn() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -270,7 +270,7 @@
}
@Test
- fun `mobile disabled event - subId not specified - multiple conn - ignores command`() =
+ fun mobileDisabledEvent_subIdNotSpecified_multipleConn_ignoresCommand() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -286,7 +286,7 @@
}
@Test
- fun `wifi network updates to disabled - carrier merged connection removed`() =
+ fun wifiNetworkUpdatesToDisabled_carrierMergedConnectionRemoved() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -303,7 +303,7 @@
}
@Test
- fun `wifi network updates to active - carrier merged connection removed`() =
+ fun wifiNetworkUpdatesToActive_carrierMergedConnectionRemoved() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -326,7 +326,7 @@
}
@Test
- fun `mobile sub updates to carrier merged - only one connection`() =
+ fun mobileSubUpdatesToCarrierMerged_onlyOneConnection() =
testScope.runTest {
var latestSubsList: List<SubscriptionModel>? = null
var connections: List<DemoMobileConnectionRepository>? = null
@@ -352,7 +352,7 @@
}
@Test
- fun `mobile sub updates to carrier merged then back - has old mobile data`() =
+ fun mobileSubUpdatesToCarrierMergedThenBack_hasOldMobileData() =
testScope.runTest {
var latestSubsList: List<SubscriptionModel>? = null
var connections: List<DemoMobileConnectionRepository>? = null
@@ -393,7 +393,7 @@
/** Regression test for b/261706421 */
@Test
- fun `multiple connections - remove all - does not throw`() =
+ fun multipleConnections_removeAll_doesNotThrow() =
testScope.runTest {
var latest: List<SubscriptionModel>? = null
val job = underTest.subscriptions.onEach { latest = it }.launchIn(this)
@@ -411,7 +411,7 @@
}
@Test
- fun `demo connection - single subscription`() =
+ fun demoConnection_singleSubscription() =
testScope.runTest {
var currentEvent: FakeNetworkEventModel = validMobileEvent(subId = 1)
var connections: List<DemoMobileConnectionRepository>? = null
@@ -440,7 +440,7 @@
}
@Test
- fun `demo connection - two connections - update second - no affect on first`() =
+ fun demoConnection_twoConnections_updateSecond_noAffectOnFirst() =
testScope.runTest {
var currentEvent1 = validMobileEvent(subId = 1)
var connection1: DemoMobileConnectionRepository? = null
@@ -487,7 +487,7 @@
}
@Test
- fun `demo connection - two connections - update carrier merged - no affect on first`() =
+ fun demoConnection_twoConnections_updateCarrierMerged_noAffectOnFirst() =
testScope.runTest {
var currentEvent1 = validMobileEvent(subId = 1)
var connection1: DemoMobileConnectionRepository? = null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
index 423c476..9f77744 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/FullMobileConnectionRepositoryTest.kt
@@ -292,7 +292,7 @@
}
@Test
- fun `factory - reuses log buffers for same connection`() =
+ fun factory_reusesLogBuffersForSameConnection() =
testScope.runTest {
val realLoggerFactory = TableLogBufferFactory(mock(), FakeSystemClock())
@@ -327,7 +327,7 @@
}
@Test
- fun `factory - reuses log buffers for same sub ID even if carrier merged`() =
+ fun factory_reusesLogBuffersForSameSubIDevenIfCarrierMerged() =
testScope.runTest {
val realLoggerFactory = TableLogBufferFactory(mock(), FakeSystemClock())
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
index 8d7f0f6..c276865 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconInteractorTest.kt
@@ -353,7 +353,7 @@
}
@Test
- fun `isInService - uses repository value`() =
+ fun isInService_usesRepositoryValue() =
testScope.runTest {
var latest: Boolean? = null
val job = underTest.isInService.onEach { latest = it }.launchIn(this)
@@ -370,7 +370,7 @@
}
@Test
- fun `roaming - is gsm - uses connection model`() =
+ fun roaming_isGsm_usesConnectionModel() =
testScope.runTest {
var latest: Boolean? = null
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
@@ -389,7 +389,7 @@
}
@Test
- fun `roaming - is cdma - uses cdma roaming bit`() =
+ fun roaming_isCdma_usesCdmaRoamingBit() =
testScope.runTest {
var latest: Boolean? = null
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
@@ -410,7 +410,7 @@
}
@Test
- fun `roaming - false while carrierNetworkChangeActive`() =
+ fun roaming_falseWhileCarrierNetworkChangeActive() =
testScope.runTest {
var latest: Boolean? = null
val job = underTest.isRoaming.onEach { latest = it }.launchIn(this)
@@ -431,7 +431,7 @@
}
@Test
- fun `network name - uses operatorAlphaShot when non null and repo is default`() =
+ fun networkName_usesOperatorAlphaShotWhenNonNullAndRepoIsDefault() =
testScope.runTest {
var latest: NetworkNameModel? = null
val job = underTest.networkName.onEach { latest = it }.launchIn(this)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
index dc68386..c84c9c0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractorTest.kt
@@ -520,7 +520,7 @@
// is private and can only be tested by looking at [isDefaultConnectionFailed].
@Test
- fun `data switch - in same group - validated matches previous value - expires after 2s`() =
+ fun dataSwitch_inSameGroup_validatedMatchesPreviousValue_expiresAfter2s() =
testScope.runTest {
var latestConnectionFailed: Boolean? = null
val job =
@@ -548,7 +548,7 @@
}
@Test
- fun `data switch - in same group - not validated - immediately marked as failed`() =
+ fun dataSwitch_inSameGroup_notValidated_immediatelyMarkedAsFailed() =
testScope.runTest {
var latestConnectionFailed: Boolean? = null
val job =
@@ -567,7 +567,7 @@
}
@Test
- fun `data switch - lose validation - then switch happens - clears forced bit`() =
+ fun dataSwitch_loseValidation_thenSwitchHappens_clearsForcedBit() =
testScope.runTest {
var latestConnectionFailed: Boolean? = null
val job =
@@ -602,7 +602,7 @@
}
@Test
- fun `data switch - while already forcing validation - resets clock`() =
+ fun dataSwitch_whileAlreadyForcingValidation_resetsClock() =
testScope.runTest {
var latestConnectionFailed: Boolean? = null
val job =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
index e99be86..d5fb577 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/LocationBasedMobileIconViewModelTest.kt
@@ -92,7 +92,7 @@
}
@Test
- fun `location based view models receive same icon id when common impl updates`() =
+ fun locationBasedViewModelsReceiveSameIconIdWhenCommonImplUpdates() =
testScope.runTest {
var latestHome: SignalIconModel? = null
val homeJob = homeIcon.icon.onEach { latestHome = it }.launchIn(this)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
index 297cb9d..2b7bc78 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
@@ -249,7 +249,7 @@
}
@Test
- fun `icon - uses empty state - when not in service`() =
+ fun icon_usesEmptyState_whenNotInService() =
testScope.runTest {
var latest: SignalIconModel? = null
val job = underTest.icon.onEach { latest = it }.launchIn(this)
@@ -480,7 +480,7 @@
}
@Test
- fun `network type - alwaysShow - shown when not default`() =
+ fun networkType_alwaysShow_shownWhenNotDefault() =
testScope.runTest {
interactor.networkTypeIconGroup.value = NetworkTypeIconModel.DefaultIcon(THREE_G)
interactor.mobileIsDefault.value = false
@@ -500,7 +500,7 @@
}
@Test
- fun `network type - not shown when not default`() =
+ fun networkType_notShownWhenNotDefault() =
testScope.runTest {
interactor.networkTypeIconGroup.value = NetworkTypeIconModel.DefaultIcon(THREE_G)
interactor.isDataConnected.value = true
@@ -531,7 +531,7 @@
}
@Test
- fun `data activity - null when config is off`() =
+ fun dataActivity_nullWhenConfigIsOff() =
testScope.runTest {
// Create a new view model here so the constants are properly read
whenever(constants.shouldShowActivityConfig).thenReturn(false)
@@ -563,7 +563,7 @@
}
@Test
- fun `data activity - config on - test indicators`() =
+ fun dataActivity_configOn_testIndicators() =
testScope.runTest {
// Create a new view model here so the constants are properly read
whenever(constants.shouldShowActivityConfig).thenReturn(true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
index f8e1aa9..f0458fa 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModelTest.kt
@@ -111,7 +111,7 @@
}
@Test
- fun `caching - mobile icon view model is reused for same sub id`() =
+ fun caching_mobileIconViewModelIsReusedForSameSubId() =
testScope.runTest {
val model1 = underTest.viewModelForSub(1, StatusBarLocation.HOME)
val model2 = underTest.viewModelForSub(1, StatusBarLocation.QS)
@@ -120,7 +120,7 @@
}
@Test
- fun `caching - invalid view models are removed from cache when sub disappears`() =
+ fun caching_invalidViewModelsAreRemovedFromCacheWhenSubDisappears() =
testScope.runTest {
// Retrieve models to trigger caching
val model1 = underTest.viewModelForSub(1, StatusBarLocation.HOME)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt
index 70d2d2b..30b95ef 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt
@@ -105,7 +105,7 @@
}
@Test
- fun `switcher active repo - updates when demo mode changes`() =
+ fun switcherActiveRepo_updatesWhenDemoModeChanges() =
testScope.runTest {
assertThat(underTest.activeRepo.value).isSameInstanceAs(realImpl)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
index d30e024..dc68180 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/prod/WifiRepositoryImplTest.kt
@@ -994,7 +994,7 @@
}
@Test
- fun wifiNetwork_currentNetworkLost_flowHasNoNetwork() =
+ fun wifiNetwork_currentActiveNetworkLost_flowHasNoNetwork() =
testScope.runTest {
var latest: WifiNetworkModel? = null
val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
@@ -1012,6 +1012,33 @@
job.cancel()
}
+ /** Possible regression test for b/278618530. */
+ @Test
+ fun wifiNetwork_currentCarrierMergedNetworkLost_flowHasNoNetwork() =
+ testScope.runTest {
+ var latest: WifiNetworkModel? = null
+ val job = underTest.wifiNetwork.onEach { latest = it }.launchIn(this)
+
+ val wifiInfo =
+ mock<WifiInfo>().apply {
+ whenever(this.isPrimary).thenReturn(true)
+ whenever(this.isCarrierMerged).thenReturn(true)
+ }
+
+ getNetworkCallback()
+ .onCapabilitiesChanged(NETWORK, createWifiNetworkCapabilities(wifiInfo))
+ assertThat(latest is WifiNetworkModel.CarrierMerged).isTrue()
+ assertThat((latest as WifiNetworkModel.CarrierMerged).networkId).isEqualTo(NETWORK_ID)
+
+ // WHEN we lose our current network
+ getNetworkCallback().onLost(NETWORK)
+
+ // THEN we update to no network
+ assertThat(latest is WifiNetworkModel.Inactive).isTrue()
+
+ job.cancel()
+ }
+
@Test
fun wifiNetwork_unknownNetworkLost_flowHasPreviousNetwork() =
testScope.runTest {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapterTest.kt
index 0a3da0b..67727ae 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapterTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseUserSwitcherAdapterTest.kt
@@ -87,7 +87,7 @@
}
@Test
- fun `Adds self to controller in constructor`() {
+ fun addsSelfToControllerInConstructor() {
val captor = kotlinArgumentCaptor<WeakReference<BaseUserSwitcherAdapter>>()
verify(controller).addAdapter(captor.capture())
@@ -100,7 +100,7 @@
}
@Test
- fun `count - ignores restricted users when device is locked`() {
+ fun count_ignoresRestrictedUsersWhenDeviceIsLocked() {
whenever(controller.isKeyguardShowing).thenReturn(true)
users =
ArrayList(
@@ -131,7 +131,7 @@
}
@Test
- fun `count - does not ignore restricted users when device is not locked`() {
+ fun count_doesNotIgnoreRestrictedUsersWhenDeviceIsNotLocked() {
whenever(controller.isKeyguardShowing).thenReturn(false)
users =
ArrayList(
@@ -185,7 +185,7 @@
}
@Test
- fun `getName - non guest - returns real name`() {
+ fun getName_nonGuest_returnsRealName() {
val userRecord =
createUserRecord(
id = 1,
@@ -196,7 +196,7 @@
}
@Test
- fun `getName - guest and selected - returns exit guest action name`() {
+ fun getName_guestAndSelected_returnsExitGuestActionName() {
val expected = "Exit guest"
context.orCreateTestableResources.addOverride(
com.android.settingslib.R.string.guest_exit_quick_settings_button,
@@ -215,7 +215,7 @@
}
@Test
- fun `getName - guest and not selected - returns enter guest action name`() {
+ fun getName_guestAndNotSelected_returnsEnterGuestActionName() {
val expected = "Guest"
context.orCreateTestableResources.addOverride(
com.android.internal.R.string.guest_name,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
index 391c8ca..50bb058 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java
@@ -70,8 +70,6 @@
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.flags.FakeFeatureFlags;
-import com.android.systemui.flags.Flags;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.RemoteInputController;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -453,17 +451,13 @@
private RemoteInputViewController bindController(
RemoteInputView view,
NotificationEntry entry) {
- FakeFeatureFlags fakeFeatureFlags = new FakeFeatureFlags();
- fakeFeatureFlags.set(Flags.NOTIFICATION_INLINE_REPLY_ANIMATION, true);
RemoteInputViewControllerImpl viewController = new RemoteInputViewControllerImpl(
view,
entry,
mRemoteInputQuickSettingsDisabler,
mController,
mShortcutManager,
- mUiEventLoggerFake,
- fakeFeatureFlags
- );
+ mUiEventLoggerFake);
viewController.bind();
return viewController;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt
index 17f8ec2..0b3dd66 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/stylus/StylusManagerTest.kt
@@ -101,9 +101,12 @@
whenever(stylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true)
whenever(btStylusDevice.supportsSource(InputDevice.SOURCE_STYLUS)).thenReturn(true)
+ whenever(btStylusDevice.isExternal).thenReturn(true)
+
whenever(stylusDevice.bluetoothAddress).thenReturn(null)
whenever(btStylusDevice.bluetoothAddress).thenReturn(STYLUS_BT_ADDRESS)
+ whenever(btStylusDevice.batteryState).thenReturn(batteryState)
whenever(stylusDevice.batteryState).thenReturn(batteryState)
whenever(batteryState.capacity).thenReturn(0.5f)
@@ -148,6 +151,27 @@
}
@Test
+ fun startListener_hasNotStarted_registersExistingBluetoothDevice() {
+ whenever(inputManager.inputDeviceIds).thenReturn(intArrayOf(BT_STYLUS_DEVICE_ID))
+
+ stylusManager =
+ StylusManager(
+ mContext,
+ inputManager,
+ bluetoothAdapter,
+ handler,
+ EXECUTOR,
+ featureFlags,
+ uiEventLogger
+ )
+
+ stylusManager.startListener()
+
+ verify(bluetoothAdapter, times(1))
+ .addOnMetadataChangedListener(bluetoothDevice, EXECUTOR, stylusManager)
+ }
+
+ @Test
fun startListener_hasStarted_doesNothing() {
stylusManager.startListener()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
index dfbd61b..8fc0a1a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
@@ -31,8 +31,8 @@
import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
-import com.android.systemui.shade.NotificationPanelViewController
import com.android.systemui.shade.ShadeFoldAnimator
+import com.android.systemui.shade.ShadeViewController
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.phone.CentralSurfaces
@@ -74,7 +74,7 @@
@Mock lateinit var lightRevealScrim: LightRevealScrim
- @Mock lateinit var notificationPanelViewController: NotificationPanelViewController
+ @Mock lateinit var shadeViewController: ShadeViewController
@Mock lateinit var viewGroup: ViewGroup
@@ -100,13 +100,12 @@
deviceStates = FoldableTestUtils.findDeviceStates(context)
// TODO(b/254878364): remove this call to NPVC.getView()
- whenever(notificationPanelViewController.shadeFoldAnimator).thenReturn(shadeFoldAnimator)
+ whenever(shadeViewController.shadeFoldAnimator).thenReturn(shadeFoldAnimator)
whenever(shadeFoldAnimator.view).thenReturn(viewGroup)
whenever(viewGroup.viewTreeObserver).thenReturn(viewTreeObserver)
whenever(wakefulnessLifecycle.lastSleepReason)
.thenReturn(PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD)
- whenever(centralSurfaces.notificationPanelViewController)
- .thenReturn(notificationPanelViewController)
+ whenever(centralSurfaces.shadeViewController).thenReturn(shadeViewController)
whenever(shadeFoldAnimator.startFoldToAodAnimation(any(), any(), any())).then {
val onActionStarted = it.arguments[0] as Runnable
onActionStarted.run()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt
index f14009aa..70eadce 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/progress/UnfoldRemoteFilterTest.kt
@@ -39,16 +39,36 @@
}
@Test
- fun onTransitionProgress_withInterval_propagated() {
- runOnMainThreadWithInterval(
- { progressProvider.onTransitionStarted() },
- { progressProvider.onTransitionProgress(0.5f) }
- )
+ fun onTransitionProgress_firstProgressEvent_propagatedImmediately() {
+ progressProvider.onTransitionStarted()
+ progressProvider.onTransitionProgress(0.5f)
listener.assertLastProgress(0.5f)
}
@Test
+ fun onTransitionProgress_secondProgressEvent_isNotPropagatedImmediately() =
+ InstrumentationRegistry.getInstrumentation().runOnMainSync {
+ progressProvider.onTransitionStarted()
+ progressProvider.onTransitionProgress(0.5f)
+ progressProvider.onTransitionProgress(0.8f)
+
+ // 0.8f should be set only later, after the animation
+ listener.assertLastProgress(0.5f)
+ }
+
+ @Test
+ fun onTransitionProgress_severalProgressEventsWithInterval_propagated() {
+ runOnMainThreadWithInterval(
+ { progressProvider.onTransitionStarted() },
+ { progressProvider.onTransitionProgress(0.5f) },
+ { progressProvider.onTransitionProgress(0.8f) }
+ )
+
+ listener.assertLastProgress(0.8f)
+ }
+
+ @Test
fun onTransitionEnded_propagated() {
runOnMainThreadWithInterval(
{ progressProvider.onTransitionStarted() },
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
index e2f3cf7..079fbcd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/data/repository/UserRepositoryImplTest.kt
@@ -164,7 +164,7 @@
}
@Test
- fun `refreshUsers - sorts by creation time - guest user last`() = runSelfCancelingTest {
+ fun refreshUsers_sortsByCreationTime_guestUserLast() = runSelfCancelingTest {
underTest = create(this)
val unsortedUsers =
setUpUsers(
@@ -205,7 +205,7 @@
return userInfos
}
@Test
- fun `userTrackerCallback - updates selectedUserInfo`() = runSelfCancelingTest {
+ fun userTrackerCallback_updatesSelectedUserInfo() = runSelfCancelingTest {
underTest = create(this)
var selectedUserInfo: UserInfo? = null
underTest.selectedUserInfo.onEach { selectedUserInfo = it }.launchIn(this)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
index 0c119fd..948670f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/GuestUserInteractorTest.kt
@@ -97,13 +97,13 @@
}
@Test
- fun `registers broadcast receivers`() {
+ fun registersBroadcastReceivers() {
verify(resumeSessionReceiver).register()
verify(resetOrExitSessionReceiver).register()
}
@Test
- fun `onDeviceBootCompleted - allowed to add - create guest`() =
+ fun onDeviceBootCompleted_allowedToAdd_createGuest() =
runBlocking(IMMEDIATE) {
setAllowedToAdd()
@@ -114,7 +114,7 @@
}
@Test
- fun `onDeviceBootCompleted - await provisioning - and create guest`() =
+ fun onDeviceBootCompleted_awaitProvisioning_andCreateGuest() =
runBlocking(IMMEDIATE) {
setAllowedToAdd(isAllowed = false)
underTest.onDeviceBootCompleted()
@@ -145,7 +145,7 @@
}
@Test
- fun `createAndSwitchTo - fails to create - does not switch to`() =
+ fun createAndSwitchTo_failsToCreate_doesNotSwitchTo() =
runBlocking(IMMEDIATE) {
whenever(manager.createGuest(any())).thenReturn(null)
@@ -162,7 +162,7 @@
}
@Test
- fun `exit - returns to target user`() =
+ fun exit_returnsToTargetUser() =
runBlocking(IMMEDIATE) {
repository.setSelectedUserInfo(GUEST_USER_INFO)
@@ -182,7 +182,7 @@
}
@Test
- fun `exit - returns to last non-guest`() =
+ fun exit_returnsToLastNonGuest() =
runBlocking(IMMEDIATE) {
val expectedUserId = NON_GUEST_USER_INFO.id
whenever(manager.getUserInfo(expectedUserId)).thenReturn(NON_GUEST_USER_INFO)
@@ -204,7 +204,7 @@
}
@Test
- fun `exit - last non-guest was removed - returns to main user`() =
+ fun exit_lastNonGuestWasRemoved_returnsToMainUser() =
runBlocking(IMMEDIATE) {
val removedUserId = 310
val mainUserId = 10
@@ -227,7 +227,7 @@
}
@Test
- fun `exit - guest was ephemeral - it is removed`() =
+ fun exit_guestWasEphemeral_itIsRemoved() =
runBlocking(IMMEDIATE) {
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
repository.setUserInfos(listOf(NON_GUEST_USER_INFO, EPHEMERAL_GUEST_USER_INFO))
@@ -250,7 +250,7 @@
}
@Test
- fun `exit - force remove guest - it is removed`() =
+ fun exit_forceRemoveGuest_itIsRemoved() =
runBlocking(IMMEDIATE) {
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
repository.setSelectedUserInfo(GUEST_USER_INFO)
@@ -272,7 +272,7 @@
}
@Test
- fun `exit - selected different from guest user - do nothing`() =
+ fun exit_selectedDifferentFromGuestUser_doNothing() =
runBlocking(IMMEDIATE) {
repository.setSelectedUserInfo(NON_GUEST_USER_INFO)
@@ -289,7 +289,7 @@
}
@Test
- fun `exit - selected is actually not a guest user - do nothing`() =
+ fun exit_selectedIsActuallyNotAguestUser_doNothing() =
runBlocking(IMMEDIATE) {
repository.setSelectedUserInfo(NON_GUEST_USER_INFO)
@@ -306,7 +306,7 @@
}
@Test
- fun `remove - returns to target user`() =
+ fun remove_returnsToTargetUser() =
runBlocking(IMMEDIATE) {
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
repository.setSelectedUserInfo(GUEST_USER_INFO)
@@ -327,7 +327,7 @@
}
@Test
- fun `remove - selected different from guest user - do nothing`() =
+ fun remove_selectedDifferentFromGuestUser_doNothing() =
runBlocking(IMMEDIATE) {
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
repository.setSelectedUserInfo(NON_GUEST_USER_INFO)
@@ -344,7 +344,7 @@
}
@Test
- fun `remove - selected is actually not a guest user - do nothing`() =
+ fun remove_selectedIsActuallyNotAguestUser_doNothing() =
runBlocking(IMMEDIATE) {
whenever(manager.markGuestForDeletion(anyInt())).thenReturn(true)
repository.setSelectedUserInfo(NON_GUEST_USER_INFO)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/RefreshUsersSchedulerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/RefreshUsersSchedulerTest.kt
index 593ce1f..b30f77a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/RefreshUsersSchedulerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/RefreshUsersSchedulerTest.kt
@@ -45,7 +45,7 @@
}
@Test
- fun `pause - prevents the next refresh from happening`() =
+ fun pause_preventsTheNextRefreshFromHappening() =
runBlocking(IMMEDIATE) {
underTest =
RefreshUsersScheduler(
@@ -60,7 +60,7 @@
}
@Test
- fun `unpauseAndRefresh - forces the refresh even when paused`() =
+ fun unpauseAndRefresh_forcesTheRefreshEvenWhenPaused() =
runBlocking(IMMEDIATE) {
underTest =
RefreshUsersScheduler(
@@ -76,7 +76,7 @@
}
@Test
- fun `refreshIfNotPaused - refreshes when not paused`() =
+ fun refreshIfNotPaused_refreshesWhenNotPaused() =
runBlocking(IMMEDIATE) {
underTest =
RefreshUsersScheduler(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
index adba538..d252d53 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/domain/interactor/UserInteractorTest.kt
@@ -182,7 +182,7 @@
}
@Test
- fun `testKeyguardUpdateMonitor_onKeyguardGoingAway`() =
+ fun testKeyguardUpdateMonitor_onKeyguardGoingAway() =
testScope.runTest {
val argumentCaptor = ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback::class.java)
verify(keyguardUpdateMonitor).registerCallback(argumentCaptor.capture())
@@ -194,7 +194,7 @@
}
@Test
- fun `onRecordSelected - user`() =
+ fun onRecordSelected_user() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -211,7 +211,7 @@
}
@Test
- fun `onRecordSelected - switch to guest user`() =
+ fun onRecordSelected_switchToGuestUser() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -227,7 +227,7 @@
}
@Test
- fun `onRecordSelected - switch to restricted user`() =
+ fun onRecordSelected_switchToRestrictedUser() =
testScope.runTest {
var userInfos = createUserInfos(count = 2, includeGuest = false).toMutableList()
userInfos.add(
@@ -252,7 +252,7 @@
}
@Test
- fun `onRecordSelected - enter guest mode`() =
+ fun onRecordSelected_enterGuestMode() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -272,7 +272,7 @@
}
@Test
- fun `onRecordSelected - action`() =
+ fun onRecordSelected_action() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -288,7 +288,7 @@
}
@Test
- fun `users - switcher enabled`() =
+ fun users_switcherEnabled() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -301,7 +301,7 @@
}
@Test
- fun `users - switches to second user`() =
+ fun users_switchesToSecondUser() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -315,7 +315,7 @@
}
@Test
- fun `users - switcher not enabled`() =
+ fun users_switcherNotEnabled() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -342,7 +342,7 @@
}
@Test
- fun `actions - device unlocked`() =
+ fun actions_deviceUnlocked() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
@@ -366,7 +366,7 @@
}
@Test
- fun `actions - device unlocked - full screen`() =
+ fun actions_deviceUnlocked_fullScreen() =
testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
val userInfos = createUserInfos(count = 2, includeGuest = false)
@@ -389,7 +389,7 @@
}
@Test
- fun `actions - device unlocked user not primary - empty list`() =
+ fun actions_deviceUnlockedUserNotPrimary_emptyList() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -402,7 +402,7 @@
}
@Test
- fun `actions - device unlocked user is guest - empty list`() =
+ fun actions_deviceUnlockedUserIsGuest_emptyList() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true)
assertThat(userInfos[1].isGuest).isTrue()
@@ -416,7 +416,7 @@
}
@Test
- fun `actions - device locked add from lockscreen set - full list`() =
+ fun actions_deviceLockedAddFromLockscreenSet_fullList() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -442,7 +442,7 @@
}
@Test
- fun `actions - device locked add from lockscreen set - full list - full screen`() =
+ fun actions_deviceLockedAddFromLockscreenSet_fullList_fullScreen() =
testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
val userInfos = createUserInfos(count = 2, includeGuest = false)
@@ -469,7 +469,7 @@
}
@Test
- fun `actions - device locked - only manage user is shown`() =
+ fun actions_deviceLocked_onlymanageUserIsShown() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -482,7 +482,7 @@
}
@Test
- fun `executeAction - add user - dialog shown`() =
+ fun executeAction_addUser_dialogShown() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -509,7 +509,7 @@
}
@Test
- fun `executeAction - add supervised user - dismisses dialog and starts activity`() =
+ fun executeAction_addSupervisedUser_dismissesDialogAndStartsActivity() =
testScope.runTest {
underTest.executeAction(UserActionModel.ADD_SUPERVISED_USER)
@@ -523,7 +523,7 @@
}
@Test
- fun `executeAction - navigate to manage users`() =
+ fun executeAction_navigateToManageUsers() =
testScope.runTest {
underTest.executeAction(UserActionModel.NAVIGATE_TO_USER_MANAGEMENT)
@@ -533,7 +533,7 @@
}
@Test
- fun `executeAction - guest mode`() =
+ fun executeAction_guestMode() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -571,7 +571,7 @@
}
@Test
- fun `selectUser - already selected guest re-selected - exit guest dialog`() =
+ fun selectUser_alreadySelectedGuestReSelected_exitGuestDialog() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true)
val guestUserInfo = userInfos[1]
@@ -592,7 +592,7 @@
}
@Test
- fun `selectUser - currently guest non-guest selected - exit guest dialog`() =
+ fun selectUser_currentlyGuestNonGuestSelected_exitGuestDialog() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = true)
val guestUserInfo = userInfos[1]
@@ -610,7 +610,7 @@
}
@Test
- fun `selectUser - not currently guest - switches users`() =
+ fun selectUser_notCurrentlyGuest_switchesUsers() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -626,7 +626,7 @@
}
@Test
- fun `Telephony call state changes - refreshes users`() =
+ fun telephonyCallStateChanges_refreshesUsers() =
testScope.runTest {
runCurrent()
@@ -639,7 +639,7 @@
}
@Test
- fun `User switched broadcast`() =
+ fun userSwitchedBroadcast() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -670,7 +670,7 @@
}
@Test
- fun `User info changed broadcast`() =
+ fun userInfoChangedBroadcast() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -690,7 +690,7 @@
}
@Test
- fun `System user unlocked broadcast - refresh users`() =
+ fun systemUserUnlockedBroadcast_refreshUsers() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -710,7 +710,7 @@
}
@Test
- fun `Non-system user unlocked broadcast - do not refresh users`() =
+ fun nonSystemUserUnlockedBroadcast_doNotRefreshUsers() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
@@ -799,7 +799,7 @@
}
@Test
- fun `users - secondary user - guest user can be switched to`() =
+ fun users_secondaryUser_guestUserCanBeSwitchedTo() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -812,7 +812,7 @@
}
@Test
- fun `users - secondary user - no guest action`() =
+ fun users_secondaryUser_noGuestAction() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -824,7 +824,7 @@
}
@Test
- fun `users - secondary user - no guest user record`() =
+ fun users_secondaryUser_noGuestUserRecord() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = true)
userRepository.setUserInfos(userInfos)
@@ -835,7 +835,7 @@
}
@Test
- fun `show user switcher - full screen disabled - shows dialog switcher`() =
+ fun showUserSwitcher_fullScreenDisabled_showsDialogSwitcher() =
testScope.runTest {
val expandable = mock<Expandable>()
underTest.showUserSwitcher(expandable)
@@ -851,7 +851,7 @@
}
@Test
- fun `show user switcher - full screen enabled - launches full screen dialog`() =
+ fun showUserSwitcher_fullScreenEnabled_launchesFullScreenDialog() =
testScope.runTest {
featureFlags.set(Flags.FULL_SCREEN_USER_SWITCHER, true)
@@ -869,7 +869,7 @@
}
@Test
- fun `users - secondary user - managed profile is not included`() =
+ fun users_secondaryUser_managedProfileIsNotIncluded() =
testScope.runTest {
val userInfos = createUserInfos(count = 3, includeGuest = false).toMutableList()
userInfos.add(
@@ -889,7 +889,7 @@
}
@Test
- fun `current user is not primary and user switcher is disabled`() =
+ fun currentUserIsNotPrimaryAndUserSwitcherIsDisabled() =
testScope.runTest {
val userInfos = createUserInfos(count = 2, includeGuest = false)
userRepository.setUserInfos(userInfos)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt
index 9b74c1f..fd8c6c7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/StatusBarUserChipViewModelTest.kt
@@ -137,7 +137,7 @@
}
@Test
- fun `config is false - chip is disabled`() {
+ fun configIsFalse_chipIsDisabled() {
// the enabled bit is set at SystemUI startup, so recreate the view model here
userRepository.isStatusBarUserChipEnabled = false
underTest = viewModel()
@@ -146,7 +146,7 @@
}
@Test
- fun `config is true - chip is enabled`() {
+ fun configIsTrue_chipIsEnabled() {
// the enabled bit is set at SystemUI startup, so recreate the view model here
userRepository.isStatusBarUserChipEnabled = true
underTest = viewModel()
@@ -155,7 +155,7 @@
}
@Test
- fun `should show chip criteria - single user`() =
+ fun shouldShowChipCriteria_singleUser() =
testScope.runTest {
userRepository.setUserInfos(listOf(USER_0))
userRepository.setSelectedUserInfo(USER_0)
@@ -172,7 +172,7 @@
}
@Test
- fun `should show chip criteria - multiple users`() =
+ fun shouldShowChipCriteria_multipleUsers() =
testScope.runTest {
setMultipleUsers()
@@ -186,7 +186,7 @@
}
@Test
- fun `user chip name - shows selected user info`() =
+ fun userChipName_showsSelectedUserInfo() =
testScope.runTest {
setMultipleUsers()
@@ -206,7 +206,7 @@
}
@Test
- fun `user chip avatar - shows selected user info`() =
+ fun userChipAvatar_showsSelectedUserInfo() =
testScope.runTest {
setMultipleUsers()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
index a342dad..9155084 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/ui/viewmodel/UserSwitcherViewModelTest.kt
@@ -232,7 +232,7 @@
}
@Test
- fun `maximumUserColumns - few users`() =
+ fun maximumUserColumns_fewUsers() =
testScope.runTest {
setUsers(count = 2)
val values = mutableListOf<Int>()
@@ -244,7 +244,7 @@
}
@Test
- fun `maximumUserColumns - many users`() =
+ fun maximumUserColumns_manyUsers() =
testScope.runTest {
setUsers(count = 5)
val values = mutableListOf<Int>()
@@ -255,7 +255,7 @@
}
@Test
- fun `isOpenMenuButtonVisible - has actions - true`() =
+ fun isOpenMenuButtonVisible_hasActions_true() =
testScope.runTest {
setUsers(2)
@@ -267,7 +267,7 @@
}
@Test
- fun `isOpenMenuButtonVisible - no actions - false`() =
+ fun isOpenMenuButtonVisible_noActions_false() =
testScope.runTest {
val userInfos = setUsers(2)
userRepository.setSelectedUserInfo(userInfos[1])
@@ -298,7 +298,7 @@
}
@Test
- fun `menu actions`() =
+ fun menuActions() =
testScope.runTest {
setUsers(2)
val actions = mutableListOf<List<UserActionViewModel>>()
@@ -318,7 +318,7 @@
}
@Test
- fun `isFinishRequested - finishes when cancel button is clicked`() =
+ fun isFinishRequested_finishesWhenCancelButtonIsClicked() =
testScope.runTest {
setUsers(count = 2)
val isFinishRequested = mutableListOf<Boolean>()
@@ -338,7 +338,7 @@
}
@Test
- fun `guest selected -- name is exit guest`() =
+ fun guestSelected_nameIsExitGuest() =
testScope.runTest {
val userInfos =
listOf(
@@ -386,7 +386,7 @@
}
@Test
- fun `guest not selected -- name is guest`() =
+ fun guestNotSelected_nameIsGuest() =
testScope.runTest {
val userInfos =
listOf(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
index 6e109ea..23a9207 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockTest.java
@@ -45,7 +45,7 @@
mInner = WakeLock.createWakeLockInner(mContext,
WakeLockTest.class.getName(),
PowerManager.PARTIAL_WAKE_LOCK);
- mWakeLock = WakeLock.wrap(mInner, 20000);
+ mWakeLock = WakeLock.wrap(mInner, null, 20000);
}
@After
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
index eb26888..e06b43a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java
@@ -58,6 +58,7 @@
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -370,6 +371,13 @@
verify(mCsdWarningDialog).show();
}
+ @After
+ public void teardown() {
+ if (mDialog != null) {
+ mDialog.clearInternalHandlerAfterTest();
+ }
+ }
+
/*
@Test
public void testContentDescriptions() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsControllerTest.kt
index 9bd3a79..3901d72 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/controller/WalletContextualSuggestionsControllerTest.kt
@@ -93,7 +93,7 @@
}
@Test
- fun `state - has wallet cards- callbacks called`() = runTest {
+ fun state_hasWalletCardsCallbacksCalled() = runTest {
setUpWalletClient(listOf(CARD_1, CARD_2, PAYMENT_CARD))
val controller = createWalletContextualSuggestionsController(backgroundScope)
var latest1 = emptyList<WalletCard>()
@@ -115,7 +115,7 @@
}
@Test
- fun `state - no wallet cards - set suggestion cards`() = runTest {
+ fun state_noWalletCards_setSuggestionCards() = runTest {
setUpWalletClient(emptyList())
val controller = createWalletContextualSuggestionsController(backgroundScope)
val latest =
@@ -132,7 +132,7 @@
}
@Test
- fun `state - has wallet cards - set and update suggestion cards`() = runTest {
+ fun state_hasWalletCards_setAndUpdateSuggestionCards() = runTest {
setUpWalletClient(listOf(CARD_1, CARD_2, PAYMENT_CARD))
val controller = createWalletContextualSuggestionsController(backgroundScope)
val latest =
@@ -151,7 +151,7 @@
}
@Test
- fun `state - wallet cards error`() = runTest {
+ fun state_walletCardsError() = runTest {
setUpWalletClient(shouldFail = true)
val controller = createWalletContextualSuggestionsController(backgroundScope)
val latest =
@@ -167,7 +167,7 @@
}
@Test
- fun `state - has wallet cards - received contextual cards - feature disabled`() = runTest {
+ fun state_hasWalletCards_receivedContextualCards_featureDisabled() = runTest {
whenever(featureFlags.isEnabled(eq(Flags.ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS)))
.thenReturn(false)
setUpWalletClient(listOf(CARD_1, CARD_2, PAYMENT_CARD))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
index e824565..bc3a5b7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -24,7 +24,6 @@
import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE;
import static com.google.common.truth.Truth.assertThat;
@@ -85,7 +84,6 @@
import com.android.internal.colorextraction.ColorExtractor;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
-import com.android.launcher3.icons.BubbleBadgeIconFactory;
import com.android.launcher3.icons.BubbleIconFactory;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -1227,8 +1225,7 @@
mBubbleController,
mBubbleController.getStackView(),
new BubbleIconFactory(mContext,
- mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size)),
- new BubbleBadgeIconFactory(mContext,
+ mContext.getResources().getDimensionPixelSize(R.dimen.bubble_size),
mContext.getResources().getDimensionPixelSize(R.dimen.bubble_badge_size),
mContext.getResources().getColor(R.color.important_conversation),
mContext.getResources().getDimensionPixelSize(
@@ -1257,6 +1254,7 @@
stackView.showManageMenu(true);
assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
assertTrue(stackView.isManageMenuSettingsVisible());
+ assertTrue(stackView.isManageMenuDontBubbleVisible());
}
@Test
@@ -1274,6 +1272,7 @@
stackView.showManageMenu(true);
assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
assertFalse(stackView.isManageMenuSettingsVisible());
+ assertFalse(stackView.isManageMenuDontBubbleVisible());
}
@Test
@@ -1734,13 +1733,13 @@
@Test
public void testShowOrHideAppBubble_addsAndExpand() {
assertThat(mBubbleController.isStackExpanded()).isFalse();
- assertThat(mBubbleData.getBubbleInStackWithKey(KEY_APP_BUBBLE)).isNull();
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
verify(mBubbleController).inflateAndAdd(any(Bubble.class), /* suppressFlyout= */ eq(true),
/* showInShade= */ eq(false));
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(
+ Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0));
assertThat(mBubbleController.isStackExpanded()).isTrue();
}
@@ -1754,7 +1753,8 @@
// Calling this while collapsed will expand the app bubble
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(
+ Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0));
assertThat(mBubbleController.isStackExpanded()).isTrue();
assertThat(mBubbleData.getBubbles().size()).isEqualTo(2);
}
@@ -1762,13 +1762,15 @@
@Test
public void testShowOrHideAppBubble_collapseIfSelected() {
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(
+ Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0));
assertThat(mBubbleController.isStackExpanded()).isTrue();
// Calling this while the app bubble is expanded should collapse the stack
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(
+ Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0));
assertThat(mBubbleController.isStackExpanded()).isFalse();
assertThat(mBubbleData.getBubbles().size()).isEqualTo(1);
assertThat(mBubbleData.getBubbles().get(0).getUser()).isEqualTo(mUser0);
@@ -1777,8 +1779,9 @@
@Test
public void testShowOrHideAppBubbleWithNonPrimaryUser_bubbleCollapsedWithExpectedUser() {
UserHandle user10 = createUserHandle(/* userId = */ 10);
+ String appBubbleKey = Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), user10);
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, user10, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(appBubbleKey);
assertThat(mBubbleController.isStackExpanded()).isTrue();
assertThat(mBubbleData.getBubbles().size()).isEqualTo(1);
assertThat(mBubbleData.getBubbles().get(0).getUser()).isEqualTo(user10);
@@ -1786,13 +1789,28 @@
// Calling this while the app bubble is expanded should collapse the stack
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, user10, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(appBubbleKey);
assertThat(mBubbleController.isStackExpanded()).isFalse();
assertThat(mBubbleData.getBubbles().size()).isEqualTo(1);
assertThat(mBubbleData.getBubbles().get(0).getUser()).isEqualTo(user10);
}
@Test
+ public void testShowOrHideAppBubbleOnUser10AndThenUser0_user0BubbleExpanded() {
+ UserHandle user10 = createUserHandle(/* userId = */ 10);
+ mBubbleController.showOrHideAppBubble(mAppBubbleIntent, user10, mAppBubbleIcon);
+
+ String appBubbleUser0Key = Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0);
+ mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
+
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(appBubbleUser0Key);
+ assertThat(mBubbleController.isStackExpanded()).isTrue();
+ assertThat(mBubbleData.getBubbles()).hasSize(2);
+ assertThat(mBubbleData.getBubbles().get(0).getUser()).isEqualTo(mUser0);
+ assertThat(mBubbleData.getBubbles().get(1).getUser()).isEqualTo(user10);
+ }
+
+ @Test
public void testShowOrHideAppBubble_selectIfNotSelected() {
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
mBubbleController.updateBubble(mBubbleEntry);
@@ -1801,7 +1819,8 @@
assertThat(mBubbleController.isStackExpanded()).isTrue();
mBubbleController.showOrHideAppBubble(mAppBubbleIntent, mUser0, mAppBubbleIcon);
- assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(KEY_APP_BUBBLE);
+ assertThat(mBubbleData.getSelectedBubble().getKey()).isEqualTo(
+ Bubble.getAppBubbleKeyForApp(mContext.getPackageName(), mUser0));
assertThat(mBubbleController.isStackExpanded()).isTrue();
assertThat(mBubbleData.getBubbles().size()).isEqualTo(2);
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
index 1bab997..1ec4e8c 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
@@ -22,12 +22,14 @@
import static org.mockito.Mockito.when;
import android.app.Instrumentation;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.MessageQueue;
import android.os.ParcelFileDescriptor;
import android.testing.DexmakerShareClassLoaderRule;
import android.testing.LeakCheck;
+import android.testing.TestWithLooperRule;
import android.testing.TestableLooper;
import android.util.Log;
@@ -73,12 +75,21 @@
@Rule
public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
new DexmakerShareClassLoaderRule();
+
+ // set the highest order so it's the innermost rule
+ @Rule(order = Integer.MAX_VALUE)
+ public TestWithLooperRule mlooperRule = new TestWithLooperRule();
+
public TestableDependency mDependency;
private Instrumentation mRealInstrumentation;
private FakeBroadcastDispatcher mFakeBroadcastDispatcher;
@Before
public void SysuiSetup() throws Exception {
+ // Manually associate a Display to context for Robolectric test. Similar to b/214297409
+ if (isRobolectricTest()) {
+ mContext = mContext.createDefaultDisplayContext();
+ }
SystemUIInitializer initializer =
SystemUIInitializerFactory.createFromConfigNoAssert(mContext);
initializer.init(true);
@@ -215,6 +226,10 @@
idler.waitForIdle();
}
+ public static boolean isRobolectricTest() {
+ return Build.FINGERPRINT.contains("robolectric");
+ }
+
private static final void validateThread(Looper l) {
if (Looper.myLooper() == l) {
throw new RuntimeException(
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java
index 0674ea8..5ff57aa 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.hardware.display.DisplayManager;
import android.os.Handler;
import android.os.UserHandle;
import android.testing.LeakCheck;
@@ -56,6 +57,11 @@
return context;
}
+ public SysuiTestableContext createDefaultDisplayContext() {
+ Display display = getBaseContext().getSystemService(DisplayManager.class).getDisplays()[0];
+ return (SysuiTestableContext) createDisplayContext(display);
+ }
+
public void cleanUpReceivers(String testName) {
Set<BroadcastReceiver> copy;
synchronized (mRegisteredReceivers) {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
new file mode 100644
index 0000000..8444c7b
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/accessibility/data/repository/FakeAccessibilityRepository.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility.data.repository
+
+import kotlinx.coroutines.flow.MutableStateFlow
+
+class FakeAccessibilityRepository(
+ override val isTouchExplorationEnabled: MutableStateFlow<Boolean> = MutableStateFlow(false)
+) : AccessibilityRepository
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java
index 553b8a42..cd2ff0b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java
@@ -55,7 +55,7 @@
private WakeLock mWakeLock;
public Builder(Context context) {
- super(context);
+ super(context, null);
}
public void setWakeLock(WakeLock wakeLock) {
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt
index 3041888..843cc3b 100644
--- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/UnfoldRemoteFilter.kt
@@ -34,6 +34,7 @@
}
private var inProgress = false
+ private var receivedProgressEvent = false
private var processedProgress: Float = 1.0f
set(newProgress) {
@@ -54,7 +55,16 @@
override fun onTransitionProgress(progress: Float) {
logCounter({ "$TAG#plain_remote_progress" }, progress)
if (inProgress) {
- springAnimation.animateToFinalPosition(progress)
+ if (receivedProgressEvent) {
+ // We have received at least one progress event, animate from the previous
+ // progress to the current
+ springAnimation.animateToFinalPosition(progress)
+ } else {
+ // This is the first progress event after starting the animation, send it
+ // straightaway and set the spring value without animating it
+ processedProgress = progress
+ receivedProgressEvent = true
+ }
} else {
Log.e(TAG, "Progress received while not in progress.")
}
@@ -62,6 +72,7 @@
override fun onTransitionFinished() {
inProgress = false
+ receivedProgressEvent = false
listener.onTransitionFinished()
}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
index 46001a7..8c5244e 100644
--- a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
@@ -122,8 +122,8 @@
"lastHingeAngle: $lastHingeAngle, " +
"lastHingeAngleBeforeTransition: $lastHingeAngleBeforeTransition"
)
- Trace.setCounter("hinge_angle", angle.toLong())
}
+ Trace.setCounter("DeviceFoldStateProvider#onHingeAngle", angle.toLong())
val currentDirection =
if (angle < lastHingeAngle) FOLD_UPDATE_START_CLOSING else FOLD_UPDATE_START_OPENING
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 0bdb0c8..a3b4a0f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -194,7 +194,8 @@
AccessibilityUserState.ServiceInfoChangeListener,
AccessibilityWindowManager.AccessibilityEventSender,
AccessibilitySecurityPolicy.AccessibilityUserManager,
- SystemActionPerformer.SystemActionsChangedListener, ProxyManager.SystemSupport{
+ SystemActionPerformer.SystemActionsChangedListener,
+ SystemActionPerformer.DisplayUpdateCallBack, ProxyManager.SystemSupport {
private static final boolean DEBUG = false;
@@ -1219,7 +1220,7 @@
private SystemActionPerformer getSystemActionPerformer() {
if (mSystemActionPerformer == null) {
mSystemActionPerformer =
- new SystemActionPerformer(mContext, mWindowManagerService, null, this);
+ new SystemActionPerformer(mContext, mWindowManagerService, null, this, this);
}
return mSystemActionPerformer;
}
@@ -1443,17 +1444,19 @@
return;
}
if (!mVisibleBgUserIds.get(userId)) {
- Slogf.wtf(LOG_TAG, "Cannot change current user to %d as it's not visible "
- + "(mVisibleUsers=%s)", userId, mVisibleBgUserIds);
+ Slogf.wtf(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(): cannot change "
+ + "current user to %d as it's not visible (mVisibleUsers=%s)",
+ userId, mVisibleBgUserIds);
return;
}
if (mCurrentUserId == userId) {
- Slogf.w(LOG_TAG, "NOT changing current user for test automation purposes as it is "
- + "already %d", mCurrentUserId);
+ Slogf.d(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(): NOT changing "
+ + "current user for test automation purposes as it is already %d",
+ mCurrentUserId);
return;
}
- Slogf.i(LOG_TAG, "Changing current user from %d to %d for test automation purposes",
- mCurrentUserId, userId);
+ Slogf.i(LOG_TAG, "changeCurrentUserForTestAutomationIfNeededLocked(): changing current user"
+ + " from %d to %d for test automation purposes", mCurrentUserId, userId);
mRealCurrentUserId = mCurrentUserId;
switchUser(userId);
}
@@ -1466,7 +1469,13 @@
+ "because device doesn't support visible background users");
return;
}
- Slogf.i(LOG_TAG, "Restoring current user to %d after using %d for test automation purposes",
+ if (mRealCurrentUserId == UserHandle.USER_CURRENT) {
+ Slogf.d(LOG_TAG, "restoreCurrentUserForTestAutomationIfNeededLocked(): ignoring "
+ + "because mRealCurrentUserId is already USER_CURRENT");
+ return;
+ }
+ Slogf.i(LOG_TAG, "restoreCurrentUserForTestAutomationIfNeededLocked(): restoring current "
+ + "user to %d after using %d for test automation purposes",
mRealCurrentUserId, mCurrentUserId);
int currentUserId = mRealCurrentUserId;
mRealCurrentUserId = UserHandle.USER_CURRENT;
@@ -1611,6 +1620,18 @@
}
}
+ @Override
+ // TODO(b/276459590): Remove when this is resolved at the virtual device/input level.
+ public void moveNonProxyTopFocusedDisplayToTopIfNeeded() {
+ mA11yWindowManager.moveNonProxyTopFocusedDisplayToTopIfNeeded();
+ }
+
+ @Override
+ // TODO(b/276459590): Remove when this is resolved at the virtual device/input level.
+ public int getLastNonProxyTopFocusedDisplayId() {
+ return mA11yWindowManager.getLastNonProxyTopFocusedDisplayId();
+ }
+
@VisibleForTesting
void notifySystemActionsChangedLocked(AccessibilityUserState userState) {
for (int i = userState.mBoundServices.size() - 1; i >= 0; i--) {
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
index a8a5365..78f07e4 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityWindowManager.java
@@ -103,6 +103,9 @@
// The top focused display and window token updated with the callback of window lists change.
private int mTopFocusedDisplayId;
private IBinder mTopFocusedWindowToken;
+
+ // The non-proxy display that most recently had top focus.
+ private int mLastNonProxyTopFocusedDisplayId;
// The display has the accessibility focused window currently.
private int mAccessibilityFocusedDisplayId = Display.INVALID_DISPLAY;
@@ -451,6 +454,9 @@
}
if (shouldUpdateWindowsLocked(forceSend, windows)) {
mTopFocusedDisplayId = topFocusedDisplayId;
+ if (!isProxyed(topFocusedDisplayId)) {
+ mLastNonProxyTopFocusedDisplayId = topFocusedDisplayId;
+ }
mTopFocusedWindowToken = topFocusedWindowToken;
if (DEBUG) {
Slogf.d(LOG_TAG, "onWindowsForAccessibilityChanged(): updating windows for "
@@ -1141,6 +1147,21 @@
return false;
}
+ private boolean isProxyed(int displayId) {
+ final DisplayWindowsObserver observer = mDisplayWindowsObservers.get(displayId);
+ return (observer != null && observer.mIsProxy);
+ }
+
+ void moveNonProxyTopFocusedDisplayToTopIfNeeded() {
+ if (mHasProxy
+ && (mLastNonProxyTopFocusedDisplayId != mTopFocusedDisplayId)) {
+ mWindowManagerInternal.moveDisplayToTopIfAllowed(mLastNonProxyTopFocusedDisplayId);
+ }
+ }
+ int getLastNonProxyTopFocusedDisplayId() {
+ return mLastNonProxyTopFocusedDisplayId;
+ }
+
/**
* Checks if we are tracking windows on specified display.
*
diff --git a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
index c89b9b8..a13df47 100644
--- a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
+++ b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
@@ -72,6 +72,13 @@
}
private final SystemActionsChangedListener mListener;
+ interface DisplayUpdateCallBack {
+ void moveNonProxyTopFocusedDisplayToTopIfNeeded();
+
+ int getLastNonProxyTopFocusedDisplayId();
+ }
+ private final DisplayUpdateCallBack mDisplayUpdateCallBack;
+
private final Object mSystemActionLock = new Object();
// Resource id based ActionId -> RemoteAction
@GuardedBy("mSystemActionLock")
@@ -94,7 +101,7 @@
public SystemActionPerformer(
Context context,
WindowManagerInternal windowManagerInternal) {
- this(context, windowManagerInternal, null, null);
+ this(context, windowManagerInternal, null, null, null);
}
// Used to mock ScreenshotHelper
@@ -103,17 +110,19 @@
Context context,
WindowManagerInternal windowManagerInternal,
Supplier<ScreenshotHelper> screenshotHelperSupplier) {
- this(context, windowManagerInternal, screenshotHelperSupplier, null);
+ this(context, windowManagerInternal, screenshotHelperSupplier, null, null);
}
public SystemActionPerformer(
Context context,
WindowManagerInternal windowManagerInternal,
Supplier<ScreenshotHelper> screenshotHelperSupplier,
- SystemActionsChangedListener listener) {
+ SystemActionsChangedListener listener,
+ DisplayUpdateCallBack callback) {
mContext = context;
mWindowManagerService = windowManagerInternal;
mListener = listener;
+ mDisplayUpdateCallBack = callback;
mScreenshotHelperSupplier = screenshotHelperSupplier;
mLegacyHomeAction = new AccessibilityAction(
@@ -245,6 +254,7 @@
final long identity = Binder.clearCallingIdentity();
try {
synchronized (mSystemActionLock) {
+ mDisplayUpdateCallBack.moveNonProxyTopFocusedDisplayToTopIfNeeded();
// If a system action is registered with the given actionId, call the corresponding
// RemoteAction.
RemoteAction registeredAction = mRegisteredSystemActions.get(actionId);
@@ -341,7 +351,7 @@
int source) {
KeyEvent event = KeyEvent.obtain(downTime, time, action, keyCode, 0, 0,
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_FROM_SYSTEM,
- source, null);
+ source, mDisplayUpdateCallBack.getLastNonProxyTopFocusedDisplayId(), null);
mContext.getSystemService(InputManager.class)
.injectInputEvent(event, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
event.recycle();
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
index 9a257e5..777c7c8 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchExplorer.java
@@ -1417,20 +1417,29 @@
mSendTouchExplorationEndDelayed.forceSendAndRemove();
}
}
- if (!mState.isTouchInteracting()) {
+ if (!mState.isTouchInteracting() && !mState.isDragging()) {
// It makes no sense to delegate.
- Slog.e(LOG_TAG, "Error: Trying to delegate from "
- + mState.getStateSymbolicName(mState.getState()));
+ Slog.e(
+ LOG_TAG,
+ "Error: Trying to delegate from "
+ + mState.getStateSymbolicName(mState.getState()));
return;
}
- mState.startDelegating();
- MotionEvent prototype = mState.getLastReceivedEvent();
- if (prototype == null) {
+ MotionEvent event = mState.getLastReceivedEvent();
+ MotionEvent rawEvent = mState.getLastReceivedRawEvent();
+ if (event == null || rawEvent == null) {
Slog.d(LOG_TAG, "Unable to start delegating: unable to get last received event.");
return;
}
int policyFlags = mState.getLastReceivedPolicyFlags();
- mDispatcher.sendDownForAllNotInjectedPointers(prototype, policyFlags);
+ if (mState.isDragging()) {
+ // Send an event to the end of the drag gesture.
+ mDispatcher.sendMotionEvent(
+ event, ACTION_UP, rawEvent, ALL_POINTER_ID_BITS, policyFlags);
+ }
+ mState.startDelegating();
+ // Deliver all pointers to the view hierarchy.
+ mDispatcher.sendDownForAllNotInjectedPointers(event, policyFlags);
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/TouchState.java b/services/accessibility/java/com/android/server/accessibility/gestures/TouchState.java
index eb71885..d9e25ef 100644
--- a/services/accessibility/java/com/android/server/accessibility/gestures/TouchState.java
+++ b/services/accessibility/java/com/android/server/accessibility/gestures/TouchState.java
@@ -199,6 +199,9 @@
case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT:
mLastTouchedWindowId = event.getWindowId();
break;
+ case AccessibilityEvent.TYPE_TOUCH_INTERACTION_END:
+ mAms.moveNonProxyTopFocusedDisplayToTopIfNeeded();
+ break;
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
index 22e742b..c1c47f5 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java
@@ -231,6 +231,12 @@
*/
public void transitionMagnificationModeLocked(int displayId, int targetMode,
@NonNull TransitionCallBack transitionCallBack) {
+ // check if target mode is already activated
+ if (isActivated(displayId, targetMode)) {
+ transitionCallBack.onResult(displayId, true);
+ return;
+ }
+
final PointF currentCenter = getCurrentMagnificationCenterLocked(displayId, targetMode);
final DisableMagnificationCallback animationCallback =
getDisableMagnificationEndRunnableLocked(displayId);
@@ -322,13 +328,16 @@
: config.getScale();
try {
setTransitionState(displayId, targetMode);
+ final MagnificationAnimationCallback magnificationAnimationCallback = animate
+ ? success -> mAms.changeMagnificationMode(displayId, targetMode)
+ : null;
// Activate or deactivate target mode depending on config activated value
if (targetMode == MAGNIFICATION_MODE_WINDOW) {
screenMagnificationController.reset(displayId, false);
if (targetActivated) {
windowMagnificationMgr.enableWindowMagnification(displayId,
targetScale, magnificationCenter.x, magnificationCenter.y,
- animate ? STUB_ANIMATION_CALLBACK : null, id);
+ magnificationAnimationCallback, id);
} else {
windowMagnificationMgr.disableWindowMagnification(displayId, false);
}
@@ -339,8 +348,8 @@
screenMagnificationController.register(displayId);
}
screenMagnificationController.setScaleAndCenter(displayId, targetScale,
- magnificationCenter.x, magnificationCenter.y, animate,
- id);
+ magnificationCenter.x, magnificationCenter.y,
+ magnificationAnimationCallback, id);
} else {
if (screenMagnificationController.isRegistered(displayId)) {
screenMagnificationController.reset(displayId, false);
@@ -348,6 +357,9 @@
}
}
} finally {
+ if (!animate) {
+ mAms.changeMagnificationMode(displayId, targetMode);
+ }
// Reset transition state after enabling target mode.
setTransitionState(displayId, null);
}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 2a964b8..3bd4547 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -56,6 +56,10 @@
import static com.android.server.autofill.Helper.sDebug;
import static com.android.server.autofill.Helper.sVerbose;
import static com.android.server.autofill.Helper.toArray;
+import static com.android.server.autofill.PresentationStatsEventLogger.AUTHENTICATION_RESULT_FAILURE;
+import static com.android.server.autofill.PresentationStatsEventLogger.AUTHENTICATION_RESULT_SUCCESS;
+import static com.android.server.autofill.PresentationStatsEventLogger.AUTHENTICATION_TYPE_DATASET_AUTHENTICATION;
+import static com.android.server.autofill.PresentationStatsEventLogger.AUTHENTICATION_TYPE_FULL_AUTHENTICATION;
import static com.android.server.autofill.PresentationStatsEventLogger.NOT_SHOWN_REASON_NO_FOCUS;
import static com.android.server.autofill.PresentationStatsEventLogger.NOT_SHOWN_REASON_REQUEST_FAILED;
import static com.android.server.autofill.PresentationStatsEventLogger.NOT_SHOWN_REASON_REQUEST_TIMEOUT;
@@ -75,6 +79,12 @@
import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_REQUIRED_ID_CHANGE;
import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_TRIGGER_ID_SET;
import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_UNKNOWN;
+import static com.android.server.autofill.SessionCommittedEventLogger.CommitReason;
+import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_ACTIVITY_FINISHED;
+import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_VIEW_CHANGED;
+import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_VIEW_CLICKED;
+import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_VIEW_COMMITTED;
+import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_SESSION_DESTROYED;
import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_RECEIVER_EXTRAS;
import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_STRUCTURE;
@@ -364,6 +374,11 @@
private final long mStartTime;
/**
+ * Count of FillRequests in the session.
+ */
+ private int mRequestCount;
+
+ /**
* Starting timestamp of latency logger.
* This is set when Session created or when the view is reset.
*/
@@ -1132,6 +1147,7 @@
int flags) {
final FillResponse existingResponse = viewState.getResponse();
mFillRequestEventLogger.startLogForNewRequest();
+ mRequestCount++;
mFillRequestEventLogger.maybeSetAppPackageUid(uid);
mFillRequestEventLogger.maybeSetFlags(mFlags);
if(mPreviouslyFillDialogPotentiallyStarted) {
@@ -1330,8 +1346,6 @@
this.userId = userId;
this.taskId = taskId;
this.uid = uid;
- mStartTime = SystemClock.elapsedRealtime();
- mLatencyBaseTime = mStartTime;
mService = service;
mLock = lock;
mUi = ui;
@@ -1347,11 +1361,17 @@
mComponentName = componentName;
mCompatMode = compatMode;
mSessionState = STATE_ACTIVE;
+ // Initiate all loggers & counters.
+ mStartTime = SystemClock.elapsedRealtime();
+ mLatencyBaseTime = mStartTime;
+ mRequestCount = 0;
mPresentationStatsEventLogger = PresentationStatsEventLogger.forSessionId(sessionId);
mFillRequestEventLogger = FillRequestEventLogger.forSessionId(sessionId);
mFillResponseEventLogger = FillResponseEventLogger.forSessionId(sessionId);
mSessionCommittedEventLogger = SessionCommittedEventLogger.forSessionId(sessionId);
+ mSessionCommittedEventLogger.maybeSetComponentPackageUid(uid);
mSaveEventLogger = SaveEventLogger.forSessionId(sessionId);
+
synchronized (mLock) {
mSessionFlags = new SessionFlags();
mSessionFlags.mAugmentedAutofillOnly = forAugmentedAutofillOnly;
@@ -1971,6 +1991,7 @@
// Start a new FillRequest logger for client suggestion fallback.
mFillRequestEventLogger.startLogForNewRequest();
+ mRequestCount++;
mFillRequestEventLogger.maybeSetAppPackageUid(uid);
mFillRequestEventLogger.maybeSetFlags(
flags & ~FLAG_ENABLED_CLIENT_SUGGESTIONS);
@@ -2187,6 +2208,8 @@
}
final Intent fillInIntent;
synchronized (mLock) {
+ mPresentationStatsEventLogger.maybeSetAuthenticationType(
+ AUTHENTICATION_TYPE_FULL_AUTHENTICATION);
if (mDestroyed) {
Slog.w(TAG, "Call to Session#authenticate() rejected - session: "
+ id + " destroyed");
@@ -2231,7 +2254,6 @@
if (mDestroyed) {
Slog.w(TAG, "Call to Session#save() rejected - session: "
+ id + " destroyed");
- mSaveEventLogger.logAndEndEvent();
return;
}
}
@@ -2251,7 +2273,6 @@
if (mDestroyed) {
Slog.w(TAG, "Call to Session#cancelSave() rejected - session: "
+ id + " destroyed");
- mSaveEventLogger.logAndEndEvent();
return;
}
}
@@ -2438,18 +2459,26 @@
final int requestId = AutofillManager.getRequestIdFromAuthenticationId(authenticationId);
if (requestId == AUGMENTED_AUTOFILL_REQUEST_ID) {
setAuthenticationResultForAugmentedAutofillLocked(data, authenticationId);
+ // Augmented autofill is not logged.
+ mPresentationStatsEventLogger.logAndEndEvent();
return;
}
if (mResponses == null) {
// Typically happens when app explicitly called cancel() while the service was showing
// the auth UI.
Slog.w(TAG, "setAuthenticationResultLocked(" + authenticationId + "): no responses");
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_FAILURE);
+ mPresentationStatsEventLogger.logAndEndEvent();
removeFromService();
return;
}
final FillResponse authenticatedResponse = mResponses.get(requestId);
if (authenticatedResponse == null || data == null) {
Slog.w(TAG, "no authenticated response");
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_FAILURE);
+ mPresentationStatsEventLogger.logAndEndEvent();
removeFromService();
return;
}
@@ -2461,6 +2490,9 @@
final Dataset dataset = authenticatedResponse.getDatasets().get(datasetIdx);
if (dataset == null) {
Slog.w(TAG, "no dataset with index " + datasetIdx + " on fill response");
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_FAILURE);
+ mPresentationStatsEventLogger.logAndEndEvent();
removeFromService();
return;
}
@@ -2477,11 +2509,15 @@
}
if (result instanceof FillResponse) {
logAuthenticationStatusLocked(requestId, MetricsEvent.AUTOFILL_AUTHENTICATED);
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_SUCCESS);
replaceResponseLocked(authenticatedResponse, (FillResponse) result, newClientState);
} else if (result instanceof Dataset) {
if (datasetIdx != AutofillManager.AUTHENTICATION_ID_DATASET_ID_UNDEFINED) {
logAuthenticationStatusLocked(requestId,
MetricsEvent.AUTOFILL_DATASET_AUTHENTICATED);
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_SUCCESS);
if (newClientState != null) {
if (sDebug) Slog.d(TAG, "Updating client state from auth dataset");
mClientState = newClientState;
@@ -2497,6 +2533,8 @@
+ authenticationId);
logAuthenticationStatusLocked(requestId,
MetricsEvent.AUTOFILL_INVALID_DATASET_AUTHENTICATION);
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_FAILURE);
}
} else {
if (result != null) {
@@ -2504,6 +2542,8 @@
}
logAuthenticationStatusLocked(requestId,
MetricsEvent.AUTOFILL_INVALID_AUTHENTICATION);
+ mPresentationStatsEventLogger.maybeSetAuthenticationResult(
+ AUTHENTICATION_RESULT_FAILURE);
processNullResponseLocked(requestId, 0);
}
}
@@ -4790,6 +4830,7 @@
}
// Log FillRequest for Augmented Autofill.
mFillRequestEventLogger.startLogForNewRequest();
+ mRequestCount++;
mFillRequestEventLogger.maybeSetAppPackageUid(uid);
mFillRequestEventLogger.maybeSetFlags(mFlags);
mFillRequestEventLogger.maybeSetRequestId(AUGMENTED_AUTOFILL_REQUEST_ID);
@@ -5036,6 +5077,7 @@
if (dataset.getAuthentication() == null) {
if (generateEvent) {
mService.logDatasetSelected(dataset.getId(), id, mClientState, uiType);
+ mPresentationStatsEventLogger.maybeSetSelectedDatasetId(datasetIndex);
}
if (mCurrentViewId != null) {
mInlineSessionController.hideInlineSuggestionsUiLocked(mCurrentViewId);
@@ -5046,6 +5088,8 @@
// ...or handle authentication.
mService.logDatasetAuthenticationSelected(dataset.getId(), id, mClientState, uiType);
+ mPresentationStatsEventLogger.maybeSetAuthenticationType(
+ AUTHENTICATION_TYPE_DATASET_AUTHENTICATION);
setViewStatesLocked(null, dataset, ViewState.STATE_WAITING_DATASET_AUTH, false);
final Intent fillInIntent = createAuthFillInIntentLocked(requestId, mClientState);
if (fillInIntent == null) {
@@ -5639,6 +5683,17 @@
*/
@GuardedBy("mLock")
RemoteFillService destroyLocked() {
+ // Log unlogged events.
+ mSessionCommittedEventLogger.maybeSetCommitReason(COMMIT_REASON_SESSION_DESTROYED);
+ mSessionCommittedEventLogger.maybeSetRequestCount(mRequestCount);
+ mSessionCommittedEventLogger.maybeSetSessionDurationMillis(
+ SystemClock.elapsedRealtime() - mStartTime);
+ mSessionCommittedEventLogger.logAndEndEvent();
+ mPresentationStatsEventLogger.logAndEndEvent();
+ mSaveEventLogger.logAndEndEvent();
+ mFillResponseEventLogger.logAndEndEvent();
+ mFillRequestEventLogger.logAndEndEvent();
+
if (mDestroyed) {
return null;
}
diff --git a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java
index 92d72ac..541ec80 100644
--- a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java
+++ b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java
@@ -18,6 +18,7 @@
import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED;
import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_ACTIVITY_FINISHED;
+import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_SESSION_DESTROYED;
import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_UNKNOWN;
import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CHANGED;
import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CLICKED;
@@ -53,7 +54,8 @@
COMMIT_REASON_ACTIVITY_FINISHED,
COMMIT_REASON_VIEW_COMMITTED,
COMMIT_REASON_VIEW_CLICKED,
- COMMIT_REASON_VIEW_CHANGED
+ COMMIT_REASON_VIEW_CHANGED,
+ COMMIT_REASON_SESSION_DESTROYED
})
@Retention(RetentionPolicy.SOURCE)
public @interface CommitReason {
@@ -69,6 +71,8 @@
AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CLICKED;
public static final int COMMIT_REASON_VIEW_CHANGED =
AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CHANGED;
+ public static final int COMMIT_REASON_SESSION_DESTROYED =
+ AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_SESSION_DESTROYED;
private final int mSessionId;
private Optional<SessionCommittedEventInternal> mEventInternal;
diff --git a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
index 756dcd2..b68adab 100644
--- a/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/SaveUi.java
@@ -361,6 +361,7 @@
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.accessibilityTitle = context.getString(R.string.autofill_save_accessibility_title);
params.windowAnimations = R.style.AutofillSaveAnimation;
+ params.setTrustedOverlay();
show();
}
diff --git a/services/backup/BACKUP_OWNERS b/services/backup/BACKUP_OWNERS
new file mode 100644
index 0000000..f8f4f4f
--- /dev/null
+++ b/services/backup/BACKUP_OWNERS
@@ -0,0 +1,10 @@
+# Bug component: 1193469
+
+jstemmer@google.com
+martinoh@google.com
+millmore@google.com
+niamhfw@google.com
+piee@google.com
+philippov@google.com
+rthakohov@google.com
+sarpm@google.com
\ No newline at end of file
diff --git a/services/backup/OWNERS b/services/backup/OWNERS
index 79709a3..3bd2db1 100644
--- a/services/backup/OWNERS
+++ b/services/backup/OWNERS
@@ -2,12 +2,4 @@
set noparent
-bryanmawhinney@google.com
-jstemmer@google.com
-martinoh@google.com
-millmore@google.com
-niamhfw@google.com
-piee@google.com
-philippov@google.com
-rthakohov@google.com
-sarpm@google.com
+include platform/frameworks/base:/services/backup/BACKUP_OWNERS
diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
index b042c30..ff72476 100644
--- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
+++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java
@@ -397,7 +397,7 @@
setUpPipes();
mAgent = mBackupManagerService.bindToAgentSynchronous(mTargetApp,
FullBackup.KEY_VALUE_DATA_TOKEN.equals(info.domain)
- ? ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL
+ ? ApplicationThreadConstants.BACKUP_MODE_RESTORE
: ApplicationThreadConstants.BACKUP_MODE_RESTORE_FULL,
mBackupEligibilityRules.getBackupDestination());
mAgentPackage = pkg;
diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
index 1656b6f..77990af 100644
--- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
+++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java
@@ -677,7 +677,7 @@
// Good to go! Set up and bind the agent...
mAgent = backupManagerService.bindToAgentSynchronous(
mCurrentPackage.applicationInfo,
- ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL,
+ ApplicationThreadConstants.BACKUP_MODE_RESTORE,
mBackupEligibilityRules.getBackupDestination());
if (mAgent == null) {
Slog.w(TAG, "Can't find backup agent for " + packageName);
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 5b320a8..efff112 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -899,12 +899,9 @@
public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
String[] args, ShellCallback callback, ResultReceiver resultReceiver)
throws RemoteException {
- enforceCallerCanManageCompanionDevice(getContext(), "onShellCommand");
- final CompanionDeviceShellCommand cmd = new CompanionDeviceShellCommand(
- CompanionDeviceManagerService.this,
- mAssociationStore,
- mDevicePresenceMonitor);
- cmd.exec(this, in, out, err, args, callback, resultReceiver);
+ new CompanionDeviceShellCommand(CompanionDeviceManagerService.this, mAssociationStore,
+ mDevicePresenceMonitor, mTransportManager, mSystemDataTransferRequestStore)
+ .exec(this, in, out, err, args, callback, resultReceiver);
}
@Override
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
index 6889bcd..669686ad 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
@@ -17,11 +17,14 @@
package com.android.server.companion;
import android.companion.AssociationInfo;
+import android.companion.datatransfer.PermissionSyncRequest;
import android.net.MacAddress;
import android.os.Binder;
import android.os.ShellCommand;
+import com.android.server.companion.datatransfer.SystemDataTransferRequestStore;
import com.android.server.companion.presence.CompanionDevicePresenceMonitor;
+import com.android.server.companion.transport.CompanionTransportManager;
import java.io.PrintWriter;
import java.util.List;
@@ -32,13 +35,20 @@
private final CompanionDeviceManagerService mService;
private final AssociationStore mAssociationStore;
private final CompanionDevicePresenceMonitor mDevicePresenceMonitor;
+ private final CompanionTransportManager mTransportManager;
+
+ private final SystemDataTransferRequestStore mSystemDataTransferRequestStore;
CompanionDeviceShellCommand(CompanionDeviceManagerService service,
AssociationStore associationStore,
- CompanionDevicePresenceMonitor devicePresenceMonitor) {
+ CompanionDevicePresenceMonitor devicePresenceMonitor,
+ CompanionTransportManager transportManager,
+ SystemDataTransferRequestStore systemDataTransferRequestStore) {
mService = service;
mAssociationStore = associationStore;
mDevicePresenceMonitor = devicePresenceMonitor;
+ mTransportManager = transportManager;
+ mSystemDataTransferRequestStore = systemDataTransferRequestStore;
}
@Override
@@ -55,7 +65,7 @@
// TODO(b/212535524): use AssociationInfo.toShortString(), once it's not
// longer referenced in tests.
out.println(association.getPackageName() + " "
- + association.getDeviceMacAddress());
+ + association.getDeviceMacAddress() + " " + association.getId());
}
}
break;
@@ -107,6 +117,23 @@
}
break;
+ case "create-dummy-transport":
+ // This command creates a RawTransport in order to test Transport listeners
+ associationId = getNextIntArgRequired();
+ mTransportManager.createDummyTransport(associationId);
+ break;
+
+ case "allow-permission-sync": {
+ int userId = getNextIntArgRequired();
+ associationId = getNextIntArgRequired();
+ boolean enabled = getNextBooleanArgRequired();
+ PermissionSyncRequest request = new PermissionSyncRequest(associationId);
+ request.setUserId(userId);
+ request.setUserConsented(enabled);
+ mSystemDataTransferRequestStore.writeRequest(userId, request);
+ }
+ break;
+
default:
return handleDefaultCommands(cmd);
}
@@ -124,6 +151,15 @@
return Integer.parseInt(getNextArgRequired());
}
+ private boolean getNextBooleanArgRequired() {
+ String arg = getNextArgRequired();
+ if ("true".equalsIgnoreCase(arg) || "false".equalsIgnoreCase(arg)) {
+ return Boolean.parseBoolean(arg);
+ } else {
+ throw new IllegalArgumentException("Expected a boolean argument but was: " + arg);
+ }
+ }
+
@Override
public void onHelp() {
PrintWriter pw = getOutPrintWriter();
@@ -165,5 +201,8 @@
pw.println(" for a long time (90 days or as configured via ");
pw.println(" \"debug.cdm.cdmservice.cleanup_time_window\" system property). ");
pw.println(" USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
+
+ pw.println(" create-dummy-transport <ASSOCIATION_ID>");
+ pw.println(" Create a dummy RawTransport for testing puspose only");
}
}
diff --git a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java
index 2c5d582..720cefa 100644
--- a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java
+++ b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferRequestStore.java
@@ -120,12 +120,14 @@
return requestsByAssociationId;
}
- void writeRequest(@UserIdInt int userId, SystemDataTransferRequest request) {
+ public void writeRequest(@UserIdInt int userId, SystemDataTransferRequest request) {
Slog.i(LOG_TAG, "Writing request=" + request + " to store.");
ArrayList<SystemDataTransferRequest> cachedRequests;
synchronized (mLock) {
// Write to cache
cachedRequests = readRequestsFromCache(userId);
+ cachedRequests.removeIf(
+ request1 -> request1.getAssociationId() == request.getAssociationId());
cachedRequests.add(request);
mCachedPerUser.set(userId, cachedRequests);
}
diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionService.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionService.java
new file mode 100644
index 0000000..19d8b87
--- /dev/null
+++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionService.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.companion.datatransfer.contextsync;
+
+import android.content.ComponentName;
+import android.telecom.ConnectionService;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/** Service for Telecom to bind to when call metadata is synced between devices. */
+public class CallMetadataSyncConnectionService extends ConnectionService {
+
+ private TelecomManager mTelecomManager;
+ private final Map<String, PhoneAccountHandle> mPhoneAccountHandles = new HashMap<>();
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mTelecomManager = getSystemService(TelecomManager.class);
+ }
+
+ /**
+ * Registers a {@link android.telecom.PhoneAccount} for a given call-capable app on the synced
+ * device.
+ */
+ public void registerPhoneAccount(String packageName, String humanReadableAppName) {
+ final PhoneAccount phoneAccount = createPhoneAccount(packageName, humanReadableAppName);
+ if (phoneAccount != null) {
+ mTelecomManager.registerPhoneAccount(phoneAccount);
+ mTelecomManager.enablePhoneAccount(mPhoneAccountHandles.get(packageName), true);
+ }
+ }
+
+ /**
+ * Unregisters a {@link android.telecom.PhoneAccount} for a given call-capable app on the synced
+ * device.
+ */
+ public void unregisterPhoneAccount(String packageName) {
+ mTelecomManager.unregisterPhoneAccount(mPhoneAccountHandles.remove(packageName));
+ }
+
+ @VisibleForTesting
+ PhoneAccount createPhoneAccount(String packageName, String humanReadableAppName) {
+ if (mPhoneAccountHandles.containsKey(packageName)) {
+ // Already exists!
+ return null;
+ }
+ final PhoneAccountHandle handle = new PhoneAccountHandle(
+ new ComponentName(this, CallMetadataSyncConnectionService.class),
+ UUID.randomUUID().toString());
+ mPhoneAccountHandles.put(packageName, handle);
+ return new PhoneAccount.Builder(handle, humanReadableAppName)
+ .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER
+ | PhoneAccount.CAPABILITY_SELF_MANAGED).build();
+ }
+}
diff --git a/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java b/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
index a8519e3..0457e9a 100644
--- a/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
+++ b/services/companion/java/com/android/server/companion/securechannel/SecureChannel.java
@@ -28,7 +28,6 @@
import com.google.security.cryptauth.lib.securegcm.D2DConnectionContextV1;
import com.google.security.cryptauth.lib.securegcm.D2DHandshakeContext;
import com.google.security.cryptauth.lib.securegcm.D2DHandshakeContext.Role;
-import com.google.security.cryptauth.lib.securegcm.DefaultUkey2Logger;
import com.google.security.cryptauth.lib.securegcm.HandshakeException;
import libcore.io.IoUtils;
@@ -329,7 +328,7 @@
}
mRole = Role.Initiator;
- mHandshakeContext = D2DHandshakeContext.forInitiator(DefaultUkey2Logger.INSTANCE);
+ mHandshakeContext = D2DHandshakeContext.forInitiator();
// Send Client Init
if (DEBUG) {
@@ -350,7 +349,7 @@
if (mHandshakeContext == null) { // Server-side logic
mRole = Role.Responder;
- mHandshakeContext = D2DHandshakeContext.forResponder(DefaultUkey2Logger.INSTANCE);
+ mHandshakeContext = D2DHandshakeContext.forResponder();
// Receive Client Init
if (DEBUG) {
diff --git a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
index d54aa7c..9677b70 100644
--- a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
+++ b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
@@ -44,6 +44,7 @@
import com.android.server.LocalServices;
import com.android.server.companion.AssociationStore;
+import java.io.FileDescriptor;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -350,6 +351,21 @@
this.mSecureTransportEnabled = enabled;
}
+ /**
+ * For testing purpose only.
+ *
+ * Create a dummy RawTransport and notify onTransportChanged listeners.
+ */
+ public void createDummyTransport(int associationId) {
+ synchronized (mTransports) {
+ FileDescriptor fd = new FileDescriptor();
+ ParcelFileDescriptor pfd = new ParcelFileDescriptor(fd);
+ Transport transport = new RawTransport(associationId, pfd, mContext);
+ mTransports.put(associationId, transport);
+ notifyOnTransportsChanged();
+ }
+ }
+
private boolean isSecureTransportEnabled() {
boolean enabled = !Build.IS_DEBUGGABLE || mSecureTransportEnabled;
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index 4b76127..7fae31c 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -338,6 +338,9 @@
// marked as stopped by the system
@NonNull private final Set<String> mInitialNonStoppedSystemPackages = new ArraySet<>();
+ // A map of preloaded package names and the path to its app metadata file path.
+ private final ArrayMap<String, String> mAppMetadataFilePaths = new ArrayMap<>();
+
/**
* Map of system pre-defined, uniquely named actors; keys are namespace,
* value maps actor name to package name.
@@ -536,6 +539,10 @@
return mInitialNonStoppedSystemPackages;
}
+ public ArrayMap<String, String> getAppMetadataFilePaths() {
+ return mAppMetadataFilePaths;
+ }
+
/**
* Only use for testing. Do NOT use in production code.
* @param readPermissions false to create an empty SystemConfig; true to read the permissions.
@@ -1466,7 +1473,20 @@
} else if (!Boolean.parseBoolean(stopped)) {
mInitialNonStoppedSystemPackages.add(pkgName);
}
- }
+ } break;
+ case "asl-file": {
+ String packageName = parser.getAttributeValue(null, "package");
+ String path = parser.getAttributeValue(null, "path");
+ if (TextUtils.isEmpty(packageName)) {
+ Slog.w(TAG, "<" + name + "> without valid package in " + permFile
+ + " at " + parser.getPositionDescription());
+ } else if (TextUtils.isEmpty(path)) {
+ Slog.w(TAG, "<" + name + "> without valid path in " + permFile
+ + " at " + parser.getPositionDescription());
+ } else {
+ mAppMetadataFilePaths.put(packageName, path);
+ }
+ } break;
default: {
Slog.w(TAG, "Tag " + name + " is unknown in "
+ permFile + " at " + parser.getPositionDescription());
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 51d349f..578f520 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -3018,7 +3018,7 @@
final long identityToken = clearCallingIdentity();
try {
// Distill the caller's package signatures into a single digest.
- final byte[] callerPkgSigDigest = calculatePackageSignatureDigest(callerPkg);
+ final byte[] callerPkgSigDigest = calculatePackageSignatureDigest(callerPkg, userId);
// if the caller has permission, do the peek. otherwise go the more expensive
// route of starting a Session
@@ -3182,12 +3182,12 @@
.write();
}
- private byte[] calculatePackageSignatureDigest(String callerPkg) {
+ private byte[] calculatePackageSignatureDigest(String callerPkg, int userId) {
MessageDigest digester;
try {
digester = MessageDigest.getInstance("SHA-256");
- PackageInfo pkgInfo = mPackageManager.getPackageInfo(
- callerPkg, PackageManager.GET_SIGNATURES);
+ PackageInfo pkgInfo = mPackageManager.getPackageInfoAsUser(
+ callerPkg, PackageManager.GET_SIGNATURES, userId);
for (Signature sig : pkgInfo.signatures) {
digester.update(sig.toByteArray());
}
@@ -5912,22 +5912,24 @@
}
private boolean canUserModifyAccountsForType(int userId, String accountType, int callingUid) {
- // the managing app can always modify accounts
- if (isProfileOwner(callingUid)) {
- return true;
- }
- DevicePolicyManager dpm = (DevicePolicyManager) mContext
- .getSystemService(Context.DEVICE_POLICY_SERVICE);
- String[] typesArray = dpm.getAccountTypesWithManagementDisabledAsUser(userId);
- if (typesArray == null) {
- return true;
- }
- for (String forbiddenType : typesArray) {
- if (forbiddenType.equals(accountType)) {
- return false;
+ return Binder.withCleanCallingIdentity(() -> {
+ // the managing app can always modify accounts
+ if (isProfileOwner(callingUid)) {
+ return true;
}
- }
- return true;
+ DevicePolicyManager dpm = (DevicePolicyManager) mContext
+ .getSystemService(Context.DEVICE_POLICY_SERVICE);
+ String[] typesArray = dpm.getAccountTypesWithManagementDisabledAsUser(userId);
+ if (typesArray == null) {
+ return true;
+ }
+ for (String forbiddenType : typesArray) {
+ if (forbiddenType.equals(accountType)) {
+ return false;
+ }
+ }
+ return true;
+ });
}
private boolean isProfileOwner(int uid) {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index ee18ed5..df3c95b 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -829,7 +829,8 @@
// Service.startForeground()), at that point we will consult the BFSL check and the timeout
// and make the necessary decisions.
setFgsRestrictionLocked(callingPackage, callingPid, callingUid, service, r, userId,
- backgroundStartPrivileges, false /* isBindService */);
+ backgroundStartPrivileges, false /* isBindService */,
+ !fgRequired /* isStartService */);
if (!mAm.mUserController.exists(r.userId)) {
Slog.w(TAG, "Trying to start service with non-existent user! " + r.userId);
@@ -2119,7 +2120,11 @@
}
}
- if (r.isForeground && isOldTypeShortFgs) {
+ final boolean enableFgsWhileInUseFix = mAm.mConstants.mEnableFgsWhileInUseFix;
+ final boolean fgsTypeChangingFromShortFgs = r.isForeground && isOldTypeShortFgs;
+
+ if (fgsTypeChangingFromShortFgs) {
+
// If we get here, that means startForeground(SHORT_SERVICE) is called again
// on a SHORT_SERVICE FGS.
@@ -2128,7 +2133,7 @@
setFgsRestrictionLocked(r.serviceInfo.packageName, r.app.getPid(),
r.appInfo.uid, r.intent.getIntent(), r, r.userId,
BackgroundStartPrivileges.NONE,
- false /* isBindService */);
+ false /* isBindService */, false /* isStartService */);
if (r.mAllowStartForeground == REASON_DENIED) {
Slog.w(TAG_SERVICE, "FGS type change to/from SHORT_SERVICE: "
+ " BFSL DENIED.");
@@ -2171,8 +2176,19 @@
// "if (r.mAllowStartForeground == REASON_DENIED...)" block below.
}
}
+ }
- } else if (r.mStartForegroundCount == 0) {
+ // Re-evaluate mAllowWhileInUsePermissionInFgs and mAllowStartForeground
+ // (i.e. while-in-use and BFSL flags) if needed.
+ //
+ // Consider the below if-else section to be in the else of the above
+ // `if (fgsTypeChangingFromShortFgs)`.
+ // Using an else would increase the indent further, so we don't use it here
+ // and instead just add !fgsTypeChangingFromShortFgs to all if's.
+ //
+ // The first if's are for the original while-in-use logic.
+ if (!fgsTypeChangingFromShortFgs && !enableFgsWhileInUseFix
+ && r.mStartForegroundCount == 0) {
/*
If the service was started with startService(), not
startForegroundService(), and if startForeground() isn't called within
@@ -2193,7 +2209,7 @@
setFgsRestrictionLocked(r.serviceInfo.packageName, r.app.getPid(),
r.appInfo.uid, r.intent.getIntent(), r, r.userId,
BackgroundStartPrivileges.NONE,
- false /* isBindService */);
+ false /* isBindService */, false /* isStartService */);
final String temp = "startForegroundDelayMs:" + delayMs;
if (r.mInfoAllowStartForeground != null) {
r.mInfoAllowStartForeground += "; " + temp;
@@ -2203,9 +2219,10 @@
r.mLoggedInfoAllowStartForeground = false;
}
}
- } else if (r.mStartForegroundCount >= 1) {
+ } else if (!fgsTypeChangingFromShortFgs && !enableFgsWhileInUseFix
+ && r.mStartForegroundCount >= 1) {
// We get here if startForeground() is called multiple times
- // on the same sarvice after it's created, regardless of whether
+ // on the same service after it's created, regardless of whether
// stopForeground() has been called or not.
// The second or later time startForeground() is called after service is
@@ -2213,7 +2230,71 @@
setFgsRestrictionLocked(r.serviceInfo.packageName, r.app.getPid(),
r.appInfo.uid, r.intent.getIntent(), r, r.userId,
BackgroundStartPrivileges.NONE,
- false /* isBindService */);
+ false /* isBindService */, false /* isStartService */);
+ } else if (!fgsTypeChangingFromShortFgs && enableFgsWhileInUseFix) {
+ // The new while-in-use logic.
+ //
+ // When startForeground() is called, we _always_ call
+ // setFgsRestrictionLocked() to set the restrictions according to the
+ // current state of the app.
+ // (So if the app is now in TOP, for example, the service will now always
+ // get while-in-use permissions.)
+ //
+ // Note, setFgsRestrictionLocked() will never disallow
+ // mAllowWhileInUsePermissionInFgs nor mAllowStartForeground
+ // (i.e. while-in-use and BFSL flags) once they're set to "allowed".
+ //
+ // HOWEVER, if these flags were set to "allowed" in Context.startService()
+ // (as opposed to startForegroundService()), when the service wasn't yet
+ // a foreground service, then we may not always
+ // want to trust them -- for example, if the service has been running as a
+ // BG service or a bound service for a long time when the app is not longer
+ // in the foreground, then we shouldn't grant while-in-user nor BFSL.
+ // So in that case, we need to reset it first.
+
+ final long delayMs =
+ (r.mLastUntrustedSetFgsRestrictionAllowedTime == 0) ? 0
+ : (SystemClock.elapsedRealtime()
+ - r.mLastUntrustedSetFgsRestrictionAllowedTime);
+ final boolean resetNeeded =
+ !r.isForeground
+ && delayMs > mAm.mConstants.mFgsStartForegroundTimeoutMs;
+ if (resetNeeded) {
+ resetFgsRestrictionLocked(r);
+ }
+ setFgsRestrictionLocked(r.serviceInfo.packageName, r.app.getPid(),
+ r.appInfo.uid, r.intent.getIntent(), r, r.userId,
+ BackgroundStartPrivileges.NONE,
+ false /* isBindService */, false /* isStartService */);
+
+ final String temp = "startForegroundDelayMs:" + delayMs
+ + "; started: " + r.startRequested
+ + "; num_bindings: " + r.getConnections().size()
+ + "; wasForeground: " + r.isForeground
+ + "; resetNeeded:" + resetNeeded;
+ if (r.mInfoAllowStartForeground != null) {
+ r.mInfoAllowStartForeground += "; " + temp;
+ } else {
+ r.mInfoAllowStartForeground = temp;
+ }
+ r.mLoggedInfoAllowStartForeground = false;
+ }
+
+ // If the service has any bindings and it's not yet a FGS
+ // we compare the new and old while-in-use logics.
+ // (If it's not the first startForeground() call, we already reset the
+ // while-in-use and BFSL flags, so the logic change wouldn't matter.)
+ if (enableFgsWhileInUseFix
+ && !r.isForeground
+ && (r.getConnections().size() > 0)
+ && (r.mDebugWhileInUseReasonInBindService
+ != r.mDebugWhileInUseReasonInStartForeground)) {
+ Slog.wtf(TAG, "FGS while-in-use changed (b/276963716): old="
+ + reasonCodeToString(r.mDebugWhileInUseReasonInBindService)
+ + " new="
+ + reasonCodeToString(r.mDebugWhileInUseReasonInStartForeground)
+ + " "
+ + r.shortInstanceName);
}
// If the foreground service is not started from TOP process, do not allow it to
@@ -2321,6 +2402,11 @@
active.mNumActive++;
}
r.isForeground = true;
+
+ // Once the service becomes a foreground service,
+ // the FGS restriction information always becomes "trustable".
+ r.mLastUntrustedSetFgsRestrictionAllowedTime = 0;
+
// The logging of FOREGROUND_SERVICE_STATE_CHANGED__STATE__ENTER event could
// be deferred, make a copy of mAllowStartForeground and
// mAllowWhileInUsePermissionInFgs.
@@ -3663,8 +3749,25 @@
return 0;
}
}
- setFgsRestrictionLocked(callingPackage, callingPid, callingUid, service, s, userId,
- BackgroundStartPrivileges.NONE, true /* isBindService */);
+ if (!mAm.mConstants.mEnableFgsWhileInUseFix) {
+ // Old while-in-use logic.
+ setFgsRestrictionLocked(callingPackage, callingPid, callingUid, service, s, userId,
+ BackgroundStartPrivileges.NONE, true /* isBindService */,
+ false /* isStartService */);
+ } else {
+ // New logic will not call setFgsRestrictionLocked() here, but we still
+ // keep track of the allow reason from the old logic here, so we can compare to
+ // the new logic.
+ // Once we're confident enough in the new logic, we should remove it.
+ if (s.mDebugWhileInUseReasonInBindService == REASON_DENIED) {
+ s.mDebugWhileInUseReasonInBindService =
+ shouldAllowFgsWhileInUsePermissionLocked(
+ callingPackage, callingPid, callingUid, s.app,
+ BackgroundStartPrivileges.NONE,
+ true /* isBindService */,
+ false /* DO NOT enableFgsWhileInUseFix; use the old logic */);
+ }
+ }
if (s.app != null) {
ProcessServiceRecord servicePsr = s.app.mServices;
@@ -7258,47 +7361,52 @@
*/
protected boolean dumpService(FileDescriptor fd, PrintWriter pw, String name, int[] users,
String[] args, int opti, boolean dumpAll) {
- final ArrayList<ServiceRecord> services = new ArrayList<>();
+ try {
+ mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
+ final ArrayList<ServiceRecord> services = new ArrayList<>();
- final Predicate<ServiceRecord> filter = DumpUtils.filterRecord(name);
+ final Predicate<ServiceRecord> filter = DumpUtils.filterRecord(name);
- synchronized (mAm) {
- if (users == null) {
- users = mAm.mUserController.getUsers();
- }
-
- for (int user : users) {
- ServiceMap smap = mServiceMap.get(user);
- if (smap == null) {
- continue;
+ synchronized (mAm) {
+ if (users == null) {
+ users = mAm.mUserController.getUsers();
}
- ArrayMap<ComponentName, ServiceRecord> alls = smap.mServicesByInstanceName;
- for (int i=0; i<alls.size(); i++) {
- ServiceRecord r1 = alls.valueAt(i);
- if (filter.test(r1)) {
- services.add(r1);
+ for (int user : users) {
+ ServiceMap smap = mServiceMap.get(user);
+ if (smap == null) {
+ continue;
+ }
+ ArrayMap<ComponentName, ServiceRecord> alls = smap.mServicesByInstanceName;
+ for (int i=0; i<alls.size(); i++) {
+ ServiceRecord r1 = alls.valueAt(i);
+
+ if (filter.test(r1)) {
+ services.add(r1);
+ }
}
}
}
- }
- if (services.size() <= 0) {
- return false;
- }
-
- // Sort by component name.
- services.sort(Comparator.comparing(WithComponentName::getComponentName));
-
- boolean needSep = false;
- for (int i=0; i<services.size(); i++) {
- if (needSep) {
- pw.println();
+ if (services.size() <= 0) {
+ return false;
}
- needSep = true;
- dumpService("", fd, pw, services.get(i), args, dumpAll);
+
+ // Sort by component name.
+ services.sort(Comparator.comparing(WithComponentName::getComponentName));
+
+ boolean needSep = false;
+ for (int i=0; i<services.size(); i++) {
+ if (needSep) {
+ pw.println();
+ }
+ needSep = true;
+ dumpService("", fd, pw, services.get(i), args, dumpAll);
+ }
+ return true;
+ } finally {
+ mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
}
- return true;
}
/**
@@ -7352,45 +7460,76 @@
* @param callingUid caller app's uid.
* @param intent intent to start/bind service.
* @param r the service to start.
+ * @param isStartService True if it's called from Context.startService().
+ * False if it's called from Context.startForegroundService() or
+ * Service.startService().
* @return true if allow, false otherwise.
*/
private void setFgsRestrictionLocked(String callingPackage,
int callingPid, int callingUid, Intent intent, ServiceRecord r, int userId,
- BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService) {
- r.mLastSetFgsRestrictionTime = SystemClock.elapsedRealtime();
+ BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService,
+ boolean isStartService) {
+ final long now = SystemClock.elapsedRealtime();
+
// Check DeviceConfig flag.
if (!mAm.mConstants.mFlagBackgroundFgsStartRestrictionEnabled) {
r.mAllowWhileInUsePermissionInFgs = true;
}
final @ReasonCode int allowWhileInUse;
+
+ // Either (or both) mAllowWhileInUsePermissionInFgs or mAllowStartForeground is
+ // newly allowed?
+ boolean newlyAllowed = false;
if (!r.mAllowWhileInUsePermissionInFgs
|| (r.mAllowStartForeground == REASON_DENIED)) {
allowWhileInUse = shouldAllowFgsWhileInUsePermissionLocked(
callingPackage, callingPid, callingUid, r.app, backgroundStartPrivileges,
isBindService);
+ // We store them to compare the old and new while-in-use logics to each other.
+ // (They're not used for any other purposes.)
+ if (isBindService) {
+ r.mDebugWhileInUseReasonInBindService = allowWhileInUse;
+ } else {
+ r.mDebugWhileInUseReasonInStartForeground = allowWhileInUse;
+ }
if (!r.mAllowWhileInUsePermissionInFgs) {
r.mAllowWhileInUsePermissionInFgs = (allowWhileInUse != REASON_DENIED);
+ newlyAllowed |= r.mAllowWhileInUsePermissionInFgs;
}
if (r.mAllowStartForeground == REASON_DENIED) {
r.mAllowStartForeground = shouldAllowFgsStartForegroundWithBindingCheckLocked(
allowWhileInUse, callingPackage, callingPid, callingUid, intent, r,
backgroundStartPrivileges, isBindService);
+ newlyAllowed |= r.mAllowStartForeground != REASON_DENIED;
}
} else {
allowWhileInUse = REASON_UNKNOWN;
}
r.mAllowWhileInUsePermissionInFgsReason = allowWhileInUse;
+
+ if (isStartService && !r.isForeground && newlyAllowed) {
+ // If it's called by Context.startService() (not by startForegroundService()),
+ // and we're setting "allowed", then we can't fully trust it yet -- we'll need to reset
+ // the restrictions if startForeground() is called after the grace period.
+ r.mLastUntrustedSetFgsRestrictionAllowedTime = now;
+ }
}
void resetFgsRestrictionLocked(ServiceRecord r) {
r.mAllowWhileInUsePermissionInFgs = false;
r.mAllowWhileInUsePermissionInFgsReason = REASON_DENIED;
+ r.mDebugWhileInUseReasonInStartForeground = REASON_DENIED;
+ // We don't reset mWhileInUseReasonInBindService here, because if we do this, we would
+ // lose it in the "reevaluation" case in startForeground(), where we call
+ // resetFgsRestrictionLocked().
+ // Not resetting this is fine because it's only used in the first Service.startForeground()
+ // case, and there's no situations where we call resetFgsRestrictionLocked() before that.
r.mAllowStartForeground = REASON_DENIED;
r.mInfoAllowStartForeground = null;
r.mInfoTempFgsAllowListReason = null;
r.mLoggedInfoAllowStartForeground = false;
- r.mLastSetFgsRestrictionTime = 0;
+ r.mLastUntrustedSetFgsRestrictionAllowedTime = 0;
r.updateAllowUiJobScheduling(r.mAllowWhileInUsePermissionInFgs);
}
@@ -7425,14 +7564,29 @@
private @ReasonCode int shouldAllowFgsWhileInUsePermissionLocked(String callingPackage,
int callingPid, int callingUid, @Nullable ProcessRecord targetProcess,
BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService) {
+ return shouldAllowFgsWhileInUsePermissionLocked(callingPackage,
+ callingPid, callingUid, targetProcess, backgroundStartPrivileges, isBindService,
+ /* enableFgsWhileInUseFix =*/ mAm.mConstants.mEnableFgsWhileInUseFix);
+ }
+
+ private @ReasonCode int shouldAllowFgsWhileInUsePermissionLocked(String callingPackage,
+ int callingPid, int callingUid, @Nullable ProcessRecord targetProcess,
+ BackgroundStartPrivileges backgroundStartPrivileges, boolean isBindService,
+ boolean enableFgsWhileInUseFix) {
int ret = REASON_DENIED;
- final int uidState = mAm.getUidStateLocked(callingUid);
- if (ret == REASON_DENIED) {
- // Allow FGS while-in-use if the caller's process state is PROCESS_STATE_PERSISTENT,
- // PROCESS_STATE_PERSISTENT_UI or PROCESS_STATE_TOP.
- if (uidState <= PROCESS_STATE_TOP) {
- ret = getReasonCodeFromProcState(uidState);
+ // Define some local variables for better readability...
+ final boolean useOldLogic = !enableFgsWhileInUseFix;
+ final boolean forStartForeground = !isBindService;
+
+ if (useOldLogic || forStartForeground) {
+ final int uidState = mAm.getUidStateLocked(callingUid);
+ if (ret == REASON_DENIED) {
+ // Allow FGS while-in-use if the caller's process state is PROCESS_STATE_PERSISTENT,
+ // PROCESS_STATE_PERSISTENT_UI or PROCESS_STATE_TOP.
+ if (uidState <= PROCESS_STATE_TOP) {
+ ret = getReasonCodeFromProcState(uidState);
+ }
}
}
@@ -7475,6 +7629,10 @@
}
}
+ if (enableFgsWhileInUseFix && ret == REASON_DENIED) {
+ ret = shouldAllowFgsWhileInUsePermissionByBindingsLocked(callingUid);
+ }
+
if (ret == REASON_DENIED) {
// Allow FGS while-in-use if the WindowManager allows background activity start.
// This is mainly to get the 10 seconds grace period if any activity in the caller has
@@ -7553,6 +7711,59 @@
}
/**
+ * Check all bindings into the calling UID, and see if:
+ * - It's bound by a TOP app
+ * - or, bound by a persistent process with BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS.
+ */
+ private @ReasonCode int shouldAllowFgsWhileInUsePermissionByBindingsLocked(int callingUid) {
+ final ArraySet<Integer> checkedClientUids = new ArraySet<>();
+ final Integer result = mAm.mProcessList.searchEachLruProcessesLOSP(
+ false, pr -> {
+ if (pr.uid != callingUid) {
+ return null;
+ }
+ final ProcessServiceRecord psr = pr.mServices;
+ final int serviceCount = psr.mServices.size();
+ for (int svc = 0; svc < serviceCount; svc++) {
+ final ArrayMap<IBinder, ArrayList<ConnectionRecord>> conns =
+ psr.mServices.valueAt(svc).getConnections();
+ final int size = conns.size();
+ for (int conni = 0; conni < size; conni++) {
+ final ArrayList<ConnectionRecord> crs = conns.valueAt(conni);
+ for (int con = 0; con < crs.size(); con++) {
+ final ConnectionRecord cr = crs.get(con);
+ final ProcessRecord clientPr = cr.binding.client;
+ final int clientUid = clientPr.uid;
+
+ // An UID can bind to itself, do not check on itself again.
+ // Also skip already checked clientUid.
+ if (clientUid == callingUid
+ || checkedClientUids.contains(clientUid)) {
+ continue;
+ }
+
+ // Binding found, check the client procstate and the flag.
+ final int clientUidState = mAm.getUidStateLocked(callingUid);
+ final boolean boundByTop = clientUidState == PROCESS_STATE_TOP;
+ final boolean boundByPersistentWithBal =
+ clientUidState < PROCESS_STATE_TOP
+ && cr.hasFlag(
+ Context.BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS);
+ if (boundByTop || boundByPersistentWithBal) {
+ return getReasonCodeFromProcState(clientUidState);
+ }
+
+ // Don't check the same UID.
+ checkedClientUids.add(clientUid);
+ }
+ }
+ }
+ return null;
+ });
+ return result == null ? REASON_DENIED : result;
+ }
+
+ /**
* The uid is not allowed to start FGS, but the uid has a service that is bound
* by a clientUid, if the clientUid can start FGS, then the clientUid can propagate its
* BG-FGS-start capability down to the callingUid.
@@ -8137,7 +8348,8 @@
r.mFgsEnterTime = SystemClock.uptimeMillis();
r.foregroundServiceType = options.mForegroundServiceTypes;
setFgsRestrictionLocked(callingPackage, callingPid, callingUid, intent, r, userId,
- BackgroundStartPrivileges.NONE, false);
+ BackgroundStartPrivileges.NONE, false /* isBindService */,
+ false /* isStartService */);
final ProcessServiceRecord psr = callerApp.mServices;
final boolean newService = psr.startService(r);
// updateOomAdj.
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index 44e198b..3841b6a 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -1058,6 +1058,13 @@
/** @see #KEY_USE_MODERN_TRIM */
public boolean USE_MODERN_TRIM = DEFAULT_USE_MODERN_TRIM;
+ private static final String KEY_ENABLE_FGS_WHILE_IN_USE_FIX =
+ "key_enable_fgs_while_in_use_fix";
+
+ private static final boolean DEFAULT_ENABLE_FGS_WHILE_IN_USE_FIX = true;
+
+ public volatile boolean mEnableFgsWhileInUseFix = DEFAULT_ENABLE_FGS_WHILE_IN_USE_FIX;
+
private final OnPropertiesChangedListener mOnDeviceConfigChangedListener =
new OnPropertiesChangedListener() {
@Override
@@ -1226,6 +1233,9 @@
case KEY_ENABLE_WAIT_FOR_FINISH_ATTACH_APPLICATION:
updateEnableWaitForFinishAttachApplication();
break;
+ case KEY_ENABLE_FGS_WHILE_IN_USE_FIX:
+ updateEnableFgsWhileInUseFix();
+ break;
case KEY_MAX_PREVIOUS_TIME:
updateMaxPreviousTime();
break;
@@ -1995,6 +2005,12 @@
DEFAULT_ENABLE_WAIT_FOR_FINISH_ATTACH_APPLICATION);
}
+ private void updateEnableFgsWhileInUseFix() {
+ mEnableFgsWhileInUseFix = DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ KEY_ENABLE_FGS_WHILE_IN_USE_FIX,
+ DEFAULT_ENABLE_FGS_WHILE_IN_USE_FIX);
+ }
private void updateUseTieredCachedAdj() {
USE_TIERED_CACHED_ADJ = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
@@ -2195,6 +2211,9 @@
pw.print(" "); pw.print(KEY_SYSTEM_EXEMPT_POWER_RESTRICTIONS_ENABLED);
pw.print("="); pw.println(mFlagSystemExemptPowerRestrictionsEnabled);
+ pw.print(" "); pw.print(KEY_ENABLE_FGS_WHILE_IN_USE_FIX);
+ pw.print("="); pw.println(mEnableFgsWhileInUseFix);
+
pw.print(" "); pw.print(KEY_SHORT_FGS_TIMEOUT_DURATION);
pw.print("="); pw.println(mShortFgsTimeoutDuration);
pw.print(" "); pw.print(KEY_SHORT_FGS_PROC_STATE_EXTRA_WAIT_DURATION);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 97d34b8..1f80aec 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -382,6 +382,7 @@
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
+import android.util.StatsEvent;
import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoUtils;
@@ -1595,6 +1596,7 @@
static final int SERVICE_SHORT_FGS_TIMEOUT_MSG = 76;
static final int SERVICE_SHORT_FGS_PROCSTATE_TIMEOUT_MSG = 77;
static final int SERVICE_SHORT_FGS_ANR_TIMEOUT_MSG = 78;
+ static final int UPDATE_CACHED_APP_HIGH_WATERMARK = 79;
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -1938,6 +1940,9 @@
case SERVICE_SHORT_FGS_ANR_TIMEOUT_MSG: {
mServices.onShortFgsAnrTimeout((ServiceRecord) msg.obj);
} break;
+ case UPDATE_CACHED_APP_HIGH_WATERMARK: {
+ mAppProfiler.mCachedAppsWatermarkData.updateCachedAppsSnapshot((long) msg.obj);
+ } break;
}
}
}
@@ -4598,8 +4603,7 @@
boolean isRestrictedBackupMode = false;
if (backupTarget != null && backupTarget.appInfo.packageName.equals(processName)) {
isRestrictedBackupMode = backupTarget.appInfo.uid >= FIRST_APPLICATION_UID
- && ((backupTarget.backupMode == BackupRecord.RESTORE)
- || (backupTarget.backupMode == BackupRecord.RESTORE_FULL)
+ && ((backupTarget.backupMode == BackupRecord.RESTORE_FULL)
|| (backupTarget.backupMode == BackupRecord.BACKUP_FULL));
}
@@ -7311,7 +7315,14 @@
// Send broadcast to shell to trigger bugreport using Bugreport API
// Always start the shell process on the current user to ensure that
// the foreground user can see all bugreport notifications.
- mContext.sendBroadcastAsUser(triggerShellBugreport, getCurrentUser().getUserHandle());
+ // In case of BUGREPORT_MODE_REMOTE send the broadcast to SYSTEM user as the device
+ // owner apps are running on the SYSTEM user.
+ if (bugreportType == BugreportParams.BUGREPORT_MODE_REMOTE) {
+ mContext.sendBroadcastAsUser(triggerShellBugreport, UserHandle.SYSTEM);
+ } else {
+ mContext.sendBroadcastAsUser(triggerShellBugreport,
+ getCurrentUser().getUserHandle());
+ }
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -13382,7 +13393,8 @@
BackupRecord r = new BackupRecord(app, backupMode, targetUserId, backupDestination);
ComponentName hostingName =
- (backupMode == ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL)
+ (backupMode == ApplicationThreadConstants.BACKUP_MODE_INCREMENTAL
+ || backupMode == ApplicationThreadConstants.BACKUP_MODE_RESTORE)
? new ComponentName(app.packageName, app.backupAgentName)
: new ComponentName("android", "FullBackupAgent");
@@ -18598,6 +18610,13 @@
@MediaProjectionTokenEvent int event) {
ActivityManagerService.this.notifyMediaProjectionEvent(uid, projectionToken, event);
}
+
+ @Override
+ @NonNull
+ public StatsEvent getCachedAppsHighWatermarkStats(int atomTag, boolean resetAfterPull) {
+ return mAppProfiler.mCachedAppsWatermarkData.getCachedAppsHighWatermarkStats(
+ atomTag, resetAfterPull);
+ }
}
long inputDispatchingTimedOut(int pid, final boolean aboveSystem, TimeoutRecord timeoutRecord) {
diff --git a/services/core/java/com/android/server/am/AnrHelper.java b/services/core/java/com/android/server/am/AnrHelper.java
index 16219cd..7d98443 100644
--- a/services/core/java/com/android/server/am/AnrHelper.java
+++ b/services/core/java/com/android/server/am/AnrHelper.java
@@ -22,6 +22,7 @@
import android.content.pm.ApplicationInfo;
import android.os.SystemClock;
import android.os.Trace;
+import android.util.ArraySet;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
@@ -29,8 +30,12 @@
import com.android.internal.os.TimeoutRecord;
import com.android.server.wm.WindowProcessController;
+import java.io.File;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
@@ -59,13 +64,19 @@
/**
* The keep alive time for the threads in the helper threadpool executor
*/
- private static final int AUX_THREAD_KEEP_ALIVE_SECOND = 10;
+ private static final int DEFAULT_THREAD_KEEP_ALIVE_SECOND = 10;
private static final ThreadFactory sDefaultThreadFactory = r ->
new Thread(r, "AnrAuxiliaryTaskExecutor");
+ private static final ThreadFactory sMainProcessDumpThreadFactory = r ->
+ new Thread(r, "AnrMainProcessDumpThread");
@GuardedBy("mAnrRecords")
private final ArrayList<AnrRecord> mAnrRecords = new ArrayList<>();
+
+ private final Set<Integer> mTempDumpedPids =
+ Collections.synchronizedSet(new ArraySet<Integer>());
+
private final AtomicBoolean mRunning = new AtomicBoolean(false);
private final ActivityManagerService mService;
@@ -80,17 +91,21 @@
private int mProcessingPid = -1;
private final ExecutorService mAuxiliaryTaskExecutor;
+ private final ExecutorService mEarlyDumpExecutor;
AnrHelper(final ActivityManagerService service) {
- this(service, new ThreadPoolExecutor(/* corePoolSize= */ 0, /* maximumPoolSize= */ 1,
- /* keepAliveTime= */ AUX_THREAD_KEEP_ALIVE_SECOND, TimeUnit.SECONDS,
- new LinkedBlockingQueue<>(), sDefaultThreadFactory));
+ // All the ANR threads need to expire after a period of inactivity, given the
+ // ephemeral nature of ANRs and how infrequent they are.
+ this(service, makeExpiringThreadPoolWithSize(1, sDefaultThreadFactory),
+ makeExpiringThreadPoolWithSize(2, sMainProcessDumpThreadFactory));
}
@VisibleForTesting
- AnrHelper(ActivityManagerService service, ExecutorService auxExecutor) {
+ AnrHelper(ActivityManagerService service, ExecutorService auxExecutor,
+ ExecutorService earlyDumpExecutor) {
mService = service;
mAuxiliaryTaskExecutor = auxExecutor;
+ mEarlyDumpExecutor = earlyDumpExecutor;
}
void appNotResponding(ProcessRecord anrProcess, TimeoutRecord timeoutRecord) {
@@ -121,6 +136,12 @@
+ timeoutRecord.mReason);
return;
}
+ if (!mTempDumpedPids.add(incomingPid)) {
+ Slog.i(TAG,
+ "Skip ANR being predumped, pid=" + incomingPid + " "
+ + timeoutRecord.mReason);
+ return;
+ }
for (int i = mAnrRecords.size() - 1; i >= 0; i--) {
if (mAnrRecords.get(i).mPid == incomingPid) {
Slog.i(TAG,
@@ -129,10 +150,24 @@
return;
}
}
+ // We dump the main process as soon as we can on a different thread,
+ // this is done as the main process's dump can go stale in a few hundred
+ // milliseconds and the average full ANR dump takes a few seconds.
+ timeoutRecord.mLatencyTracker.earlyDumpRequestSubmittedWithSize(
+ mTempDumpedPids.size());
+ Future<File> firstPidDumpPromise = mEarlyDumpExecutor.submit(() -> {
+ // the class AnrLatencyTracker is not generally thread safe but the values
+ // recorded/touched by the Temporary dump thread(s) are all volatile/atomic.
+ File tracesFile = StackTracesDumpHelper.dumpStackTracesTempFile(incomingPid,
+ timeoutRecord.mLatencyTracker);
+ mTempDumpedPids.remove(incomingPid);
+ return tracesFile;
+ });
+
timeoutRecord.mLatencyTracker.anrRecordPlacingOnQueueWithSize(mAnrRecords.size());
mAnrRecords.add(new AnrRecord(anrProcess, activityShortComponentName, aInfo,
- parentShortComponentName, parentProcess, aboveSystem,
- mAuxiliaryTaskExecutor, timeoutRecord, isContinuousAnr));
+ parentShortComponentName, parentProcess, aboveSystem, timeoutRecord,
+ isContinuousAnr, firstPidDumpPromise));
}
startAnrConsumerIfNeeded();
} finally {
@@ -147,6 +182,16 @@
}
}
+ private static ThreadPoolExecutor makeExpiringThreadPoolWithSize(int size,
+ ThreadFactory factory) {
+ ThreadPoolExecutor pool = new ThreadPoolExecutor(/* corePoolSize= */ size,
+ /* maximumPoolSize= */ size, /* keepAliveTime= */ DEFAULT_THREAD_KEEP_ALIVE_SECOND,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(), factory);
+ // We allow the core threads to expire after the keepAliveTime.
+ pool.allowCoreThreadTimeOut(true);
+ return pool;
+ }
+
/**
* The thread to execute {@link ProcessErrorStateRecord#appNotResponding}. It will terminate if
* all records are handled.
@@ -219,7 +264,7 @@
}
}
- private static class AnrRecord {
+ private class AnrRecord {
final ProcessRecord mApp;
final int mPid;
final String mActivityShortComponentName;
@@ -228,14 +273,14 @@
final ApplicationInfo mAppInfo;
final WindowProcessController mParentProcess;
final boolean mAboveSystem;
- final ExecutorService mAuxiliaryTaskExecutor;
final long mTimestamp = SystemClock.uptimeMillis();
final boolean mIsContinuousAnr;
+ final Future<File> mFirstPidFilePromise;
AnrRecord(ProcessRecord anrProcess, String activityShortComponentName,
ApplicationInfo aInfo, String parentShortComponentName,
WindowProcessController parentProcess, boolean aboveSystem,
- ExecutorService auxiliaryTaskExecutor, TimeoutRecord timeoutRecord,
- boolean isContinuousAnr) {
+ TimeoutRecord timeoutRecord, boolean isContinuousAnr,
+ Future<File> firstPidFilePromise) {
mApp = anrProcess;
mPid = anrProcess.mPid;
mActivityShortComponentName = activityShortComponentName;
@@ -244,8 +289,8 @@
mAppInfo = aInfo;
mParentProcess = parentProcess;
mAboveSystem = aboveSystem;
- mAuxiliaryTaskExecutor = auxiliaryTaskExecutor;
mIsContinuousAnr = isContinuousAnr;
+ mFirstPidFilePromise = firstPidFilePromise;
}
void appNotResponding(boolean onlyDumpSelf) {
@@ -254,7 +299,7 @@
mApp.mErrorState.appNotResponding(mActivityShortComponentName, mAppInfo,
mParentShortComponentName, mParentProcess, mAboveSystem,
mTimeoutRecord, mAuxiliaryTaskExecutor, onlyDumpSelf,
- mIsContinuousAnr);
+ mIsContinuousAnr, mFirstPidFilePromise);
} finally {
mTimeoutRecord.mLatencyTracker.anrProcessingEnded();
}
diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java
index 25ac956..f29a2e1 100644
--- a/services/core/java/com/android/server/am/AppProfiler.java
+++ b/services/core/java/com/android/server/am/AppProfiler.java
@@ -82,17 +82,21 @@
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.StatsEvent;
import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.ProcessMap;
import com.android.internal.app.procstats.ProcessStats;
import com.android.internal.os.BackgroundThread;
+import com.android.internal.os.BinderInternal;
import com.android.internal.os.ProcessCpuTracker;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.MemInfoReader;
+import com.android.internal.util.QuickSelect;
import com.android.server.am.LowMemDetector.MemFactor;
import com.android.server.power.stats.BatteryStatsImpl;
import com.android.server.utils.PriorityDump;
@@ -323,6 +327,8 @@
private final ActivityManagerService mService;
private final Handler mBgHandler;
+ final CachedAppsWatermarkData mCachedAppsWatermarkData = new CachedAppsWatermarkData();
+
/**
* The lock to guard some of the profiling data here and {@link ProcessProfileRecord}.
*
@@ -391,6 +397,193 @@
}
}
+ /**
+ * A simple data class holding the information about the cached apps high watermark.
+ *
+ * Keep it sync with the frameworks/proto_logging/stats/atoms.proto
+ */
+ class CachedAppsWatermarkData {
+ /** The high water mark of the number of cached apps. */
+ @GuardedBy("mProcLock")
+ int mCachedAppHighWatermark;
+
+ /**
+ * The uptime (in seconds) at the high watermark.
+ * Note this is going to be pull metrics, so we'll need the timestamp here.
+ */
+ @GuardedBy("mProcLock")
+ int mUptimeInSeconds;
+
+ /** The number of binder proxy at that high water mark. */
+ @GuardedBy("mProcLock")
+ int mBinderProxySnapshot;
+
+ /** Free physical memory (in kb) on device. */
+ @GuardedBy("mProcLock")
+ int mFreeInKb;
+
+ /** Cched physical memory (in kb) on device. */
+ @GuardedBy("mProcLock")
+ int mCachedInKb;
+
+ /** zram (in kb) on device. */
+ @GuardedBy("mProcLock")
+ int mZramInKb;
+
+ /** Kernel memory (in kb) on device. */
+ @GuardedBy("mProcLock")
+ int mKernelInKb;
+
+ /** The number of apps in frozen state. */
+ @GuardedBy("mProcLock")
+ int mNumOfFrozenApps;
+
+ /** The longest frozen time (now - last_frozen) in current frozen apps. */
+ @GuardedBy("mProcLock")
+ int mLongestFrozenTimeInSeconds;
+
+ /** The shortest frozen time (now - last_frozen) in current frozen apps. */
+ @GuardedBy("mProcLock")
+ int mShortestFrozenTimeInSeconds;
+
+ /** The mean frozen time (now - last_frozen) in current frozen apps. */
+ @GuardedBy("mProcLock")
+ int mMeanFrozenTimeInSeconds;
+
+ /** The average frozen time (now - last_frozen) in current frozen apps. */
+ @GuardedBy("mProcLock")
+ int mAverageFrozenTimeInSeconds;
+
+ /**
+ * This is an array holding the frozen app durations temporarily
+ * while updating the cached app high watermark.
+ */
+ @GuardedBy("mProcLock")
+ private long[] mCachedAppFrozenDurations;
+
+ /**
+ * The earliest frozen timestamp within the frozen apps.
+ */
+ @GuardedBy("mProcLock")
+ private long mEarliestFrozenTimestamp;
+
+ /**
+ * The most recent frozen timestamp within the frozen apps.
+ */
+ @GuardedBy("mProcLock")
+ private long mLatestFrozenTimestamp;
+
+ /**
+ * The sum of total frozen durations of all frozen apps.
+ */
+ @GuardedBy("mProcLock")
+ private long mTotalFrozenDurations;
+
+ @GuardedBy("mProcLock")
+ void updateCachedAppsHighWatermarkIfNecessaryLocked(int numOfCachedApps, long now) {
+ if (numOfCachedApps > mCachedAppHighWatermark) {
+ mCachedAppHighWatermark = numOfCachedApps;
+ mUptimeInSeconds = (int) (now / 1000);
+
+ // The rest of the updates are pretty costly, do it in a separated handler.
+ mService.mHandler.removeMessages(
+ ActivityManagerService.UPDATE_CACHED_APP_HIGH_WATERMARK);
+ mService.mHandler.obtainMessage(
+ ActivityManagerService.UPDATE_CACHED_APP_HIGH_WATERMARK, Long.valueOf(now))
+ .sendToTarget();
+ }
+ }
+
+ void updateCachedAppsSnapshot(long now) {
+ synchronized (mProcLock) {
+ mEarliestFrozenTimestamp = now;
+ mLatestFrozenTimestamp = 0L;
+ mTotalFrozenDurations = 0L;
+ mNumOfFrozenApps = 0;
+ if (mCachedAppFrozenDurations == null
+ || mCachedAppFrozenDurations.length < mCachedAppHighWatermark) {
+ mCachedAppFrozenDurations = new long[Math.max(
+ mCachedAppHighWatermark, mService.mConstants.CUR_MAX_CACHED_PROCESSES)];
+ }
+ mService.mProcessList.forEachLruProcessesLOSP(true, app -> {
+ if (app.mOptRecord.isFrozen()) {
+ final long freezeTime = app.mOptRecord.getFreezeUnfreezeTime();
+ if (freezeTime < mEarliestFrozenTimestamp) {
+ mEarliestFrozenTimestamp = freezeTime;
+ }
+ if (freezeTime > mLatestFrozenTimestamp) {
+ mLatestFrozenTimestamp = freezeTime;
+ }
+ final long duration = now - freezeTime;
+ mTotalFrozenDurations += duration;
+ mCachedAppFrozenDurations[mNumOfFrozenApps++] = duration;
+ }
+ });
+ if (mNumOfFrozenApps > 0) {
+ mLongestFrozenTimeInSeconds = (int) ((now - mEarliestFrozenTimestamp) / 1000);
+ mShortestFrozenTimeInSeconds = (int) ((now - mLatestFrozenTimestamp) / 1000);
+ mAverageFrozenTimeInSeconds =
+ (int) ((mTotalFrozenDurations / mNumOfFrozenApps) / 1000);
+ mMeanFrozenTimeInSeconds = (int) (QuickSelect.select(mCachedAppFrozenDurations,
+ 0, mNumOfFrozenApps, mNumOfFrozenApps / 2) / 1000);
+ }
+
+ mBinderProxySnapshot = 0;
+ final SparseIntArray counts = BinderInternal.nGetBinderProxyPerUidCounts();
+ if (counts != null) {
+ for (int i = 0, size = counts.size(); i < size; i++) {
+ final int uid = counts.keyAt(i);
+ final UidRecord uidRec = mService.mProcessList.getUidRecordLOSP(uid);
+ if (uidRec != null) {
+ mBinderProxySnapshot += counts.valueAt(i);
+ }
+ }
+ }
+
+ final MemInfoReader memInfo = new MemInfoReader();
+ memInfo.readMemInfo();
+ mFreeInKb = (int) memInfo.getFreeSizeKb();
+ mCachedInKb = (int) memInfo.getCachedSizeKb();
+ mZramInKb = (int) memInfo.getZramTotalSizeKb();
+ mKernelInKb = (int) memInfo.getKernelUsedSizeKb();
+ }
+ }
+
+ @NonNull
+ StatsEvent getCachedAppsHighWatermarkStats(int atomTag, boolean resetAfterPull) {
+ synchronized (mProcLock) {
+ final StatsEvent event = FrameworkStatsLog.buildStatsEvent(atomTag,
+ mCachedAppHighWatermark,
+ mUptimeInSeconds,
+ mBinderProxySnapshot,
+ mFreeInKb,
+ mCachedInKb,
+ mZramInKb,
+ mKernelInKb,
+ mNumOfFrozenApps,
+ mLongestFrozenTimeInSeconds,
+ mShortestFrozenTimeInSeconds,
+ mMeanFrozenTimeInSeconds,
+ mAverageFrozenTimeInSeconds);
+ if (resetAfterPull) {
+ mCachedAppHighWatermark = 0;
+ mUptimeInSeconds = 0;
+ mBinderProxySnapshot = 0;
+ mFreeInKb = 0;
+ mCachedInKb = 0;
+ mZramInKb = 0;
+ mKernelInKb = 0;
+ mNumOfFrozenApps = 0;
+ mLongestFrozenTimeInSeconds = 0;
+ mShortestFrozenTimeInSeconds = 0;
+ mMeanFrozenTimeInSeconds = 0;
+ mAverageFrozenTimeInSeconds = 0;
+ }
+ return event;
+ }
+ }
+ }
+
private class BgHandler extends Handler {
static final int COLLECT_PSS_BG_MSG = 1;
static final int DEFER_PSS_MSG = 2;
@@ -954,7 +1147,7 @@
}
@GuardedBy({"mService", "mProcLock"})
- boolean updateLowMemStateLSP(int numCached, int numEmpty, int numTrimming) {
+ boolean updateLowMemStateLSP(int numCached, int numEmpty, int numTrimming, long now) {
int memFactor;
if (mLowMemDetector != null && mLowMemDetector.isAvailable()) {
memFactor = mLowMemDetector.getMemFactor();
@@ -1040,11 +1233,10 @@
mLastNumProcesses = mService.mProcessList.getLruSizeLOSP();
boolean allChanged;
int trackerMemFactor;
- final long now;
synchronized (mService.mProcessStats.mLock) {
- now = SystemClock.uptimeMillis();
allChanged = mService.mProcessStats.setMemFactorLocked(memFactor,
- mService.mAtmInternal == null || !mService.mAtmInternal.isSleeping(), now);
+ mService.mAtmInternal == null || !mService.mAtmInternal.isSleeping(),
+ SystemClock.uptimeMillis() /* re-acquire the time within the lock */);
trackerMemFactor = mService.mProcessStats.getMemFactorLocked();
}
if (memFactor != ADJ_MEM_FACTOR_NORMAL) {
@@ -1124,6 +1316,8 @@
profile.setTrimMemoryLevel(0);
});
}
+ mCachedAppsWatermarkData.updateCachedAppsHighWatermarkIfNecessaryLocked(
+ numCached + numEmpty, now);
return allChanged;
}
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 0744f75..c0b3a90 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -37,6 +37,8 @@
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
@@ -149,7 +151,6 @@
private final PowerProfile mPowerProfile;
final BatteryStatsImpl mStats;
- @GuardedBy("mWakeupStats")
final CpuWakeupStats mCpuWakeupStats;
private final BatteryUsageStatsStore mBatteryUsageStatsStore;
private final BatteryStatsImpl.UserInfoProvider mUserManagerUserInfoProvider;
@@ -1261,6 +1262,26 @@
}
@Override
+ public void noteWakeupSensorEvent(long elapsedNanos, int uid, int sensorHandle) {
+ final int callingUid = Binder.getCallingUid();
+ if (callingUid != Process.SYSTEM_UID) {
+ throw new SecurityException("Calling uid " + callingUid + " is not system uid");
+ }
+
+ final SensorManager sm = mContext.getSystemService(SensorManager.class);
+ final Sensor sensor = sm.getSensorByHandle(sensorHandle);
+ if (sensor == null) {
+ Slog.w(TAG, "Unknown sensor handle " + sensorHandle
+ + " received in noteWakeupSensorEvent");
+ return;
+ }
+ Slog.i(TAG, "Sensor " + sensor + " wakeup event at " + elapsedNanos + " sent to uid "
+ + uid);
+ // TODO (b/275436924): Remove log and pipe to CpuWakeupStats for wakeup attribution
+ // This method should return as quickly as possible. Use mHandler#post to do longer work.
+ }
+
+ @Override
@EnforcePermission(UPDATE_DEVICE_STATS)
public void noteStopSensor(final int uid, final int sensor) {
super.noteStopSensor_enforcePermission();
diff --git a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
index 993595b..8f84b08 100644
--- a/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
+++ b/services/core/java/com/android/server/am/ForegroundServiceTypeLoggerModule.java
@@ -190,6 +190,10 @@
// and also clean up the start calls stack by UID
final ArrayList<Integer> apiTypes = convertFgsTypeToApiTypes(record.foregroundServiceType);
final UidState uidState = mUids.get(uid);
+ if (uidState == null) {
+ Log.e(TAG, "FGS stop call being logged with no start call for UID " + uid);
+ return;
+ }
final ArrayList<Integer> apisFound = new ArrayList<>();
final ArrayList<Long> timestampsFound = new ArrayList<>();
for (int i = 0, size = apiTypes.size(); i < size; i++) {
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 365dcd9..1e5f187 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1401,7 +1401,7 @@
mLastFreeSwapPercent = freeSwapPercent;
- return mService.mAppProfiler.updateLowMemStateLSP(numCached, numEmpty, numTrimming);
+ return mService.mAppProfiler.updateLowMemStateLSP(numCached, numEmpty, numTrimming, now);
}
@GuardedBy({"mService", "mProcLock"})
@@ -1482,7 +1482,10 @@
}
if (uidRec.isIdle() && !uidRec.isSetIdle()) {
uidChange |= UidRecord.CHANGE_IDLE;
- becameIdle.add(uidRec);
+ if (uidRec.getSetProcState() != PROCESS_STATE_NONEXISTENT) {
+ // don't stop the bg services if it's just started.
+ becameIdle.add(uidRec);
+ }
}
} else {
if (uidRec.isIdle()) {
diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
index ca41f42..e498384 100644
--- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
+++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
@@ -290,7 +290,7 @@
String parentShortComponentName, WindowProcessController parentProcess,
boolean aboveSystem, TimeoutRecord timeoutRecord,
ExecutorService auxiliaryTaskExecutor, boolean onlyDumpSelf,
- boolean isContinuousAnr) {
+ boolean isContinuousAnr, Future<File> firstPidFilePromise) {
String annotation = timeoutRecord.mReason;
AnrLatencyTracker latencyTracker = timeoutRecord.mLatencyTracker;
Future<?> updateCpuStatsNowFirstCall = null;
@@ -335,7 +335,6 @@
Counter.logIncrement("stability_anr.value_skipped_anrs");
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();
@@ -369,6 +368,9 @@
firstPids.add(pid);
// Don't dump other PIDs if it's a background ANR or is requested to only dump self.
+ // Note that the primary pid is added here just in case, as it should normally be
+ // dumped on the early dump thread, and would only be dumped on the Anr consumer thread
+ // as a fallback.
isSilentAnr = isSilentAnr();
if (!isSilentAnr && !onlyDumpSelf) {
int parentPid = pid;
@@ -501,7 +503,8 @@
File tracesFile = StackTracesDumpHelper.dumpStackTraces(firstPids,
isSilentAnr ? null : processCpuTracker, isSilentAnr ? null : lastPids,
nativePidsFuture, tracesFileException, firstPidEndOffset, annotation,
- criticalEventLog, memoryHeaders, auxiliaryTaskExecutor, latencyTracker);
+ criticalEventLog, memoryHeaders, auxiliaryTaskExecutor, firstPidFilePromise,
+ latencyTracker);
if (isMonitorCpuUsage()) {
// Wait for the first call to finish
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 312f98a..d7b22a8 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -108,6 +108,7 @@
import android.os.UserHandle;
import android.os.storage.StorageManagerInternal;
import android.system.Os;
+import android.system.OsConstants;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -2331,9 +2332,15 @@
if (!regularZygote) {
// webview and app zygote don't have the permission to create the nodes
- if (Process.createProcessGroup(uid, startResult.pid) < 0) {
- throw new AssertionError("Unable to create process group for " + app.processName
- + " (" + startResult.pid + ")");
+ final int res = Process.createProcessGroup(uid, startResult.pid);
+ if (res < 0) {
+ if (res == -OsConstants.ESRCH) {
+ Slog.e(ActivityManagerService.TAG, "Unable to create process group for "
+ + app.processName + " (" + startResult.pid + ")");
+ } else {
+ throw new AssertionError("Unable to create process group for "
+ + app.processName + " (" + startResult.pid + ")");
+ }
}
}
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index ffb40ee..438a08c 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -47,6 +47,7 @@
import android.os.Trace;
import android.os.UserHandle;
import android.server.ServerProtoEnums;
+import android.system.OsConstants;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.DebugUtils;
@@ -1186,8 +1187,8 @@
EventLog.writeEvent(EventLogTags.AM_KILL,
userId, mPid, processName, mState.getSetAdj(), reason);
Process.killProcessQuiet(mPid);
- if (asyncKPG) ProcessList.killProcessGroup(uid, mPid);
- else Process.killProcessGroup(uid, mPid);
+ if (!asyncKPG) Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
+ ProcessList.killProcessGroup(uid, mPid);
} else {
mPendingStart = false;
}
diff --git a/services/core/java/com/android/server/am/ProviderMap.java b/services/core/java/com/android/server/am/ProviderMap.java
index 072eba5..20c695f 100644
--- a/services/core/java/com/android/server/am/ProviderMap.java
+++ b/services/core/java/com/android/server/am/ProviderMap.java
@@ -351,21 +351,26 @@
protected boolean dumpProvider(FileDescriptor fd, PrintWriter pw, String name, String[] args,
int opti, boolean dumpAll) {
- ArrayList<ContentProviderRecord> providers = getProvidersForName(name);
+ try {
+ mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
+ ArrayList<ContentProviderRecord> providers = getProvidersForName(name);
- if (providers.size() <= 0) {
- return false;
- }
-
- boolean needSep = false;
- for (int i=0; i<providers.size(); i++) {
- if (needSep) {
- pw.println();
+ if (providers.size() <= 0) {
+ return false;
}
- needSep = true;
- dumpProvider("", fd, pw, providers.get(i), args, dumpAll);
+
+ boolean needSep = false;
+ for (int i=0; i<providers.size(); i++) {
+ if (needSep) {
+ pw.println();
+ }
+ needSep = true;
+ dumpProvider("", fd, pw, providers.get(i), args, dumpAll);
+ }
+ return true;
+ } finally {
+ mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
}
- return true;
}
/**
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index a875860..78aafeb 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -176,6 +176,13 @@
boolean mAllowWhileInUsePermissionInFgs;
@PowerExemptionManager.ReasonCode
int mAllowWhileInUsePermissionInFgsReason;
+
+ // Integer version of mAllowWhileInUsePermissionInFgs that we keep track to compare
+ // the old and new logics.
+ // TODO: Remove them once we're confident in the new logic.
+ int mDebugWhileInUseReasonInStartForeground = REASON_DENIED;
+ int mDebugWhileInUseReasonInBindService = REASON_DENIED;
+
// A copy of mAllowWhileInUsePermissionInFgs's value when the service is entering FGS state.
boolean mAllowWhileInUsePermissionInFgsAtEntering;
/** Allow scheduling user-initiated jobs from the background. */
@@ -216,8 +223,13 @@
// created. (i.e. due to "bound" or "start".) It never decreases, even when stopForeground()
// is called.
int mStartForegroundCount;
- // Last time mAllowWhileInUsePermissionInFgs or mAllowStartForeground is set.
- long mLastSetFgsRestrictionTime;
+
+ // Last time mAllowWhileInUsePermissionInFgs or mAllowStartForeground was set to "allowed"
+ // from "disallowed" when the service was _not_ already a foreground service.
+ // this means they're set in startService(). (not startForegroundService)
+ // In startForeground(), if this timestamp is too old, we can't trust these flags, so
+ // we need to reset them.
+ long mLastUntrustedSetFgsRestrictionAllowedTime;
// This is a service record of a FGS delegate (not a service record of a real service)
boolean mIsFgsDelegate;
@@ -609,10 +621,14 @@
pw.print(prefix); pw.print("mIsAllowedBgActivityStartsByStart=");
pw.println(mBackgroundStartPrivilegesByStartMerged);
}
- pw.print(prefix); pw.print("allowWhileInUsePermissionInFgs=");
- pw.println(mAllowWhileInUsePermissionInFgs);
pw.print(prefix); pw.print("mAllowWhileInUsePermissionInFgsReason=");
pw.println(mAllowWhileInUsePermissionInFgsReason);
+
+ pw.print(prefix); pw.print("debugWhileInUseReasonInStartForeground=");
+ pw.println(mDebugWhileInUseReasonInStartForeground);
+ pw.print(prefix); pw.print("debugWhileInUseReasonInBindService=");
+ pw.println(mDebugWhileInUseReasonInBindService);
+
pw.print(prefix); pw.print("allowUiJobScheduling="); pw.println(mAllowUiJobScheduling);
pw.print(prefix); pw.print("recentCallingPackage=");
pw.println(mRecentCallingPackage);
@@ -624,6 +640,10 @@
pw.println(mStartForegroundCount);
pw.print(prefix); pw.print("infoAllowStartForeground=");
pw.println(mInfoAllowStartForeground);
+
+ pw.print(prefix); pw.print("lastUntrustedSetFgsRestrictionAllowedTime=");
+ TimeUtils.formatDuration(mLastUntrustedSetFgsRestrictionAllowedTime, now, pw);
+
if (delayed) {
pw.print(prefix); pw.print("delayed="); pw.println(delayed);
}
diff --git a/services/core/java/com/android/server/am/StackTracesDumpHelper.java b/services/core/java/com/android/server/am/StackTracesDumpHelper.java
index 10ddc2f..01fb0d1 100644
--- a/services/core/java/com/android/server/am/StackTracesDumpHelper.java
+++ b/services/core/java/com/android/server/am/StackTracesDumpHelper.java
@@ -41,6 +41,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -50,6 +51,8 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
@@ -65,11 +68,16 @@
new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
static final String ANR_FILE_PREFIX = "anr_";
- public static final String ANR_TRACE_DIR = "/data/anr";
+ static final String ANR_TEMP_FILE_PREFIX = "temp_anr_";
+ public static final String ANR_TRACE_DIR = "/data/anr";
private static final int NATIVE_DUMP_TIMEOUT_MS =
2000 * Build.HW_TIMEOUT_MULTIPLIER; // 2 seconds;
private static final int JAVA_DUMP_MINIMUM_SIZE = 100; // 100 bytes.
+ // The time limit for a single process's dump
+ private static final int TEMP_DUMP_TIME_LIMIT =
+ 10 * 1000 * Build.HW_TIMEOUT_MULTIPLIER; // 10 seconds
+
/**
* If a stack trace dump file is configured, dump process stack traces.
@@ -85,7 +93,7 @@
Future<ArrayList<Integer>> nativePidsFuture, StringWriter logExceptionCreatingFile,
@NonNull Executor auxiliaryTaskExecutor, AnrLatencyTracker latencyTracker) {
return dumpStackTraces(firstPids, processCpuTracker, lastPids, nativePidsFuture,
- logExceptionCreatingFile, null, null, null, null, auxiliaryTaskExecutor,
+ logExceptionCreatingFile, null, null, null, null, auxiliaryTaskExecutor, null,
latencyTracker);
}
@@ -96,11 +104,11 @@
public static File dumpStackTraces(ArrayList<Integer> firstPids,
ProcessCpuTracker processCpuTracker, SparseBooleanArray lastPids,
Future<ArrayList<Integer>> nativePidsFuture, StringWriter logExceptionCreatingFile,
- String subject, String criticalEventSection, @NonNull Executor auxiliaryTaskExecutor,
- AnrLatencyTracker latencyTracker) {
+ String subject, String criticalEventSection,
+ @NonNull Executor auxiliaryTaskExecutor, AnrLatencyTracker latencyTracker) {
return dumpStackTraces(firstPids, processCpuTracker, lastPids, nativePidsFuture,
logExceptionCreatingFile, null, subject, criticalEventSection,
- /* memoryHeaders= */ null, auxiliaryTaskExecutor, latencyTracker);
+ /* memoryHeaders= */ null, auxiliaryTaskExecutor, null, latencyTracker);
}
/**
@@ -112,7 +120,7 @@
Future<ArrayList<Integer>> nativePidsFuture, StringWriter logExceptionCreatingFile,
AtomicLong firstPidEndOffset, String subject, String criticalEventSection,
String memoryHeaders, @NonNull Executor auxiliaryTaskExecutor,
- AnrLatencyTracker latencyTracker) {
+ Future<File> firstPidFilePromise, AnrLatencyTracker latencyTracker) {
try {
if (latencyTracker != null) {
@@ -161,7 +169,7 @@
long firstPidEndPos = dumpStackTraces(
tracesFile.getAbsolutePath(), firstPids, nativePidsFuture,
- extraPidsFuture, latencyTracker);
+ extraPidsFuture, firstPidFilePromise, latencyTracker);
if (firstPidEndOffset != null) {
firstPidEndOffset.set(firstPidEndPos);
}
@@ -175,7 +183,6 @@
latencyTracker.dumpStackTracesEnded();
}
}
-
}
/**
@@ -183,7 +190,8 @@
*/
public static long dumpStackTraces(String tracesFile,
ArrayList<Integer> firstPids, Future<ArrayList<Integer>> nativePidsFuture,
- Future<ArrayList<Integer>> extraPidsFuture, AnrLatencyTracker latencyTracker) {
+ Future<ArrayList<Integer>> extraPidsFuture, Future<File> firstPidFilePromise,
+ AnrLatencyTracker latencyTracker) {
Slog.i(TAG, "Dumping to " + tracesFile);
@@ -194,33 +202,52 @@
// We must complete all stack dumps within 20 seconds.
long remainingTime = 20 * 1000 * Build.HW_TIMEOUT_MULTIPLIER;
- // As applications are usually interested with the ANR stack traces, but we can't share with
- // them the stack traces other than their own stacks. So after the very first PID is
+ // As applications are usually interested with the ANR stack traces, but we can't share
+ // with them the stack traces other than their own stacks. So after the very first PID is
// dumped, remember the current file size.
long firstPidEnd = -1;
- // First collect all of the stacks of the most important pids.
- if (firstPids != null) {
+ // Was the first pid copied from the temporary file that was created in the predump phase?
+ boolean firstPidTempDumpCopied = false;
+
+ // First copy the first pid's dump from the temporary file it was dumped into earlier,
+ // The first pid should always exist in firstPids but we check the size just in case.
+ if (firstPidFilePromise != null && firstPids != null && firstPids.size() > 0) {
+ final int primaryPid = firstPids.get(0);
+ final long start = SystemClock.elapsedRealtime();
+ firstPidTempDumpCopied = copyFirstPidTempDump(tracesFile, firstPidFilePromise,
+ remainingTime, latencyTracker);
+ final long timeTaken = SystemClock.elapsedRealtime() - start;
+ remainingTime -= timeTaken;
+ if (remainingTime <= 0) {
+ Slog.e(TAG, "Aborting stack trace dump (currently copying primary pid" + primaryPid
+ + "); deadline exceeded.");
+ return firstPidEnd;
+ }
+ // We don't copy ANR traces from the system_server intentionally.
+ if (firstPidTempDumpCopied && primaryPid != ActivityManagerService.MY_PID) {
+ firstPidEnd = new File(tracesFile).length();
+ }
+ // Append the Durations/latency comma separated array after the first PID.
+ if (latencyTracker != null) {
+ appendtoANRFile(tracesFile,
+ latencyTracker.dumpAsCommaSeparatedArrayWithHeader());
+ }
+ }
+ // Next 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++) {
+ for (int i = firstPidTempDumpCopied ? 1 : 0; i < num; i++) {
final int pid = firstPids.get(i);
// We don't copy ANR traces from the system_server intentionally.
final boolean firstPid = i == 0 && ActivityManagerService.MY_PID != pid;
- 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();
- }
-
+ final long timeTaken = dumpJavaTracesTombstoned(pid, tracesFile, remainingTime,
+ latencyTracker);
remainingTime -= timeTaken;
if (remainingTime <= 0) {
Slog.e(TAG, "Aborting stack trace dump (current firstPid=" + pid
@@ -304,13 +331,8 @@
}
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();
- }
+ final long timeTaken = dumpJavaTracesTombstoned(pid, tracesFile, remainingTime,
+ latencyTracker);
remainingTime -= timeTaken;
if (remainingTime <= 0) {
Slog.e(TAG, "Aborting stack trace dump (current extra pid=" + pid
@@ -333,6 +355,99 @@
return firstPidEnd;
}
+ /**
+ * Dumps the supplied pid to a temporary file.
+ * @param pid the PID to be dumped
+ * @param latencyTracker the latency tracker instance of the current ANR.
+ */
+ public static File dumpStackTracesTempFile(int pid, AnrLatencyTracker latencyTracker) {
+ try {
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesTempFileStarted();
+ }
+
+ File tmpTracesFile;
+ try {
+ tmpTracesFile = File.createTempFile(ANR_TEMP_FILE_PREFIX, ".txt",
+ new File(ANR_TRACE_DIR));
+ Slog.d(TAG, "created ANR temporary file:" + tmpTracesFile.getAbsolutePath());
+ } catch (IOException e) {
+ Slog.w(TAG, "Exception creating temporary ANR dump file:", e);
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesTempFileCreationFailed();
+ }
+ return null;
+ }
+
+ Slog.i(TAG, "Collecting stacks for pid " + pid + " into temporary file "
+ + tmpTracesFile.getName());
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidStarted(pid);
+ }
+ final long timeTaken = dumpJavaTracesTombstoned(pid, tmpTracesFile.getAbsolutePath(),
+ TEMP_DUMP_TIME_LIMIT);
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidEnded();
+ }
+ if (TEMP_DUMP_TIME_LIMIT <= timeTaken) {
+ Slog.e(TAG, "Aborted stack trace dump (current primary pid=" + pid
+ + "); deadline exceeded.");
+ tmpTracesFile.delete();
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesTempFileTimedOut();
+ }
+ return null;
+ }
+ if (DEBUG_ANR) {
+ Slog.d(TAG, "Done with primary pid " + pid + " in " + timeTaken + "ms"
+ + " dumped into temporary file " + tmpTracesFile.getName());
+ }
+ return tmpTracesFile;
+ } finally {
+ if (latencyTracker != null) {
+ latencyTracker.dumpStackTracesTempFileEnded();
+ }
+ }
+ }
+
+ private static boolean copyFirstPidTempDump(String tracesFile, Future<File> firstPidFilePromise,
+ long timeLimitMs, AnrLatencyTracker latencyTracker) {
+
+ boolean copySucceeded = false;
+ try (FileOutputStream fos = new FileOutputStream(tracesFile, true)) {
+ if (latencyTracker != null) {
+ latencyTracker.copyingFirstPidStarted();
+ }
+ final File tempfile = firstPidFilePromise.get(timeLimitMs, TimeUnit.MILLISECONDS);
+ if (tempfile != null) {
+ Files.copy(tempfile.toPath(), fos);
+ // Delete the temporary first pid dump file
+ tempfile.delete();
+ copySucceeded = true;
+ return copySucceeded;
+ }
+ return false;
+ } catch (ExecutionException e) {
+ Slog.w(TAG, "Failed to collect the first pid's predump to the main ANR file",
+ e.getCause());
+ return false;
+ } catch (InterruptedException e) {
+ Slog.w(TAG, "Interrupted while collecting the first pid's predump"
+ + " to the main ANR file", e);
+ return false;
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed to read the first pid's predump file", e);
+ return false;
+ } catch (TimeoutException e) {
+ Slog.w(TAG, "Copying the first pid timed out", e);
+ return false;
+ } finally {
+ if (latencyTracker != null) {
+ latencyTracker.copyingFirstPidEnded(copySucceeded);
+ }
+ }
+ }
+
private static synchronized File createAnrDumpFile(File tracesDir) throws IOException {
final String formattedDate = ANR_FILE_DATE_FORMAT.format(new Date());
final File anrFile = new File(tracesDir, ANR_FILE_PREFIX + formattedDate);
@@ -409,6 +524,21 @@
Slog.w(TAG, "tombstone modification times changed while sorting; not pruning", e);
}
}
+
+ private static long dumpJavaTracesTombstoned(int pid, String fileName, long timeoutMs,
+ AnrLatencyTracker latencyTracker) {
+ try {
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidStarted(pid);
+ }
+ return dumpJavaTracesTombstoned(pid, fileName, timeoutMs);
+ } finally {
+ if (latencyTracker != null) {
+ latencyTracker.dumpingPidEnded();
+ }
+ }
+ }
+
/**
* Dump java traces for process {@code pid} to the specified file. If java trace dumping
* fails, a native backtrace is attempted. Note that the timeout {@code timeoutMs} only applies
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 462942e..13c42eb 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -85,16 +85,17 @@
private final @NonNull AudioService mAudioService;
private final @NonNull Context mContext;
+ private final @NonNull AudioSystemAdapter mAudioSystem;
/** ID for Communication strategy retrieved form audio policy manager */
- /*package*/ int mCommunicationStrategyId = -1;
+ private int mCommunicationStrategyId = -1;
/** ID for Accessibility strategy retrieved form audio policy manager */
private int mAccessibilityStrategyId = -1;
/** Active communication device reported by audio policy manager */
- /*package*/ AudioDeviceInfo mActiveCommunicationDevice;
+ private AudioDeviceInfo mActiveCommunicationDevice;
/** Last preferred device set for communication strategy */
private AudioDeviceAttributes mPreferredCommunicationDevice;
@@ -159,12 +160,14 @@
public static final long USE_SET_COMMUNICATION_DEVICE = 243827847L;
//-------------------------------------------------------------------
- /*package*/ AudioDeviceBroker(@NonNull Context context, @NonNull AudioService service) {
+ /*package*/ AudioDeviceBroker(@NonNull Context context, @NonNull AudioService service,
+ @NonNull AudioSystemAdapter audioSystem) {
mContext = context;
mAudioService = service;
mBtHelper = new BtHelper(this);
mDeviceInventory = new AudioDeviceInventory(this);
mSystemServer = SystemServerAdapter.getDefaultAdapter(mContext);
+ mAudioSystem = audioSystem;
init();
}
@@ -173,12 +176,14 @@
* in system_server */
AudioDeviceBroker(@NonNull Context context, @NonNull AudioService service,
@NonNull AudioDeviceInventory mockDeviceInventory,
- @NonNull SystemServerAdapter mockSystemServer) {
+ @NonNull SystemServerAdapter mockSystemServer,
+ @NonNull AudioSystemAdapter audioSystem) {
mContext = context;
mAudioService = service;
mBtHelper = new BtHelper(this);
mDeviceInventory = mockDeviceInventory;
mSystemServer = mockSystemServer;
+ mAudioSystem = audioSystem;
init();
}
@@ -540,7 +545,7 @@
AudioAttributes attr =
AudioProductStrategy.getAudioAttributesForStrategyWithLegacyStreamType(
AudioSystem.STREAM_VOICE_CALL);
- List<AudioDeviceAttributes> devices = AudioSystem.getDevicesForAttributes(
+ List<AudioDeviceAttributes> devices = mAudioSystem.getDevicesForAttributes(
attr, false /* forVolume */);
if (devices.isEmpty()) {
if (mAudioService.isPlatformVoice()) {
@@ -750,19 +755,6 @@
mIsLeOutput = false;
}
- BtDeviceInfo(@NonNull BtDeviceInfo src, int state) {
- mDevice = src.mDevice;
- mState = state;
- mProfile = src.mProfile;
- mSupprNoisy = src.mSupprNoisy;
- mVolume = src.mVolume;
- mIsLeOutput = src.mIsLeOutput;
- mEventSource = src.mEventSource;
- mAudioSystemDevice = src.mAudioSystemDevice;
- mMusicDevice = src.mMusicDevice;
- mCodec = src.mCodec;
- }
-
// redefine equality op so we can match messages intended for this device
@Override
public boolean equals(Object o) {
@@ -829,7 +821,7 @@
* @param info struct with the (dis)connection information
*/
/*package*/ void queueOnBluetoothActiveDeviceChanged(@NonNull BtDeviceChangedData data) {
- if (data.mPreviousDevice != null
+ if (data.mInfo.getProfile() == BluetoothProfile.A2DP && data.mPreviousDevice != null
&& data.mPreviousDevice.equals(data.mNewDevice)) {
final String name = TextUtils.emptyIfNull(data.mNewDevice.getName());
new MediaMetrics.Item(MediaMetrics.Name.AUDIO_DEVICE + MediaMetrics.SEPARATOR
@@ -838,8 +830,7 @@
.set(MediaMetrics.Property.STATUS, data.mInfo.getProfile())
.record();
synchronized (mDeviceStateLock) {
- postBluetoothDeviceConfigChange(createBtDeviceInfo(data, data.mNewDevice,
- BluetoothProfile.STATE_CONNECTED));
+ postBluetoothA2dpDeviceConfigChange(data.mNewDevice);
}
} else {
synchronized (mDeviceStateLock) {
@@ -1064,8 +1055,8 @@
new AudioModeInfo(mode, pid, uid));
}
- /*package*/ void postBluetoothDeviceConfigChange(@NonNull BtDeviceInfo info) {
- sendLMsgNoDelay(MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE, SENDMSG_QUEUE, info);
+ /*package*/ void postBluetoothA2dpDeviceConfigChange(@NonNull BluetoothDevice device) {
+ sendLMsgNoDelay(MSG_L_A2DP_DEVICE_CONFIG_CHANGE, SENDMSG_QUEUE, device);
}
/*package*/ void startBluetoothScoForClient(IBinder cb, int pid, int scoAudioMode,
@@ -1322,10 +1313,6 @@
sendIMsgNoDelay(MSG_I_SCO_AUDIO_STATE_CHANGED, SENDMSG_QUEUE, state);
}
- /*package*/ void postNotifyPreferredAudioProfileApplied(BluetoothDevice btDevice) {
- sendLMsgNoDelay(MSG_L_NOTIFY_PREFERRED_AUDIOPROFILE_APPLIED, SENDMSG_QUEUE, btDevice);
- }
-
/*package*/ static final class CommunicationDeviceInfo {
final @NonNull IBinder mCb; // Identifies the requesting client for death handler
final int mPid; // Requester process ID
@@ -1401,11 +1388,9 @@
}
}
- /*package*/ boolean handleDeviceConnection(AudioDeviceAttributes attributes,
- boolean connect, @Nullable BluetoothDevice btDevice) {
+ /*package*/ boolean handleDeviceConnection(AudioDeviceAttributes attributes, boolean connect) {
synchronized (mDeviceStateLock) {
- return mDeviceInventory.handleDeviceConnection(
- attributes, connect, false /*for test*/, btDevice);
+ return mDeviceInventory.handleDeviceConnection(attributes, connect, false /*for test*/);
}
}
@@ -1513,7 +1498,7 @@
Log.v(TAG, "onSetForceUse(useCase<" + useCase + ">, config<" + config + ">, fromA2dp<"
+ fromA2dp + ">, eventSource<" + eventSource + ">)");
}
- AudioSystem.setForceUse(useCase, config);
+ mAudioSystem.setForceUse(useCase, config);
}
private void onSendBecomingNoisyIntent() {
@@ -1646,10 +1631,13 @@
(String) msg.obj, msg.arg1);
}
break;
- case MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE:
+ case MSG_L_A2DP_DEVICE_CONFIG_CHANGE:
+ final BluetoothDevice btDevice = (BluetoothDevice) msg.obj;
synchronized (mDeviceStateLock) {
- mDeviceInventory.onBluetoothDeviceConfigChange(
- (BtDeviceInfo) msg.obj, BtHelper.EVENT_DEVICE_CONFIG_CHANGE);
+ final int a2dpCodec = mBtHelper.getA2dpCodec(btDevice);
+ mDeviceInventory.onBluetoothA2dpDeviceConfigChange(
+ new BtHelper.BluetoothA2dpDeviceInfo(btDevice, -1, a2dpCodec),
+ BtHelper.EVENT_DEVICE_CONFIG_CHANGE);
}
break;
case MSG_BROADCAST_AUDIO_BECOMING_NOISY:
@@ -1807,10 +1795,6 @@
final int capturePreset = msg.arg1;
mDeviceInventory.onSaveClearPreferredDevicesForCapturePreset(capturePreset);
} break;
- case MSG_L_NOTIFY_PREFERRED_AUDIOPROFILE_APPLIED: {
- final BluetoothDevice btDevice = (BluetoothDevice) msg.obj;
- BtHelper.onNotifyPreferredAudioProfileApplied(btDevice);
- } break;
default:
Log.wtf(TAG, "Invalid message " + msg.what);
}
@@ -1846,7 +1830,7 @@
private static final int MSG_IL_BTA2DP_TIMEOUT = 10;
// process change of A2DP device configuration, obj is BluetoothDevice
- private static final int MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE = 11;
+ private static final int MSG_L_A2DP_DEVICE_CONFIG_CHANGE = 11;
private static final int MSG_BROADCAST_AUDIO_BECOMING_NOISY = 12;
private static final int MSG_REPORT_NEW_ROUTES = 13;
@@ -1886,15 +1870,13 @@
private static final int MSG_IL_SAVE_REMOVE_NDEF_DEVICE_FOR_STRATEGY = 48;
private static final int MSG_IL_BTLEAUDIO_TIMEOUT = 49;
- private static final int MSG_L_NOTIFY_PREFERRED_AUDIOPROFILE_APPLIED = 50;
-
private static boolean isMessageHandledUnderWakelock(int msgId) {
switch(msgId) {
case MSG_L_SET_WIRED_DEVICE_CONNECTION_STATE:
case MSG_L_SET_BT_ACTIVE_DEVICE:
case MSG_IL_BTA2DP_TIMEOUT:
case MSG_IL_BTLEAUDIO_TIMEOUT:
- case MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE:
+ case MSG_L_A2DP_DEVICE_CONFIG_CHANGE:
case MSG_TOGGLE_HDMI:
case MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT:
case MSG_L_HEARING_AID_DEVICE_CONNECTION_CHANGE_EXT:
@@ -1986,7 +1968,7 @@
case MSG_L_SET_WIRED_DEVICE_CONNECTION_STATE:
case MSG_IL_BTA2DP_TIMEOUT:
case MSG_IL_BTLEAUDIO_TIMEOUT:
- case MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE:
+ case MSG_L_A2DP_DEVICE_CONFIG_CHANGE:
if (sLastDeviceConnectMsgTime >= time) {
// add a little delay to make sure messages are ordered as expected
time = sLastDeviceConnectMsgTime + 30;
@@ -2006,7 +1988,7 @@
static {
MESSAGES_MUTE_MUSIC = new HashSet<>();
MESSAGES_MUTE_MUSIC.add(MSG_L_SET_BT_ACTIVE_DEVICE);
- MESSAGES_MUTE_MUSIC.add(MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE);
+ MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONFIG_CHANGE);
MESSAGES_MUTE_MUSIC.add(MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT);
MESSAGES_MUTE_MUSIC.add(MSG_IIL_SET_FORCE_BT_A2DP_USE);
}
@@ -2027,7 +2009,7 @@
// Do not mute on bluetooth event if music is playing on a wired headset.
if ((message == MSG_L_SET_BT_ACTIVE_DEVICE
|| message == MSG_L_A2DP_DEVICE_CONNECTION_CHANGE_EXT
- || message == MSG_L_BLUETOOTH_DEVICE_CONFIG_CHANGE)
+ || message == MSG_L_A2DP_DEVICE_CONFIG_CHANGE)
&& AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0)
&& hasIntersection(mDeviceInventory.DEVICE_OVERRIDE_A2DP_ROUTE_ON_PLUG_SET,
mAudioService.getDeviceSetForStream(AudioSystem.STREAM_MUSIC))) {
@@ -2166,19 +2148,18 @@
if (preferredCommunicationDevice == null) {
AudioDeviceAttributes defaultDevice = getDefaultCommunicationDevice();
if (defaultDevice != null) {
- mDeviceInventory.setPreferredDevicesForStrategy(
+ setPreferredDevicesForStrategySync(
mCommunicationStrategyId, Arrays.asList(defaultDevice));
- mDeviceInventory.setPreferredDevicesForStrategy(
+ setPreferredDevicesForStrategySync(
mAccessibilityStrategyId, Arrays.asList(defaultDevice));
} else {
- mDeviceInventory.removePreferredDevicesForStrategy(mCommunicationStrategyId);
- mDeviceInventory.removePreferredDevicesForStrategy(mAccessibilityStrategyId);
+ removePreferredDevicesForStrategySync(mCommunicationStrategyId);
+ removePreferredDevicesForStrategySync(mAccessibilityStrategyId);
}
- mDeviceInventory.applyConnectedDevicesRoles();
} else {
- mDeviceInventory.setPreferredDevicesForStrategy(
+ setPreferredDevicesForStrategySync(
mCommunicationStrategyId, Arrays.asList(preferredCommunicationDevice));
- mDeviceInventory.setPreferredDevicesForStrategy(
+ setPreferredDevicesForStrategySync(
mAccessibilityStrategyId, Arrays.asList(preferredCommunicationDevice));
}
onUpdatePhoneStrategyDevice(preferredCommunicationDevice);
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 1eb39f7..228bc87 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -34,36 +34,26 @@
import android.media.IStrategyNonDefaultDevicesDispatcher;
import android.media.IStrategyPreferredDevicesDispatcher;
import android.media.MediaMetrics;
-import android.media.MediaRecorder.AudioSource;
-import android.media.audiopolicy.AudioProductStrategy;
import android.media.permission.ClearCallingIdentityContext;
import android.media.permission.SafeCloseable;
import android.os.Binder;
-import android.os.Bundle;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
-import android.os.SystemProperties;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
-import android.util.Pair;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.utils.EventLogger;
-import com.google.android.collect.Sets;
-
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
@@ -185,26 +175,18 @@
final RemoteCallbackList<ICapturePresetDevicesRoleDispatcher> mDevRoleCapturePresetDispatchers =
new RemoteCallbackList<ICapturePresetDevicesRoleDispatcher>();
- final List<AudioProductStrategy> mStrategies;
-
/*package*/ AudioDeviceInventory(@NonNull AudioDeviceBroker broker) {
- this(broker, AudioSystemAdapter.getDefaultAdapter());
+ mDeviceBroker = broker;
+ mAudioSystem = AudioSystemAdapter.getDefaultAdapter();
}
//-----------------------------------------------------------
/** for mocking only, allows to inject AudioSystem adapter */
/*package*/ AudioDeviceInventory(@NonNull AudioSystemAdapter audioSystem) {
- this(null, audioSystem);
+ mDeviceBroker = null;
+ mAudioSystem = audioSystem;
}
- private AudioDeviceInventory(@Nullable AudioDeviceBroker broker,
- @Nullable AudioSystemAdapter audioSystem) {
- mDeviceBroker = broker;
- mAudioSystem = audioSystem;
- mStrategies = AudioProductStrategy.getAudioProductStrategies();
- mBluetoothDualModeEnabled = SystemProperties.getBoolean(
- "persist.bluetooth.enable_dual_mode_audio", false);
- }
/*package*/ void setDeviceBroker(@NonNull AudioDeviceBroker broker) {
mDeviceBroker = broker;
}
@@ -221,13 +203,8 @@
int mDeviceCodecFormat;
final UUID mSensorUuid;
- /** Disabled operating modes for this device. Use a negative logic so that by default
- * an empty list means all modes are allowed.
- * See BluetoothAdapter.AUDIO_MODE_DUPLEX and BluetoothAdapter.AUDIO_MODE_OUTPUT_ONLY */
- @NonNull ArraySet<String> mDisabledModes = new ArraySet(0);
-
DeviceInfo(int deviceType, String deviceName, String deviceAddress,
- int deviceCodecFormat, @Nullable UUID sensorUuid) {
+ int deviceCodecFormat, UUID sensorUuid) {
mDeviceType = deviceType;
mDeviceName = deviceName == null ? "" : deviceName;
mDeviceAddress = deviceAddress == null ? "" : deviceAddress;
@@ -235,31 +212,11 @@
mSensorUuid = sensorUuid;
}
- void setModeDisabled(String mode) {
- mDisabledModes.add(mode);
- }
- void setModeEnabled(String mode) {
- mDisabledModes.remove(mode);
- }
- boolean isModeEnabled(String mode) {
- return !mDisabledModes.contains(mode);
- }
- boolean isOutputOnlyModeEnabled() {
- return isModeEnabled(BluetoothAdapter.AUDIO_MODE_OUTPUT_ONLY);
- }
- boolean isDuplexModeEnabled() {
- return isModeEnabled(BluetoothAdapter.AUDIO_MODE_DUPLEX);
- }
-
DeviceInfo(int deviceType, String deviceName, String deviceAddress,
int deviceCodecFormat) {
this(deviceType, deviceName, deviceAddress, deviceCodecFormat, null);
}
- DeviceInfo(int deviceType, String deviceName, String deviceAddress) {
- this(deviceType, deviceName, deviceAddress, AudioSystem.AUDIO_FORMAT_DEFAULT);
- }
-
@Override
public String toString() {
return "[DeviceInfo: type:0x" + Integer.toHexString(mDeviceType)
@@ -267,8 +224,7 @@
+ ") name:" + mDeviceName
+ " addr:" + mDeviceAddress
+ " codec: " + Integer.toHexString(mDeviceCodecFormat)
- + " sensorUuid: " + Objects.toString(mSensorUuid)
- + " disabled modes: " + mDisabledModes + "]";
+ + " sensorUuid: " + Objects.toString(mSensorUuid) + "]";
}
@NonNull String getKey() {
@@ -320,18 +276,9 @@
pw.println(" " + prefix + " type:0x" + Integer.toHexString(keyType)
+ " (" + AudioSystem.getDeviceName(keyType)
+ ") addr:" + valueAddress); });
- pw.println("\n" + prefix + "Preferred devices for capture preset:");
mPreferredDevicesForCapturePreset.forEach((capturePreset, devices) -> {
pw.println(" " + prefix + "capturePreset:" + capturePreset
+ " devices:" + devices); });
- pw.println("\n" + prefix + "Applied devices roles for strategies:");
- mAppliedStrategyRoles.forEach((key, devices) -> {
- pw.println(" " + prefix + "strategy: " + key.first
- + " role:" + key.second + " devices:" + devices); });
- pw.println("\n" + prefix + "Applied devices roles for presets:");
- mAppliedPresetRoles.forEach((key, devices) -> {
- pw.println(" " + prefix + "preset: " + key.first
- + " role:" + key.second + " devices:" + devices); });
}
//------------------------------------------------------------
@@ -352,16 +299,15 @@
AudioSystem.DEVICE_STATE_AVAILABLE,
di.mDeviceCodecFormat);
}
- mAppliedStrategyRoles.clear();
- applyConnectedDevicesRoles_l();
}
synchronized (mPreferredDevices) {
mPreferredDevices.forEach((strategy, devices) -> {
- setPreferredDevicesForStrategy(strategy, devices); });
+ mAudioSystem.setDevicesRoleForStrategy(
+ strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices); });
}
synchronized (mNonDefaultDevices) {
mNonDefaultDevices.forEach((strategy, devices) -> {
- addDevicesRoleForStrategy(
+ mAudioSystem.setDevicesRoleForStrategy(
strategy, AudioSystem.DEVICE_ROLE_DISABLED, devices); });
}
synchronized (mPreferredDevicesForCapturePreset) {
@@ -434,7 +380,8 @@
btInfo.mVolume * 10, btInfo.mAudioSystemDevice,
"onSetBtActiveDevice");
}
- makeA2dpDeviceAvailable(btInfo, "onSetBtActiveDevice");
+ makeA2dpDeviceAvailable(address, BtHelper.getName(btInfo.mDevice),
+ "onSetBtActiveDevice", btInfo.mCodec);
}
break;
case BluetoothProfile.HEARING_AID:
@@ -450,7 +397,10 @@
if (switchToUnavailable) {
makeLeAudioDeviceUnavailableNow(address, btInfo.mAudioSystemDevice);
} else if (switchToAvailable) {
- makeLeAudioDeviceAvailable(btInfo, streamType, "onSetBtActiveDevice");
+ makeLeAudioDeviceAvailable(address, BtHelper.getName(btInfo.mDevice),
+ streamType, btInfo.mVolume == -1 ? -1 : btInfo.mVolume * 10,
+ btInfo.mAudioSystemDevice,
+ "onSetBtActiveDevice");
}
break;
default: throw new IllegalArgumentException("Invalid profile "
@@ -461,30 +411,30 @@
@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
- /*package*/ void onBluetoothDeviceConfigChange(
- @NonNull AudioDeviceBroker.BtDeviceInfo btInfo, int event) {
+ /*package*/ void onBluetoothA2dpDeviceConfigChange(
+ @NonNull BtHelper.BluetoothA2dpDeviceInfo btInfo, int event) {
MediaMetrics.Item mmi = new MediaMetrics.Item(mMetricsId
- + "onBluetoothDeviceConfigChange")
- .set(MediaMetrics.Property.EVENT, BtHelper.deviceEventToString(event));
+ + "onBluetoothA2dpDeviceConfigChange")
+ .set(MediaMetrics.Property.EVENT, BtHelper.a2dpDeviceEventToString(event));
- final BluetoothDevice btDevice = btInfo.mDevice;
+ final BluetoothDevice btDevice = btInfo.getBtDevice();
if (btDevice == null) {
mmi.set(MediaMetrics.Property.EARLY_RETURN, "btDevice null").record();
return;
}
if (AudioService.DEBUG_DEVICES) {
- Log.d(TAG, "onBluetoothDeviceConfigChange btDevice=" + btDevice);
+ Log.d(TAG, "onBluetoothA2dpDeviceConfigChange btDevice=" + btDevice);
}
- int volume = btInfo.mVolume;
- @AudioSystem.AudioFormatNativeEnumForBtCodec final int audioCodec = btInfo.mCodec;
+ int a2dpVolume = btInfo.getVolume();
+ @AudioSystem.AudioFormatNativeEnumForBtCodec final int a2dpCodec = btInfo.getCodec();
String address = btDevice.getAddress();
if (!BluetoothAdapter.checkBluetoothAddress(address)) {
address = "";
}
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
- "onBluetoothDeviceConfigChange addr=" + address
- + " event=" + BtHelper.deviceEventToString(event)));
+ "onBluetoothA2dpDeviceConfigChange addr=" + address
+ + " event=" + BtHelper.a2dpDeviceEventToString(event)));
synchronized (mDevicesLock) {
if (mDeviceBroker.hasScheduledA2dpConnection(btDevice)) {
@@ -499,55 +449,54 @@
AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address);
final DeviceInfo di = mConnectedDevices.get(key);
if (di == null) {
- Log.e(TAG, "invalid null DeviceInfo in onBluetoothDeviceConfigChange");
+ Log.e(TAG, "invalid null DeviceInfo in onBluetoothA2dpDeviceConfigChange");
mmi.set(MediaMetrics.Property.EARLY_RETURN, "null DeviceInfo").record();
return;
}
mmi.set(MediaMetrics.Property.ADDRESS, address)
.set(MediaMetrics.Property.ENCODING,
- AudioSystem.audioFormatToString(audioCodec))
- .set(MediaMetrics.Property.INDEX, volume)
+ AudioSystem.audioFormatToString(a2dpCodec))
+ .set(MediaMetrics.Property.INDEX, a2dpVolume)
.set(MediaMetrics.Property.NAME, di.mDeviceName);
-
- if (event == BtHelper.EVENT_DEVICE_CONFIG_CHANGE) {
- boolean a2dpCodecChange = false;
- if (btInfo.mProfile == BluetoothProfile.A2DP) {
- if (di.mDeviceCodecFormat != audioCodec) {
- di.mDeviceCodecFormat = audioCodec;
- mConnectedDevices.replace(key, di);
- a2dpCodecChange = true;
- }
- final int res = mAudioSystem.handleDeviceConfigChange(
- btInfo.mAudioSystemDevice, address,
- BtHelper.getName(btDevice), audioCodec);
-
- if (res != AudioSystem.AUDIO_STATUS_OK) {
- AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
- "APM handleDeviceConfigChange failed for A2DP device addr="
- + address + " codec="
- + AudioSystem.audioFormatToString(audioCodec))
- .printLog(TAG));
-
- // force A2DP device disconnection in case of error so that AudioService
- // state is consistent with audio policy manager state
- setBluetoothActiveDevice(new AudioDeviceBroker.BtDeviceInfo(btInfo,
- BluetoothProfile.STATE_DISCONNECTED));
- } else {
- AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
- "APM handleDeviceConfigChange success for A2DP device addr="
- + address
- + " codec=" + AudioSystem.audioFormatToString(audioCodec))
- .printLog(TAG));
-
- }
+ if (event == BtHelper.EVENT_ACTIVE_DEVICE_CHANGE) {
+ // Device is connected
+ if (a2dpVolume != -1) {
+ mDeviceBroker.postSetVolumeIndexOnDevice(AudioSystem.STREAM_MUSIC,
+ // convert index to internal representation in VolumeStreamState
+ a2dpVolume * 10,
+ AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
+ "onBluetoothA2dpDeviceConfigChange");
}
- if (!a2dpCodecChange) {
- updateBluetoothPreferredModes_l();
- mDeviceBroker.postNotifyPreferredAudioProfileApplied(btDevice);
+ } else if (event == BtHelper.EVENT_DEVICE_CONFIG_CHANGE) {
+ if (di.mDeviceCodecFormat != a2dpCodec) {
+ di.mDeviceCodecFormat = a2dpCodec;
+ mConnectedDevices.replace(key, di);
}
}
+ final int res = mAudioSystem.handleDeviceConfigChange(
+ AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address,
+ BtHelper.getName(btDevice), a2dpCodec);
+
+ if (res != AudioSystem.AUDIO_STATUS_OK) {
+ AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
+ "APM handleDeviceConfigChange failed for A2DP device addr=" + address
+ + " codec=" + AudioSystem.audioFormatToString(a2dpCodec))
+ .printLog(TAG));
+
+ int musicDevice = mDeviceBroker.getDeviceForStream(AudioSystem.STREAM_MUSIC);
+ // force A2DP device disconnection in case of error so that AudioService state is
+ // consistent with audio policy manager state
+ setBluetoothActiveDevice(new AudioDeviceBroker.BtDeviceInfo(btDevice,
+ BluetoothProfile.A2DP, BluetoothProfile.STATE_DISCONNECTED,
+ musicDevice, AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP));
+ } else {
+ AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
+ "APM handleDeviceConfigChange success for A2DP device addr=" + address
+ + " codec=" + AudioSystem.audioFormatToString(a2dpCodec))
+ .printLog(TAG));
+ }
}
mmi.record();
}
@@ -629,7 +578,7 @@
}
if (!handleDeviceConnection(wdcs.mAttributes,
- wdcs.mState == AudioService.CONNECTION_STATE_CONNECTED, wdcs.mForTest, null)) {
+ wdcs.mState == AudioService.CONNECTION_STATE_CONNECTED, wdcs.mForTest)) {
// change of connection state failed, bailout
mmi.set(MediaMetrics.Property.EARLY_RETURN, "change of connection state failed")
.record();
@@ -763,35 +712,23 @@
/*package*/ int setPreferredDevicesForStrategySync(int strategy,
@NonNull List<AudioDeviceAttributes> devices) {
- final int status = setPreferredDevicesForStrategy(strategy, devices);
+ int status = AudioSystem.ERROR;
+
+ try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
+ AudioService.sDeviceLogger.enqueue((new EventLogger.StringEvent(
+ "setPreferredDevicesForStrategySync, strategy: " + strategy
+ + " devices: " + devices)).printLog(TAG));
+ status = mAudioSystem.setDevicesRoleForStrategy(
+ strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
+ }
+
if (status == AudioSystem.SUCCESS) {
mDeviceBroker.postSaveSetPreferredDevicesForStrategy(strategy, devices);
}
return status;
}
- /*package*/ int setPreferredDevicesForStrategy(int strategy,
- @NonNull List<AudioDeviceAttributes> devices) {
- int status = AudioSystem.ERROR;
- try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
- AudioService.sDeviceLogger.enqueue((new EventLogger.StringEvent(
- "setPreferredDevicesForStrategy, strategy: " + strategy
- + " devices: " + devices)).printLog(TAG));
- status = setDevicesRoleForStrategy(
- strategy, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
- }
- return status;
- }
-
/*package*/ int removePreferredDevicesForStrategySync(int strategy) {
- final int status = removePreferredDevicesForStrategy(strategy);
- if (status == AudioSystem.SUCCESS) {
- mDeviceBroker.postSaveRemovePreferredDevicesForStrategy(strategy);
- }
- return status;
- }
-
- /*package*/ int removePreferredDevicesForStrategy(int strategy) {
int status = AudioSystem.ERROR;
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
@@ -799,9 +736,13 @@
"removePreferredDevicesForStrategySync, strategy: "
+ strategy)).printLog(TAG));
- status = clearDevicesRoleForStrategy(
+ status = mAudioSystem.clearDevicesRoleForStrategy(
strategy, AudioSystem.DEVICE_ROLE_PREFERRED);
}
+
+ if (status == AudioSystem.SUCCESS) {
+ mDeviceBroker.postSaveRemovePreferredDevicesForStrategy(strategy);
+ }
return status;
}
@@ -816,7 +757,7 @@
AudioService.sDeviceLogger.enqueue((new EventLogger.StringEvent(
"setDeviceAsNonDefaultForStrategySync, strategy: " + strategy
+ " device: " + device)).printLog(TAG));
- status = addDevicesRoleForStrategy(
+ status = mAudioSystem.setDevicesRoleForStrategy(
strategy, AudioSystem.DEVICE_ROLE_DISABLED, devices);
}
@@ -838,7 +779,7 @@
"removeDeviceAsNonDefaultForStrategySync, strategy: "
+ strategy + " devices: " + device)).printLog(TAG));
- status = removeDevicesRoleForStrategy(
+ status = mAudioSystem.removeDevicesRoleForStrategy(
strategy, AudioSystem.DEVICE_ROLE_DISABLED, devices);
}
@@ -871,70 +812,33 @@
/*package*/ int setPreferredDevicesForCapturePresetSync(
int capturePreset, @NonNull List<AudioDeviceAttributes> devices) {
- final int status = setPreferredDevicesForCapturePreset(capturePreset, devices);
+ int status = AudioSystem.ERROR;
+
+ try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
+ status = mAudioSystem.setDevicesRoleForCapturePreset(
+ capturePreset, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
+ }
+
if (status == AudioSystem.SUCCESS) {
mDeviceBroker.postSaveSetPreferredDevicesForCapturePreset(capturePreset, devices);
}
return status;
}
- private int setPreferredDevicesForCapturePreset(
- int capturePreset, @NonNull List<AudioDeviceAttributes> devices) {
- int status = AudioSystem.ERROR;
- try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
- status = setDevicesRoleForCapturePreset(
- capturePreset, AudioSystem.DEVICE_ROLE_PREFERRED, devices);
- }
- return status;
- }
-
/*package*/ int clearPreferredDevicesForCapturePresetSync(int capturePreset) {
- final int status = clearPreferredDevicesForCapturePreset(capturePreset);
+ int status = AudioSystem.ERROR;
+
+ try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
+ status = mAudioSystem.clearDevicesRoleForCapturePreset(
+ capturePreset, AudioSystem.DEVICE_ROLE_PREFERRED);
+ }
+
if (status == AudioSystem.SUCCESS) {
mDeviceBroker.postSaveClearPreferredDevicesForCapturePreset(capturePreset);
}
return status;
}
- private int clearPreferredDevicesForCapturePreset(int capturePreset) {
- int status = AudioSystem.ERROR;
-
- try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
- status = clearDevicesRoleForCapturePreset(
- capturePreset, AudioSystem.DEVICE_ROLE_PREFERRED);
- }
- return status;
- }
-
- private int addDevicesRoleForCapturePreset(int capturePreset, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return addDevicesRole(mAppliedPresetRoles, (p, r, d) -> {
- return mAudioSystem.addDevicesRoleForCapturePreset(p, r, d);
- }, capturePreset, role, devices);
- }
-
- private int removeDevicesRoleForCapturePreset(int capturePreset, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return removeDevicesRole(mAppliedPresetRoles, (p, r, d) -> {
- return mAudioSystem.removeDevicesRoleForCapturePreset(p, r, d);
- }, capturePreset, role, devices);
- }
-
- private int setDevicesRoleForCapturePreset(int capturePreset, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return setDevicesRole(mAppliedPresetRoles, (p, r, d) -> {
- return mAudioSystem.addDevicesRoleForCapturePreset(p, r, d);
- }, (p, r, d) -> {
- return mAudioSystem.clearDevicesRoleForCapturePreset(p, r);
- }, capturePreset, role, devices);
- }
-
- private int clearDevicesRoleForCapturePreset(int capturePreset, int role) {
- return clearDevicesRole(mAppliedPresetRoles, (p, r, d) -> {
- return mAudioSystem.clearDevicesRoleForCapturePreset(p, r);
- }, capturePreset, role);
- }
-
/*package*/ void registerCapturePresetDevicesRoleDispatcher(
@NonNull ICapturePresetDevicesRoleDispatcher dispatcher) {
mDevRoleCapturePresetDispatchers.register(dispatcher);
@@ -945,208 +849,7 @@
mDevRoleCapturePresetDispatchers.unregister(dispatcher);
}
- private int addDevicesRoleForStrategy(int strategy, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return addDevicesRole(mAppliedStrategyRoles, (s, r, d) -> {
- return mAudioSystem.setDevicesRoleForStrategy(s, r, d);
- }, strategy, role, devices);
- }
-
- private int removeDevicesRoleForStrategy(int strategy, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return removeDevicesRole(mAppliedStrategyRoles, (s, r, d) -> {
- return mAudioSystem.removeDevicesRoleForStrategy(s, r, d);
- }, strategy, role, devices);
- }
-
- private int setDevicesRoleForStrategy(int strategy, int role,
- @NonNull List<AudioDeviceAttributes> devices) {
- return setDevicesRole(mAppliedStrategyRoles, (s, r, d) -> {
- return mAudioSystem.setDevicesRoleForStrategy(s, r, d);
- }, (s, r, d) -> {
- return mAudioSystem.clearDevicesRoleForStrategy(s, r);
- }, strategy, role, devices);
- }
-
- private int clearDevicesRoleForStrategy(int strategy, int role) {
- return clearDevicesRole(mAppliedStrategyRoles, (s, r, d) -> {
- return mAudioSystem.clearDevicesRoleForStrategy(s, r);
- }, strategy, role);
- }
-
- //------------------------------------------------------------
- // Cache for applied roles for strategies and devices. The cache avoids reapplying the
- // same list of devices for a given role and strategy and the corresponding systematic
- // redundant work in audio policy manager and audio flinger.
- // The key is the pair <Strategy , Role> and the value is the current list of devices.
-
- private final ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>>
- mAppliedStrategyRoles = new ArrayMap<>();
-
- // Cache for applied roles for capture presets and devices. The cache avoids reapplying the
- // same list of devices for a given role and capture preset and the corresponding systematic
- // redundant work in audio policy manager and audio flinger.
- // The key is the pair <Preset , Role> and the value is the current list of devices.
- private final ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>>
- mAppliedPresetRoles = new ArrayMap<>();
-
- interface AudioSystemInterface {
- int deviceRoleAction(int usecase, int role, @Nullable List<AudioDeviceAttributes> devices);
- }
-
- private int addDevicesRole(
- ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>> rolesMap,
- AudioSystemInterface asi,
- int useCase, int role, @NonNull List<AudioDeviceAttributes> devices) {
- synchronized (rolesMap) {
- Pair<Integer, Integer> key = new Pair<>(useCase, role);
- List<AudioDeviceAttributes> roleDevices = new ArrayList<>();
- List<AudioDeviceAttributes> appliedDevices = new ArrayList<>();
-
- if (rolesMap.containsKey(key)) {
- roleDevices = rolesMap.get(key);
- for (AudioDeviceAttributes device : devices) {
- if (!roleDevices.contains(device)) {
- appliedDevices.add(device);
- }
- }
- } else {
- appliedDevices.addAll(devices);
- }
- if (appliedDevices.isEmpty()) {
- return AudioSystem.SUCCESS;
- }
- final int status = asi.deviceRoleAction(useCase, role, appliedDevices);
- if (status == AudioSystem.SUCCESS) {
- roleDevices.addAll(appliedDevices);
- rolesMap.put(key, roleDevices);
- }
- return status;
- }
- }
-
- private int removeDevicesRole(
- ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>> rolesMap,
- AudioSystemInterface asi,
- int useCase, int role, @NonNull List<AudioDeviceAttributes> devices) {
- synchronized (rolesMap) {
- Pair<Integer, Integer> key = new Pair<>(useCase, role);
- if (!rolesMap.containsKey(key)) {
- return AudioSystem.SUCCESS;
- }
- List<AudioDeviceAttributes> roleDevices = rolesMap.get(key);
- List<AudioDeviceAttributes> appliedDevices = new ArrayList<>();
- for (AudioDeviceAttributes device : devices) {
- if (roleDevices.contains(device)) {
- appliedDevices.add(device);
- }
- }
- if (appliedDevices.isEmpty()) {
- return AudioSystem.SUCCESS;
- }
- final int status = asi.deviceRoleAction(useCase, role, appliedDevices);
- if (status == AudioSystem.SUCCESS) {
- roleDevices.removeAll(appliedDevices);
- if (roleDevices.isEmpty()) {
- rolesMap.remove(key);
- } else {
- rolesMap.put(key, roleDevices);
- }
- }
- return status;
- }
- }
-
- private int setDevicesRole(
- ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>> rolesMap,
- AudioSystemInterface addOp,
- AudioSystemInterface clearOp,
- int useCase, int role, @NonNull List<AudioDeviceAttributes> devices) {
- synchronized (rolesMap) {
- Pair<Integer, Integer> key = new Pair<>(useCase, role);
- List<AudioDeviceAttributes> roleDevices = new ArrayList<>();
- List<AudioDeviceAttributes> appliedDevices = new ArrayList<>();
-
- if (rolesMap.containsKey(key)) {
- roleDevices = rolesMap.get(key);
- boolean equal = false;
- if (roleDevices.size() == devices.size()) {
- roleDevices.retainAll(devices);
- equal = roleDevices.size() == devices.size();
- }
- if (!equal) {
- clearOp.deviceRoleAction(useCase, role, null);
- roleDevices.clear();
- appliedDevices.addAll(devices);
- }
- } else {
- appliedDevices.addAll(devices);
- }
- if (appliedDevices.isEmpty()) {
- return AudioSystem.SUCCESS;
- }
- final int status = addOp.deviceRoleAction(useCase, role, appliedDevices);
- if (status == AudioSystem.SUCCESS) {
- roleDevices.addAll(appliedDevices);
- rolesMap.put(key, roleDevices);
- }
- return status;
- }
- }
-
- private int clearDevicesRole(
- ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>> rolesMap,
- AudioSystemInterface asi, int useCase, int role) {
- synchronized (rolesMap) {
- Pair<Integer, Integer> key = new Pair<>(useCase, role);
- if (!rolesMap.containsKey(key)) {
- return AudioSystem.SUCCESS;
- }
- final int status = asi.deviceRoleAction(useCase, role, null);
- if (status == AudioSystem.SUCCESS) {
- rolesMap.remove(key);
- }
- return status;
- }
- }
-
- @GuardedBy("mDevicesLock")
- private void purgeDevicesRoles_l() {
- purgeRoles(mAppliedStrategyRoles, (s, r, d) -> {
- return mAudioSystem.removeDevicesRoleForStrategy(s, r, d); });
- purgeRoles(mAppliedPresetRoles, (p, r, d) -> {
- return mAudioSystem.removeDevicesRoleForCapturePreset(p, r, d); });
- }
-
- @GuardedBy("mDevicesLock")
- private void purgeRoles(
- ArrayMap<Pair<Integer, Integer>, List<AudioDeviceAttributes>> rolesMap,
- AudioSystemInterface asi) {
- synchronized (rolesMap) {
- Iterator<Map.Entry<Pair<Integer, Integer>, List<AudioDeviceAttributes>>> itRole =
- rolesMap.entrySet().iterator();
- while (itRole.hasNext()) {
- Map.Entry<Pair<Integer, Integer>, List<AudioDeviceAttributes>> entry =
- itRole.next();
- Pair<Integer, Integer> keyRole = entry.getKey();
- Iterator<AudioDeviceAttributes> itDev = rolesMap.get(keyRole).iterator();
- while (itDev.hasNext()) {
- AudioDeviceAttributes ada = itDev.next();
- final String devKey = DeviceInfo.makeDeviceListKey(ada.getInternalType(),
- ada.getAddress());
- if (mConnectedDevices.get(devKey) == null) {
- asi.deviceRoleAction(keyRole.first, keyRole.second, Arrays.asList(ada));
- itDev.remove();
- }
- }
- if (rolesMap.get(keyRole).isEmpty()) {
- itRole.remove();
- }
- }
- }
- }
-
-//-----------------------------------------------------------------------
+ //-----------------------------------------------------------------------
/**
* Check if a device is in the list of connected devices
@@ -1168,11 +871,10 @@
* @param connect true if connection
* @param isForTesting if true, not calling AudioSystem for the connection as this is
* just for testing
- * @param btDevice the corresponding Bluetooth device when relevant.
* @return false if an error was reported by AudioSystem
*/
/*package*/ boolean handleDeviceConnection(AudioDeviceAttributes attributes, boolean connect,
- boolean isForTesting, @Nullable BluetoothDevice btDevice) {
+ boolean isForTesting) {
int device = attributes.getInternalType();
String address = attributes.getAddress();
String deviceName = attributes.getName();
@@ -1187,7 +889,6 @@
.set(MediaMetrics.Property.MODE, connect
? MediaMetrics.Value.CONNECT : MediaMetrics.Value.DISCONNECT)
.set(MediaMetrics.Property.NAME, deviceName);
- boolean status = false;
synchronized (mDevicesLock) {
final String deviceKey = DeviceInfo.makeDeviceListKey(device, address);
if (AudioService.DEBUG_DEVICES) {
@@ -1215,33 +916,24 @@
.record();
return false;
}
- mConnectedDevices.put(deviceKey, new DeviceInfo(device, deviceName, address));
+ mConnectedDevices.put(deviceKey, new DeviceInfo(
+ device, deviceName, address, AudioSystem.AUDIO_FORMAT_DEFAULT));
mDeviceBroker.postAccessoryPlugMediaUnmute(device);
- status = true;
+ mmi.set(MediaMetrics.Property.STATE, MediaMetrics.Value.CONNECTED).record();
+ return true;
} else if (!connect && isConnected) {
mAudioSystem.setDeviceConnectionState(attributes,
AudioSystem.DEVICE_STATE_UNAVAILABLE, AudioSystem.AUDIO_FORMAT_DEFAULT);
// always remove even if disconnection failed
mConnectedDevices.remove(deviceKey);
- status = true;
- }
- if (status) {
- if (AudioSystem.isBluetoothScoDevice(device)) {
- updateBluetoothPreferredModes_l();
- if (connect) {
- mDeviceBroker.postNotifyPreferredAudioProfileApplied(btDevice);
- } else {
- purgeDevicesRoles_l();
- }
- }
mmi.set(MediaMetrics.Property.STATE, MediaMetrics.Value.CONNECTED).record();
- } else {
- Log.w(TAG, "handleDeviceConnection() failed, deviceKey=" + deviceKey
- + ", deviceSpec=" + di + ", connect=" + connect);
- mmi.set(MediaMetrics.Property.STATE, MediaMetrics.Value.DISCONNECTED).record();
+ return true;
}
+ Log.w(TAG, "handleDeviceConnection() failed, deviceKey=" + deviceKey
+ + ", deviceSpec=" + di + ", connect=" + connect);
}
- return status;
+ mmi.set(MediaMetrics.Property.STATE, MediaMetrics.Value.DISCONNECTED).record();
+ return false;
}
@@ -1450,20 +1142,15 @@
// Internal utilities
@GuardedBy("mDevicesLock")
- private void makeA2dpDeviceAvailable(AudioDeviceBroker.BtDeviceInfo btInfo,
- String eventSource) {
- final String address = btInfo.mDevice.getAddress();
- final String name = BtHelper.getName(btInfo.mDevice);
- final int a2dpCodec = btInfo.mCodec;
-
+ private void makeA2dpDeviceAvailable(String address, String name, String eventSource,
+ int a2dpCodec) {
// enable A2DP before notifying A2DP connection to avoid unnecessary processing in
// audio policy manager
mDeviceBroker.setBluetoothA2dpOnInt(true, true /*fromA2dp*/, eventSource);
// at this point there could be another A2DP device already connected in APM, but it
// doesn't matter as this new one will overwrite the previous one
- AudioDeviceAttributes ada = new AudioDeviceAttributes(
- AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address, name);
- final int res = mAudioSystem.setDeviceConnectionState(ada,
+ final int res = mAudioSystem.setDeviceConnectionState(new AudioDeviceAttributes(
+ AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address, name),
AudioSystem.DEVICE_STATE_AVAILABLE, a2dpCodec);
// TODO: log in MediaMetrics once distinction between connection failure and
@@ -1485,7 +1172,8 @@
// The convention for head tracking sensors associated with A2DP devices is to
// use a UUID derived from the MAC address as follows:
// time_low = 0, time_mid = 0, time_hi = 0, clock_seq = 0, node = MAC Address
- UUID sensorUuid = UuidUtils.uuidFromAudioDeviceAttributes(ada);
+ UUID sensorUuid = UuidUtils.uuidFromAudioDeviceAttributes(
+ new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address));
final DeviceInfo di = new DeviceInfo(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, name,
address, a2dpCodec, sensorUuid);
final String diKey = di.getKey();
@@ -1496,206 +1184,6 @@
mDeviceBroker.postAccessoryPlugMediaUnmute(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP);
setCurrentAudioRouteNameIfPossible(name, true /*fromA2dp*/);
-
- updateBluetoothPreferredModes_l();
- mDeviceBroker.postNotifyPreferredAudioProfileApplied(btInfo.mDevice);
- }
-
- static final int[] CAPTURE_PRESETS = new int[] {AudioSource.MIC, AudioSource.CAMCORDER,
- AudioSource.VOICE_RECOGNITION, AudioSource.VOICE_COMMUNICATION,
- AudioSource.UNPROCESSED, AudioSource.VOICE_PERFORMANCE, AudioSource.HOTWORD};
-
- // reflects system property persist.bluetooth.enable_dual_mode_audio
- final boolean mBluetoothDualModeEnabled;
- /**
- * Goes over all connected Bluetooth devices and set the audio policy device role to DISABLED
- * or not according to their own and other devices modes.
- * The top priority is given to LE devices, then SCO ,then A2DP.
- */
- @GuardedBy("mDevicesLock")
- private void applyConnectedDevicesRoles_l() {
- if (!mBluetoothDualModeEnabled) {
- return;
- }
- DeviceInfo leOutDevice =
- getFirstConnectedDeviceOfTypes(AudioSystem.DEVICE_OUT_ALL_BLE_SET);
- DeviceInfo leInDevice =
- getFirstConnectedDeviceOfTypes(AudioSystem.DEVICE_IN_ALL_BLE_SET);
- DeviceInfo a2dpDevice =
- getFirstConnectedDeviceOfTypes(AudioSystem.DEVICE_OUT_ALL_A2DP_SET);
- DeviceInfo scoOutDevice =
- getFirstConnectedDeviceOfTypes(AudioSystem.DEVICE_OUT_ALL_SCO_SET);
- DeviceInfo scoInDevice =
- getFirstConnectedDeviceOfTypes(AudioSystem.DEVICE_IN_ALL_SCO_SET);
- boolean disableA2dp = (leOutDevice != null && leOutDevice.isOutputOnlyModeEnabled());
- boolean disableSco = (leOutDevice != null && leOutDevice.isDuplexModeEnabled())
- || (leInDevice != null && leInDevice.isDuplexModeEnabled());
- AudioDeviceAttributes communicationDevice =
- mDeviceBroker.mActiveCommunicationDevice == null
- ? null : ((mDeviceBroker.isInCommunication()
- && mDeviceBroker.mActiveCommunicationDevice != null)
- ? new AudioDeviceAttributes(mDeviceBroker.mActiveCommunicationDevice)
- : null);
-
- if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, "applyConnectedDevicesRoles_l\n - leOutDevice: " + leOutDevice
- + "\n - leInDevice: " + leInDevice
- + "\n - a2dpDevice: " + a2dpDevice
- + "\n - scoOutDevice: " + scoOutDevice
- + "\n - scoInDevice: " + scoInDevice
- + "\n - disableA2dp: " + disableA2dp
- + ", disableSco: " + disableSco);
- }
-
- for (DeviceInfo di : mConnectedDevices.values()) {
- if (!AudioSystem.isBluetoothDevice(di.mDeviceType)) {
- continue;
- }
- AudioDeviceAttributes ada =
- new AudioDeviceAttributes(di.mDeviceType, di.mDeviceAddress, di.mDeviceName);
- if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, " + checking Device: " + ada);
- }
- if (ada.equalTypeAddress(communicationDevice)) {
- continue;
- }
-
- if (AudioSystem.isBluetoothOutDevice(di.mDeviceType)) {
- for (AudioProductStrategy strategy : mStrategies) {
- boolean disable = false;
- if (strategy.getId() == mDeviceBroker.mCommunicationStrategyId) {
- if (AudioSystem.isBluetoothScoDevice(di.mDeviceType)) {
- disable = disableSco || !di.isDuplexModeEnabled();
- } else if (AudioSystem.isBluetoothLeDevice(di.mDeviceType)) {
- disable = !di.isDuplexModeEnabled();
- }
- } else {
- if (AudioSystem.isBluetoothA2dpOutDevice(di.mDeviceType)) {
- disable = disableA2dp || !di.isOutputOnlyModeEnabled();
- } else if (AudioSystem.isBluetoothScoDevice(di.mDeviceType)) {
- disable = disableSco || !di.isOutputOnlyModeEnabled();
- } else if (AudioSystem.isBluetoothLeDevice(di.mDeviceType)) {
- disable = !di.isOutputOnlyModeEnabled();
- }
- }
- if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, " - strategy: " + strategy.getId()
- + ", disable: " + disable);
- }
- if (disable) {
- addDevicesRoleForStrategy(strategy.getId(),
- AudioSystem.DEVICE_ROLE_DISABLED, Arrays.asList(ada));
- } else {
- removeDevicesRoleForStrategy(strategy.getId(),
- AudioSystem.DEVICE_ROLE_DISABLED, Arrays.asList(ada));
- }
- }
- }
- if (AudioSystem.isBluetoothInDevice(di.mDeviceType)) {
- for (int capturePreset : CAPTURE_PRESETS) {
- boolean disable = false;
- if (AudioSystem.isBluetoothScoDevice(di.mDeviceType)) {
- disable = disableSco || !di.isDuplexModeEnabled();
- } else if (AudioSystem.isBluetoothLeDevice(di.mDeviceType)) {
- disable = !di.isDuplexModeEnabled();
- }
- if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, " - capturePreset: " + capturePreset
- + ", disable: " + disable);
- }
- if (disable) {
- addDevicesRoleForCapturePreset(capturePreset,
- AudioSystem.DEVICE_ROLE_DISABLED, Arrays.asList(ada));
- } else {
- removeDevicesRoleForCapturePreset(capturePreset,
- AudioSystem.DEVICE_ROLE_DISABLED, Arrays.asList(ada));
- }
- }
- }
- }
- }
-
- /* package */ void applyConnectedDevicesRoles() {
- synchronized (mDevicesLock) {
- applyConnectedDevicesRoles_l();
- }
- }
-
- @GuardedBy("mDevicesLock")
- int checkProfileIsConnected(int profile) {
- switch (profile) {
- case BluetoothProfile.HEADSET:
- if (getFirstConnectedDeviceOfTypes(
- AudioSystem.DEVICE_OUT_ALL_SCO_SET) != null
- || getFirstConnectedDeviceOfTypes(
- AudioSystem.DEVICE_IN_ALL_SCO_SET) != null) {
- return profile;
- }
- break;
- case BluetoothProfile.A2DP:
- if (getFirstConnectedDeviceOfTypes(
- AudioSystem.DEVICE_OUT_ALL_A2DP_SET) != null) {
- return profile;
- }
- break;
- case BluetoothProfile.LE_AUDIO:
- case BluetoothProfile.LE_AUDIO_BROADCAST:
- if (getFirstConnectedDeviceOfTypes(
- AudioSystem.DEVICE_OUT_ALL_BLE_SET) != null
- || getFirstConnectedDeviceOfTypes(
- AudioSystem.DEVICE_IN_ALL_BLE_SET) != null) {
- return profile;
- }
- break;
- default:
- break;
- }
- return 0;
- }
-
- @GuardedBy("mDevicesLock")
- private void updateBluetoothPreferredModes_l() {
- if (!mBluetoothDualModeEnabled) {
- return;
- }
- HashSet<String> processedAddresses = new HashSet<>(0);
- for (DeviceInfo di : mConnectedDevices.values()) {
- if (!AudioSystem.isBluetoothDevice(di.mDeviceType)
- || processedAddresses.contains(di.mDeviceAddress)) {
- continue;
- }
- Bundle preferredProfiles = BtHelper.getPreferredAudioProfiles(di.mDeviceAddress);
- if (AudioService.DEBUG_DEVICES) {
- Log.i(TAG, "updateBluetoothPreferredModes_l processing device address: "
- + di.mDeviceAddress + ", preferredProfiles: " + preferredProfiles);
- }
- for (DeviceInfo di2 : mConnectedDevices.values()) {
- if (!AudioSystem.isBluetoothDevice(di2.mDeviceType)
- || !di.mDeviceAddress.equals(di2.mDeviceAddress)) {
- continue;
- }
- int profile = BtHelper.getProfileFromType(di2.mDeviceType);
- if (profile == 0) {
- continue;
- }
- int preferredProfile = checkProfileIsConnected(
- preferredProfiles.getInt(BluetoothAdapter.AUDIO_MODE_DUPLEX));
- if (preferredProfile == profile || preferredProfile == 0) {
- di2.setModeEnabled(BluetoothAdapter.AUDIO_MODE_DUPLEX);
- } else {
- di2.setModeDisabled(BluetoothAdapter.AUDIO_MODE_DUPLEX);
- }
- preferredProfile = checkProfileIsConnected(
- preferredProfiles.getInt(BluetoothAdapter.AUDIO_MODE_OUTPUT_ONLY));
- if (preferredProfile == profile || preferredProfile == 0) {
- di2.setModeEnabled(BluetoothAdapter.AUDIO_MODE_OUTPUT_ONLY);
- } else {
- di2.setModeDisabled(BluetoothAdapter.AUDIO_MODE_OUTPUT_ONLY);
- }
- }
- processedAddresses.add(di.mDeviceAddress);
- }
- applyConnectedDevicesRoles_l();
}
@GuardedBy("mDevicesLock")
@@ -1743,9 +1231,6 @@
// Remove A2DP routes as well
setCurrentAudioRouteNameIfPossible(null, true /*fromA2dp*/);
mmi.record();
-
- updateBluetoothPreferredModes_l();
- purgeDevicesRoles_l();
}
@GuardedBy("mDevicesLock")
@@ -1775,7 +1260,8 @@
AudioSystem.AUDIO_FORMAT_DEFAULT);
mConnectedDevices.put(
DeviceInfo.makeDeviceListKey(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP, address),
- new DeviceInfo(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP, "", address));
+ new DeviceInfo(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP, "",
+ address, AudioSystem.AUDIO_FORMAT_DEFAULT));
}
@GuardedBy("mDevicesLock")
@@ -1801,7 +1287,8 @@
AudioSystem.AUDIO_FORMAT_DEFAULT);
mConnectedDevices.put(
DeviceInfo.makeDeviceListKey(AudioSystem.DEVICE_OUT_HEARING_AID, address),
- new DeviceInfo(AudioSystem.DEVICE_OUT_HEARING_AID, name, address));
+ new DeviceInfo(AudioSystem.DEVICE_OUT_HEARING_AID, name,
+ address, AudioSystem.AUDIO_FORMAT_DEFAULT));
mDeviceBroker.postAccessoryPlugMediaUnmute(AudioSystem.DEVICE_OUT_HEARING_AID);
mDeviceBroker.postApplyVolumeOnDevice(streamType,
AudioSystem.DEVICE_OUT_HEARING_AID, "makeHearingAidDeviceAvailable");
@@ -1839,56 +1326,29 @@
* @return true if a DEVICE_OUT_HEARING_AID is connected, false otherwise.
*/
boolean isHearingAidConnected() {
- return getFirstConnectedDeviceOfTypes(
- Sets.newHashSet(AudioSystem.DEVICE_OUT_HEARING_AID)) != null;
- }
-
- /**
- * Returns a DeviceInfo for the fist connected device matching one of the supplied types
- */
- private DeviceInfo getFirstConnectedDeviceOfTypes(Set<Integer> internalTypes) {
- List<DeviceInfo> devices = getConnectedDevicesOfTypes(internalTypes);
- return devices.isEmpty() ? null : devices.get(0);
- }
-
- /**
- * Returns a list of connected devices matching one one of the supplied types
- */
- private List<DeviceInfo> getConnectedDevicesOfTypes(Set<Integer> internalTypes) {
- ArrayList<DeviceInfo> devices = new ArrayList<>();
synchronized (mDevicesLock) {
for (DeviceInfo di : mConnectedDevices.values()) {
- if (internalTypes.contains(di.mDeviceType)) {
- devices.add(di);
+ if (di.mDeviceType == AudioSystem.DEVICE_OUT_HEARING_AID) {
+ return true;
}
}
+ return false;
}
- return devices;
- }
-
- /* package */ AudioDeviceAttributes getDeviceOfType(int type) {
- DeviceInfo di = getFirstConnectedDeviceOfTypes(Sets.newHashSet(type));
- return di == null ? null : new AudioDeviceAttributes(
- di.mDeviceType, di.mDeviceAddress, di.mDeviceName);
}
@GuardedBy("mDevicesLock")
- private void makeLeAudioDeviceAvailable(
- AudioDeviceBroker.BtDeviceInfo btInfo, int streamType, String eventSource) {
- final String address = btInfo.mDevice.getAddress();
- final String name = BtHelper.getName(btInfo.mDevice);
- final int volumeIndex = btInfo.mVolume == -1 ? -1 : btInfo.mVolume * 10;
- final int device = btInfo.mAudioSystemDevice;
-
+ private void makeLeAudioDeviceAvailable(String address, String name, int streamType,
+ int volumeIndex, int device, String eventSource) {
if (device != AudioSystem.DEVICE_NONE) {
/* Audio Policy sees Le Audio similar to A2DP. Let's make sure
* AUDIO_POLICY_FORCE_NO_BT_A2DP is not set
*/
mDeviceBroker.setBluetoothA2dpOnInt(true, false /*fromA2dp*/, eventSource);
- AudioDeviceAttributes ada = new AudioDeviceAttributes(device, address, name);
- final int res = AudioSystem.setDeviceConnectionState(ada,
- AudioSystem.DEVICE_STATE_AVAILABLE, AudioSystem.AUDIO_FORMAT_DEFAULT);
+ final int res = AudioSystem.setDeviceConnectionState(new AudioDeviceAttributes(
+ device, address, name),
+ AudioSystem.DEVICE_STATE_AVAILABLE,
+ AudioSystem.AUDIO_FORMAT_DEFAULT);
if (res != AudioSystem.AUDIO_STATUS_OK) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"APM failed to make available LE Audio device addr=" + address
@@ -1899,13 +1359,12 @@
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"LE Audio device addr=" + address + " now available").printLog(TAG));
}
+
// Reset LEA suspend state each time a new sink is connected
mDeviceBroker.clearLeAudioSuspended();
- UUID sensorUuid = UuidUtils.uuidFromAudioDeviceAttributes(ada);
mConnectedDevices.put(DeviceInfo.makeDeviceListKey(device, address),
- new DeviceInfo(device, name, address, AudioSystem.AUDIO_FORMAT_DEFAULT,
- sensorUuid));
+ new DeviceInfo(device, name, address, AudioSystem.AUDIO_FORMAT_DEFAULT));
mDeviceBroker.postAccessoryPlugMediaUnmute(device);
setCurrentAudioRouteNameIfPossible(name, /*fromA2dp=*/false);
}
@@ -1921,9 +1380,6 @@
final int maxIndex = mDeviceBroker.getMaxVssVolumeForStream(streamType);
mDeviceBroker.postSetLeAudioVolumeIndex(leAudioVolIndex, maxIndex, streamType);
mDeviceBroker.postApplyVolumeOnDevice(streamType, device, "makeLeAudioDeviceAvailable");
-
- updateBluetoothPreferredModes_l();
- mDeviceBroker.postNotifyPreferredAudioProfileApplied(btInfo.mDevice);
}
@GuardedBy("mDevicesLock")
@@ -1948,9 +1404,6 @@
}
setCurrentAudioRouteNameIfPossible(null, false /*fromA2dp*/);
-
- updateBluetoothPreferredModes_l();
- purgeDevicesRoles_l();
}
@GuardedBy("mDevicesLock")
@@ -2286,6 +1739,18 @@
}
}
+ /* package */ AudioDeviceAttributes getDeviceOfType(int type) {
+ synchronized (mDevicesLock) {
+ for (DeviceInfo di : mConnectedDevices.values()) {
+ if (di.mDeviceType == type) {
+ return new AudioDeviceAttributes(
+ di.mDeviceType, di.mDeviceAddress, di.mDeviceName);
+ }
+ }
+ }
+ return null;
+ }
+
//----------------------------------------------------------
// For tests only
@@ -2296,12 +1761,10 @@
*/
@VisibleForTesting
public boolean isA2dpDeviceConnected(@NonNull BluetoothDevice device) {
- for (DeviceInfo di : getConnectedDevicesOfTypes(
- Sets.newHashSet(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP))) {
- if (di.mDeviceAddress.equals(device.getAddress())) {
- return true;
- }
+ final String key = DeviceInfo.makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
+ device.getAddress());
+ synchronized (mDevicesLock) {
+ return (mConnectedDevices.get(key) != null);
}
- return false;
}
}
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index a3163e0..3487fc2 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -199,6 +199,7 @@
import com.android.server.SystemService;
import com.android.server.audio.AudioServiceEvents.DeviceVolumeEvent;
import com.android.server.audio.AudioServiceEvents.PhoneStateEvent;
+import com.android.server.audio.AudioServiceEvents.VolChangedBroadcastEvent;
import com.android.server.audio.AudioServiceEvents.VolumeEvent;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerInternal.UserRestrictionsListener;
@@ -1214,7 +1215,7 @@
mUseFixedVolume = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useFixedVolume);
- mDeviceBroker = new AudioDeviceBroker(mContext, this);
+ mDeviceBroker = new AudioDeviceBroker(mContext, this, mAudioSystem);
mRecordMonitor = new RecordingActivityMonitor(mContext);
mRecordMonitor.registerRecordingCallback(mVoiceRecordingActivityMonitor, true);
@@ -1687,7 +1688,7 @@
synchronized (mSettingsLock) {
final int forDock = mDockAudioMediaEnabled ?
- AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE;
+ AudioSystem.FORCE_DIGITAL_DOCK : AudioSystem.FORCE_NONE;
mDeviceBroker.setForceUse_Async(AudioSystem.FOR_DOCK, forDock, "onAudioServerDied");
sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
sendEnabledSurroundFormats(mContentResolver, true);
@@ -2284,8 +2285,8 @@
synchronized (VolumeStreamState.class) {
mStreamStates[AudioSystem.STREAM_DTMF]
.setAllIndexes(mStreamStates[dtmfStreamAlias], caller);
- mStreamStates[AudioSystem.STREAM_ACCESSIBILITY].mVolumeIndexSettingName =
- System.VOLUME_SETTINGS_INT[a11yStreamAlias];
+ mStreamStates[AudioSystem.STREAM_ACCESSIBILITY].setSettingName(
+ System.VOLUME_SETTINGS_INT[a11yStreamAlias]);
mStreamStates[AudioSystem.STREAM_ACCESSIBILITY].setAllIndexes(
mStreamStates[a11yStreamAlias], caller);
}
@@ -2323,9 +2324,10 @@
SENDMSG_QUEUE,
AudioSystem.FOR_DOCK,
mDockAudioMediaEnabled ?
- AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE,
+ AudioSystem.FORCE_DIGITAL_DOCK : AudioSystem.FORCE_NONE,
new String("readDockAudioSettings"),
0);
+
}
@@ -3972,13 +3974,32 @@
Log.e(TAG, "Unsupported non-stream type based VolumeInfo", new Exception());
return;
}
+
int index = vi.getVolumeIndex();
if (index == VolumeInfo.INDEX_NOT_SET && !vi.hasMuteCommand()) {
throw new IllegalArgumentException(
"changing device volume requires a volume index or mute command");
}
- // TODO handle unmuting if current audio device
+ // force a cache clear to force reevaluating stream type to audio device selection
+ // that can interfere with the sending of the VOLUME_CHANGED_ACTION intent
+ mAudioSystem.clearRoutingCache();
+
+ // log the current device that will be used when evaluating the sending of the
+ // VOLUME_CHANGED_ACTION intent to see if the current device is the one being modified
+ final int currDev = getDeviceForStream(vi.getStreamType());
+
+ final boolean skipping = (currDev == ada.getInternalType());
+
+ AudioService.sVolumeLogger.enqueue(new DeviceVolumeEvent(vi.getStreamType(), index, ada,
+ currDev, callingPackage, skipping));
+
+ if (skipping) {
+ // setDeviceVolume was called on a device currently being used
+ return;
+ }
+
+ // TODO handle unmuting of current audio device
// if a stream is not muted but the VolumeInfo is for muting, set the volume index
// for the device to min volume
if (vi.hasMuteCommand() && vi.isMuted() && !isStreamMute(vi.getStreamType())) {
@@ -4129,11 +4150,11 @@
return;
}
- final EventLogger.Event event = (device == null)
- ? new VolumeEvent(VolumeEvent.VOL_SET_STREAM_VOL, streamType,
- index/*val1*/, flags/*val2*/, callingPackage)
- : new DeviceVolumeEvent(streamType, index, device, callingPackage);
- sVolumeLogger.enqueue(event);
+ if (device == null) {
+ // call was already logged in setDeviceVolume()
+ sVolumeLogger.enqueue(new VolumeEvent(VolumeEvent.VOL_SET_STREAM_VOL, streamType,
+ index/*val1*/, flags/*val2*/, callingPackage));
+ }
setStreamVolume(streamType, index, flags, device,
callingPackage, callingPackage, attributionTag,
Binder.getCallingUid(), callingOrSelfHasAudioSettingsPermission());
@@ -4547,7 +4568,11 @@
maybeSendSystemAudioStatusCommand(false);
}
}
- sendVolumeUpdate(streamType, oldIndex, index, flags, device);
+ if (ada == null) {
+ // only non-null when coming here from setDeviceVolume
+ // TODO change test to check early if device is current device or not
+ sendVolumeUpdate(streamType, oldIndex, index, flags, device);
+ }
}
private void dispatchAbsoluteVolumeChanged(int streamType, AbsoluteVolumeDeviceInfo deviceInfo,
@@ -4993,8 +5018,8 @@
int streamType = vi.getStreamType();
final VolumeInfo.Builder vib = new VolumeInfo.Builder(vi);
- vib.setMinVolumeIndex(mStreamStates[streamType].mIndexMin);
- vib.setMaxVolumeIndex(mStreamStates[streamType].mIndexMax);
+ vib.setMinVolumeIndex((mStreamStates[streamType].mIndexMin + 5) / 10);
+ vib.setMaxVolumeIndex((mStreamStates[streamType].mIndexMax + 5) / 10);
synchronized (VolumeStreamState.class) {
final int index;
if (isFixedVolumeDevice(ada.getInternalType())) {
@@ -5003,7 +5028,11 @@
index = (mStreamStates[streamType].getIndex(ada.getInternalType()) + 5) / 10;
}
vib.setVolumeIndex(index);
- return vib.setMuted(mStreamStates[streamType].mIsMuted).build();
+ // only set as a mute command if stream muted
+ if (mStreamStates[streamType].mIsMuted) {
+ vib.setMuted(true);
+ }
+ return vib.build();
}
}
@@ -7700,7 +7729,7 @@
private int mPublicStreamType = AudioSystem.STREAM_MUSIC;
private AudioAttributes mAudioAttributes = AudioProductStrategy.getDefaultAttributes();
private boolean mIsMuted = false;
- private final String mSettingName;
+ private String mSettingName;
// No API in AudioSystem to get a device from strategy or from attributes.
// Need a valid public stream type to use current API getDeviceForStream
@@ -8029,15 +8058,19 @@
}
private void persistVolumeGroup(int device) {
- if (mUseFixedVolume) {
+ // No need to persist the index if the volume group is backed up
+ // by a public stream type as this is redundant
+ if (mUseFixedVolume || mHasValidStreamType) {
return;
}
if (DEBUG_VOL) {
Log.v(TAG, "persistVolumeGroup: storing index " + getIndex(device) + " for group "
+ mAudioVolumeGroup.name()
+ ", device " + AudioSystem.getOutputDeviceName(device)
- + " and User=" + getCurrentUserId());
+ + " and User=" + getCurrentUserId()
+ + " mSettingName: " + mSettingName);
}
+
boolean success = mSettings.putSystemIntForUser(mContentResolver,
getSettingNameForDevice(device),
getIndex(device),
@@ -8100,6 +8133,14 @@
return mSettingName + "_" + AudioSystem.getOutputDeviceName(device);
}
+ void setSettingName(String settingName) {
+ mSettingName = settingName;
+ }
+
+ String getSettingName() {
+ return mSettingName;
+ }
+
private void dump(PrintWriter pw) {
pw.println("- VOLUME GROUP " + mAudioVolumeGroup.name() + ":");
pw.print(" Muted: ");
@@ -8242,6 +8283,9 @@
*/
public void setVolumeGroupState(VolumeGroupState volumeGroupState) {
mVolumeGroupState = volumeGroupState;
+ if (mVolumeGroupState != null) {
+ mVolumeGroupState.setSettingName(mVolumeIndexSettingName);
+ }
}
/**
* Update the minimum index that can be used without MODIFY_AUDIO_SETTINGS permission
@@ -8315,6 +8359,17 @@
return (mVolumeIndexSettingName != null && !mVolumeIndexSettingName.isEmpty());
}
+ void setSettingName(String settingName) {
+ mVolumeIndexSettingName = settingName;
+ if (mVolumeGroupState != null) {
+ mVolumeGroupState.setSettingName(mVolumeIndexSettingName);
+ }
+ }
+
+ String getSettingName() {
+ return mVolumeIndexSettingName;
+ }
+
public void readSettings() {
synchronized (mSettingsLock) {
synchronized (VolumeStreamState.class) {
@@ -8531,6 +8586,8 @@
mVolumeChanged.putExtra(AudioManager.EXTRA_PREV_VOLUME_STREAM_VALUE, oldIndex);
mVolumeChanged.putExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE_ALIAS,
mStreamVolumeAlias[mStreamType]);
+ AudioService.sVolumeLogger.enqueue(new VolChangedBroadcastEvent(
+ mStreamType, mStreamVolumeAlias[mStreamType], index));
sendBroadcastToAll(mVolumeChanged, mVolumeChangedOptions);
}
}
@@ -8989,7 +9046,7 @@
if (streamState.hasValidSettingsName()) {
mSettings.putSystemIntForUser(mContentResolver,
streamState.getSettingNameForDevice(device),
- (streamState.getIndex(device) + 5)/ 10,
+ (streamState.getIndex(device) + 5) / 10,
UserHandle.USER_CURRENT);
}
}
@@ -10807,7 +10864,7 @@
static final int LOG_NB_EVENTS_PHONE_STATE = 20;
static final int LOG_NB_EVENTS_DEVICE_CONNECTION = 50;
static final int LOG_NB_EVENTS_FORCE_USE = 20;
- static final int LOG_NB_EVENTS_VOLUME = 40;
+ static final int LOG_NB_EVENTS_VOLUME = 100;
static final int LOG_NB_EVENTS_DYN_POLICY = 10;
static final int LOG_NB_EVENTS_SPATIAL = 30;
static final int LOG_NB_EVENTS_SOUND_DOSE = 30;
@@ -12452,20 +12509,16 @@
}
int addMixes(@NonNull ArrayList<AudioMix> mixes) {
- // TODO optimize to not have to unregister the mixes already in place
synchronized (mMixes) {
- mAudioSystem.registerPolicyMixes(mMixes, false);
this.add(mixes);
- return mAudioSystem.registerPolicyMixes(mMixes, true);
+ return mAudioSystem.registerPolicyMixes(mixes, true);
}
}
int removeMixes(@NonNull ArrayList<AudioMix> mixes) {
- // TODO optimize to not have to unregister the mixes already in place
synchronized (mMixes) {
- mAudioSystem.registerPolicyMixes(mMixes, false);
this.remove(mixes);
- return mAudioSystem.registerPolicyMixes(mMixes, true);
+ return mAudioSystem.registerPolicyMixes(mixes, false);
}
}
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index 58caf5a..b022b5b 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -147,20 +147,45 @@
}
}
+ static final class VolChangedBroadcastEvent extends EventLogger.Event {
+ final int mStreamType;
+ final int mAliasStreamType;
+ final int mIndex;
+
+ VolChangedBroadcastEvent(int stream, int alias, int index) {
+ mStreamType = stream;
+ mAliasStreamType = alias;
+ mIndex = index;
+ }
+
+ @Override
+ public String eventToString() {
+ return new StringBuilder("sending VOLUME_CHANGED stream:")
+ .append(AudioSystem.streamToString(mStreamType))
+ .append(" index:").append(mIndex)
+ .append(" alias:").append(AudioSystem.streamToString(mAliasStreamType))
+ .toString();
+ }
+ }
+
static final class DeviceVolumeEvent extends EventLogger.Event {
final int mStream;
final int mVolIndex;
final String mDeviceNativeType;
final String mDeviceAddress;
final String mCaller;
+ final int mDeviceForStream;
+ final boolean mSkipped;
DeviceVolumeEvent(int streamType, int index, @NonNull AudioDeviceAttributes device,
- String callingPackage) {
+ int deviceForStream, String callingPackage, boolean skipped) {
mStream = streamType;
mVolIndex = index;
mDeviceNativeType = "0x" + Integer.toHexString(device.getInternalType());
mDeviceAddress = device.getAddress();
+ mDeviceForStream = deviceForStream;
mCaller = callingPackage;
+ mSkipped = skipped;
// log metrics
new MediaMetrics.Item(MediaMetrics.Name.AUDIO_VOLUME_EVENT)
.set(MediaMetrics.Property.EVENT, "setDeviceVolume")
@@ -175,12 +200,18 @@
@Override
public String eventToString() {
- return new StringBuilder("setDeviceVolume(stream:")
+ final StringBuilder sb = new StringBuilder("setDeviceVolume(stream:")
.append(AudioSystem.streamToString(mStream))
.append(" index:").append(mVolIndex)
.append(" device:").append(mDeviceNativeType)
.append(" addr:").append(mDeviceAddress)
- .append(") from ").append(mCaller).toString();
+ .append(") from ").append(mCaller);
+ if (mSkipped) {
+ sb.append(" skipped [device in use]");
+ } else {
+ sb.append(" currDevForStream:Ox").append(Integer.toHexString(mDeviceForStream));
+ }
+ return sb.toString();
}
}
diff --git a/services/core/java/com/android/server/audio/AudioSystemAdapter.java b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
index 1142a8d..d066340 100644
--- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java
+++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
@@ -162,6 +162,16 @@
}
/**
+ * Empties the routing cache if enabled.
+ */
+ public void clearRoutingCache() {
+ if (DEBUG_CACHE) {
+ Log.d(TAG, "---- routing cache clear (from java) ----------");
+ }
+ invalidateRoutingCache();
+ }
+
+ /**
* @see AudioManager#addOnDevicesForAttributesChangedListener(
* AudioAttributes, Executor, OnDevicesForAttributesChangedListener)
*/
@@ -435,7 +445,7 @@
}
/**
- * Same as {@link AudioSystem#removeDevicesRoleForCapturePreset(int, int, List)}
+ * Same as {@link AudioSystem#removeDevicesRoleForCapturePreset(int, int, int[], String[])}
* @param capturePreset
* @param role
* @param devicesToRemove
@@ -448,19 +458,6 @@
}
/**
- * Same as {@link AudioSystem#addDevicesRoleForCapturePreset(int, int, List)}
- * @param capturePreset the capture preset to configure
- * @param role the role of the devices
- * @param devices the list of devices to be added as role for the given capture preset
- * @return {@link #SUCCESS} if successfully add
- */
- public int addDevicesRoleForCapturePreset(
- int capturePreset, int role, @NonNull List<AudioDeviceAttributes> devices) {
- invalidateRoutingCache();
- return AudioSystem.addDevicesRoleForCapturePreset(capturePreset, role, devices);
- }
-
- /**
* Same as {@link AudioSystem#}
* @param capturePreset
* @param role
@@ -477,6 +474,7 @@
* @return
*/
public int setParameters(String keyValuePairs) {
+ invalidateRoutingCache();
return AudioSystem.setParameters(keyValuePairs);
}
diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java
index e46c3cc..8c27c3e 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -33,7 +33,6 @@
import android.media.AudioSystem;
import android.media.BluetoothProfileConnectionInfo;
import android.os.Binder;
-import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
@@ -151,12 +150,60 @@
}
}
+ //----------------------------------------------------------------------
+ /*package*/ static class BluetoothA2dpDeviceInfo {
+ private final @NonNull BluetoothDevice mBtDevice;
+ private final int mVolume;
+ private final @AudioSystem.AudioFormatNativeEnumForBtCodec int mCodec;
+
+ BluetoothA2dpDeviceInfo(@NonNull BluetoothDevice btDevice) {
+ this(btDevice, -1, AudioSystem.AUDIO_FORMAT_DEFAULT);
+ }
+
+ BluetoothA2dpDeviceInfo(@NonNull BluetoothDevice btDevice, int volume, int codec) {
+ mBtDevice = btDevice;
+ mVolume = volume;
+ mCodec = codec;
+ }
+
+ public @NonNull BluetoothDevice getBtDevice() {
+ return mBtDevice;
+ }
+
+ public int getVolume() {
+ return mVolume;
+ }
+
+ public @AudioSystem.AudioFormatNativeEnumForBtCodec int getCodec() {
+ return mCodec;
+ }
+
+ // redefine equality op so we can match messages intended for this device
+ @Override
+ public boolean equals(Object o) {
+ if (o == null) {
+ return false;
+ }
+ if (this == o) {
+ return true;
+ }
+ if (o instanceof BluetoothA2dpDeviceInfo) {
+ return mBtDevice.equals(((BluetoothA2dpDeviceInfo) o).getBtDevice());
+ }
+ return false;
+ }
+
+
+ }
+
// A2DP device events
/*package*/ static final int EVENT_DEVICE_CONFIG_CHANGE = 0;
+ /*package*/ static final int EVENT_ACTIVE_DEVICE_CHANGE = 1;
- /*package*/ static String deviceEventToString(int event) {
+ /*package*/ static String a2dpDeviceEventToString(int event) {
switch (event) {
case EVENT_DEVICE_CONFIG_CHANGE: return "DEVICE_CONFIG_CHANGE";
+ case EVENT_ACTIVE_DEVICE_CHANGE: return "ACTIVE_DEVICE_CHANGE";
default:
return new String("invalid event:" + event);
}
@@ -573,12 +620,11 @@
return btHeadsetDeviceToAudioDevice(mBluetoothHeadsetDevice);
}
- private static AudioDeviceAttributes btHeadsetDeviceToAudioDevice(BluetoothDevice btDevice) {
+ private AudioDeviceAttributes btHeadsetDeviceToAudioDevice(BluetoothDevice btDevice) {
if (btDevice == null) {
return new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_BLUETOOTH_SCO, "");
}
String address = btDevice.getAddress();
- String name = getName(btDevice);
if (!BluetoothAdapter.checkBluetoothAddress(address)) {
address = "";
}
@@ -600,7 +646,7 @@
+ " btClass: " + (btClass == null ? "Unknown" : btClass)
+ " nativeType: " + nativeType + " address: " + address);
}
- return new AudioDeviceAttributes(nativeType, address, name);
+ return new AudioDeviceAttributes(nativeType, address);
}
private boolean handleBtScoActiveDeviceChange(BluetoothDevice btDevice, boolean isActive) {
@@ -609,9 +655,12 @@
}
int inDevice = AudioSystem.DEVICE_IN_BLUETOOTH_SCO_HEADSET;
AudioDeviceAttributes audioDevice = btHeadsetDeviceToAudioDevice(btDevice);
+ String btDeviceName = getName(btDevice);
boolean result = false;
if (isActive) {
- result |= mDeviceBroker.handleDeviceConnection(audioDevice, isActive, btDevice);
+ result |= mDeviceBroker.handleDeviceConnection(new AudioDeviceAttributes(
+ audioDevice.getInternalType(), audioDevice.getAddress(), btDeviceName),
+ isActive);
} else {
int[] outDeviceTypes = {
AudioSystem.DEVICE_OUT_BLUETOOTH_SCO,
@@ -620,14 +669,14 @@
};
for (int outDeviceType : outDeviceTypes) {
result |= mDeviceBroker.handleDeviceConnection(new AudioDeviceAttributes(
- outDeviceType, audioDevice.getAddress(), audioDevice.getName()),
- isActive, btDevice);
+ outDeviceType, audioDevice.getAddress(), btDeviceName),
+ isActive);
}
}
// handleDeviceConnection() && result to make sure the method get executed
result = mDeviceBroker.handleDeviceConnection(new AudioDeviceAttributes(
- inDevice, audioDevice.getAddress(), audioDevice.getName()),
- isActive, btDevice) && result;
+ inDevice, audioDevice.getAddress(), btDeviceName),
+ isActive) && result;
return result;
}
@@ -924,30 +973,6 @@
}
}
- /*package */ static int getProfileFromType(int deviceType) {
- if (AudioSystem.isBluetoothA2dpOutDevice(deviceType)) {
- return BluetoothProfile.A2DP;
- } else if (AudioSystem.isBluetoothScoDevice(deviceType)) {
- return BluetoothProfile.HEADSET;
- } else if (AudioSystem.isBluetoothLeDevice(deviceType)) {
- return BluetoothProfile.LE_AUDIO;
- }
- return 0; // 0 is not a valid profile
- }
-
- /*package */ static Bundle getPreferredAudioProfiles(String address) {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- return adapter.getPreferredAudioProfiles(adapter.getRemoteDevice(address));
- }
-
- /**
- * Notifies Bluetooth framework that new preferred audio profiles for Bluetooth devices
- * have been applied.
- */
- public static void onNotifyPreferredAudioProfileApplied(BluetoothDevice btDevice) {
- BluetoothAdapter.getDefaultAdapter().notifyActiveDeviceChangeApplied(btDevice);
- }
-
/**
* Returns the string equivalent for the btDeviceClass class.
*/
diff --git a/services/core/java/com/android/server/audio/SoundDoseHelper.java b/services/core/java/com/android/server/audio/SoundDoseHelper.java
index 31f0c05..a57dd40 100644
--- a/services/core/java/com/android/server/audio/SoundDoseHelper.java
+++ b/services/core/java/com/android/server/audio/SoundDoseHelper.java
@@ -303,8 +303,9 @@
SAFE_MEDIA_VOLUME_UNINITIALIZED);
mSafeMediaVolumeDevices.append(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES,
SAFE_MEDIA_VOLUME_UNINITIALIZED);
- mSafeMediaVolumeDevices.append(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
- SAFE_MEDIA_VOLUME_UNINITIALIZED);
+ // TODO(b/278265907): enable A2DP when we can distinguish A2DP headsets
+ // mSafeMediaVolumeDevices.append(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP,
+ // SAFE_MEDIA_VOLUME_UNINITIALIZED);
}
float getOutputRs2UpperBound() {
diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java
index 5edd434..462c938 100644
--- a/services/core/java/com/android/server/audio/SpatializerHelper.java
+++ b/services/core/java/com/android/server/audio/SpatializerHelper.java
@@ -77,7 +77,7 @@
//------------------------------------------------------------
- private static final SparseIntArray SPAT_MODE_FOR_DEVICE_TYPE = new SparseIntArray(15) {
+ private static final SparseIntArray SPAT_MODE_FOR_DEVICE_TYPE = new SparseIntArray(14) {
{
append(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, SpatializationMode.SPATIALIZER_TRANSAURAL);
append(AudioDeviceInfo.TYPE_WIRED_HEADSET, SpatializationMode.SPATIALIZER_BINAURAL);
@@ -91,7 +91,6 @@
append(AudioDeviceInfo.TYPE_LINE_ANALOG, SpatializationMode.SPATIALIZER_TRANSAURAL);
append(AudioDeviceInfo.TYPE_LINE_DIGITAL, SpatializationMode.SPATIALIZER_TRANSAURAL);
append(AudioDeviceInfo.TYPE_AUX_LINE, SpatializationMode.SPATIALIZER_TRANSAURAL);
- append(AudioDeviceInfo.TYPE_HEARING_AID, SpatializationMode.SPATIALIZER_BINAURAL);
append(AudioDeviceInfo.TYPE_BLE_HEADSET, SpatializationMode.SPATIALIZER_BINAURAL);
append(AudioDeviceInfo.TYPE_BLE_SPEAKER, SpatializationMode.SPATIALIZER_TRANSAURAL);
// assumption that BLE broadcast would be mostly consumed on headsets
diff --git a/services/core/java/com/android/server/biometrics/OWNERS b/services/core/java/com/android/server/biometrics/OWNERS
index cd281e0..1bf2aef 100644
--- a/services/core/java/com/android/server/biometrics/OWNERS
+++ b/services/core/java/com/android/server/biometrics/OWNERS
@@ -6,6 +6,10 @@
jbolinger@google.com
jeffpu@google.com
joshmccloskey@google.com
+diyab@google.com
+austindelgado@google.com
+spdonghao@google.com
+wenhuiy@google.com
firewall@google.com
jasonsfchang@google.com
diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthResultCoordinator.java b/services/core/java/com/android/server/biometrics/sensors/AuthResultCoordinator.java
index a48a9d1..cd2a26f 100644
--- a/services/core/java/com/android/server/biometrics/sensors/AuthResultCoordinator.java
+++ b/services/core/java/com/android/server/biometrics/sensors/AuthResultCoordinator.java
@@ -37,13 +37,17 @@
*/
static final int AUTHENTICATOR_DEFAULT = 0;
/**
- * Indicated this authenticator has received a lockout.
+ * Indicated this authenticator has received a permanent lockout.
*/
- static final int AUTHENTICATOR_LOCKED = 1 << 0;
+ static final int AUTHENTICATOR_PERMANENT_LOCKED = 1 << 0;
+ /**
+ * Indicates this authenticator has received a timed unlock.
+ */
+ static final int AUTHENTICATOR_TIMED_LOCKED = 1 << 1;
/**
* Indicates this authenticator has received a successful unlock.
*/
- static final int AUTHENTICATOR_UNLOCKED = 1 << 1;
+ static final int AUTHENTICATOR_UNLOCKED = 1 << 2;
private static final String TAG = "AuthResultCoordinator";
private final Map<Integer, Integer> mAuthenticatorState;
@@ -85,7 +89,14 @@
* Adds a lock out of a given strength to the current operation list.
*/
void lockedOutFor(@Authenticators.Types int strength) {
- updateState(strength, (old) -> AUTHENTICATOR_LOCKED | old);
+ updateState(strength, (old) -> AUTHENTICATOR_PERMANENT_LOCKED | old);
+ }
+
+ /**
+ * Adds a timed lock out of a given strength to the current operation list.
+ */
+ void lockOutTimed(@Authenticators.Types int strength) {
+ updateState(strength, (old) -> AUTHENTICATOR_TIMED_LOCKED | old);
}
/**
diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java b/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java
index 1aee5d4..d9947dd 100644
--- a/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java
+++ b/services/core/java/com/android/server/biometrics/sensors/AuthSessionCoordinator.java
@@ -16,21 +16,19 @@
package com.android.server.biometrics.sensors;
-import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_LOCKED;
+import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_PERMANENT_LOCKED;
+import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_TIMED_LOCKED;
import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_UNLOCKED;
import android.hardware.biometrics.BiometricManager.Authenticators;
import android.os.SystemClock;
-import android.util.Pair;
import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting;
import java.time.Clock;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -45,9 +43,7 @@
private final Set<Integer> mAuthOperations;
private final MultiBiometricLockoutState mMultiBiometricLockoutState;
- private final List<Pair<Integer, Long>> mTimedLockouts;
private final RingBuffer mRingBuffer;
- private final Clock mClock;
private int mUserId;
private boolean mIsAuthenticating;
@@ -63,8 +59,6 @@
mAuthResultCoordinator = new AuthResultCoordinator();
mMultiBiometricLockoutState = new MultiBiometricLockoutState(clock);
mRingBuffer = new RingBuffer(100);
- mTimedLockouts = new ArrayList<>();
- mClock = clock;
}
/**
@@ -74,8 +68,6 @@
mAuthOperations.clear();
mUserId = userId;
mIsAuthenticating = true;
- mAuthOperations.clear();
- mTimedLockouts.clear();
mAuthResultCoordinator = new AuthResultCoordinator();
mRingBuffer.addApiCall("internal : onAuthSessionStarted(" + userId + ")");
}
@@ -85,31 +77,25 @@
*
* This can happen two ways.
* 1. Manually calling this API
- * 2. If authStartedFor() was called, and all authentication attempts finish.
+ * 2. If authStartedFor() was called, and any authentication attempts finish.
*/
void endAuthSession() {
- if (mIsAuthenticating) {
- final long currentTime = mClock.millis();
- for (Pair<Integer, Long> timedLockouts : mTimedLockouts) {
- mMultiBiometricLockoutState.increaseLockoutTime(mUserId, timedLockouts.first,
- timedLockouts.second + currentTime);
+ // User unlocks can also unlock timed lockout Authenticator.Types
+ final Map<Integer, Integer> result = mAuthResultCoordinator.getResult();
+ for (int authenticator : Arrays.asList(Authenticators.BIOMETRIC_CONVENIENCE,
+ Authenticators.BIOMETRIC_WEAK, Authenticators.BIOMETRIC_STRONG)) {
+ final Integer value = result.get(authenticator);
+ if ((value & AUTHENTICATOR_UNLOCKED) == AUTHENTICATOR_UNLOCKED) {
+ mMultiBiometricLockoutState.clearPermanentLockOut(mUserId, authenticator);
+ mMultiBiometricLockoutState.clearTimedLockout(mUserId, authenticator);
+ } else if ((value & AUTHENTICATOR_PERMANENT_LOCKED) == AUTHENTICATOR_PERMANENT_LOCKED) {
+ mMultiBiometricLockoutState.setPermanentLockOut(mUserId, authenticator);
+ } else if ((value & AUTHENTICATOR_TIMED_LOCKED) == AUTHENTICATOR_TIMED_LOCKED) {
+ mMultiBiometricLockoutState.setTimedLockout(mUserId, authenticator);
}
- // User unlocks can also unlock timed lockout Authenticator.Types
- final Map<Integer, Integer> result = mAuthResultCoordinator.getResult();
- for (int authenticator : Arrays.asList(Authenticators.BIOMETRIC_CONVENIENCE,
- Authenticators.BIOMETRIC_WEAK, Authenticators.BIOMETRIC_STRONG)) {
- final Integer value = result.get(authenticator);
- if ((value & AUTHENTICATOR_UNLOCKED) == AUTHENTICATOR_UNLOCKED) {
- mMultiBiometricLockoutState.setAuthenticatorTo(mUserId, authenticator,
- true /* canAuthenticate */);
- mMultiBiometricLockoutState.clearLockoutTime(mUserId, authenticator);
- } else if ((value & AUTHENTICATOR_LOCKED) == AUTHENTICATOR_LOCKED) {
- mMultiBiometricLockoutState.setAuthenticatorTo(mUserId, authenticator,
- false /* canAuthenticate */);
- }
+ }
- }
-
+ if (mAuthOperations.isEmpty()) {
mRingBuffer.addApiCall("internal : onAuthSessionEnded(" + mUserId + ")");
clearSession();
}
@@ -117,7 +103,6 @@
private void clearSession() {
mIsAuthenticating = false;
- mTimedLockouts.clear();
mAuthOperations.clear();
}
@@ -171,7 +156,7 @@
+ ", sensorId=" + sensorId + "time=" + time + ", requestId=" + requestId
+ ")";
mRingBuffer.addApiCall(lockedOutStr);
- mTimedLockouts.add(new Pair<>(biometricStrength, time));
+ mAuthResultCoordinator.lockOutTimed(biometricStrength);
attemptToFinish(userId, sensorId, lockedOutStr);
}
@@ -202,9 +187,8 @@
// Lockouts cannot be reset by non-strong biometrics
return;
}
- mMultiBiometricLockoutState.setAuthenticatorTo(userId, biometricStrength,
- true /*canAuthenticate */);
- mMultiBiometricLockoutState.clearLockoutTime(userId, biometricStrength);
+ mMultiBiometricLockoutState.clearPermanentLockOut(userId, biometricStrength);
+ mMultiBiometricLockoutState.clearTimedLockout(userId, biometricStrength);
}
private void attemptToFinish(int userId, int sensorId, String description) {
@@ -221,7 +205,7 @@
return;
}
mAuthOperations.remove(sensorId);
- if (mIsAuthenticating && mAuthOperations.isEmpty()) {
+ if (mIsAuthenticating) {
endAuthSession();
}
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/MultiBiometricLockoutState.java b/services/core/java/com/android/server/biometrics/sensors/MultiBiometricLockoutState.java
index c24a989..45933fe 100644
--- a/services/core/java/com/android/server/biometrics/sensors/MultiBiometricLockoutState.java
+++ b/services/core/java/com/android/server/biometrics/sensors/MultiBiometricLockoutState.java
@@ -50,10 +50,11 @@
private Map<Integer, AuthenticatorState> createUnlockedMap() {
Map<Integer, AuthenticatorState> lockOutMap = new HashMap<>();
lockOutMap.put(BIOMETRIC_STRONG,
- new AuthenticatorState(BIOMETRIC_STRONG, false, 0, mClock));
- lockOutMap.put(BIOMETRIC_WEAK, new AuthenticatorState(BIOMETRIC_WEAK, false, 0, mClock));
+ new AuthenticatorState(BIOMETRIC_STRONG, false, false));
+ lockOutMap.put(BIOMETRIC_WEAK,
+ new AuthenticatorState(BIOMETRIC_WEAK, false, false));
lockOutMap.put(BIOMETRIC_CONVENIENCE,
- new AuthenticatorState(BIOMETRIC_CONVENIENCE, false, 0, mClock));
+ new AuthenticatorState(BIOMETRIC_CONVENIENCE, false, false));
return lockOutMap;
}
@@ -64,54 +65,71 @@
return mCanUserAuthenticate.get(userId);
}
- void setAuthenticatorTo(int userId, @Authenticators.Types int strength, boolean canAuth) {
+ void setPermanentLockOut(int userId, @Authenticators.Types int strength) {
final Map<Integer, AuthenticatorState> authMap = getAuthMapForUser(userId);
switch (strength) {
case Authenticators.BIOMETRIC_STRONG:
- authMap.get(BIOMETRIC_STRONG).mPermanentlyLockedOut = !canAuth;
+ authMap.get(BIOMETRIC_STRONG).mPermanentlyLockedOut = true;
// fall through
case Authenticators.BIOMETRIC_WEAK:
- authMap.get(BIOMETRIC_WEAK).mPermanentlyLockedOut = !canAuth;
+ authMap.get(BIOMETRIC_WEAK).mPermanentlyLockedOut = true;
// fall through
case Authenticators.BIOMETRIC_CONVENIENCE:
- authMap.get(BIOMETRIC_CONVENIENCE).mPermanentlyLockedOut = !canAuth;
+ authMap.get(BIOMETRIC_CONVENIENCE).mPermanentlyLockedOut = true;
return;
default:
Slog.e(TAG, "increaseLockoutTime called for invalid strength : " + strength);
}
}
- void increaseLockoutTime(int userId, @Authenticators.Types int strength, long duration) {
+ void clearPermanentLockOut(int userId, @Authenticators.Types int strength) {
final Map<Integer, AuthenticatorState> authMap = getAuthMapForUser(userId);
switch (strength) {
case Authenticators.BIOMETRIC_STRONG:
- authMap.get(BIOMETRIC_STRONG).increaseLockoutTo(duration);
+ authMap.get(BIOMETRIC_STRONG).mPermanentlyLockedOut = false;
// fall through
case Authenticators.BIOMETRIC_WEAK:
- authMap.get(BIOMETRIC_WEAK).increaseLockoutTo(duration);
+ authMap.get(BIOMETRIC_WEAK).mPermanentlyLockedOut = false;
// fall through
case Authenticators.BIOMETRIC_CONVENIENCE:
- authMap.get(BIOMETRIC_CONVENIENCE).increaseLockoutTo(duration);
+ authMap.get(BIOMETRIC_CONVENIENCE).mPermanentlyLockedOut = false;
return;
default:
Slog.e(TAG, "increaseLockoutTime called for invalid strength : " + strength);
}
}
- void clearLockoutTime(int userId, @Authenticators.Types int strength) {
+ void setTimedLockout(int userId, @Authenticators.Types int strength) {
final Map<Integer, AuthenticatorState> authMap = getAuthMapForUser(userId);
switch (strength) {
case Authenticators.BIOMETRIC_STRONG:
- authMap.get(BIOMETRIC_STRONG).setTimedLockout(0);
+ authMap.get(BIOMETRIC_STRONG).mTimedLockout = true;
// fall through
case Authenticators.BIOMETRIC_WEAK:
- authMap.get(BIOMETRIC_WEAK).setTimedLockout(0);
+ authMap.get(BIOMETRIC_WEAK).mTimedLockout = true;
// fall through
case Authenticators.BIOMETRIC_CONVENIENCE:
- authMap.get(BIOMETRIC_CONVENIENCE).setTimedLockout(0);
+ authMap.get(BIOMETRIC_CONVENIENCE).mTimedLockout = true;
return;
default:
- Slog.e(TAG, "clearLockoutTime called for invalid strength : " + strength);
+ Slog.e(TAG, "increaseLockoutTime called for invalid strength : " + strength);
+ }
+ }
+
+ void clearTimedLockout(int userId, @Authenticators.Types int strength) {
+ final Map<Integer, AuthenticatorState> authMap = getAuthMapForUser(userId);
+ switch (strength) {
+ case Authenticators.BIOMETRIC_STRONG:
+ authMap.get(BIOMETRIC_STRONG).mTimedLockout = false;
+ // fall through
+ case Authenticators.BIOMETRIC_WEAK:
+ authMap.get(BIOMETRIC_WEAK).mTimedLockout = false;
+ // fall through
+ case Authenticators.BIOMETRIC_CONVENIENCE:
+ authMap.get(BIOMETRIC_CONVENIENCE).mTimedLockout = false;
+ return;
+ default:
+ Slog.e(TAG, "increaseLockoutTime called for invalid strength : " + strength);
}
}
@@ -132,7 +150,7 @@
final AuthenticatorState state = authMap.get(strength);
if (state.mPermanentlyLockedOut) {
return LockoutTracker.LOCKOUT_PERMANENT;
- } else if (state.isTimedLockout()) {
+ } else if (state.mTimedLockout) {
return LockoutTracker.LOCKOUT_TIMED;
} else {
return LockoutTracker.LOCKOUT_NONE;
@@ -158,43 +176,21 @@
private static class AuthenticatorState {
private Integer mAuthenticatorType;
private boolean mPermanentlyLockedOut;
- private long mTimedLockout;
- private Clock mClock;
+ private boolean mTimedLockout;
AuthenticatorState(Integer authenticatorId, boolean permanentlyLockedOut,
- long timedLockout, Clock clock) {
+ boolean timedLockout) {
mAuthenticatorType = authenticatorId;
mPermanentlyLockedOut = permanentlyLockedOut;
mTimedLockout = timedLockout;
- mClock = clock;
- }
-
- boolean canAuthenticate() {
- return !mPermanentlyLockedOut && !isTimedLockout();
- }
-
- boolean isTimedLockout() {
- return mClock.millis() - mTimedLockout < 0;
- }
-
- void setTimedLockout(long duration) {
- mTimedLockout = duration;
- }
-
- /**
- * Either increases the lockout to duration, or leaves it as it, whichever is longer.
- */
- void increaseLockoutTo(long duration) {
- mTimedLockout = Math.max(mTimedLockout, duration);
}
String toString(long currentTime) {
- final String duration =
- mTimedLockout - currentTime > 0 ? (mTimedLockout - currentTime) + "ms" : "none";
+ final String timedLockout = mTimedLockout ? "true" : "false";
final String permanentLockout = mPermanentlyLockedOut ? "true" : "false";
- return String.format("(%s, permanentLockout=%s, timedLockoutRemaining=%s)",
+ return String.format("(%s, permanentLockout=%s, timedLockout=%s)",
BiometricManager.authenticatorToStr(mAuthenticatorType), permanentLockout,
- duration);
+ timedLockout);
}
}
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java
index 759c52a..1a12fcd 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient.java
@@ -28,6 +28,7 @@
import com.android.server.biometrics.HardwareAuthTokenUtils;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
+import com.android.server.biometrics.sensors.AuthSessionCoordinator;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ErrorConsumer;
import com.android.server.biometrics.sensors.HalClientMonitor;
@@ -88,10 +89,9 @@
void onLockoutCleared() {
resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
- mLockoutResetDispatcher);
+ mLockoutResetDispatcher, getBiometricContext().getAuthSessionCoordinator(),
+ mBiometricStrength, getRequestId());
mCallback.onClientFinished(this, true /* success */);
- getBiometricContext().getAuthSessionCoordinator()
- .resetLockoutFor(getTargetUserId(), mBiometricStrength, getRequestId());
}
public boolean interruptsPrecedingClients() {
@@ -108,7 +108,10 @@
*/
static void resetLocalLockoutStateToNone(int sensorId, int userId,
@NonNull LockoutCache lockoutTracker,
- @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
+ @NonNull LockoutResetDispatcher lockoutResetDispatcher,
+ @NonNull AuthSessionCoordinator authSessionCoordinator,
+ @Authenticators.Types int biometricStrength, long requestId) {
+ authSessionCoordinator.resetLockoutFor(userId, biometricStrength, requestId);
lockoutTracker.setLockoutModeForUser(userId, LockoutTracker.LOCKOUT_NONE);
lockoutResetDispatcher.notifyLockoutResetCallbacks(sensorId);
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java
index 0d30ddd..468bf55 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java
@@ -54,6 +54,7 @@
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
+import com.android.server.biometrics.sensors.AuthSessionCoordinator;
import com.android.server.biometrics.sensors.AuthenticationConsumer;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricScheduler;
@@ -127,6 +128,9 @@
private final LockoutCache mLockoutCache;
@NonNull
private final LockoutResetDispatcher mLockoutResetDispatcher;
+
+ @NonNull
+ private AuthSessionCoordinator mAuthSessionCoordinator;
@NonNull
private final Callback mCallback;
@@ -134,6 +138,7 @@
@NonNull UserAwareBiometricScheduler scheduler, int sensorId, int userId,
@NonNull LockoutCache lockoutTracker,
@NonNull LockoutResetDispatcher lockoutResetDispatcher,
+ @NonNull AuthSessionCoordinator authSessionCoordinator,
@NonNull Callback callback) {
mContext = context;
mHandler = handler;
@@ -143,6 +148,7 @@
mUserId = userId;
mLockoutCache = lockoutTracker;
mLockoutResetDispatcher = lockoutResetDispatcher;
+ mAuthSessionCoordinator = authSessionCoordinator;
mCallback = callback;
}
@@ -346,8 +352,12 @@
final BaseClientMonitor client = mScheduler.getCurrentClient();
if (!(client instanceof FaceResetLockoutClient)) {
Slog.d(mTag, "onLockoutCleared outside of resetLockout by HAL");
+ // Given that onLockoutCleared() can happen at any time, and is not necessarily
+ // coming from a specific client, set this to -1 to indicate it wasn't for a
+ // specific request.
FaceResetLockoutClient.resetLocalLockoutStateToNone(mSensorId, mUserId,
- mLockoutCache, mLockoutResetDispatcher);
+ mLockoutCache, mLockoutResetDispatcher, mAuthSessionCoordinator,
+ Utils.getCurrentStrength(mSensorId), -1 /* requestId */);
} else {
Slog.d(mTag, "onLockoutCleared after resetLockout");
final FaceResetLockoutClient resetLockoutClient =
@@ -514,7 +524,8 @@
final HalSessionCallback resultController = new HalSessionCallback(mContext,
mHandler, mTag, mScheduler, sensorId, newUserId, mLockoutCache,
- lockoutResetDispatcher, () -> {
+ lockoutResetDispatcher,
+ biometricContext.getAuthSessionCoordinator(), () -> {
Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE");
mCurrentSession = null;
});
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java
index 0b2421b..7a62034 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient.java
@@ -28,6 +28,7 @@
import com.android.server.biometrics.HardwareAuthTokenUtils;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
+import com.android.server.biometrics.sensors.AuthSessionCoordinator;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ErrorConsumer;
import com.android.server.biometrics.sensors.HalClientMonitor;
@@ -92,10 +93,9 @@
void onLockoutCleared() {
resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
- mLockoutResetDispatcher);
+ mLockoutResetDispatcher, getBiometricContext().getAuthSessionCoordinator(),
+ mBiometricStrength, getRequestId());
mCallback.onClientFinished(this, true /* success */);
- getBiometricContext().getAuthSessionCoordinator()
- .resetLockoutFor(getTargetUserId(), mBiometricStrength, getRequestId());
}
/**
@@ -108,9 +108,12 @@
*/
static void resetLocalLockoutStateToNone(int sensorId, int userId,
@NonNull LockoutCache lockoutTracker,
- @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
+ @NonNull LockoutResetDispatcher lockoutResetDispatcher,
+ @NonNull AuthSessionCoordinator authSessionCoordinator,
+ @Authenticators.Types int biometricStrength, long requestId) {
lockoutTracker.setLockoutModeForUser(userId, LockoutTracker.LOCKOUT_NONE);
lockoutResetDispatcher.notifyLockoutResetCallbacks(sensorId);
+ authSessionCoordinator.resetLockoutFor(userId, biometricStrength, requestId);
}
@Override
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java
index 1dcf4e9..22ca816 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java
@@ -52,6 +52,7 @@
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.sensors.AcquisitionClient;
+import com.android.server.biometrics.sensors.AuthSessionCoordinator;
import com.android.server.biometrics.sensors.AuthenticationConsumer;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricScheduler;
@@ -131,12 +132,15 @@
@NonNull
private final LockoutResetDispatcher mLockoutResetDispatcher;
@NonNull
+ private AuthSessionCoordinator mAuthSessionCoordinator;
+ @NonNull
private final Callback mCallback;
HalSessionCallback(@NonNull Context context, @NonNull Handler handler, @NonNull String tag,
@NonNull UserAwareBiometricScheduler scheduler, int sensorId, int userId,
@NonNull LockoutCache lockoutTracker,
@NonNull LockoutResetDispatcher lockoutResetDispatcher,
+ @NonNull AuthSessionCoordinator authSessionCoordinator,
@NonNull Callback callback) {
mContext = context;
mHandler = handler;
@@ -146,6 +150,7 @@
mUserId = userId;
mLockoutCache = lockoutTracker;
mLockoutResetDispatcher = lockoutResetDispatcher;
+ mAuthSessionCoordinator = authSessionCoordinator;
mCallback = callback;
}
@@ -327,8 +332,12 @@
final BaseClientMonitor client = mScheduler.getCurrentClient();
if (!(client instanceof FingerprintResetLockoutClient)) {
Slog.d(mTag, "onLockoutCleared outside of resetLockout by HAL");
+ // Given that onLockoutCleared() can happen at any time, and is not necessarily
+ // coming from a specific client, set this to -1 to indicate it wasn't for a
+ // specific request.
FingerprintResetLockoutClient.resetLocalLockoutStateToNone(mSensorId, mUserId,
- mLockoutCache, mLockoutResetDispatcher);
+ mLockoutCache, mLockoutResetDispatcher, mAuthSessionCoordinator,
+ Utils.getCurrentStrength(mSensorId), -1 /* requestId */);
} else {
Slog.d(mTag, "onLockoutCleared after resetLockout");
final FingerprintResetLockoutClient resetLockoutClient =
@@ -470,7 +479,8 @@
final HalSessionCallback resultController = new HalSessionCallback(mContext,
mHandler, mTag, mScheduler, sensorId, newUserId, mLockoutCache,
- lockoutResetDispatcher, () -> {
+ lockoutResetDispatcher,
+ biometricContext.getAuthSessionCoordinator(), () -> {
Slog.e(mTag, "Got ERROR_HW_UNAVAILABLE");
mCurrentSession = null;
});
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java
index a0befea..36d56c8 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl.java
@@ -24,6 +24,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
import android.util.Slog;
import android.util.SparseBooleanArray;
@@ -69,6 +71,7 @@
private final SparseIntArray mFailedAttempts;
private final AlarmManager mAlarmManager;
private final LockoutReceiver mLockoutReceiver;
+ private final Handler mHandler;
public LockoutFrameworkImpl(Context context, LockoutResetCallback lockoutResetCallback) {
mContext = context;
@@ -77,6 +80,7 @@
mFailedAttempts = new SparseIntArray();
mAlarmManager = context.getSystemService(AlarmManager.class);
mLockoutReceiver = new LockoutReceiver();
+ mHandler = new Handler(Looper.getMainLooper());
context.registerReceiver(mLockoutReceiver, new IntentFilter(ACTION_LOCKOUT_RESET),
RESET_FINGERPRINT_LOCKOUT, null /* handler */, Context.RECEIVER_EXPORTED);
@@ -127,9 +131,11 @@
}
private void scheduleLockoutResetForUser(int userId) {
- mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
+ mHandler.post(() -> {
+ mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + FAIL_LOCKOUT_TIMEOUT_MS,
getLockoutResetIntentForUser(userId));
+ });
}
private PendingIntent getLockoutResetIntentForUser(int userId) {
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 0f17139..1dc2725 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -152,6 +152,7 @@
import com.android.internal.net.VpnProfile;
import com.android.modules.utils.build.SdkLevel;
import com.android.net.module.util.BinderUtils;
+import com.android.net.module.util.LinkPropertiesUtils;
import com.android.net.module.util.NetdUtils;
import com.android.net.module.util.NetworkStackConstants;
import com.android.server.DeviceIdleInternal;
@@ -230,7 +231,35 @@
* <p>If retries have exceeded the length of this array, the last entry in the array will be
* used as a repeating interval.
*/
- private static final long[] IKEV2_VPN_RETRY_DELAYS_SEC = {1L, 2L, 5L, 30L, 60L, 300L, 900L};
+ private static final long[] IKEV2_VPN_RETRY_DELAYS_MS =
+ {1_000L, 2_000L, 5_000L, 30_000L, 60_000L, 300_000L, 900_000L};
+
+ /**
+ * A constant to pass to {@link IkeV2VpnRunner#scheduleStartIkeSession(long)} to mean the
+ * delay should be computed automatically with backoff.
+ */
+ private static final long RETRY_DELAY_AUTO_BACKOFF = -1;
+
+ /**
+ * How long to wait before trying to migrate the IKE connection when NetworkCapabilities or
+ * LinkProperties change in a way that may require migration.
+ *
+ * This delay is useful to avoid multiple migration tries (e.g. when a network changes
+ * both its NC and LP at the same time, e.g. when it first connects) and to minimize the
+ * cases where an old list of addresses is detected for the network.
+ *
+ * In practice, the IKE library reads the LinkProperties of the passed network with
+ * the synchronous {@link ConnectivityManager#getLinkProperties(Network)}, which means in
+ * most cases the race would resolve correctly, but this delay increases the chance that
+ * it correctly is.
+ * Further, using the synchronous method in the IKE library is actually dangerous because
+ * it is racy (it races with {@code IkeNetworkCallbackBase#onLost} and it should be fixed
+ * by using callbacks instead. When that happens, the race within IKE is fixed but the
+ * race between that callback and the one in IkeV2VpnRunner becomes a much bigger problem,
+ * and this delay will be necessary to ensure the correct link address list is used.
+ */
+ private static final long IKE_DELAY_ON_NC_LP_CHANGE_MS = 300;
+
/**
* Largest profile size allowable for Platform VPNs.
*
@@ -619,14 +648,14 @@
/**
* Retrieves the next retry delay
*
- * <p>If retries have exceeded the IKEV2_VPN_RETRY_DELAYS_SEC, the last entry in
+ * <p>If retries have exceeded the size of IKEV2_VPN_RETRY_DELAYS_MS, the last entry in
* the array will be used as a repeating interval.
*/
- public long getNextRetryDelaySeconds(int retryCount) {
- if (retryCount >= IKEV2_VPN_RETRY_DELAYS_SEC.length) {
- return IKEV2_VPN_RETRY_DELAYS_SEC[IKEV2_VPN_RETRY_DELAYS_SEC.length - 1];
+ public long getNextRetryDelayMs(int retryCount) {
+ if (retryCount >= IKEV2_VPN_RETRY_DELAYS_MS.length) {
+ return IKEV2_VPN_RETRY_DELAYS_MS[IKEV2_VPN_RETRY_DELAYS_MS.length - 1];
} else {
- return IKEV2_VPN_RETRY_DELAYS_SEC[retryCount];
+ return IKEV2_VPN_RETRY_DELAYS_MS[retryCount];
}
}
@@ -679,6 +708,14 @@
boolean isIpv4) {
return MtuUtils.getMtu(childProposals, maxMtu, underlyingMtu, isIpv4);
}
+
+ /** Verify the binder calling UID is the one passed in arguments */
+ public void verifyCallingUidAndPackage(Context context, String packageName, int userId) {
+ final int callingUid = Binder.getCallingUid();
+ if (getAppUid(context, packageName, userId) != callingUid) {
+ throw new SecurityException(packageName + " does not belong to uid " + callingUid);
+ }
+ }
}
@VisibleForTesting
@@ -726,7 +763,7 @@
mUserManager = mContext.getSystemService(UserManager.class);
mPackage = VpnConfig.LEGACY_VPN;
- mOwnerUID = getAppUid(mPackage, mUserId);
+ mOwnerUID = getAppUid(mContext, mPackage, mUserId);
mIsPackageTargetingAtLeastQ = doesPackageTargetAtLeastQ(mPackage);
try {
@@ -823,7 +860,7 @@
}
/**
- * Chooses whether to force all connections to go though VPN.
+ * Chooses whether to force all connections to go through VPN.
*
* Used to enable/disable legacy VPN lockdown.
*
@@ -831,7 +868,7 @@
* {@link #setAlwaysOnPackage(String, boolean, List<String>)}; previous settings from calling
* that function will be replaced and saved with the always-on state.
*
- * @param lockdown whether to prevent all traffic outside of a VPN.
+ * @param lockdown whether to prevent all traffic outside of the VPN.
*/
public synchronized void setLockdown(boolean lockdown) {
enforceControlPermissionOrInternalCaller();
@@ -1108,6 +1145,7 @@
mAlwaysOn = false;
}
+ final boolean oldLockdownState = mLockdown;
mLockdown = (mAlwaysOn && lockdown);
mLockdownAllowlist = (mLockdown && lockdownAllowlist != null)
? Collections.unmodifiableList(new ArrayList<>(lockdownAllowlist))
@@ -1118,6 +1156,13 @@
if (isCurrentPreparedPackage(packageName)) {
updateAlwaysOnNotification(mNetworkInfo.getDetailedState());
setVpnForcedLocked(mLockdown);
+
+ // Lockdown forces the VPN to be non-bypassable (see #agentConnect) because it makes
+ // no sense for a VPN to be bypassable when connected but not when not connected.
+ // As such, changes in lockdown need to restart the agent.
+ if (mNetworkAgent != null && oldLockdownState != mLockdown) {
+ startNewNetworkAgent(mNetworkAgent, "Lockdown mode changed");
+ }
} else {
// Prepare this app. The notification will update as a side-effect of updateState().
// It also calls setVpnForcedLocked().
@@ -1355,7 +1400,8 @@
// We can't just check that packageName matches mPackage, because if the app was uninstalled
// and reinstalled it will no longer be prepared. Similarly if there is a shared UID, the
// calling package may not be the same as the prepared package. Check both UID and package.
- return getAppUid(packageName, mUserId) == mOwnerUID && mPackage.equals(packageName);
+ return getAppUid(mContext, packageName, mUserId) == mOwnerUID
+ && mPackage.equals(packageName);
}
/** Prepare the VPN for the given package. Does not perform permission checks. */
@@ -1396,7 +1442,7 @@
Log.i(TAG, "Switched from " + mPackage + " to " + newPackage);
mPackage = newPackage;
- mOwnerUID = getAppUid(newPackage, mUserId);
+ mOwnerUID = getAppUid(mContext, newPackage, mUserId);
mIsPackageTargetingAtLeastQ = doesPackageTargetAtLeastQ(newPackage);
try {
mNms.allowProtect(mOwnerUID);
@@ -1417,7 +1463,7 @@
// Check if the caller is authorized.
enforceControlPermissionOrInternalCaller();
- final int uid = getAppUid(packageName, mUserId);
+ final int uid = getAppUid(mContext, packageName, mUserId);
if (uid == -1 || VpnConfig.LEGACY_VPN.equals(packageName)) {
// Authorization for nonexistent packages (or fake ones) can't be updated.
return false;
@@ -1497,11 +1543,11 @@
|| isVpnServicePreConsented(context, packageName);
}
- private int getAppUid(final String app, final int userId) {
+ private static int getAppUid(final Context context, final String app, final int userId) {
if (VpnConfig.LEGACY_VPN.equals(app)) {
return Process.myUid();
}
- PackageManager pm = mContext.getPackageManager();
+ PackageManager pm = context.getPackageManager();
final long token = Binder.clearCallingIdentity();
try {
return pm.getPackageUidAsUser(app, userId);
@@ -1630,6 +1676,10 @@
*/
private boolean updateLinkPropertiesInPlaceIfPossible(NetworkAgent agent, VpnConfig oldConfig) {
// NetworkAgentConfig cannot be updated without registering a new NetworkAgent.
+ // Strictly speaking, bypassability is affected by lockdown and therefore it's possible
+ // it doesn't actually change even if mConfig.allowBypass changed. It might be theoretically
+ // possible to do handover in this case, but this is far from obvious to VPN authors and
+ // it's simpler if the rule is just "can't update in place if you change allow bypass".
if (oldConfig.allowBypass != mConfig.allowBypass) {
Log.i(TAG, "Handover not possible due to changes to allowBypass");
return false;
@@ -1671,10 +1721,11 @@
mLegacyState = LegacyVpnInfo.STATE_CONNECTING;
updateState(DetailedState.CONNECTING, "agentConnect");
+ final boolean bypassable = mConfig.allowBypass && !mLockdown;
final NetworkAgentConfig networkAgentConfig = new NetworkAgentConfig.Builder()
.setLegacyType(ConnectivityManager.TYPE_VPN)
.setLegacyTypeName("VPN")
- .setBypassableVpn(mConfig.allowBypass && !mLockdown)
+ .setBypassableVpn(bypassable)
.setVpnRequiresValidation(mConfig.requiresInternetValidation)
.setLocalRoutesExcludedForVpn(mConfig.excludeLocalRoutes)
.build();
@@ -1688,7 +1739,7 @@
capsBuilder.setTransportInfo(new VpnTransportInfo(
getActiveVpnType(),
mConfig.session,
- mConfig.allowBypass,
+ bypassable,
expensive));
// Only apps targeting Q and above can explicitly declare themselves as metered.
@@ -1719,6 +1770,10 @@
Binder.restoreCallingIdentity(token);
}
updateState(DetailedState.CONNECTED, "agentConnect");
+ if (isIkev2VpnRunner()) {
+ final IkeSessionWrapper session = ((IkeV2VpnRunner) mVpnRunner).mSession;
+ if (null != session) session.setUnderpinnedNetwork(mNetworkAgent.getNetwork());
+ }
}
private static boolean areLongLivedTcpConnectionsExpensive(@NonNull VpnRunner runner) {
@@ -1913,7 +1968,7 @@
private SortedSet<Integer> getAppsUids(List<String> packageNames, int userId) {
SortedSet<Integer> uids = new TreeSet<>();
for (String app : packageNames) {
- int uid = getAppUid(app, userId);
+ int uid = getAppUid(mContext, app, userId);
if (uid != -1) uids.add(uid);
// TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
// ConnectivityServiceTest.
@@ -3232,7 +3287,6 @@
prepareStatusIntent();
}
agentConnect(this::onValidationStatus);
- mSession.setUnderpinnedNetwork(mNetworkAgent.getNetwork());
return; // Link properties are already sent.
} else {
// Underlying networks also set in agentConnect()
@@ -3349,7 +3403,6 @@
if (!removedAddrs.isEmpty()) {
startNewNetworkAgent(
mNetworkAgent, "MTU too low for IPv6; restarting network agent");
- mSession.setUnderpinnedNetwork(mNetworkAgent.getNetwork());
for (LinkAddress removed : removedAddrs) {
mTunnelIface.removeAddress(
@@ -3628,7 +3681,7 @@
final VpnTransportInfo info = new VpnTransportInfo(
getActiveVpnType(),
mConfig.session,
- mConfig.allowBypass,
+ mConfig.allowBypass && !mLockdown,
areLongLivedTcpConnectionsExpensive(keepaliveDelaySec));
final boolean ncUpdateRequired = !info.equals(mNetworkCapabilities.getTransportInfo());
if (ncUpdateRequired) {
@@ -3718,13 +3771,20 @@
}
}
- private void scheduleRetryNewIkeSession() {
+ /**
+ * Schedule starting an IKE session.
+ * @param delayMs the delay after which to try starting the session. This should be
+ * RETRY_DELAY_AUTO_BACKOFF for automatic retries with backoff.
+ */
+ private void scheduleStartIkeSession(final long delayMs) {
if (mScheduledHandleRetryIkeSessionFuture != null) {
Log.d(TAG, "There is a pending retrying task, skip the new retrying task");
return;
}
- final long retryDelay = mDeps.getNextRetryDelaySeconds(mRetryCount++);
- Log.d(TAG, "Retry new IKE session after " + retryDelay + " seconds.");
+ final long retryDelayMs = RETRY_DELAY_AUTO_BACKOFF != delayMs
+ ? delayMs
+ : mDeps.getNextRetryDelayMs(mRetryCount++);
+ Log.d(TAG, "Retry new IKE session after " + retryDelayMs + " milliseconds.");
// If the default network is lost during the retry delay, the mActiveNetwork will be
// null, and the new IKE session won't be established until there is a new default
// network bringing up.
@@ -3735,7 +3795,7 @@
// Reset mScheduledHandleRetryIkeSessionFuture since it's already run on
// executor thread.
mScheduledHandleRetryIkeSessionFuture = null;
- }, retryDelay, TimeUnit.SECONDS);
+ }, retryDelayMs, TimeUnit.MILLISECONDS);
}
/** Called when the NetworkCapabilities of underlying network is changed */
@@ -3744,20 +3804,26 @@
+ mUnderlyingNetworkCapabilities + " to " + nc);
final NetworkCapabilities oldNc = mUnderlyingNetworkCapabilities;
mUnderlyingNetworkCapabilities = nc;
- if (oldNc == null) {
- // A new default network is available.
- startOrMigrateIkeSession(mActiveNetwork);
- } else if (!nc.getSubscriptionIds().equals(oldNc.getSubscriptionIds())) {
- // Renew carrierConfig values.
- maybeMigrateIkeSessionAndUpdateVpnTransportInfo(mActiveNetwork);
+ if (oldNc == null || !nc.getSubscriptionIds().equals(oldNc.getSubscriptionIds())) {
+ // A new default network is available, or the subscription has changed.
+ // Try to migrate the session, or failing that, start a new one.
+ scheduleStartIkeSession(IKE_DELAY_ON_NC_LP_CHANGE_MS);
}
}
/** Called when the LinkProperties of underlying network is changed */
public void onDefaultNetworkLinkPropertiesChanged(@NonNull LinkProperties lp) {
- mEventChanges.log("[UnderlyingNW] Lp changed from "
- + mUnderlyingLinkProperties + " to " + lp);
+ final LinkProperties oldLp = mUnderlyingLinkProperties;
+ mEventChanges.log("[UnderlyingNW] Lp changed from " + oldLp + " to " + lp);
mUnderlyingLinkProperties = lp;
+ if (oldLp == null || !LinkPropertiesUtils.isIdenticalAllLinkAddresses(oldLp, lp)) {
+ // If some of the link addresses changed, the IKE session may need to be migrated
+ // or restarted, for example if the available IP families have changed or if the
+ // source address used has gone away. See IkeConnectionController#onNetworkSetByUser
+ // and IkeConnectionController#selectAndSetRemoteAddress for where this ends up
+ // re-evaluating the session.
+ scheduleStartIkeSession(IKE_DELAY_ON_NC_LP_CHANGE_MS);
+ }
}
class VpnConnectivityDiagnosticsCallback
@@ -4035,7 +4101,7 @@
markFailedAndDisconnect(exception);
return;
} else {
- scheduleRetryNewIkeSession();
+ scheduleStartIkeSession(RETRY_DELAY_AUTO_BACKOFF);
}
// Close all obsolete state, but keep VPN alive incase a usable network comes up.
@@ -4472,10 +4538,7 @@
}
private void verifyCallingUidAndPackage(String packageName) {
- final int callingUid = Binder.getCallingUid();
- if (getAppUid(packageName, mUserId) != callingUid) {
- throw new SecurityException(packageName + " does not belong to uid " + callingUid);
- }
+ mDeps.verifyCallingUidAndPackage(mContext, packageName, mUserId);
}
@VisibleForTesting
diff --git a/services/core/java/com/android/server/devicestate/DeviceStateNotificationController.java b/services/core/java/com/android/server/devicestate/DeviceStateNotificationController.java
index ab261ac..f4c84e7 100644
--- a/services/core/java/com/android/server/devicestate/DeviceStateNotificationController.java
+++ b/services/core/java/com/android/server/devicestate/DeviceStateNotificationController.java
@@ -37,8 +37,11 @@
import android.util.SparseArray;
import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import java.util.Locale;
+
/**
* Manages the user-visible device state notifications.
*/
@@ -56,15 +59,14 @@
private final NotificationManager mNotificationManager;
private final PackageManager mPackageManager;
- // Stores the notification title and content indexed with the device state identifier.
- private final SparseArray<NotificationInfo> mNotificationInfos;
-
// The callback when a device state is requested to be canceled.
private final Runnable mCancelStateRunnable;
+ private final NotificationInfoProvider mNotificationInfoProvider;
+
DeviceStateNotificationController(@NonNull Context context, @NonNull Handler handler,
@NonNull Runnable cancelStateRunnable) {
- this(context, handler, cancelStateRunnable, getNotificationInfos(context),
+ this(context, handler, cancelStateRunnable, new NotificationInfoProvider(context),
context.getPackageManager(), context.getSystemService(NotificationManager.class));
}
@@ -72,13 +74,13 @@
DeviceStateNotificationController(
@NonNull Context context, @NonNull Handler handler,
@NonNull Runnable cancelStateRunnable,
- @NonNull SparseArray<NotificationInfo> notificationInfos,
+ @NonNull NotificationInfoProvider notificationInfoProvider,
@NonNull PackageManager packageManager,
@NonNull NotificationManager notificationManager) {
mContext = context;
mHandler = handler;
mCancelStateRunnable = cancelStateRunnable;
- mNotificationInfos = notificationInfos;
+ mNotificationInfoProvider = notificationInfoProvider;
mPackageManager = packageManager;
mNotificationManager = notificationManager;
mContext.registerReceiver(
@@ -97,7 +99,7 @@
* @param requestingAppUid the uid of the requesting app used to retrieve the app name.
*/
void showStateActiveNotificationIfNeeded(int state, int requestingAppUid) {
- NotificationInfo info = mNotificationInfos.get(state);
+ NotificationInfo info = getNotificationInfos().get(state);
if (info == null || !info.hasActiveNotification()) {
return;
}
@@ -127,7 +129,7 @@
* @param state the identifier of the device state being canceled.
*/
void showThermalCriticalNotificationIfNeeded(int state) {
- NotificationInfo info = mNotificationInfos.get(state);
+ NotificationInfo info = getNotificationInfos().get(state);
if (info == null || !info.hasThermalCriticalNotification()) {
return;
}
@@ -148,7 +150,7 @@
* @param state the identifier of the device state being canceled.
*/
void showPowerSaveNotificationIfNeeded(int state) {
- NotificationInfo info = mNotificationInfos.get(state);
+ NotificationInfo info = getNotificationInfos().get(state);
if (info == null || !info.hasPowerSaveModeNotification()) {
return;
}
@@ -170,7 +172,7 @@
* @param state the device state identifier.
*/
void cancelNotification(int state) {
- if (!mNotificationInfos.contains(state)) {
+ if (getNotificationInfos().get(state) == null) {
return;
}
mNotificationManager.cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
@@ -221,69 +223,121 @@
mNotificationManager.notify(NOTIFICATION_TAG, NOTIFICATION_ID, builder.build());
}
- /**
- * Loads the resources for the notifications. The device state identifiers and strings are
- * stored in arrays. All the string arrays must have the same length and same order as the
- * identifier array.
- */
- private static SparseArray<NotificationInfo> getNotificationInfos(Context context) {
- final SparseArray<NotificationInfo> notificationInfos = new SparseArray<>();
+ private SparseArray<NotificationInfo> getNotificationInfos() {
+ Locale locale = mContext.getResources().getConfiguration().getLocales().get(0);
+ return mNotificationInfoProvider.getNotificationInfos(locale);
+ }
- final int[] stateIdentifiers =
- context.getResources().getIntArray(
- R.array.device_state_notification_state_identifiers);
- final String[] names =
- context.getResources().getStringArray(R.array.device_state_notification_names);
- final String[] activeNotificationTitles =
- context.getResources().getStringArray(
- R.array.device_state_notification_active_titles);
- final String[] activeNotificationContents =
- context.getResources().getStringArray(
- R.array.device_state_notification_active_contents);
- final String[] thermalCriticalNotificationTitles =
- context.getResources().getStringArray(
- R.array.device_state_notification_thermal_titles);
- final String[] thermalCriticalNotificationContents =
- context.getResources().getStringArray(
- R.array.device_state_notification_thermal_contents);
- final String[] powerSaveModeNotificationTitles =
- context.getResources().getStringArray(
- R.array.device_state_notification_power_save_titles);
- final String[] powerSaveModeNotificationContents =
- context.getResources().getStringArray(
- R.array.device_state_notification_power_save_contents);
+ @VisibleForTesting
+ public static class NotificationInfoProvider {
+ @NonNull
+ private final Context mContext;
+ private final Object mLock = new Object();
+ @GuardedBy("mLock")
+ @Nullable
+ private SparseArray<NotificationInfo> mCachedNotificationInfos;
- if (stateIdentifiers.length != names.length
- || stateIdentifiers.length != activeNotificationTitles.length
- || stateIdentifiers.length != activeNotificationContents.length
- || stateIdentifiers.length != thermalCriticalNotificationTitles.length
- || stateIdentifiers.length != thermalCriticalNotificationContents.length
- || stateIdentifiers.length != powerSaveModeNotificationTitles.length
- || stateIdentifiers.length != powerSaveModeNotificationContents.length
- ) {
- throw new IllegalStateException(
- "The length of state identifiers and notification texts must match!");
+ @GuardedBy("mLock")
+ @Nullable
+ @VisibleForTesting
+ Locale mCachedLocale;
+
+ NotificationInfoProvider(@NonNull Context context) {
+ mContext = context;
}
- for (int i = 0; i < stateIdentifiers.length; i++) {
- int identifier = stateIdentifiers[i];
- if (identifier == DeviceStateManager.INVALID_DEVICE_STATE) {
- continue;
+ /**
+ * Loads the resources for the notifications. The device state identifiers and strings are
+ * stored in arrays. All the string arrays must have the same length and same order as the
+ * identifier array.
+ */
+ @NonNull
+ public SparseArray<NotificationInfo> getNotificationInfos(@NonNull Locale locale) {
+ synchronized (mLock) {
+ if (!locale.equals(mCachedLocale)) {
+ refreshNotificationInfos(locale);
+ }
+ return mCachedNotificationInfos;
+ }
+ }
+
+
+ @VisibleForTesting
+ Locale getCachedLocale() {
+ synchronized (mLock) {
+ return mCachedLocale;
+ }
+ }
+
+ @VisibleForTesting
+ public void refreshNotificationInfos(Locale locale) {
+ synchronized (mLock) {
+ mCachedLocale = locale;
+ mCachedNotificationInfos = loadNotificationInfos();
+ }
+ }
+
+ @VisibleForTesting
+ public SparseArray<NotificationInfo> loadNotificationInfos() {
+ final SparseArray<NotificationInfo> notificationInfos = new SparseArray<>();
+
+ final int[] stateIdentifiers =
+ mContext.getResources().getIntArray(
+ R.array.device_state_notification_state_identifiers);
+ final String[] names =
+ mContext.getResources().getStringArray(R.array.device_state_notification_names);
+ final String[] activeNotificationTitles =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_active_titles);
+ final String[] activeNotificationContents =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_active_contents);
+ final String[] thermalCriticalNotificationTitles =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_thermal_titles);
+ final String[] thermalCriticalNotificationContents =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_thermal_contents);
+ final String[] powerSaveModeNotificationTitles =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_power_save_titles);
+ final String[] powerSaveModeNotificationContents =
+ mContext.getResources().getStringArray(
+ R.array.device_state_notification_power_save_contents);
+
+ if (stateIdentifiers.length != names.length
+ || stateIdentifiers.length != activeNotificationTitles.length
+ || stateIdentifiers.length != activeNotificationContents.length
+ || stateIdentifiers.length != thermalCriticalNotificationTitles.length
+ || stateIdentifiers.length != thermalCriticalNotificationContents.length
+ || stateIdentifiers.length != powerSaveModeNotificationTitles.length
+ || stateIdentifiers.length != powerSaveModeNotificationContents.length
+ ) {
+ throw new IllegalStateException(
+ "The length of state identifiers and notification texts must match!");
}
- notificationInfos.put(
- identifier,
- new NotificationInfo(
- names[i], activeNotificationTitles[i], activeNotificationContents[i],
- thermalCriticalNotificationTitles[i],
- thermalCriticalNotificationContents[i],
- powerSaveModeNotificationTitles[i],
- powerSaveModeNotificationContents[i])
- );
- }
+ for (int i = 0; i < stateIdentifiers.length; i++) {
+ int identifier = stateIdentifiers[i];
+ if (identifier == DeviceStateManager.INVALID_DEVICE_STATE) {
+ continue;
+ }
- return notificationInfos;
+ notificationInfos.put(
+ identifier,
+ new NotificationInfo(
+ names[i],
+ activeNotificationTitles[i],
+ activeNotificationContents[i],
+ thermalCriticalNotificationTitles[i],
+ thermalCriticalNotificationContents[i],
+ powerSaveModeNotificationTitles[i],
+ powerSaveModeNotificationContents[i])
+ );
+ }
+ return notificationInfos;
+ }
}
/**
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 85b4034..5d92c7f 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -119,7 +119,6 @@
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.EventLog;
import android.util.IntArray;
@@ -298,11 +297,10 @@
mDisplayWindowPolicyControllers = new SparseArray<>();
/**
- * Map of every internal primary display device {@link HighBrightnessModeMetadata}s indexed by
- * {@link DisplayDevice#mUniqueId}.
+ * Provides {@link HighBrightnessModeMetadata}s for {@link DisplayDevice}s.
*/
- public final ArrayMap<String, HighBrightnessModeMetadata> mHighBrightnessModeMetadataMap =
- new ArrayMap<>();
+ private final HighBrightnessModeMetadataMapper mHighBrightnessModeMetadataMapper =
+ new HighBrightnessModeMetadataMapper();
// List of all currently registered display adapters.
private final ArrayList<DisplayAdapter> mDisplayAdapters = new ArrayList<DisplayAdapter>();
@@ -1823,19 +1821,14 @@
DisplayPowerControllerInterface dpc = mDisplayPowerControllers.get(displayId);
if (dpc != null) {
- final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
- if (device == null) {
- Slog.wtf(TAG, "Display Device is null in DisplayManagerService for display: "
- + display.getDisplayIdLocked());
- return;
- }
-
final int leadDisplayId = display.getLeadDisplayIdLocked();
updateDisplayPowerControllerLeaderLocked(dpc, leadDisplayId);
- final String uniqueId = device.getUniqueId();
- HighBrightnessModeMetadata hbmMetadata = mHighBrightnessModeMetadataMap.get(uniqueId);
- dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
+ HighBrightnessModeMetadata hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ if (hbmMetadata != null) {
+ dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
+ }
}
}
@@ -1922,19 +1915,14 @@
final int displayId = display.getDisplayIdLocked();
final DisplayPowerControllerInterface dpc = mDisplayPowerControllers.get(displayId);
if (dpc != null) {
- final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
- if (device == null) {
- Slog.wtf(TAG, "Display Device is null in DisplayManagerService for display: "
- + display.getDisplayIdLocked());
- return;
- }
-
final int leadDisplayId = display.getLeadDisplayIdLocked();
updateDisplayPowerControllerLeaderLocked(dpc, leadDisplayId);
- final String uniqueId = device.getUniqueId();
- HighBrightnessModeMetadata hbmMetadata = mHighBrightnessModeMetadataMap.get(uniqueId);
- dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
+ HighBrightnessModeMetadata hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ if (hbmMetadata != null) {
+ dpc.onDisplayChanged(hbmMetadata, leadDisplayId);
+ }
}
}
@@ -3073,26 +3061,6 @@
mLogicalDisplayMapper.forEachLocked(this::addDisplayPowerControllerLocked);
}
- private HighBrightnessModeMetadata getHighBrightnessModeMetadata(LogicalDisplay display) {
- final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
- if (device == null) {
- Slog.wtf(TAG, "Display Device is null in DisplayPowerController for display: "
- + display.getDisplayIdLocked());
- return null;
- }
-
- final String uniqueId = device.getUniqueId();
-
- if (mHighBrightnessModeMetadataMap.containsKey(uniqueId)) {
- return mHighBrightnessModeMetadataMap.get(uniqueId);
- }
-
- // HBM Time info not present. Create a new one for this physical display.
- HighBrightnessModeMetadata hbmInfo = new HighBrightnessModeMetadata();
- mHighBrightnessModeMetadataMap.put(uniqueId, hbmInfo);
- return hbmInfo;
- }
-
@RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
private void addDisplayPowerControllerLocked(LogicalDisplay display) {
if (mPowerHandler == null) {
@@ -3113,7 +3081,13 @@
// We also need to pass a mapping of the HighBrightnessModeTimeInfoMap to
// displayPowerController, so the hbm info can be correctly associated
// with the corresponding displaydevice.
- HighBrightnessModeMetadata hbmMetadata = getHighBrightnessModeMetadata(display);
+ HighBrightnessModeMetadata hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ if (hbmMetadata == null) {
+ Slog.wtf(TAG, "High Brightness Mode Metadata is null in DisplayManagerService for "
+ + "display: " + display.getDisplayIdLocked());
+ return;
+ }
if (DeviceConfig.getBoolean("display_manager",
"use_newly_structured_display_power_controller", true)) {
displayPowerController = new DisplayPowerController2(
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 5e3990a..1acc208 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -514,6 +514,7 @@
private boolean mIsEnabled;
private boolean mIsInTransition;
+ private boolean mIsDisplayInternal;
// The id of the thermal brightness throttling policy that should be used.
private String mThermalBrightnessThrottlingDataId;
@@ -553,6 +554,8 @@
mDisplayStatsId = mUniqueDisplayId.hashCode();
mIsEnabled = logicalDisplay.isEnabledLocked();
mIsInTransition = logicalDisplay.isInTransitionLocked();
+ mIsDisplayInternal = logicalDisplay.getPrimaryDisplayDeviceLocked()
+ .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL;
mHandler = new DisplayControllerHandler(handler.getLooper());
mLastBrightnessEvent = new BrightnessEvent(mDisplayId);
mTempBrightnessEvent = new BrightnessEvent(mDisplayId);
@@ -892,6 +895,9 @@
final DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
final boolean isEnabled = mLogicalDisplay.isEnabledLocked();
final boolean isInTransition = mLogicalDisplay.isInTransitionLocked();
+ final boolean isDisplayInternal = mLogicalDisplay.getPrimaryDisplayDeviceLocked() != null
+ && mLogicalDisplay.getPrimaryDisplayDeviceLocked()
+ .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL;
final String thermalBrightnessThrottlingDataId =
mLogicalDisplay.getThermalBrightnessThrottlingDataIdLocked();
mHandler.postAtTime(() -> {
@@ -924,7 +930,7 @@
mIsEnabled = isEnabled;
mIsInTransition = isInTransition;
}
-
+ mIsDisplayInternal = isDisplayInternal;
if (changed) {
updatePowerState();
}
@@ -1810,10 +1816,11 @@
// TODO(b/216365040): The decision to prevent HBM for HDR in low power mode should be
// done in HighBrightnessModeController.
if (mHbmController.getHighBrightnessMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
- && (mBrightnessReason.getModifier() & BrightnessReason.MODIFIER_DIMMED) == 0
- && (mBrightnessReason.getModifier() & BrightnessReason.MODIFIER_LOW_POWER)
+ && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_DIMMED) == 0
+ && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_LOW_POWER)
== 0) {
- // We want to scale HDR brightness level with the SDR level
+ // We want to scale HDR brightness level with the SDR level, we also need to restore
+ // SDR brightness immediately when entering dim or low power mode.
animateValue = mHbmController.getHdrBrightnessValue();
}
@@ -3074,9 +3081,7 @@
event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
? -1f : convertToNits(event.getThermalMax());
- if (mLogicalDisplay.getPrimaryDisplayDeviceLocked() != null
- && mLogicalDisplay.getPrimaryDisplayDeviceLocked()
- .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL) {
+ if (mIsDisplayInternal) {
FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
convertToNits(event.getInitialBrightness()),
convertToNits(event.getBrightness()),
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index 23e606c..b36aede 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController2.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController2.java
@@ -399,6 +399,7 @@
private boolean mIsEnabled;
private boolean mIsInTransition;
+ private boolean mIsDisplayInternal;
// The id of the thermal brightness throttling policy that should be used.
private String mThermalBrightnessThrottlingDataId;
@@ -431,6 +432,8 @@
.getDisplayDeviceConfig();
mIsEnabled = logicalDisplay.isEnabledLocked();
mIsInTransition = logicalDisplay.isInTransitionLocked();
+ mIsDisplayInternal = logicalDisplay.getPrimaryDisplayDeviceLocked()
+ .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL;
mWakelockController = mInjector.getWakelockController(mDisplayId, callbacks);
mDisplayPowerProximityStateController = mInjector.getDisplayPowerProximityStateController(
mWakelockController, mDisplayDeviceConfig, mHandler.getLooper(),
@@ -708,6 +711,9 @@
final DisplayDeviceInfo info = device.getDisplayDeviceInfoLocked();
final boolean isEnabled = mLogicalDisplay.isEnabledLocked();
final boolean isInTransition = mLogicalDisplay.isInTransitionLocked();
+ final boolean isDisplayInternal = mLogicalDisplay.getPrimaryDisplayDeviceLocked() != null
+ && mLogicalDisplay.getPrimaryDisplayDeviceLocked()
+ .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL;
final String thermalBrightnessThrottlingDataId =
mLogicalDisplay.getThermalBrightnessThrottlingDataIdLocked();
@@ -742,6 +748,7 @@
mIsInTransition = isInTransition;
}
+ mIsDisplayInternal = isDisplayInternal;
if (changed) {
updatePowerState();
}
@@ -1449,10 +1456,11 @@
// TODO(b/216365040): The decision to prevent HBM for HDR in low power mode should be
// done in HighBrightnessModeController.
if (mHbmController.getHighBrightnessMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
- && (mBrightnessReason.getModifier() & BrightnessReason.MODIFIER_DIMMED) == 0
- && (mBrightnessReason.getModifier() & BrightnessReason.MODIFIER_LOW_POWER)
+ && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_DIMMED) == 0
+ && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_LOW_POWER)
== 0) {
- // We want to scale HDR brightness level with the SDR level
+ // We want to scale HDR brightness level with the SDR level, we also need to restore
+ // SDR brightness immediately when entering dim or low power mode.
animateValue = mHbmController.getHdrBrightnessValue();
}
@@ -2217,6 +2225,7 @@
pw.println(" mSkipScreenOnBrightnessRamp=" + mSkipScreenOnBrightnessRamp);
pw.println(" mColorFadeFadesConfig=" + mColorFadeFadesConfig);
pw.println(" mColorFadeEnabled=" + mColorFadeEnabled);
+ pw.println(" mIsDisplayInternal=" + mIsDisplayInternal);
synchronized (mCachedBrightnessInfo) {
pw.println(" mCachedBrightnessInfo.brightness="
+ mCachedBrightnessInfo.brightness.value);
@@ -2434,9 +2443,7 @@
float appliedThermalCapNits =
event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
? -1f : mDisplayBrightnessController.convertToNits(event.getThermalMax());
- if (mLogicalDisplay.getPrimaryDisplayDeviceLocked() != null
- && mLogicalDisplay.getPrimaryDisplayDeviceLocked()
- .getDisplayDeviceInfoLocked().type == Display.TYPE_INTERNAL) {
+ if (mIsDisplayInternal) {
FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
mDisplayBrightnessController.convertToNits(event.getInitialBrightness()),
mDisplayBrightnessController.convertToNits(event.getBrightness()),
diff --git a/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java b/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java
new file mode 100644
index 0000000..76702d3
--- /dev/null
+++ b/services/core/java/com/android/server/display/HighBrightnessModeMetadataMapper.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display;
+
+import android.util.ArrayMap;
+import android.util.Slog;
+
+/**
+ * Provides {@link HighBrightnessModeMetadata}s for {@link DisplayDevice}s. This class should only
+ * be accessed from the display thread.
+ */
+class HighBrightnessModeMetadataMapper {
+
+ private static final String TAG = "HighBrightnessModeMetadataMapper";
+
+ /**
+ * Map of every internal primary display device {@link HighBrightnessModeMetadata}s indexed by
+ * {@link DisplayDevice#mUniqueId}.
+ */
+ private final ArrayMap<String, HighBrightnessModeMetadata> mHighBrightnessModeMetadataMap =
+ new ArrayMap<>();
+
+ HighBrightnessModeMetadata getHighBrightnessModeMetadataLocked(LogicalDisplay display) {
+ final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
+ if (device == null) {
+ Slog.wtf(TAG, "Display Device is null in DisplayPowerController for display: "
+ + display.getDisplayIdLocked());
+ return null;
+ }
+
+ final String uniqueId = device.getUniqueId();
+
+ if (mHighBrightnessModeMetadataMap.containsKey(uniqueId)) {
+ return mHighBrightnessModeMetadataMap.get(uniqueId);
+ }
+
+ // HBM Time info not present. Create a new one for this physical display.
+ HighBrightnessModeMetadata hbmInfo = new HighBrightnessModeMetadata();
+ mHighBrightnessModeMetadataMap.put(uniqueId, hbmInfo);
+ return hbmInfo;
+ }
+}
diff --git a/services/core/java/com/android/server/display/WakelockController.java b/services/core/java/com/android/server/display/WakelockController.java
index 6511f4f..1e13974 100644
--- a/services/core/java/com/android/server/display/WakelockController.java
+++ b/services/core/java/com/android/server/display/WakelockController.java
@@ -38,7 +38,9 @@
public static final int WAKE_LOCK_STATE_CHANGED = 4;
public static final int WAKE_LOCK_UNFINISHED_BUSINESS = 5;
- private static final int WAKE_LOCK_MAX = WAKE_LOCK_UNFINISHED_BUSINESS;
+ @VisibleForTesting
+ static final int WAKE_LOCK_MAX = WAKE_LOCK_UNFINISHED_BUSINESS;
+
private static final boolean DEBUG = false;
@IntDef(flag = true, prefix = "WAKE_LOCK_", value = {
@@ -132,7 +134,7 @@
* A utility to release all the wakelock acquired by the system
*/
public void releaseAll() {
- for (int i = WAKE_LOCK_PROXIMITY_POSITIVE; i < WAKE_LOCK_MAX; i++) {
+ for (int i = WAKE_LOCK_PROXIMITY_POSITIVE; i <= WAKE_LOCK_MAX; i++) {
releaseWakelockInternal(i);
}
}
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
index 01cae42..ad640b1 100644
--- a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
+++ b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
@@ -239,7 +239,7 @@
String[] certs = mContext.getResources().getStringArray(
R.array.config_fontManagerServiceCerts);
- if (mDebugCertFilePath != null && (Build.IS_USERDEBUG || Build.IS_ENG)) {
+ if (mDebugCertFilePath != null && Build.IS_DEBUGGABLE) {
String[] tmp = new String[certs.length + 1];
System.arraycopy(certs, 0, tmp, 0, certs.length);
tmp[certs.length] = mDebugCertFilePath;
@@ -251,8 +251,8 @@
}
/**
- * Add debug certificate to the cert list. This must be called only on userdebug/eng
- * build.
+ * Add debug certificate to the cert list. This must be called only on debuggable build.
+ *
* @param debugCertPath a debug certificate file path
*/
public void addDebugCertificate(@Nullable String debugCertPath) {
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java
index c039a83..6d82841d 100644
--- a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java
+++ b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java
@@ -105,8 +105,8 @@
w.println(" Update font families with the new definitions.");
w.println();
w.println("install-debug-cert [cert file path]");
- w.println(" Install debug certificate file. This command can be used only on userdebug");
- w.println(" or eng device with root user.");
+ w.println(" Install debug certificate file. This command can be used only on");
+ w.println(" debuggable device with root user.");
w.println();
w.println("clear");
w.println(" Remove all installed font files and reset to the initial state.");
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 9eedc4e..f47c4b2 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -682,7 +682,6 @@
@ServiceThreadOnly
private void launchDeviceDiscovery() {
assertRunOnServiceThread();
- clearDeviceInfoList();
DeviceDiscoveryAction action = new DeviceDiscoveryAction(this,
new DeviceDiscoveryCallback() {
@Override
@@ -691,13 +690,6 @@
mService.getHdmiCecNetwork().addCecDevice(info);
}
- // Since we removed all devices when it starts and
- // device discovery action does not poll local devices,
- // we should put device info of local device manually here
- for (HdmiCecLocalDevice device : mService.getAllCecLocalDevices()) {
- mService.getHdmiCecNetwork().addCecDevice(device.getDeviceInfo());
- }
-
mSelectRequestBuffer.process();
resetSelectRequestBuffer();
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 805ff66..75fe63a 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -1267,6 +1267,7 @@
// It's now safe to flush existing local devices from mCecController since they were
// already moved to 'localDevices'.
clearCecLocalDevices();
+ mHdmiCecNetwork.clearDeviceList();
allocateLogicalAddress(localDevices, initiatedBy);
}
@@ -1303,6 +1304,7 @@
HdmiControlManager.POWER_STATUS_ON, getCecVersion());
localDevice.setDeviceInfo(deviceInfo);
mHdmiCecNetwork.addLocalDevice(deviceType, localDevice);
+ mHdmiCecNetwork.addCecDevice(localDevice.getDeviceInfo());
mCecController.addLogicalAddress(logicalAddress);
allocatedDevices.add(localDevice);
}
diff --git a/services/core/java/com/android/server/infra/OWNERS b/services/core/java/com/android/server/infra/OWNERS
index 0466d8a..4fea05d 100644
--- a/services/core/java/com/android/server/infra/OWNERS
+++ b/services/core/java/com/android/server/infra/OWNERS
@@ -1,3 +1,3 @@
# Bug component: 655446
-include /core/java/android/service/cloudsearch/OWNERS
+srazdan@google.com
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index d0669e7..5f45f91 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -686,13 +686,7 @@
@NonNull
private InputChannel createSpyWindowGestureMonitor(IBinder monitorToken, String name,
- int displayId, int pid, int uid) {
- final SurfaceControl sc = mWindowManagerCallbacks.createSurfaceForGestureMonitor(name,
- displayId);
- if (sc == null) {
- throw new IllegalArgumentException(
- "Could not create gesture monitor surface on display: " + displayId);
- }
+ SurfaceControl sc, int displayId, int pid, int uid) {
final InputChannel channel = createInputChannel(name);
try {
@@ -749,9 +743,18 @@
final long ident = Binder.clearCallingIdentity();
try {
- final InputChannel inputChannel =
- createSpyWindowGestureMonitor(monitorToken, name, displayId, pid, uid);
- return new InputMonitor(inputChannel, new InputMonitorHost(inputChannel.getToken()));
+ final SurfaceControl sc = mWindowManagerCallbacks.createSurfaceForGestureMonitor(name,
+ displayId);
+ if (sc == null) {
+ throw new IllegalArgumentException(
+ "Could not create gesture monitor surface on display: " + displayId);
+ }
+
+ final InputChannel inputChannel = createSpyWindowGestureMonitor(
+ monitorToken, name, sc, displayId, pid, uid);
+ return new InputMonitor(inputChannel,
+ new InputMonitorHost(inputChannel.getToken()),
+ new SurfaceControl(sc, "IMS.monitorGestureInput"));
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java b/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
index 0ae1e80..a1b67e1 100644
--- a/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
+++ b/services/core/java/com/android/server/inputmethod/DefaultImeVisibilityApplier.java
@@ -18,14 +18,19 @@
import static android.view.inputmethod.ImeTracker.DEBUG_IME_VISIBILITY;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.SHOW_IME_SCREENSHOT_FROM_IMMS;
import static com.android.server.EventLogTags.IMF_HIDE_IME;
import static com.android.server.EventLogTags.IMF_SHOW_IME;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_HIDE_IME;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_HIDE_IME_EXPLICIT;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_HIDE_IME_NOT_ALWAYS;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_REMOVE_IME_SNAPSHOT;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_SHOW_IME;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_SHOW_IME_IMPLICIT;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_SHOW_IME_SNAPSHOT;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.IBinder;
import android.os.ResultReceiver;
@@ -38,6 +43,7 @@
import com.android.internal.inputmethod.InputMethodDebug;
import com.android.internal.inputmethod.SoftInputShowHideReason;
import com.android.server.LocalServices;
+import com.android.server.wm.ImeTargetVisibilityPolicy;
import com.android.server.wm.WindowManagerInternal;
import java.util.Objects;
@@ -56,10 +62,14 @@
private final WindowManagerInternal mWindowManagerInternal;
+ @NonNull
+ private final ImeTargetVisibilityPolicy mImeTargetVisibilityPolicy;
+
DefaultImeVisibilityApplier(InputMethodManagerService service) {
mService = service;
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
+ mImeTargetVisibilityPolicy = LocalServices.getService(ImeTargetVisibilityPolicy.class);
}
@GuardedBy("ImfLock.class")
@@ -162,8 +172,37 @@
mService.showCurrentInputLocked(windowToken, statsToken,
InputMethodManager.SHOW_IMPLICIT, null, reason);
break;
+ case STATE_SHOW_IME_SNAPSHOT:
+ showImeScreenshot(windowToken, mService.getDisplayIdToShowImeLocked(), null);
+ break;
+ case STATE_REMOVE_IME_SNAPSHOT:
+ removeImeScreenshot(mService.getDisplayIdToShowImeLocked());
+ break;
default:
throw new IllegalArgumentException("Invalid IME visibility state: " + state);
}
}
+
+ @GuardedBy("ImfLock.class")
+ @Override
+ public boolean showImeScreenshot(@NonNull IBinder imeTarget, int displayId,
+ @Nullable ImeTracker.Token statsToken) {
+ if (mImeTargetVisibilityPolicy.showImeScreenshot(imeTarget, displayId)) {
+ mService.onShowHideSoftInputRequested(false /* show */, imeTarget,
+ SHOW_IME_SCREENSHOT_FROM_IMMS, statsToken);
+ return true;
+ }
+ return false;
+ }
+
+ @GuardedBy("ImfLock.class")
+ @Override
+ public boolean removeImeScreenshot(int displayId) {
+ if (mImeTargetVisibilityPolicy.removeImeScreenshot(displayId)) {
+ mService.onShowHideSoftInputRequested(false /* show */, mService.mCurFocusedWindow,
+ REMOVE_IME_SCREENSHOT_FROM_IMMS, null);
+ return true;
+ }
+ return false;
+ }
}
diff --git a/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java b/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
index f03e985..27f6a89 100644
--- a/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
+++ b/services/core/java/com/android/server/inputmethod/ImeVisibilityApplier.java
@@ -16,6 +16,7 @@
package com.android.server.inputmethod;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.IBinder;
import android.os.ResultReceiver;
@@ -76,4 +77,27 @@
// TODO: add a method in WindowManagerInternal to call DC#updateImeInputAndControlTarget
// here to end up updating IME layering after IMMS#attachNewInputLocked called.
}
+
+ /**
+ * Shows the IME screenshot and attach it to the given IME target window.
+ *
+ * @param windowToken The token of a window to show the IME screenshot.
+ * @param displayId The unique id to identify the display
+ * @param statsToken A token that tracks the progress of an IME request.
+ * @return {@code true} if success, {@code false} otherwise.
+ */
+ default boolean showImeScreenshot(@NonNull IBinder windowToken, int displayId,
+ @Nullable ImeTracker.Token statsToken) {
+ return false;
+ }
+
+ /**
+ * Removes the IME screenshot on the given display.
+ *
+ * @param displayId The target display of showing IME screenshot.
+ * @return {@code true} if success, {@code false} otherwise.
+ */
+ default boolean removeImeScreenshot(int displayId) {
+ return false;
+ }
}
diff --git a/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java b/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
index 61fe654..19d6fa0 100644
--- a/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
+++ b/services/core/java/com/android/server/inputmethod/ImeVisibilityStateComputer.java
@@ -29,6 +29,8 @@
import static android.view.WindowManager.LayoutParams.SoftInputModeFlags;
import static com.android.internal.inputmethod.InputMethodDebug.softInputModeToString;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.SHOW_IME_SCREENSHOT_FROM_IMMS;
import static com.android.server.inputmethod.InputMethodManagerService.computeImeDisplayIdForTarget;
import android.accessibilityservice.AccessibilityService;
@@ -49,6 +51,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.inputmethod.SoftInputShowHideReason;
import com.android.server.LocalServices;
+import com.android.server.wm.ImeTargetChangeListener;
import com.android.server.wm.WindowManagerInternal;
import java.io.PrintWriter;
@@ -99,6 +102,18 @@
*/
private boolean mInputShown;
+ /**
+ * Set if we called
+ * {@link com.android.server.wm.ImeTargetVisibilityPolicy#showImeScreenshot(IBinder, int)}.
+ */
+ private boolean mRequestedImeScreenshot;
+
+ /** The window token of the current visible IME layering target overlay. */
+ private IBinder mCurVisibleImeLayeringOverlay;
+
+ /** The window token of the current visible IME input target. */
+ private IBinder mCurVisibleImeInputTarget;
+
/** Represent the invalid IME visibility state */
public static final int STATE_INVALID = -1;
@@ -122,6 +137,10 @@
public static final int STATE_HIDE_IME_NOT_ALWAYS = 6;
public static final int STATE_SHOW_IME_IMPLICIT = 7;
+
+ /** State to handle removing an IME preview surface when necessary. */
+ public static final int STATE_REMOVE_IME_SNAPSHOT = 8;
+
@IntDef({
STATE_INVALID,
STATE_HIDE_IME,
@@ -132,6 +151,7 @@
STATE_HIDE_IME_EXPLICIT,
STATE_HIDE_IME_NOT_ALWAYS,
STATE_SHOW_IME_IMPLICIT,
+ STATE_REMOVE_IME_SNAPSHOT,
})
@interface VisibilityState {}
@@ -172,6 +192,24 @@
mWindowManagerInternal = wmService;
mImeDisplayValidator = imeDisplayValidator;
mPolicy = imePolicy;
+ mWindowManagerInternal.setInputMethodTargetChangeListener(new ImeTargetChangeListener() {
+ @Override
+ public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken,
+ boolean visible, boolean removed) {
+ mCurVisibleImeLayeringOverlay = (visible && !removed) ? overlayWindowToken : null;
+ }
+
+ @Override
+ public void onImeInputTargetVisibilityChanged(IBinder imeInputTarget,
+ boolean visibleRequested, boolean removed) {
+ mCurVisibleImeInputTarget = (visibleRequested && !removed) ? imeInputTarget : null;
+ if (mCurVisibleImeInputTarget == null && mCurVisibleImeLayeringOverlay != null) {
+ mService.onApplyImeVisibilityFromComputer(imeInputTarget,
+ new ImeVisibilityResult(STATE_HIDE_IME_EXPLICIT,
+ SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE));
+ }
+ }
+ });
}
/**
@@ -453,6 +491,21 @@
return null;
}
+ @VisibleForTesting
+ ImeVisibilityResult onInteractiveChanged(IBinder windowToken, boolean interactive) {
+ final ImeTargetWindowState state = getWindowStateOrNull(windowToken);
+ if (state != null && state.isRequestedImeVisible() && mInputShown && !interactive) {
+ mRequestedImeScreenshot = true;
+ return new ImeVisibilityResult(STATE_SHOW_IME_SNAPSHOT, SHOW_IME_SCREENSHOT_FROM_IMMS);
+ }
+ if (interactive && mRequestedImeScreenshot) {
+ mRequestedImeScreenshot = false;
+ return new ImeVisibilityResult(STATE_REMOVE_IME_SNAPSHOT,
+ REMOVE_IME_SCREENSHOT_FROM_IMMS);
+ }
+ return null;
+ }
+
IBinder getWindowTokenFrom(IBinder requestImeToken) {
for (IBinder windowToken : mRequestWindowStateMap.keySet()) {
final ImeTargetWindowState state = mRequestWindowStateMap.get(windowToken);
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 2433211..c70d555 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -4847,6 +4847,14 @@
}
}
+ void onApplyImeVisibilityFromComputer(IBinder windowToken,
+ @NonNull ImeVisibilityResult result) {
+ synchronized (ImfLock.class) {
+ mVisibilityApplier.applyImeVisibility(windowToken, null, result.getState(),
+ result.getReason());
+ }
+ }
+
@GuardedBy("ImfLock.class")
void setEnabledSessionLocked(SessionState session) {
if (mEnabledSession != session) {
@@ -5083,6 +5091,14 @@
return;
}
if (mImePlatformCompatUtils.shouldUseSetInteractiveProtocol(getCurMethodUidLocked())) {
+ // Handle IME visibility when interactive changed before finishing the input to
+ // ensure we preserve the last state as possible.
+ final ImeVisibilityResult imeVisRes = mVisibilityStateComputer.onInteractiveChanged(
+ mCurFocusedWindow, interactive);
+ if (imeVisRes != null) {
+ mVisibilityApplier.applyImeVisibility(mCurFocusedWindow, null,
+ imeVisRes.getState(), imeVisRes.getReason());
+ }
// Eligible IME processes use new "setInteractive" protocol.
mCurClient.mClient.setInteractive(mIsInteractive, mInFullscreenMode);
} else {
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index ee4a6fe..20f0697 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -116,6 +116,7 @@
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.EventLog;
+import android.util.Log;
import android.util.LongSparseArray;
import android.util.Slog;
import android.util.SparseArray;
@@ -400,11 +401,13 @@
profileUserId, /* isLockTiedToParent= */ true);
return;
}
+ final long parentSid;
// Do not tie when the parent has no SID (but does have a screen lock).
// This can only happen during an upgrade path where SID is yet to be
// generated when the user unlocks for the first time.
try {
- if (getGateKeeperService().getSecureUserId(parentId) == 0) {
+ parentSid = getGateKeeperService().getSecureUserId(parentId);
+ if (parentSid == 0) {
return;
}
} catch (RemoteException e) {
@@ -415,7 +418,8 @@
setLockCredentialInternal(unifiedProfilePassword, profileUserPassword, profileUserId,
/* isLockTiedToParent= */ true);
tieProfileLockToParent(profileUserId, parentId, unifiedProfilePassword);
- mManagedProfilePasswordCache.storePassword(profileUserId, unifiedProfilePassword);
+ mManagedProfilePasswordCache.storePassword(profileUserId, unifiedProfilePassword,
+ parentSid);
}
}
@@ -574,7 +578,7 @@
public @NonNull ManagedProfilePasswordCache getManagedProfilePasswordCache(
java.security.KeyStore ks) {
- return new ManagedProfilePasswordCache(ks, getUserManager());
+ return new ManagedProfilePasswordCache(ks);
}
public boolean isHeadlessSystemUserMode() {
@@ -1229,6 +1233,26 @@
}
/**
+ * {@link LockPatternUtils#refreshStoredPinLength(int)}
+ * @param userId user id of the user whose pin length we want to save
+ * @return true/false depending on whether PIN length has been saved or not
+ */
+ @Override
+ public boolean refreshStoredPinLength(int userId) {
+ checkPasswordHavePermission();
+ synchronized (mSpManager) {
+ PasswordMetrics passwordMetrics = getUserPasswordMetrics(userId);
+ if (passwordMetrics != null) {
+ final long protectorId = getCurrentLskfBasedProtectorId(userId);
+ return mSpManager.refreshPinLengthOnDisk(passwordMetrics, protectorId, userId);
+ } else {
+ Log.w(TAG, "PasswordMetrics is not available");
+ return false;
+ }
+ }
+ }
+
+ /**
* This API is cached; whenever the result would change,
* {@link com.android.internal.widget.LockPatternUtils#invalidateCredentialTypeCache}
* must be called.
@@ -1325,7 +1349,13 @@
LockscreenCredential credential = LockscreenCredential.createManagedPassword(
decryptionResult);
Arrays.fill(decryptionResult, (byte) 0);
- mManagedProfilePasswordCache.storePassword(userId, credential);
+ try {
+ long parentSid = getGateKeeperService().getSecureUserId(
+ mUserManager.getProfileParent(userId).id);
+ mManagedProfilePasswordCache.storePassword(userId, credential, parentSid);
+ } catch (RemoteException e) {
+ Slogf.w(TAG, "Failed to talk to GateKeeper service", e);
+ }
return credential;
}
@@ -2203,6 +2233,8 @@
public VerifyCredentialResponse verifyTiedProfileChallenge(LockscreenCredential credential,
int userId, @LockPatternUtils.VerifyFlag int flags) {
checkPasswordReadPermission();
+ Slogf.i(TAG, "Verifying tied profile challenge for user %d", userId);
+
if (!isProfileWithUnifiedLock(userId)) {
throw new IllegalArgumentException(
"User id must be managed/clone profile with unified lock");
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
index de3a7ef..731ecad 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsStorage.java
@@ -121,6 +121,11 @@
}
@VisibleForTesting
+ public boolean isAutoPinConfirmSettingEnabled(int userId) {
+ return getBoolean(LockPatternUtils.AUTO_PIN_CONFIRM, false, userId);
+ }
+
+ @VisibleForTesting
public void writeKeyValue(SQLiteDatabase db, String key, String value, int userId) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_KEY, key);
diff --git a/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java b/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java
index ddc0e54..1298fe8f 100644
--- a/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java
+++ b/services/core/java/com/android/server/locksettings/ManagedProfilePasswordCache.java
@@ -17,9 +17,7 @@
package com.android.server.locksettings;
import android.annotation.Nullable;
-import android.content.pm.UserInfo;
-import android.os.UserHandle;
-import android.os.UserManager;
+import android.security.GateKeeper;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import android.security.keystore.UserNotAuthenticatedException;
@@ -45,12 +43,9 @@
import javax.crypto.spec.GCMParameterSpec;
/**
- * Caches *unified* work challenge for user 0's managed profiles. Only user 0's profile is supported
- * at the moment because the cached credential is encrypted using a keystore key auth-bound to
- * user 0: this is to match how unified work challenge is similarly auth-bound to its parent user's
- * lockscreen credential normally. It's possible to extend this class to support managed profiles
- * for secondary users, that will require generating auth-bound keys to their corresponding parent
- * user though (which {@link KeyGenParameterSpec} does not support right now).
+ * Caches *unified* work challenge for managed profiles. The cached credential is encrypted using
+ * a keystore key auth-bound to the parent user's lockscreen credential, similar to how unified
+ * work challenge is normally secured.
*
* <p> The cache is filled whenever the managed profile's unified challenge is created or derived
* (as part of the parent user's credential verification flow). It's removed when the profile is
@@ -70,28 +65,23 @@
private final SparseArray<byte[]> mEncryptedPasswords = new SparseArray<>();
private final KeyStore mKeyStore;
- private final UserManager mUserManager;
- public ManagedProfilePasswordCache(KeyStore keyStore, UserManager userManager) {
+ public ManagedProfilePasswordCache(KeyStore keyStore) {
mKeyStore = keyStore;
- mUserManager = userManager;
}
/**
* Encrypt and store the password in the cache. Does NOT overwrite existing password cache
* if one for the given user already exists.
+ *
+ * Should only be called on a profile userId.
*/
- public void storePassword(int userId, LockscreenCredential password) {
+ public void storePassword(int userId, LockscreenCredential password, long parentSid) {
+ if (parentSid == GateKeeper.INVALID_SECURE_USER_ID) return;
synchronized (mEncryptedPasswords) {
if (mEncryptedPasswords.contains(userId)) {
return;
}
- UserInfo parent = mUserManager.getProfileParent(userId);
- if (parent == null || parent.id != UserHandle.USER_SYSTEM) {
- // Since the cached password is encrypted using a keystore key auth-bound to user 0,
- // only support caching password for user 0's profile.
- return;
- }
String keyName = getEncryptionKeyName(userId);
KeyGenerator generator;
SecretKey key;
@@ -104,8 +94,8 @@
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setNamespace(SyntheticPasswordCrypto.keyNamespace())
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
- // Generate auth-bound key to user 0 (since we the caller is user 0)
.setUserAuthenticationRequired(true)
+ .setBoundToSpecificSecureUserId(parentSid)
.setUserAuthenticationValidityDurationSeconds(CACHE_TIMEOUT_SECONDS)
.build());
key = generator.generateKey();
diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
index a4dab72..8b8c5f6 100644
--- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
+++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
@@ -16,6 +16,7 @@
package com.android.server.locksettings;
+import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN;
import static com.android.internal.widget.LockPatternUtils.EscrowTokenStateChangeCallback;
import static com.android.internal.widget.LockPatternUtils.PIN_LENGTH_UNAVAILABLE;
@@ -545,6 +546,11 @@
return null;
}
+ @VisibleForTesting
+ public boolean isAutoPinConfirmationFeatureAvailable() {
+ return LockPatternUtils.isAutoPinConfirmFeatureAvailable();
+ }
+
private synchronized boolean isWeaverAvailable() {
if (mWeaver != null) {
return true;
@@ -901,8 +907,8 @@
LockscreenCredential credential, SyntheticPassword sp, int userId) {
long protectorId = generateProtectorId();
int pinLength = PIN_LENGTH_UNAVAILABLE;
- if (LockPatternUtils.isAutoPinConfirmFeatureAvailable()) {
- pinLength = derivePinLength(credential, userId);
+ if (isAutoPinConfirmationFeatureAvailable()) {
+ pinLength = derivePinLength(credential.size(), credential.isPin(), userId);
}
// There's no need to store password data about an empty LSKF.
PasswordData pwd = credential.isNone() ? null :
@@ -978,13 +984,13 @@
return protectorId;
}
- private int derivePinLength(LockscreenCredential credential, int userId) {
- if (!credential.isPin()
- || !mStorage.getBoolean(LockPatternUtils.AUTO_PIN_CONFIRM, false, userId)
- || credential.size() < LockPatternUtils.MIN_AUTO_PIN_REQUIREMENT_LENGTH) {
+ private int derivePinLength(int sizeOfCredential, boolean isPinCredential, int userId) {
+ if (!isPinCredential
+ || !mStorage.isAutoPinConfirmSettingEnabled(userId)
+ || sizeOfCredential < LockPatternUtils.MIN_AUTO_PIN_REQUIREMENT_LENGTH) {
return PIN_LENGTH_UNAVAILABLE;
}
- return credential.size();
+ return sizeOfCredential;
}
public VerifyCredentialResponse verifyFrpCredential(IGateKeeperService gatekeeper,
@@ -1347,19 +1353,39 @@
savePasswordMetrics(credential, result.syntheticPassword, protectorId, userId);
syncState(userId); // Not strictly needed as the upgrade can be re-done, but be safe.
}
- if (LockPatternUtils.isAutoPinConfirmFeatureAvailable()
- && result.syntheticPassword != null && pwd != null) {
- int expectedPinLength = derivePinLength(credential, userId);
- if (pwd.pinLength != expectedPinLength) {
- pwd.pinLength = expectedPinLength;
- saveState(PASSWORD_DATA_NAME, pwd.toBytes(), protectorId, userId);
- syncState(userId);
- }
- }
return result;
}
/**
+ * {@link LockPatternUtils#refreshStoredPinLength(int)}
+ * @param passwordMetrics passwordMetrics object containing the cached pin length
+ * @param userId userId of the user whose pin length we want to store on disk
+ * @param protectorId current LSKF based protectorId
+ * @return true/false depending on whether PIN length has been saved on disk
+ */
+ public boolean refreshPinLengthOnDisk(PasswordMetrics passwordMetrics,
+ long protectorId, int userId) {
+ if (!isAutoPinConfirmationFeatureAvailable()) {
+ return false;
+ }
+
+ byte[] pwdDataBytes = loadState(PASSWORD_DATA_NAME, protectorId, userId);
+ if (pwdDataBytes == null) {
+ return false;
+ }
+
+ PasswordData pwd = PasswordData.fromBytes(pwdDataBytes);
+ int pinLength = derivePinLength(passwordMetrics.length,
+ passwordMetrics.credType == CREDENTIAL_TYPE_PIN, userId);
+ if (pwd.pinLength != pinLength) {
+ pwd.pinLength = pinLength;
+ saveState(PASSWORD_DATA_NAME, pwd.toBytes(), protectorId, userId);
+ syncState(userId);
+ }
+ return true;
+ }
+
+ /**
* Tries to unlock a token-based SP protector (weak or strong), given its ID and the claimed
* token. On success, returns the user's synthetic password, and also does a Gatekeeper
* verification to refresh the SID and HardwareAuthToken maintained by the system.
diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java
index b82e3a3..c076c05 100644
--- a/services/core/java/com/android/server/media/MediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
+import android.media.MediaRoute2Info;
import android.media.MediaRoute2ProviderInfo;
import android.media.RouteDiscoveryPreference;
import android.media.RoutingSessionInfo;
@@ -26,6 +27,7 @@
import com.android.internal.annotations.GuardedBy;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -108,6 +110,28 @@
&& mComponentName.getClassName().equals(className);
}
+ public void dump(PrintWriter pw, String prefix) {
+ pw.println(prefix + getDebugString());
+ prefix += " ";
+ if (mProviderInfo == null) {
+ pw.println(prefix + "<provider info not received, yet>");
+ } else if (mProviderInfo.getRoutes().isEmpty()) {
+ pw.println(prefix + "<provider info has no routes>");
+ } else {
+ for (MediaRoute2Info route : mProviderInfo.getRoutes()) {
+ pw.printf("%s%s | %s\n", prefix, route.getId(), route.getName());
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return getDebugString();
+ }
+
+ /** Returns a human-readable string describing the instance, for debugging purposes. */
+ protected abstract String getDebugString();
+
public interface Callback {
void onProviderStateChanged(@Nullable MediaRoute2Provider provider);
void onSessionCreated(@NonNull MediaRoute2Provider provider,
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
index 90451b1..72b8436 100644
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
@@ -44,7 +44,6 @@
import com.android.internal.annotations.GuardedBy;
-import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
@@ -83,10 +82,6 @@
mHandler = new Handler(Looper.myLooper());
}
- public void dump(PrintWriter pw, String prefix) {
- pw.println(prefix + getDebugString());
- }
-
public void setManagerScanning(boolean managerScanning) {
if (mIsManagerScanning != managerScanning) {
mIsManagerScanning = managerScanning;
@@ -488,11 +483,7 @@
}
@Override
- public String toString() {
- return getDebugString();
- }
-
- private String getDebugString() {
+ protected String getDebugString() {
return TextUtils.formatSimple(
"ProviderServiceProxy - package: %s, bound: %b, connection (active:%b, ready:%b)",
mComponentName.getPackageName(),
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 3c97aaf8..2d3b97b 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -1751,6 +1751,7 @@
String indent = prefix + " ";
pw.println(indent + "mRunning=" + mRunning);
+ mSystemProvider.dump(pw, prefix);
mWatcher.dump(pw, prefix);
}
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 5ea2ca4..464a256 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -16,14 +16,22 @@
package com.android.server.media;
+import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.PendingIntent;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledSince;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
+import android.content.pm.ResolveInfo;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioSystem;
@@ -42,6 +50,7 @@
import android.media.session.PlaybackState;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.Bundle;
import android.os.DeadObjectException;
import android.os.Handler;
@@ -52,6 +61,7 @@
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
@@ -73,6 +83,17 @@
*/
// TODO(jaewan): Do not call service method directly -- introduce listener instead.
public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionRecordImpl {
+
+ /**
+ * {@link MediaSession#setMediaButtonBroadcastReceiver(ComponentName)} throws an {@link
+ * IllegalArgumentException} if the provided {@link ComponentName} does not resolve to a valid
+ * {@link android.content.BroadcastReceiver broadcast receiver} for apps targeting Android U and
+ * above. For apps targeting Android T and below, the request will be ignored.
+ */
+ @ChangeId
+ @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ static final long THROW_FOR_INVALID_BROADCAST_RECEIVER = 270049379L;
+
private static final String TAG = "MediaSessionRecord";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -871,6 +892,22 @@
}
};
+ @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
+ private static boolean componentNameExists(
+ @NonNull ComponentName componentName, @NonNull Context context, int userId) {
+ Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+ mediaButtonIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ mediaButtonIntent.setComponent(componentName);
+
+ UserHandle userHandle = UserHandle.of(userId);
+ PackageManager pm = context.getPackageManager();
+
+ List<ResolveInfo> resolveInfos =
+ pm.queryBroadcastReceiversAsUser(
+ mediaButtonIntent, PackageManager.ResolveInfoFlags.of(0), userHandle);
+ return !resolveInfos.isEmpty();
+ }
+
private final class SessionStub extends ISession.Stub {
@Override
public void destroySession() throws RemoteException {
@@ -955,7 +992,9 @@
}
@Override
+ @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
public void setMediaButtonBroadcastReceiver(ComponentName receiver) throws RemoteException {
+ final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
try {
//mPackageName has been verified in MediaSessionService.enforcePackageName().
@@ -970,6 +1009,20 @@
!= 0) {
return;
}
+
+ if (!componentNameExists(receiver, mContext, mUserId)) {
+ if (CompatChanges.isChangeEnabled(THROW_FOR_INVALID_BROADCAST_RECEIVER, uid)) {
+ throw new IllegalArgumentException("Invalid component name: " + receiver);
+ } else {
+ Log.w(
+ TAG,
+ "setMediaButtonBroadcastReceiver(): "
+ + "Ignoring invalid component name="
+ + receiver);
+ }
+ return;
+ }
+
mMediaButtonReceiverHolder = MediaButtonReceiverHolder.create(mUserId, receiver);
mService.onMediaButtonReceiverChanged(MediaSessionRecord.this);
} finally {
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
index 5d5c621..6d2d2e4 100644
--- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
@@ -392,6 +392,15 @@
mCallback.onSessionUpdated(this, sessionInfo);
}
+ @Override
+ protected String getDebugString() {
+ return TextUtils.formatSimple(
+ "SystemMR2Provider - package: %s, selected route id: %s, bluetooth impl: %s",
+ mComponentName.getPackageName(),
+ mSelectedRouteId,
+ mBluetoothRouteController.getClass().getSimpleName());
+ }
+
private static class SessionCreationRequest {
final long mRequestId;
final String mRouteId;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index ebcbfed..07891f3 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -10796,7 +10796,8 @@
static final String FLAG_SEPARATOR = "\\|";
private final ArraySet<ManagedServiceInfo> mLightTrimListeners = new ArraySet<>();
- ArrayMap<Pair<ComponentName, Integer>, NotificationListenerFilter>
+ @GuardedBy("mRequestedNotificationListeners")
+ private final ArrayMap<Pair<ComponentName, Integer>, NotificationListenerFilter>
mRequestedNotificationListeners = new ArrayMap<>();
private final boolean mIsHeadlessSystemUserMode;
@@ -10914,9 +10915,11 @@
@Override
public void onUserRemoved(int user) {
super.onUserRemoved(user);
- for (int i = mRequestedNotificationListeners.size() - 1; i >= 0; i--) {
- if (mRequestedNotificationListeners.keyAt(i).second == user) {
- mRequestedNotificationListeners.removeAt(i);
+ synchronized (mRequestedNotificationListeners) {
+ for (int i = mRequestedNotificationListeners.size() - 1; i >= 0; i--) {
+ if (mRequestedNotificationListeners.keyAt(i).second == user) {
+ mRequestedNotificationListeners.removeAt(i);
+ }
}
}
}
@@ -10925,31 +10928,34 @@
public void onPackagesChanged(boolean removingPackage, String[] pkgList, int[] uidList) {
super.onPackagesChanged(removingPackage, pkgList, uidList);
- // Since the default behavior is to allow everything, we don't need to explicitly
- // handle package add or update. they will be added to the xml file on next boot or
- // when the user tries to change the settings.
- if (removingPackage) {
- for (int i = 0; i < pkgList.length; i++) {
- String pkg = pkgList[i];
- int userId = UserHandle.getUserId(uidList[i]);
- for (int j = mRequestedNotificationListeners.size() - 1; j >= 0; j--) {
- Pair<ComponentName, Integer> key = mRequestedNotificationListeners.keyAt(j);
- if (key.second == userId && key.first.getPackageName().equals(pkg)) {
- mRequestedNotificationListeners.removeAt(j);
+ synchronized (mRequestedNotificationListeners) {
+ // Since the default behavior is to allow everything, we don't need to explicitly
+ // handle package add or update. they will be added to the xml file on next boot or
+ // when the user tries to change the settings.
+ if (removingPackage) {
+ for (int i = 0; i < pkgList.length; i++) {
+ String pkg = pkgList[i];
+ int userId = UserHandle.getUserId(uidList[i]);
+ for (int j = mRequestedNotificationListeners.size() - 1; j >= 0; j--) {
+ Pair<ComponentName, Integer> key =
+ mRequestedNotificationListeners.keyAt(j);
+ if (key.second == userId && key.first.getPackageName().equals(pkg)) {
+ mRequestedNotificationListeners.removeAt(j);
+ }
}
}
}
- }
- // clean up anything in the disallowed pkgs list
- for (int i = 0; i < pkgList.length; i++) {
- String pkg = pkgList[i];
- int userId = UserHandle.getUserId(uidList[i]);
- for (int j = mRequestedNotificationListeners.size() - 1; j >= 0; j--) {
- NotificationListenerFilter nlf = mRequestedNotificationListeners.valueAt(j);
+ // clean up anything in the disallowed pkgs list
+ for (int i = 0; i < pkgList.length; i++) {
+ String pkg = pkgList[i];
+ for (int j = mRequestedNotificationListeners.size() - 1; j >= 0; j--) {
+ NotificationListenerFilter nlf =
+ mRequestedNotificationListeners.valueAt(j);
- VersionedPackage ai = new VersionedPackage(pkg, uidList[i]);
- nlf.removePackage(ai);
+ VersionedPackage ai = new VersionedPackage(pkg, uidList[i]);
+ nlf.removePackage(ai);
+ }
}
}
}
@@ -10997,7 +11003,9 @@
}
NotificationListenerFilter nlf =
new NotificationListenerFilter(approved, disallowedPkgs);
- mRequestedNotificationListeners.put(Pair.create(cn, userId), nlf);
+ synchronized (mRequestedNotificationListeners) {
+ mRequestedNotificationListeners.put(Pair.create(cn, userId), nlf);
+ }
}
}
}
@@ -11005,72 +11013,81 @@
@Override
protected void writeExtraXmlTags(TypedXmlSerializer out) throws IOException {
out.startTag(null, TAG_REQUESTED_LISTENERS);
- for (Pair<ComponentName, Integer> listener : mRequestedNotificationListeners.keySet()) {
- NotificationListenerFilter nlf = mRequestedNotificationListeners.get(listener);
- out.startTag(null, TAG_REQUESTED_LISTENER);
- XmlUtils.writeStringAttribute(
- out, ATT_COMPONENT, listener.first.flattenToString());
- XmlUtils.writeIntAttribute(out, ATT_USER_ID, listener.second);
+ synchronized (mRequestedNotificationListeners) {
+ for (Pair<ComponentName, Integer> listener :
+ mRequestedNotificationListeners.keySet()) {
+ NotificationListenerFilter nlf = mRequestedNotificationListeners.get(listener);
+ out.startTag(null, TAG_REQUESTED_LISTENER);
+ XmlUtils.writeStringAttribute(
+ out, ATT_COMPONENT, listener.first.flattenToString());
+ XmlUtils.writeIntAttribute(out, ATT_USER_ID, listener.second);
- out.startTag(null, TAG_APPROVED);
- XmlUtils.writeIntAttribute(out, ATT_TYPES, nlf.getTypes());
- out.endTag(null, TAG_APPROVED);
+ out.startTag(null, TAG_APPROVED);
+ XmlUtils.writeIntAttribute(out, ATT_TYPES, nlf.getTypes());
+ out.endTag(null, TAG_APPROVED);
- for (VersionedPackage ai : nlf.getDisallowedPackages()) {
- if (!TextUtils.isEmpty(ai.getPackageName())) {
- out.startTag(null, TAG_DISALLOWED);
- XmlUtils.writeStringAttribute(out, ATT_PKG, ai.getPackageName());
- XmlUtils.writeIntAttribute(out, ATT_UID, ai.getVersionCode());
- out.endTag(null, TAG_DISALLOWED);
+ for (VersionedPackage ai : nlf.getDisallowedPackages()) {
+ if (!TextUtils.isEmpty(ai.getPackageName())) {
+ out.startTag(null, TAG_DISALLOWED);
+ XmlUtils.writeStringAttribute(out, ATT_PKG, ai.getPackageName());
+ XmlUtils.writeIntAttribute(out, ATT_UID, ai.getVersionCode());
+ out.endTag(null, TAG_DISALLOWED);
+ }
}
- }
- out.endTag(null, TAG_REQUESTED_LISTENER);
+ out.endTag(null, TAG_REQUESTED_LISTENER);
+ }
}
out.endTag(null, TAG_REQUESTED_LISTENERS);
}
- protected @Nullable NotificationListenerFilter getNotificationListenerFilter(
+ @Nullable protected NotificationListenerFilter getNotificationListenerFilter(
Pair<ComponentName, Integer> pair) {
- return mRequestedNotificationListeners.get(pair);
+ synchronized (mRequestedNotificationListeners) {
+ return mRequestedNotificationListeners.get(pair);
+ }
}
protected void setNotificationListenerFilter(Pair<ComponentName, Integer> pair,
NotificationListenerFilter nlf) {
- mRequestedNotificationListeners.put(pair, nlf);
+ synchronized (mRequestedNotificationListeners) {
+ mRequestedNotificationListeners.put(pair, nlf);
+ }
}
@Override
protected void ensureFilters(ServiceInfo si, int userId) {
- Pair listener = Pair.create(si.getComponentName(), userId);
- NotificationListenerFilter existingNlf =
- mRequestedNotificationListeners.get(listener);
- if (si.metaData != null) {
- if (existingNlf == null) {
- // no stored filters for this listener; see if they provided a default
- if (si.metaData.containsKey(META_DATA_DEFAULT_FILTER_TYPES)) {
- String typeList =
- si.metaData.get(META_DATA_DEFAULT_FILTER_TYPES).toString();
- if (typeList != null) {
- int types = getTypesFromStringList(typeList);
- NotificationListenerFilter nlf =
- new NotificationListenerFilter(types, new ArraySet<>());
- mRequestedNotificationListeners.put(listener, nlf);
+ Pair<ComponentName, Integer> listener = Pair.create(si.getComponentName(), userId);
+ synchronized (mRequestedNotificationListeners) {
+ NotificationListenerFilter existingNlf =
+ mRequestedNotificationListeners.get(listener);
+ if (si.metaData != null) {
+ if (existingNlf == null) {
+ // no stored filters for this listener; see if they provided a default
+ if (si.metaData.containsKey(META_DATA_DEFAULT_FILTER_TYPES)) {
+ String typeList =
+ si.metaData.get(META_DATA_DEFAULT_FILTER_TYPES).toString();
+ if (typeList != null) {
+ int types = getTypesFromStringList(typeList);
+ NotificationListenerFilter nlf =
+ new NotificationListenerFilter(types, new ArraySet<>());
+ mRequestedNotificationListeners.put(listener, nlf);
+ }
}
}
- }
- // also check the types they never want bridged
- if (si.metaData.containsKey(META_DATA_DISABLED_FILTER_TYPES)) {
- int neverBridge = getTypesFromStringList(si.metaData.get(
- META_DATA_DISABLED_FILTER_TYPES).toString());
- if (neverBridge != 0) {
- NotificationListenerFilter nlf =
- mRequestedNotificationListeners.getOrDefault(
- listener, new NotificationListenerFilter());
- nlf.setTypes(nlf.getTypes() & ~neverBridge);
- mRequestedNotificationListeners.put(listener, nlf);
+ // also check the types they never want bridged
+ if (si.metaData.containsKey(META_DATA_DISABLED_FILTER_TYPES)) {
+ int neverBridge = getTypesFromStringList(si.metaData.get(
+ META_DATA_DISABLED_FILTER_TYPES).toString());
+ if (neverBridge != 0) {
+ NotificationListenerFilter nlf =
+ mRequestedNotificationListeners.getOrDefault(
+ listener, new NotificationListenerFilter());
+ nlf.setTypes(nlf.getTypes() & ~neverBridge);
+ mRequestedNotificationListeners.put(listener, nlf);
+ }
}
}
}
diff --git a/services/core/java/com/android/server/pm/BroadcastHelper.java b/services/core/java/com/android/server/pm/BroadcastHelper.java
index c1171fa..2704f56 100644
--- a/services/core/java/com/android/server/pm/BroadcastHelper.java
+++ b/services/core/java/com/android/server/pm/BroadcastHelper.java
@@ -38,6 +38,7 @@
import android.content.IIntentReceiver;
import android.content.Intent;
import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.PowerExemptionManager;
@@ -337,7 +338,7 @@
broadcastAllowlist, null /* filterExtrasForReceiver */, null);
// Send to PermissionController for all new users, even if it may not be running for some
// users
- if (isPrivacySafetyLabelChangeNotificationsEnabled()) {
+ if (isPrivacySafetyLabelChangeNotificationsEnabled(mContext)) {
sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
packageName, extras, 0,
mContext.getPackageManager().getPermissionControllerPackageName(),
@@ -389,9 +390,13 @@
}
/** Returns whether the Safety Label Change notification, a privacy feature, is enabled. */
- public static boolean isPrivacySafetyLabelChangeNotificationsEnabled() {
+ public static boolean isPrivacySafetyLabelChangeNotificationsEnabled(Context context) {
+ PackageManager packageManager = context.getPackageManager();
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
- SAFETY_LABEL_CHANGE_NOTIFICATIONS_ENABLED, false);
+ SAFETY_LABEL_CHANGE_NOTIFICATIONS_ENABLED, false)
+ && !packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ && !packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
+ && !packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH);
}
@NonNull
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 6f7ce80..1aa1fd1 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -4298,6 +4298,11 @@
if (Process.isSdkSandboxUid(uid)) {
uid = getBaseSdkSandboxUid();
}
+ if (Process.isIsolatedUid(uid)
+ && mPermissionManager.getHotwordDetectionServiceProvider() != null
+ && uid == mPermissionManager.getHotwordDetectionServiceProvider().getUid()) {
+ uid = getIsolatedOwner(uid);
+ }
final int callingUserId = UserHandle.getUserId(callingUid);
final int appId = UserHandle.getAppId(uid);
final Object obj = mSettings.getSettingBase(appId);
@@ -4334,6 +4339,11 @@
if (Process.isSdkSandboxUid(uid)) {
uid = getBaseSdkSandboxUid();
}
+ if (Process.isIsolatedUid(uid)
+ && mPermissionManager.getHotwordDetectionServiceProvider() != null
+ && uid == mPermissionManager.getHotwordDetectionServiceProvider().getUid()) {
+ uid = getIsolatedOwner(uid);
+ }
final int appId = UserHandle.getAppId(uid);
final Object obj = mSettings.getSettingBase(appId);
if (obj instanceof SharedUserSetting) {
diff --git a/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFilter.java b/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFilter.java
index 9683469..dc5915d 100644
--- a/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFilter.java
+++ b/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFilter.java
@@ -37,7 +37,7 @@
Direction.TO_PROFILE
})
@Retention(RetentionPolicy.SOURCE)
- @interface Direction {
+ public @interface Direction {
int TO_PARENT = 0;
int TO_PROFILE = 1;
}
diff --git a/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFiltersUtils.java b/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFiltersUtils.java
index 9eb73aa..48ee64f 100644
--- a/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFiltersUtils.java
+++ b/services/core/java/com/android/server/pm/DefaultCrossProfileIntentFiltersUtils.java
@@ -25,6 +25,7 @@
import android.provider.AlarmClock;
import android.provider.MediaStore;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -88,6 +89,23 @@
.addDataType("vnd.android.cursor.item/calls")
.build();
+ /** Dial intent with mime type exclusively handled by managed profile. */
+ private static final DefaultCrossProfileIntentFilter DIAL_MIME_MANAGED_PROFILE =
+ new DefaultCrossProfileIntentFilter.Builder(
+ DefaultCrossProfileIntentFilter.Direction.TO_PROFILE,
+ SKIP_CURRENT_PROFILE,
+ /* letsPersonalDataIntoProfile= */ false)
+ .addAction(Intent.ACTION_DIAL)
+ .addAction(Intent.ACTION_VIEW)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addCategory(Intent.CATEGORY_BROWSABLE)
+ .addDataType("vnd.android.cursor.item/phone")
+ .addDataType("vnd.android.cursor.item/phone_v2")
+ .addDataType("vnd.android.cursor.item/person")
+ .addDataType("vnd.android.cursor.dir/calls")
+ .addDataType("vnd.android.cursor.item/calls")
+ .build();
+
/** Dial intent with data scheme can be handled by either managed profile or its parent user. */
private static final DefaultCrossProfileIntentFilter DIAL_DATA =
new DefaultCrossProfileIntentFilter.Builder(
@@ -103,6 +121,21 @@
.addDataScheme("voicemail")
.build();
+ /** Dial intent with data scheme exclusively handled by managed profile. */
+ private static final DefaultCrossProfileIntentFilter DIAL_DATA_MANAGED_PROFILE =
+ new DefaultCrossProfileIntentFilter.Builder(
+ DefaultCrossProfileIntentFilter.Direction.TO_PROFILE,
+ SKIP_CURRENT_PROFILE,
+ /* letsPersonalDataIntoProfile= */ false)
+ .addAction(Intent.ACTION_DIAL)
+ .addAction(Intent.ACTION_VIEW)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addCategory(Intent.CATEGORY_BROWSABLE)
+ .addDataScheme("tel")
+ .addDataScheme("sip")
+ .addDataScheme("voicemail")
+ .build();
+
/**
* Dial intent with no data scheme or type can be handled by either managed profile or its
* parent user.
@@ -117,6 +150,19 @@
.addCategory(Intent.CATEGORY_BROWSABLE)
.build();
+ /**
+ * Dial intent with no data scheme or type exclusively handled by managed profile.
+ */
+ private static final DefaultCrossProfileIntentFilter DIAL_RAW_MANAGED_PROFILE =
+ new DefaultCrossProfileIntentFilter.Builder(
+ DefaultCrossProfileIntentFilter.Direction.TO_PROFILE,
+ SKIP_CURRENT_PROFILE,
+ /* letsPersonalDataIntoProfile= */ false)
+ .addAction(Intent.ACTION_DIAL)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addCategory(Intent.CATEGORY_BROWSABLE)
+ .build();
+
/** Pressing the call button can be handled by either managed profile or its parent user. */
private static final DefaultCrossProfileIntentFilter CALL_BUTTON =
new DefaultCrossProfileIntentFilter.Builder(
@@ -143,6 +189,22 @@
.addDataScheme("mmsto")
.build();
+ /** SMS and MMS intent exclusively handled by the managed profile. */
+ private static final DefaultCrossProfileIntentFilter SMS_MMS_MANAGED_PROFILE =
+ new DefaultCrossProfileIntentFilter.Builder(
+ DefaultCrossProfileIntentFilter.Direction.TO_PROFILE,
+ SKIP_CURRENT_PROFILE,
+ /* letsPersonalDataIntoProfile= */ false)
+ .addAction(Intent.ACTION_VIEW)
+ .addAction(Intent.ACTION_SENDTO)
+ .addCategory(Intent.CATEGORY_DEFAULT)
+ .addCategory(Intent.CATEGORY_BROWSABLE)
+ .addDataScheme("sms")
+ .addDataScheme("smsto")
+ .addDataScheme("mms")
+ .addDataScheme("mmsto")
+ .build();
+
/** Mobile network settings is always shown in the primary user. */
private static final DefaultCrossProfileIntentFilter
MOBILE_NETWORK_SETTINGS =
@@ -297,14 +359,12 @@
.build();
public static List<DefaultCrossProfileIntentFilter> getDefaultManagedProfileFilters() {
- return Arrays.asList(
+ List<DefaultCrossProfileIntentFilter> filters =
+ new ArrayList<DefaultCrossProfileIntentFilter>();
+ filters.addAll(Arrays.asList(
EMERGENCY_CALL_MIME,
EMERGENCY_CALL_DATA,
- DIAL_MIME,
- DIAL_DATA,
- DIAL_RAW,
CALL_BUTTON,
- SMS_MMS,
SET_ALARM,
MEDIA_CAPTURE,
RECOGNIZE_SPEECH,
@@ -317,11 +377,13 @@
USB_DEVICE_ATTACHED,
ACTION_SEND,
HOME,
- MOBILE_NETWORK_SETTINGS);
+ MOBILE_NETWORK_SETTINGS));
+ filters.addAll(getDefaultCrossProfileTelephonyIntentFilters(false));
+ return filters;
}
- /** Call intent with tel scheme */
- private static final DefaultCrossProfileIntentFilter CALL =
+ /** Call intent with tel scheme exclusively handled my managed profile. */
+ private static final DefaultCrossProfileIntentFilter CALL_MANAGED_PROFILE =
new DefaultCrossProfileIntentFilter.Builder(
DefaultCrossProfileIntentFilter.Direction.TO_PROFILE,
SKIP_CURRENT_PROFILE,
@@ -334,13 +396,22 @@
/**
* Returns default telephony related intent filters for managed profile.
*/
- public static List<DefaultCrossProfileIntentFilter> getDefaultManagedProfileTelephonyFilters() {
- return Arrays.asList(
- DIAL_DATA,
- DIAL_MIME,
- DIAL_RAW,
- CALL,
- SMS_MMS);
+ public static List<DefaultCrossProfileIntentFilter>
+ getDefaultCrossProfileTelephonyIntentFilters(boolean telephonyOnlyInManagedProfile) {
+ if (telephonyOnlyInManagedProfile) {
+ return Arrays.asList(
+ DIAL_DATA_MANAGED_PROFILE,
+ DIAL_MIME_MANAGED_PROFILE,
+ DIAL_RAW_MANAGED_PROFILE,
+ CALL_MANAGED_PROFILE,
+ SMS_MMS_MANAGED_PROFILE);
+ } else {
+ return Arrays.asList(
+ DIAL_DATA,
+ DIAL_MIME,
+ DIAL_RAW,
+ SMS_MMS);
+ }
}
/**
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index e487267..1e0c95c 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -49,6 +49,7 @@
import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
import static com.android.server.pm.InstructionSets.getDexCodeInstructionSet;
import static com.android.server.pm.InstructionSets.getPreferredInstructionSet;
+import static com.android.server.pm.PackageManagerService.APP_METADATA_FILE_NAME;
import static com.android.server.pm.PackageManagerService.DEBUG_BACKUP;
import static com.android.server.pm.PackageManagerService.DEBUG_COMPRESSION;
import static com.android.server.pm.PackageManagerService.DEBUG_INSTALL;
@@ -497,6 +498,13 @@
mPm.setUpCustomResolverActivity(pkg, pkgSetting);
}
+ File appMetadataFile = new File(pkgSetting.getPath(), APP_METADATA_FILE_NAME);
+ if (appMetadataFile.exists()) {
+ pkgSetting.setAppMetadataFilePath(appMetadataFile.getAbsolutePath());
+ } else {
+ pkgSetting.setAppMetadataFilePath(null);
+ }
+
if (pkg.getPackageName().equals("android")) {
mPm.setPlatformPackage(pkg, pkgSetting);
}
@@ -994,7 +1002,7 @@
reconciledPackages = ReconcilePackageUtils.reconcilePackages(
requests, Collections.unmodifiableMap(mPm.mPackages),
versionInfos, mSharedLibraries, mPm.mSettings.getKeySetManagerService(),
- mPm.mSettings, mContext);
+ mPm.mSettings);
} catch (ReconcileFailure e) {
for (InstallRequest request : requests) {
request.setError("Reconciliation failed...", e);
@@ -1135,22 +1143,22 @@
// behavior.
if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
"MinInstallableTargetSdk__install_block_enabled",
- true)) {
+ false)) {
int minInstallableTargetSdk =
DeviceConfig.getInt(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
"MinInstallableTargetSdk__min_installable_target_sdk",
- PackageManagerService.MIN_INSTALLABLE_TARGET_SDK);
+ 0);
// Determine if enforcement is in strict mode
boolean strictMode = false;
if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
"MinInstallableTargetSdk__install_block_strict_mode_enabled",
- true)) {
+ false)) {
if (parsedPackage.getTargetSdkVersion()
< DeviceConfig.getInt(DeviceConfig.NAMESPACE_PACKAGE_MANAGER_SERVICE,
"MinInstallableTargetSdk__strict_mode_target_sdk",
- PackageManagerService.MIN_INSTALLABLE_TARGET_SDK)) {
+ 0)) {
strictMode = true;
}
}
@@ -2265,10 +2273,26 @@
// The caller explicitly specified INSTALL_ALL_USERS flag.
// Thus, updating the settings to install the app for all users.
for (int currentUserId : allUsers) {
- ps.setInstalled(true, currentUserId);
- if (!installRequest.isApplicationEnabledSettingPersistent()) {
- ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, currentUserId,
- installerPackageName);
+ // If the app is already installed for the currentUser,
+ // keep it as installed as we might be updating the app at this place.
+ // If not currently installed, check if the currentUser is restricted by
+ // DISALLOW_INSTALL_APPS or DISALLOW_DEBUGGING_FEATURES device policy.
+ // Install / update the app if the user isn't restricted. Skip otherwise.
+ final boolean installedForCurrentUser = ArrayUtils.contains(
+ installedForUsers, currentUserId);
+ final boolean restrictedByPolicy =
+ mPm.isUserRestricted(currentUserId,
+ UserManager.DISALLOW_INSTALL_APPS)
+ || mPm.isUserRestricted(currentUserId,
+ UserManager.DISALLOW_DEBUGGING_FEATURES);
+ if (installedForCurrentUser || !restrictedByPolicy) {
+ ps.setInstalled(true, currentUserId);
+ if (!installRequest.isApplicationEnabledSettingPersistent()) {
+ ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, currentUserId,
+ installerPackageName);
+ }
+ } else {
+ ps.setInstalled(false, currentUserId);
}
}
}
@@ -2930,7 +2954,7 @@
}
// Send to PermissionController for all update users, even if it may not be running
// for some users
- if (BroadcastHelper.isPrivacySafetyLabelChangeNotificationsEnabled()) {
+ if (BroadcastHelper.isPrivacySafetyLabelChangeNotificationsEnabled(mContext)) {
mPm.sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, packageName,
extras, 0 /*flags*/,
mPm.mRequiredPermissionControllerPackage, null /*finishedReceiver*/,
@@ -3930,7 +3954,7 @@
mPm.mPackages, Collections.singletonMap(pkgName,
mPm.getSettingsVersionForPackage(parsedPackage)),
mSharedLibraries, mPm.mSettings.getKeySetManagerService(),
- mPm.mSettings, mContext);
+ mPm.mSettings);
if ((scanFlags & SCAN_AS_APEX) == 0) {
appIdCreated = optimisticallyRegisterAppId(installRequest);
} else {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 3e1a1ac..b5108af 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -560,14 +560,6 @@
// How many required verifiers can be on the system.
private static final int REQUIRED_VERIFIERS_MAX_COUNT = 2;
- /**
- * Specifies the minimum target SDK version an apk must specify in order to be installed
- * on the system. This improves security and privacy by blocking low
- * target sdk apps as malware can target older sdk versions to avoid
- * the enforcement of new API behavior.
- */
- public static final int MIN_INSTALLABLE_TARGET_SDK = Build.VERSION_CODES.M;
-
// Compilation reasons.
// TODO(b/260124949): Clean this up with the legacy dexopt code.
public static final int REASON_FIRST_BOOT = 0;
@@ -2364,6 +2356,32 @@
SystemClock.uptimeMillis() - startTime);
}
+ // If this is first boot or first boot after OTA then set the file path to the app
+ // metadata files for preloaded packages.
+ if (mFirstBoot || isDeviceUpgrading()) {
+ ArrayMap<String, String> paths = systemConfig.getAppMetadataFilePaths();
+ for (Map.Entry<String, String> entry : paths.entrySet()) {
+ String pkgName = entry.getKey();
+ String path = entry.getValue();
+ File file = new File(path);
+ if (!file.exists()) {
+ path = null;
+ }
+ PackageSetting disabledPkgSetting = mSettings.getDisabledSystemPkgLPr(pkgName);
+ if (disabledPkgSetting == null) {
+ PackageSetting pkgSetting = mSettings.getPackageLPr(pkgName);
+ if (pkgSetting != null) {
+ pkgSetting.setAppMetadataFilePath(path);
+ } else {
+ Slog.w(TAG, "Cannot set app metadata file for nonexistent package "
+ + pkgName);
+ }
+ } else {
+ disabledPkgSetting.setAppMetadataFilePath(path);
+ }
+ }
+ }
+
// Rebuild the live computer since some attributes have been rebuilt.
mLiveComputer = createLiveComputer();
@@ -5164,12 +5182,16 @@
throw new ParcelableException(
new PackageManager.NameNotFoundException(packageName));
}
- try {
- File file = new File(ps.getPath(), APP_METADATA_FILE_NAME);
- return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
- } catch (FileNotFoundException e) {
- return null;
+ String filePath = ps.getAppMetadataFilePath();
+ if (filePath != null) {
+ File file = new File(filePath);
+ try {
+ return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
+ } catch (FileNotFoundException e) {
+ return null;
+ }
}
+ return null;
}
@Override
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 89f46fe..eea6720 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -124,10 +124,12 @@
import libcore.io.IoUtils;
import libcore.io.Streams;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URISyntaxException;
@@ -348,6 +350,8 @@
return runDisableVerificationForUid();
case "set-silent-updates-policy":
return runSetSilentUpdatesPolicy();
+ case "get-app-metadata":
+ return runGetAppMetadata();
default: {
if (ART_SERVICE_COMMANDS.contains(cmd)) {
if (DexOptHelper.useArtService()) {
@@ -3541,6 +3545,30 @@
return 1;
}
+ private int runGetAppMetadata() {
+ final PrintWriter pw = getOutPrintWriter();
+ String pkgName = getNextArgRequired();
+ ParcelFileDescriptor pfd = null;
+ try {
+ pfd = mInterface.getAppMetadataFd(pkgName, mContext.getUserId());
+ } catch (RemoteException e) {
+ pw.println("Failure [" + e.getClass().getName() + " - " + e.getMessage() + "]");
+ return -1;
+ }
+ if (pfd != null) {
+ try (BufferedReader br = new BufferedReader(
+ new InputStreamReader(new ParcelFileDescriptor.AutoCloseInputStream(pfd)))) {
+ while (br.ready()) {
+ pw.println(br.readLine());
+ }
+ } catch (IOException e) {
+ pw.println("Failure [" + e.getClass().getName() + " - " + e.getMessage() + "]");
+ return -1;
+ }
+ }
+ return 1;
+ }
+
private int runArtServiceCommand() {
try (var in = ParcelFileDescriptor.dup(getInFileDescriptor());
var out = ParcelFileDescriptor.dup(getOutFileDescriptor());
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 839ff41..7fda092 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -189,6 +189,9 @@
@NonNull
private UUID mDomainSetId;
+ @Nullable
+ private String mAppMetadataFilePath;
+
/**
* Snapshot support.
*/
@@ -655,6 +658,7 @@
updateAvailable = other.updateAvailable;
forceQueryableOverride = other.forceQueryableOverride;
mDomainSetId = other.mDomainSetId;
+ mAppMetadataFilePath = other.mAppMetadataFilePath;
usesSdkLibraries = other.usesSdkLibraries != null
? Arrays.copyOf(other.usesSdkLibraries,
@@ -1171,6 +1175,15 @@
return this;
}
+ /**
+ * @param path to app metadata file
+ */
+ public PackageSetting setAppMetadataFilePath(String path) {
+ mAppMetadataFilePath = path;
+ onChanged();
+ return this;
+ }
+
@NonNull
@Override
public long getVersionCode() {
@@ -1579,11 +1592,16 @@
return mDomainSetId;
}
+ @DataClass.Generated.Member
+ public @Nullable String getAppMetadataFilePath() {
+ return mAppMetadataFilePath;
+ }
+
@DataClass.Generated(
- time = 1678228625853L,
+ time = 1680917079522L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/services/core/java/com/android/server/pm/PackageSetting.java",
- inputSignatures = "private int mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\nprivate @android.annotation.Nullable java.lang.String[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\nprivate @android.annotation.Nullable java.lang.String[] usesStaticLibraries\nprivate @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.Nullable java.lang.String mRealName\nprivate int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate long mLoadingCompletedTime\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate long mLastModifiedTime\nprivate long lastUpdateTime\nprivate long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate boolean installPermissionsFixed\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate int categoryOverride\nprivate boolean updateAvailable\nprivate boolean forceQueryableOverride\nprivate final @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic com.android.server.pm.PackageSetting setAppId(int)\npublic com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic com.android.server.pm.PackageSetting setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\npublic com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic com.android.server.pm.PackageSetting setInstallerPackage(java.lang.String,int)\npublic com.android.server.pm.PackageSetting setUpdateOwnerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic boolean setMimeGroup(java.lang.String,android.util.ArraySet<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic @java.lang.Override boolean isExternalStorage()\npublic com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic boolean isPrivileged()\npublic boolean isOem()\npublic boolean isVendor()\npublic boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic boolean isSystemExt()\npublic boolean isOdm()\npublic boolean isSystem()\npublic android.content.pm.SigningDetails getSigningDetails()\npublic com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic void copyPackageSetting(com.android.server.pm.PackageSetting,boolean)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n void setEnabled(int,int,java.lang.String)\n int getEnabled(int)\n void setInstalled(boolean,int)\n boolean getInstalled(int)\n int getInstallReason(int)\n void setInstallReason(int,int)\n int getUninstallReason(int)\n void setUninstallReason(int,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n boolean isAnyInstalled(int[])\n int[] queryInstalledUsers(int[],boolean)\n long getCeDataInode(int)\n void setCeDataInode(long,int)\n boolean getStopped(int)\n void setStopped(boolean,int)\n boolean getNotLaunched(int)\n void setNotLaunched(boolean,int)\n boolean getHidden(int)\n void setHidden(boolean,int)\n int getDistractionFlags(int)\n void setDistractionFlags(int,int)\npublic boolean getInstantApp(int)\n void setInstantApp(boolean,int)\n boolean getVirtualPreload(int)\n void setVirtualPreload(boolean,int)\n void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String,long)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponents(int)\n com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponents(int)\n void setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n void addDisabledComponent(java.lang.String,int)\n void addEnabledComponent(java.lang.String,int)\n boolean enableComponentLPw(java.lang.String,int)\n boolean disableComponentLPw(java.lang.String,int)\n boolean restoreComponentLPw(java.lang.String,int)\n int getCurrentEnabledStateLPr(java.lang.String,int)\n void removeUser(int)\npublic int[] getNotInstalledUserIds()\n void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\n com.android.server.pm.PackageSetting setPath(java.io.File)\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic void resetOverrideComponentLabelIcon(int)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic boolean isIncremental()\npublic boolean isLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<com.android.server.pm.pkg.SharedLibrary> getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic com.android.server.pm.PackageSetting setMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set<java.lang.String>)\npublic com.android.server.pm.PackageSetting setUsesSdkLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\npublic com.android.server.pm.PackageSetting setUsesStaticLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesStaticLibrariesVersions(long[])\npublic com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set<java.lang.String>)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
+ inputSignatures = "private int mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\nprivate @android.annotation.Nullable java.lang.String[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\nprivate @android.annotation.Nullable java.lang.String[] usesStaticLibraries\nprivate @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.Nullable java.lang.String mRealName\nprivate int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate float mLoadingProgress\nprivate long mLoadingCompletedTime\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate long mLastModifiedTime\nprivate long lastUpdateTime\nprivate long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate boolean installPermissionsFixed\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate int categoryOverride\nprivate boolean updateAvailable\nprivate boolean forceQueryableOverride\nprivate final @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate @android.annotation.Nullable java.lang.String mAppMetadataFilePath\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic com.android.server.pm.PackageSetting snapshot()\npublic void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic com.android.server.pm.PackageSetting setAppId(int)\npublic com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic com.android.server.pm.PackageSetting setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\npublic com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic com.android.server.pm.PackageSetting setInstallerPackage(java.lang.String,int)\npublic com.android.server.pm.PackageSetting setUpdateOwnerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic boolean setMimeGroup(java.lang.String,android.util.ArraySet<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\npublic com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic @java.lang.Override boolean isExternalStorage()\npublic com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected void copyMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic void updateFrom(com.android.server.pm.PackageSetting)\n com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic boolean isPrivileged()\npublic boolean isOem()\npublic boolean isVendor()\npublic boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic boolean isSystemExt()\npublic boolean isOdm()\npublic boolean isSystem()\npublic android.content.pm.SigningDetails getSigningDetails()\npublic com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic void copyPackageSetting(com.android.server.pm.PackageSetting,boolean)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n void setEnabled(int,int,java.lang.String)\n int getEnabled(int)\n void setInstalled(boolean,int)\n boolean getInstalled(int)\n int getInstallReason(int)\n void setInstallReason(int,int)\n int getUninstallReason(int)\n void setUninstallReason(int,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n boolean isAnyInstalled(int[])\n int[] queryInstalledUsers(int[],boolean)\n long getCeDataInode(int)\n void setCeDataInode(long,int)\n boolean getStopped(int)\n void setStopped(boolean,int)\n boolean getNotLaunched(int)\n void setNotLaunched(boolean,int)\n boolean getHidden(int)\n void setHidden(boolean,int)\n int getDistractionFlags(int)\n void setDistractionFlags(int,int)\npublic boolean getInstantApp(int)\n void setInstantApp(boolean,int)\n boolean getVirtualPreload(int)\n void setVirtualPreload(boolean,int)\n void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String,long)\n void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponents(int)\n com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponents(int)\n void setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n void addDisabledComponent(java.lang.String,int)\n void addEnabledComponent(java.lang.String,int)\n boolean enableComponentLPw(java.lang.String,int)\n boolean disableComponentLPw(java.lang.String,int)\n boolean restoreComponentLPw(java.lang.String,int)\n int getCurrentEnabledStateLPr(java.lang.String,int)\n void removeUser(int)\npublic int[] getNotInstalledUserIds()\n void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\n com.android.server.pm.PackageSetting setPath(java.io.File)\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic void resetOverrideComponentLabelIcon(int)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic boolean isIncremental()\npublic boolean isLoading()\npublic com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic com.android.server.pm.PackageSetting setAppMetadataFilePath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<com.android.server.pm.pkg.SharedLibrary> getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic com.android.server.pm.PackageSetting setMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set<java.lang.String>)\npublic com.android.server.pm.PackageSetting setUsesSdkLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\npublic com.android.server.pm.PackageSetting setUsesStaticLibraries(java.lang.String[])\npublic com.android.server.pm.PackageSetting setUsesStaticLibrariesVersions(long[])\npublic com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set<java.lang.String>)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
@Deprecated
private void __metadata() {}
diff --git a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
index e3c97e9..5312ae6 100644
--- a/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
+++ b/services/core/java/com/android/server/pm/ReconcilePackageUtils.java
@@ -16,7 +16,6 @@
package com.android.server.pm;
-import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK;
import static android.content.pm.PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
import static android.content.pm.SigningDetails.CapabilityMergeRule.MERGE_RESTRICTED_CAPABILITY;
@@ -24,24 +23,19 @@
import static com.android.server.pm.PackageManagerService.SCAN_BOOTING;
import static com.android.server.pm.PackageManagerService.SCAN_DONT_KILL_APP;
-import android.content.Context;
import android.content.pm.PackageManager;
-import android.content.pm.PermissionInfo;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.SigningDetails;
import android.os.SystemProperties;
-import android.permission.PermissionManager;
import android.util.ArrayMap;
import android.util.Log;
import com.android.server.pm.parsing.pkg.ParsedPackage;
import com.android.server.pm.pkg.AndroidPackage;
-import com.android.server.pm.pkg.component.ParsedUsesPermission;
import com.android.server.pm.pkg.parsing.ParsingPackageUtils;
import com.android.server.utils.WatchedLongSparseArray;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -60,7 +54,7 @@
Map<String, AndroidPackage> allPackages,
Map<String, Settings.VersionInfo> versionInfos,
SharedLibrariesImpl sharedLibraries,
- KeySetManagerService ksms, Settings settings, Context context)
+ KeySetManagerService ksms, Settings settings)
throws ReconcileFailure {
final List<ReconciledPackage> result = new ArrayList<>(installRequests.size());
@@ -149,11 +143,11 @@
} else {
if ((parseFlags & ParsingPackageUtils.PARSE_IS_SYSTEM_DIR) == 0) {
throw new ReconcileFailure(INSTALL_FAILED_UPDATE_INCOMPATIBLE,
- "Package " + installPackageName
+ "Package " + parsedPackage.getPackageName()
+ " upgrade keys do not match the previously installed"
+ " version");
} else {
- String msg = "System package " + installPackageName
+ String msg = "System package " + parsedPackage.getPackageName()
+ " signature changed; retaining data.";
PackageManagerService.reportSettingsProblem(Log.WARN, msg);
}
@@ -174,42 +168,11 @@
removeAppKeySetData = true;
}
- // if this is a sharedUser, check to see if the new package is signed by a
- // newer signing certificate than the existing one, and if so, copy over the new
+ // if this is is a sharedUser, check to see if the new package is signed by a
+ // newer
+ // signing certificate than the existing one, and if so, copy over the new
// details
if (sharedUserSetting != null) {
- if (!parsedPackage.isTestOnly() && sharedUserSetting.isPrivileged()
- && !signatureCheckPs.isSystem()) {
- final List<ParsedUsesPermission> usesPermissions =
- parsedPackage.getUsesPermissions();
- final List<String> usesPrivilegedPermissions = new ArrayList<>();
- final PermissionManager permissionManager = context.getSystemService(
- PermissionManager.class);
- // Check if the app requests any privileged permissions because that
- // violates the privapp-permissions allowlist check during boot.
- if (permissionManager != null) {
- for (int i = 0; i < usesPermissions.size(); i++) {
- final String permissionName = usesPermissions.get(i).getName();
- final PermissionInfo permissionInfo =
- permissionManager.getPermissionInfo(permissionName, 0);
- if (permissionInfo != null
- && (permissionInfo.getProtectionFlags()
- & PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) {
- usesPrivilegedPermissions.add(permissionName);
- }
- }
- }
-
- if (!usesPrivilegedPermissions.isEmpty()) {
- throw new ReconcileFailure(INSTALL_FAILED_INVALID_APK,
- "Non-system package: " + installPackageName
- + " shares signature and sharedUserId with"
- + " a privileged package but requests"
- + " privileged permissions that are not"
- + " allowed: " + Arrays.toString(
- usesPrivilegedPermissions.toArray()));
- }
- }
// Attempt to merge the existing lineage for the shared SigningDetails with
// the lineage of the new package; if the shared SigningDetails are not
// returned this indicates the new package added new signers to the lineage
@@ -226,7 +189,7 @@
for (AndroidPackage androidPackage : sharedUserSetting.getPackages()) {
if (androidPackage.getPackageName() != null
&& !androidPackage.getPackageName().equals(
- installPackageName)) {
+ parsedPackage.getPackageName())) {
mergedDetails = mergedDetails.mergeLineageWith(
androidPackage.getSigningDetails(),
MERGE_RESTRICTED_CAPABILITY);
@@ -256,7 +219,7 @@
if (sharedUserSetting != null) {
if (sharedUserSetting.signaturesChanged != null
&& !PackageManagerServiceUtils.canJoinSharedUserId(
- installPackageName, parsedPackage.getSigningDetails(),
+ parsedPackage.getPackageName(), parsedPackage.getSigningDetails(),
sharedUserSetting,
PackageManagerServiceUtils.SHARED_USER_ID_JOIN_TYPE_SYSTEM)) {
if (SystemProperties.getInt("ro.product.first_api_level", 0) <= 29) {
@@ -277,7 +240,7 @@
// whichever package happened to be scanned later.
throw new IllegalStateException(
"Signature mismatch on system package "
- + installPackageName
+ + parsedPackage.getPackageName()
+ " for shared user "
+ sharedUserSetting);
}
@@ -289,7 +252,7 @@
sharedUserSetting.signaturesChanged = Boolean.TRUE;
}
// File a report about this.
- String msg = "System package " + installPackageName
+ String msg = "System package " + parsedPackage.getPackageName()
+ " signature changed; retaining data.";
PackageManagerService.reportSettingsProblem(Log.WARN, msg);
} catch (IllegalArgumentException e) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 417ba07..e8f89d3 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -2905,6 +2905,11 @@
serializer.attributeLongHex(null, "loadingCompletedTime",
pkg.getLoadingCompletedTime());
+ if (pkg.getAppMetadataFilePath() != null) {
+ serializer.attribute(null, "appMetadataFilePath",
+ pkg.getAppMetadataFilePath());
+ }
+
writeUsesSdkLibLPw(serializer, pkg.getUsesSdkLibraries(),
pkg.getUsesSdkLibrariesVersionsMajor());
@@ -2994,6 +2999,10 @@
serializer.attribute(null, "domainSetId", pkg.getDomainSetId().toString());
+ if (pkg.getAppMetadataFilePath() != null) {
+ serializer.attribute(null, "appMetadataFilePath", pkg.getAppMetadataFilePath());
+ }
+
writeUsesSdkLibLPw(serializer, pkg.getUsesSdkLibraries(),
pkg.getUsesSdkLibrariesVersionsMajor());
@@ -3762,6 +3771,7 @@
float loadingProgress = 0;
long loadingCompletedTime = 0;
UUID domainSetId;
+ String appMetadataFilePath = null;
try {
name = parser.getAttributeValue(null, ATTR_NAME);
realName = parser.getAttributeValue(null, "realName");
@@ -3799,6 +3809,7 @@
volumeUuid = parser.getAttributeValue(null, "volumeUuid");
categoryHint = parser.getAttributeInt(null, "categoryHint",
ApplicationInfo.CATEGORY_UNDEFINED);
+ appMetadataFilePath = parser.getAttributeValue(null, "appMetadataFilePath");
String domainSetIdString = parser.getAttributeValue(null, "domainSetId");
@@ -3942,7 +3953,8 @@
.setUpdateAvailable(updateAvailable)
.setForceQueryableOverride(installedForceQueryable)
.setLoadingProgress(loadingProgress)
- .setLoadingCompletedTime(loadingCompletedTime);
+ .setLoadingCompletedTime(loadingCompletedTime)
+ .setAppMetadataFilePath(appMetadataFilePath);
// Handle legacy string here for single-user mode
final String enabledStr = parser.getAttributeValue(null, ATTR_ENABLED);
if (enabledStr != null) {
diff --git a/services/core/java/com/android/server/pm/VerifyingSession.java b/services/core/java/com/android/server/pm/VerifyingSession.java
index 5015985..7198de2 100644
--- a/services/core/java/com/android/server/pm/VerifyingSession.java
+++ b/services/core/java/com/android/server/pm/VerifyingSession.java
@@ -353,11 +353,10 @@
PackageInfoLite pkgLite,
PackageVerificationState verificationState) {
- // TODO: http://b/22976637
- // Apps installed for "all" users use the device owner to verify the app
+ // Apps installed for "all" users use the current user to verify the app
UserHandle verifierUser = getUser();
if (verifierUser == UserHandle.ALL) {
- verifierUser = UserHandle.SYSTEM;
+ verifierUser = UserHandle.of(mPm.mUserManager.getCurrentUserId());
}
final int verifierUserId = verifierUser.getIdentifier();
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
index 3a0ff27..f839648 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
@@ -105,4 +105,10 @@
*/
@Nullable
String getSecondaryCpuAbiLegacy();
+
+ /**
+ * @return the app metadata file path.
+ */
+ @Nullable
+ String getAppMetadataFilePath();
}
diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
index e437be8..2007079 100644
--- a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
+++ b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
@@ -17,10 +17,12 @@
package com.android.server.rollback;
import android.annotation.AnyThread;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.WorkerThread;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
@@ -68,6 +70,9 @@
final class RollbackPackageHealthObserver implements PackageHealthObserver {
private static final String TAG = "RollbackPackageHealthObserver";
private static final String NAME = "rollback-observer";
+ private static final String PROP_ATTEMPTING_REBOOT = "sys.attempting_reboot";
+ private static final int PERSISTENT_MASK = ApplicationInfo.FLAG_PERSISTENT
+ | ApplicationInfo.FLAG_SYSTEM;
private final Context mContext;
private final Handler mHandler;
@@ -114,10 +119,10 @@
// For native crashes, we will directly roll back any available rollbacks
// Note: For non-native crashes the rollback-all step has higher impact
impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_30;
- } else if (mitigationCount == 1 && getAvailableRollback(failedPackage) != null) {
+ } else if (getAvailableRollback(failedPackage) != null) {
// Rollback is available, we may get a callback into #execute
impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_30;
- } else if (mitigationCount > 1 && anyRollbackAvailable) {
+ } else if (anyRollbackAvailable) {
// If any rollbacks are available, we will commit them
impact = PackageHealthObserverImpact.USER_IMPACT_LEVEL_70;
}
@@ -133,14 +138,10 @@
return true;
}
- if (mitigationCount == 1) {
- RollbackInfo rollback = getAvailableRollback(failedPackage);
- if (rollback == null) {
- Slog.w(TAG, "Expected rollback but no valid rollback found for " + failedPackage);
- return false;
- }
+ RollbackInfo rollback = getAvailableRollback(failedPackage);
+ if (rollback != null) {
mHandler.post(() -> rollbackPackage(rollback, failedPackage, rollbackReason));
- } else if (mitigationCount > 1) {
+ } else {
mHandler.post(() -> rollbackAll(rollbackReason));
}
@@ -153,6 +154,30 @@
return NAME;
}
+ @Override
+ public boolean isPersistent() {
+ return true;
+ }
+
+ @Override
+ public boolean mayObservePackage(String packageName) {
+ if (mContext.getSystemService(RollbackManager.class)
+ .getAvailableRollbacks().isEmpty()) {
+ return false;
+ }
+ return isPersistentSystemApp(packageName);
+ }
+
+ private boolean isPersistentSystemApp(@NonNull String packageName) {
+ PackageManager pm = mContext.getPackageManager();
+ try {
+ ApplicationInfo info = pm.getApplicationInfo(packageName, 0);
+ return (info.flags & PERSISTENT_MASK) == PERSISTENT_MASK;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
private void assertInWorkerThread() {
Preconditions.checkState(mHandler.getLooper().isCurrentThread());
}
@@ -425,6 +450,7 @@
markStagedSessionHandled(rollback.getRollbackId());
// Wait for all pending staged sessions to get handled before rebooting.
if (isPendingStagedSessionsEmpty()) {
+ SystemProperties.set(PROP_ATTEMPTING_REBOOT, "true");
mContext.getSystemService(PowerManager.class).reboot("Rollback staged install");
}
}
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 433d807..6eded1a 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -21,6 +21,7 @@
import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_PASSTHROUGH;
+import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_UNSUPPORTED;
import static android.hardware.graphics.common.Hdr.DOLBY_VISION;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
@@ -170,6 +171,8 @@
import android.util.SparseIntArray;
import android.util.StatsEvent;
import android.util.proto.ProtoOutputStream;
+import android.uwb.UwbActivityEnergyInfo;
+import android.uwb.UwbManager;
import android.view.Display;
import com.android.internal.annotations.GuardedBy;
@@ -345,6 +348,7 @@
private StorageManager mStorageManager;
private WifiManager mWifiManager;
private TelephonyManager mTelephony;
+ private UwbManager mUwbManager;
private SubscriptionManager mSubscriptionManager;
private NetworkStatsManager mNetworkStatsManager;
@@ -414,6 +418,7 @@
private final Object mWifiActivityInfoLock = new Object();
private final Object mModemActivityInfoLock = new Object();
private final Object mBluetoothActivityInfoLock = new Object();
+ private final Object mUwbActivityInfoLock = new Object();
private final Object mSystemElapsedRealtimeLock = new Object();
private final Object mSystemUptimeLock = new Object();
private final Object mProcessMemoryStateLock = new Object();
@@ -536,6 +541,10 @@
synchronized (mBluetoothActivityInfoLock) {
return pullBluetoothActivityInfoLocked(atomTag, data);
}
+ case FrameworkStatsLog.UWB_ACTIVITY_INFO:
+ synchronized (mUwbActivityInfoLock) {
+ return pullUwbActivityInfoLocked(atomTag, data);
+ }
case FrameworkStatsLog.SYSTEM_ELAPSED_REALTIME:
synchronized (mSystemElapsedRealtimeLock) {
return pullSystemElapsedRealtimeLocked(atomTag, data);
@@ -750,6 +759,8 @@
return pullPendingIntentsPerPackage(atomTag, data);
case FrameworkStatsLog.HDR_CAPABILITIES:
return pullHdrCapabilities(atomTag, data);
+ case FrameworkStatsLog.CACHED_APPS_HIGH_WATERMARK:
+ return pullCachedAppsHighWatermark(atomTag, data);
default:
throw new UnsupportedOperationException("Unknown tagId=" + atomTag);
}
@@ -775,8 +786,12 @@
registerEventListeners();
});
} else if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
- // Network stats related pullers can only be initialized after service is ready.
- BackgroundThread.getHandler().post(() -> initAndRegisterNetworkStatsPullers());
+ BackgroundThread.getHandler().post(() -> {
+ // Network stats related pullers can only be initialized after service is ready.
+ initAndRegisterNetworkStatsPullers();
+ // For services that are not ready at boot phase PHASE_SYSTEM_SERVICES_READY
+ initAndRegisterDeferredPullers();
+ });
}
}
@@ -950,6 +965,7 @@
registerPendingIntentsPerPackagePuller();
registerPinnerServiceStats();
registerHdrCapabilitiesPuller();
+ registerCachedAppsHighWatermarkPuller();
}
private void initAndRegisterNetworkStatsPullers() {
@@ -986,6 +1002,12 @@
registerOemManagedBytesTransfer();
}
+ private void initAndRegisterDeferredPullers() {
+ mUwbManager = mContext.getSystemService(UwbManager.class);
+
+ registerUwbActivityInfo();
+ }
+
private IThermalService getIThermalService() {
synchronized (mThermalLock) {
if (mThermalService == null) {
@@ -2148,6 +2170,46 @@
return StatsManager.PULL_SUCCESS;
}
+ private void registerUwbActivityInfo() {
+ int tagId = FrameworkStatsLog.UWB_ACTIVITY_INFO;
+ mStatsManager.setPullAtomCallback(
+ tagId,
+ null, // use default PullAtomMetadata values
+ DIRECT_EXECUTOR,
+ mStatsCallbackImpl
+ );
+ }
+
+ int pullUwbActivityInfoLocked(int atomTag, List<StatsEvent> pulledData) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ SynchronousResultReceiver uwbReceiver = new SynchronousResultReceiver("uwb");
+ mUwbManager.getUwbActivityEnergyInfoAsync(Runnable::run,
+ info -> {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY, info);
+ uwbReceiver.send(0, bundle);
+ }
+ );
+ final UwbActivityEnergyInfo uwbInfo = awaitControllerInfo(uwbReceiver);
+ if (uwbInfo == null) {
+ return StatsManager.PULL_SKIP;
+ }
+ pulledData.add(
+ FrameworkStatsLog.buildStatsEvent(atomTag,
+ uwbInfo.getControllerTxDurationMillis(),
+ uwbInfo.getControllerRxDurationMillis(),
+ uwbInfo.getControllerIdleDurationMillis(),
+ uwbInfo.getControllerWakeCount()));
+ } catch (RuntimeException e) {
+ Slog.e(TAG, "failed to getUwbActivityEnergyInfoAsync", e);
+ return StatsManager.PULL_SKIP;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ return StatsManager.PULL_SUCCESS;
+ }
+
private void registerSystemElapsedRealtime() {
int tagId = FrameworkStatsLog.SYSTEM_ELAPSED_REALTIME;
PullAtomMetadata metadata = new PullAtomMetadata.Builder()
@@ -4721,13 +4783,22 @@
boolean userDisabledHdrConversion = hdrConversionMode == HDR_CONVERSION_PASSTHROUGH;
int forceHdrFormat = preferredHdrType == HDR_TYPE_INVALID ? 0 : preferredHdrType;
boolean hasDolbyVisionIssue = hasDolbyVisionIssue(display);
+ byte[] hdrOutputTypes = toBytes(displayManager.getSupportedHdrOutputTypes());
+ boolean hdrOutputControlSupported = hdrConversionMode != HDR_CONVERSION_UNSUPPORTED;
- pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag,
- new byte[0], userDisabledHdrConversion, forceHdrFormat, hasDolbyVisionIssue));
+ pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag, hdrOutputTypes,
+ userDisabledHdrConversion, forceHdrFormat, hasDolbyVisionIssue,
+ hdrOutputControlSupported));
return StatsManager.PULL_SUCCESS;
}
+ private int pullCachedAppsHighWatermark(int atomTag, List<StatsEvent> pulledData) {
+ pulledData.add(LocalServices.getService(ActivityManagerInternal.class)
+ .getCachedAppsHighWatermarkStats(atomTag, true));
+ return StatsManager.PULL_SUCCESS;
+ }
+
private boolean hasDolbyVisionIssue(Display display) {
AtomicInteger modesSupportingDolbyVision = new AtomicInteger();
Arrays.stream(display.getSupportedModes())
@@ -4773,6 +4844,16 @@
);
}
+ private void registerCachedAppsHighWatermarkPuller() {
+ final int tagId = FrameworkStatsLog.CACHED_APPS_HIGH_WATERMARK;
+ mStatsManager.setPullAtomCallback(
+ tagId,
+ null, // use default PullAtomMetadata values
+ DIRECT_EXECUTOR,
+ mStatsCallbackImpl
+ );
+ }
+
int pullSystemServerPinnerStats(int atomTag, List<StatsEvent> pulledData) {
PinnerService pinnerService = LocalServices.getService(PinnerService.class);
List<PinnedFileStats> pinnedFileStats = pinnerService.dumpDataForStatsd();
diff --git a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
index 984cb19..31348cd 100644
--- a/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
+++ b/services/core/java/com/android/server/textclassifier/TextClassificationManagerService.java
@@ -42,7 +42,6 @@
import android.service.textclassifier.TextClassifierService;
import android.service.textclassifier.TextClassifierService.ConnectionState;
import android.text.TextUtils;
-import android.util.ArrayMap;
import android.util.LruCache;
import android.util.Slog;
import android.util.SparseArray;
@@ -74,7 +73,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
+import java.util.NoSuchElementException;
import java.util.Objects;
/**
@@ -388,14 +387,13 @@
synchronized (mLock) {
final StrippedTextClassificationContext textClassificationContext =
- mSessionCache.get(sessionId);
+ mSessionCache.get(sessionId.getToken());
final int userId = textClassificationContext != null
? textClassificationContext.userId
: UserHandle.getCallingUserId();
final boolean useDefaultTextClassifier =
- textClassificationContext != null
- ? textClassificationContext.useDefaultTextClassifier
- : true;
+ textClassificationContext == null
+ || textClassificationContext.useDefaultTextClassifier;
final SystemTextClassifierMetadata sysTcMetadata = new SystemTextClassifierMetadata(
"", userId, useDefaultTextClassifier);
@@ -405,7 +403,7 @@
/* attemptToBind= */ false,
service -> {
service.onDestroyTextClassificationSession(sessionId);
- mSessionCache.remove(sessionId);
+ mSessionCache.remove(sessionId.getToken());
},
"onDestroyTextClassificationSession",
NO_OP_CALLBACK);
@@ -676,14 +674,39 @@
@NonNull
private final Object mLock;
+
+ @NonNull
+ private final DeathRecipient mDeathRecipient = new DeathRecipient() {
+ @Override
+ public void binderDied() {
+ // no-op
+ }
+
+ @Override
+ public void binderDied(IBinder who) {
+ if (DEBUG) {
+ Slog.d(LOG_TAG, "binderDied for " + who);
+ }
+ remove(who);
+ }
+ };
@NonNull
@GuardedBy("mLock")
- private final LruCache<TextClassificationSessionId, StrippedTextClassificationContext>
- mCache = new LruCache<>(MAX_CACHE_SIZE);
- @NonNull
- @GuardedBy("mLock")
- private final Map<TextClassificationSessionId, DeathRecipient> mDeathRecipients =
- new ArrayMap<>();
+ private final LruCache<IBinder, StrippedTextClassificationContext>
+ mCache = new LruCache<>(MAX_CACHE_SIZE) {
+ @Override
+ protected void entryRemoved(boolean evicted,
+ IBinder token,
+ StrippedTextClassificationContext oldValue,
+ StrippedTextClassificationContext newValue) {
+ if (evicted) {
+ // The remove(K) or put(K, V) should be handled
+ token.unlinkToDeath(mDeathRecipient, /* flags= */ 0);
+ // TODO(b/278160706): handle app process and TCS's behavior if the
+ // session is removed by system server
+ }
+ }
+ };
SessionCache(@NonNull Object lock) {
mLock = Objects.requireNonNull(lock);
@@ -692,12 +715,10 @@
void put(@NonNull TextClassificationSessionId sessionId,
@NonNull TextClassificationContext textClassificationContext) {
synchronized (mLock) {
- mCache.put(sessionId,
+ mCache.put(sessionId.getToken(),
new StrippedTextClassificationContext(textClassificationContext));
try {
- DeathRecipient deathRecipient = () -> remove(sessionId);
- sessionId.getToken().linkToDeath(deathRecipient, /* flags= */ 0);
- mDeathRecipients.put(sessionId, deathRecipient);
+ sessionId.getToken().linkToDeath(mDeathRecipient, /* flags= */ 0);
} catch (RemoteException e) {
Slog.w(LOG_TAG, "SessionCache: Failed to link to death", e);
}
@@ -705,22 +726,29 @@
}
@Nullable
- StrippedTextClassificationContext get(@NonNull TextClassificationSessionId sessionId) {
- Objects.requireNonNull(sessionId);
+ StrippedTextClassificationContext get(@NonNull IBinder token) {
+ Objects.requireNonNull(token);
synchronized (mLock) {
- return mCache.get(sessionId);
+ return mCache.get(token);
}
}
- void remove(@NonNull TextClassificationSessionId sessionId) {
- Objects.requireNonNull(sessionId);
+ void remove(@NonNull IBinder token) {
+ Objects.requireNonNull(token);
synchronized (mLock) {
- DeathRecipient deathRecipient = mDeathRecipients.get(sessionId);
- if (deathRecipient != null) {
- sessionId.getToken().unlinkToDeath(deathRecipient, /* flags= */ 0);
+ if (DEBUG) {
+ Slog.d(LOG_TAG, "SessionCache: remove for " + token);
}
- mDeathRecipients.remove(sessionId);
- mCache.remove(sessionId);
+ if (token != null) {
+ try {
+ token.unlinkToDeath(mDeathRecipient, /* flags= */ 0);
+ } catch (NoSuchElementException e) {
+ if (DEBUG) {
+ Slog.d(LOG_TAG, "SessionCache: " + token + " was already unlinked.");
+ }
+ }
+ }
+ mCache.remove(token);
}
}
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
index 2d3928c..8f41608 100644
--- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
+++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
@@ -2237,7 +2237,14 @@
}
clearAllResourcesAndClientMapping(getClientProfile(clientId));
mClientProfiles.remove(clientId);
- mListeners.remove(clientId);
+
+ // it may be called by unregisterClientProfileInternal under test
+ synchronized (mLock) {
+ ResourcesReclaimListenerRecord record = mListeners.remove(clientId);
+ if (record != null) {
+ record.getListener().asBinder().unlinkToDeath(record, 0);
+ }
+ }
}
private void clearFrontendAndClientMapping(ClientProfile profile) {
diff --git a/services/core/java/com/android/server/vibrator/VibrationSettings.java b/services/core/java/com/android/server/vibrator/VibrationSettings.java
index 1ab7f362..9cf0834 100644
--- a/services/core/java/com/android/server/vibrator/VibrationSettings.java
+++ b/services/core/java/com/android/server/vibrator/VibrationSettings.java
@@ -124,6 +124,7 @@
private static final Set<Integer> SYSTEM_VIBRATION_SCREEN_OFF_USAGE_ALLOWLIST = new HashSet<>(
Arrays.asList(
USAGE_TOUCH,
+ USAGE_ACCESSIBILITY,
USAGE_PHYSICAL_EMULATION,
USAGE_HARDWARE_FEEDBACK));
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index a757d90..f71f3b1 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -397,9 +397,21 @@
/** Returns {@code true} if the incoming activity can belong to this transition. */
boolean canCoalesce(ActivityRecord r) {
- return mLastLaunchedActivity.mDisplayContent == r.mDisplayContent
- && mLastLaunchedActivity.getTask().getBounds().equals(r.getTask().getBounds())
- && mLastLaunchedActivity.getWindowingMode() == r.getWindowingMode();
+ if (mLastLaunchedActivity.mDisplayContent != r.mDisplayContent
+ || mLastLaunchedActivity.getWindowingMode() != r.getWindowingMode()) {
+ return false;
+ }
+ // The current task should be non-null because it is just launched. While the
+ // last task can be cleared when starting activity with FLAG_ACTIVITY_CLEAR_TASK.
+ final Task lastTask = mLastLaunchedActivity.getTask();
+ final Task currentTask = r.getTask();
+ if (lastTask != null && currentTask != null) {
+ if (lastTask == currentTask) {
+ return true;
+ }
+ return lastTask.getBounds().equals(currentTask.getBounds());
+ }
+ return mLastLaunchedActivity.isUid(r.launchedFromUid);
}
/** @return {@code true} if the activity matches a launched activity in this transition. */
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 76d4925..c6a2e0e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2821,6 +2821,27 @@
}
}
+ @Override
+ void waitForSyncTransactionCommit(ArraySet<WindowContainer> wcAwaitingCommit) {
+ super.waitForSyncTransactionCommit(wcAwaitingCommit);
+ if (mStartingData != null) {
+ mStartingData.mWaitForSyncTransactionCommit = true;
+ }
+ }
+
+ @Override
+ void onSyncTransactionCommitted(SurfaceControl.Transaction t) {
+ super.onSyncTransactionCommitted(t);
+ if (mStartingData == null) {
+ return;
+ }
+ mStartingData.mWaitForSyncTransactionCommit = false;
+ if (mStartingData.mRemoveAfterTransaction) {
+ mStartingData.mRemoveAfterTransaction = false;
+ removeStartingWindowAnimation(mStartingData.mPrepareRemoveAnimation);
+ }
+ }
+
void removeStartingWindowAnimation(boolean prepareAnimation) {
mTransferringSplashScreenState = TRANSFER_SPLASH_SCREEN_IDLE;
if (task != null) {
@@ -2843,6 +2864,12 @@
final WindowState startingWindow = mStartingWindow;
final boolean animate;
if (mStartingData != null) {
+ if (mStartingData.mWaitForSyncTransactionCommit
+ || mTransitionController.inCollectingTransition(startingWindow)) {
+ mStartingData.mRemoveAfterTransaction = true;
+ mStartingData.mPrepareRemoveAnimation = prepareAnimation;
+ return;
+ }
animate = prepareAnimation && mStartingData.needRevealAnimation()
&& mStartingWindow.isVisibleByPolicy();
ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Schedule remove starting %s startingWindow=%s"
@@ -2863,18 +2890,7 @@
this);
return;
}
-
- if (animate && mTransitionController.inCollectingTransition(startingWindow)) {
- // Defer remove starting window after transition start.
- // The surface of app window could really show after the transition finish.
- startingWindow.mSyncTransaction.addTransactionCommittedListener(Runnable::run, () -> {
- synchronized (mAtmService.mGlobalLock) {
- surface.remove(true);
- }
- });
- } else {
- surface.remove(animate);
- }
+ surface.remove(animate);
}
/**
@@ -4144,7 +4160,12 @@
*/
void handleAppDied() {
final boolean remove;
- if ((mRelaunchReason == RELAUNCH_REASON_WINDOWING_MODE_RESIZE
+ if (Process.isSdkSandboxUid(getUid())) {
+ // Sandbox activities are created for SDKs run in the sandbox process, when the sandbox
+ // process dies, the SDKs are unloaded and can not handle the activity, so sandbox
+ // activity records should be removed.
+ remove = true;
+ } else if ((mRelaunchReason == RELAUNCH_REASON_WINDOWING_MODE_RESIZE
|| mRelaunchReason == RELAUNCH_REASON_FREE_RESIZE)
&& launchCount < 3 && !finishing) {
// If the process crashed during a resize, always try to relaunch it, unless it has
@@ -5310,6 +5331,13 @@
if (finishing || isState(STOPPED)) {
displayContent.mUnknownAppVisibilityController.appRemovedOrHidden(this);
}
+ // Because starting window was transferred, this activity may be a trampoline which has
+ // been occluded by next activity. If it has added windows, set client visibility
+ // immediately to avoid the client getting RELAYOUT_RES_FIRST_TIME from relayout and
+ // drawing an unnecessary frame.
+ if (startingMoved && !firstWindowDrawn && hasChild()) {
+ setClientVisible(false);
+ }
} else {
if (!appTransition.isTransitionSet()
&& appTransition.isReady()) {
diff --git a/services/core/java/com/android/server/wm/ActivityServiceConnectionsHolder.java b/services/core/java/com/android/server/wm/ActivityServiceConnectionsHolder.java
index 5f56af7..1208b6ef 100644
--- a/services/core/java/com/android/server/wm/ActivityServiceConnectionsHolder.java
+++ b/services/core/java/com/android/server/wm/ActivityServiceConnectionsHolder.java
@@ -99,13 +99,15 @@
}
public void forEachConnection(Consumer<T> consumer) {
+ final ArraySet<T> connections;
synchronized (mActivity) {
if (mConnections == null || mConnections.isEmpty()) {
return;
}
- for (int i = mConnections.size() - 1; i >= 0; i--) {
- consumer.accept(mConnections.valueAt(i));
- }
+ connections = new ArraySet<>(mConnections);
+ }
+ for (int i = connections.size() - 1; i >= 0; i--) {
+ consumer.accept(connections.valueAt(i));
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
index 1944b3f..90af4c6 100644
--- a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
+++ b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
@@ -23,7 +23,6 @@
import static android.app.PendingIntent.FLAG_ONE_SHOT;
import static android.app.admin.DevicePolicyManager.EXTRA_RESTRICTION;
import static android.app.admin.DevicePolicyManager.POLICY_SUSPEND_PACKAGES;
-import static android.app.sdksandbox.SdkSandboxManager.ACTION_START_SANDBOXED_ACTIVITY;
import static android.content.Context.KEYGUARD_SERVICE;
import static android.content.Intent.EXTRA_INTENT;
import static android.content.Intent.EXTRA_PACKAGE_NAME;
@@ -503,8 +502,7 @@
@ActivityInterceptorCallback.OrderedId int orderId,
@NonNull ActivityInterceptorCallback.ActivityInterceptorInfo info) {
if (orderId == MAINLINE_SDK_SANDBOX_ORDER_ID) {
- return info.getIntent() != null && info.getIntent().getAction() != null
- && info.getIntent().getAction().equals(ACTION_START_SANDBOXED_ACTIVITY);
+ return info.getIntent() != null && info.getIntent().isSandboxActivity(mServiceContext);
}
return true;
}
@@ -513,8 +511,7 @@
@ActivityInterceptorCallback.OrderedId int orderId,
@NonNull ActivityInterceptorCallback.ActivityInterceptorInfo info) {
if (orderId == MAINLINE_SDK_SANDBOX_ORDER_ID) {
- return info.getIntent() != null && info.getIntent().getAction() != null
- && info.getIntent().getAction().equals(ACTION_START_SANDBOXED_ACTIVITY);
+ return info.getIntent() != null && info.getIntent().isSandboxActivity(mServiceContext);
}
return true;
}
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index c5e75fa..a27f3e4 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -2926,8 +2926,7 @@
// If the matching task is already in the adjacent task of the launch target. Adjust to use
// the adjacent task as its launch target. So the existing task will be launched into the
// closer one and won't be reparent redundantly.
- final Task adjacentTargetTask = mTargetRootTask.getAdjacentTaskFragment() != null
- ? mTargetRootTask.getAdjacentTaskFragment().asTask() : null;
+ final Task adjacentTargetTask = mTargetRootTask.getAdjacentTask();
if (adjacentTargetTask != null && intentActivity.isDescendantOf(adjacentTargetTask)) {
mTargetRootTask = adjacentTargetTask;
}
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 064af0f..f93afe8 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -38,7 +38,6 @@
import static android.app.ActivityTaskManager.RESIZE_MODE_PRESERVE_WINDOW;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.app.sdksandbox.SdkSandboxManager.ACTION_START_SANDBOXED_ACTIVITY;
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
@@ -1244,9 +1243,7 @@
assertPackageMatchesCallingUid(callingPackage);
enforceNotIsolatedCaller("startActivityAsUser");
- boolean isSandboxedActivity = (intent != null && intent.getAction() != null
- && intent.getAction().equals(ACTION_START_SANDBOXED_ACTIVITY));
- if (isSandboxedActivity) {
+ if (intent != null && intent.isSandboxActivity(mContext)) {
SdkSandboxManagerLocal sdkSandboxManagerLocal = LocalManagerRegistry.getManager(
SdkSandboxManagerLocal.class);
sdkSandboxManagerLocal.enforceAllowedToHostSandboxedActivity(
@@ -1503,7 +1500,7 @@
.setCallingPid(callingPid)
.setCallingPackage(intent.getPackage())
.setActivityInfo(a)
- .setActivityOptions(options.toBundle())
+ .setActivityOptions(createSafeActivityOptionsWithBalAllowed(options))
// To start the dream from background, we need to start it from a persistent
// system process. Here we set the real calling uid to the system server uid
.setRealCallingUid(Binder.getCallingUid())
@@ -1651,7 +1648,7 @@
.setResultWho(resultWho)
.setRequestCode(requestCode)
.setStartFlags(startFlags)
- .setActivityOptions(bOptions)
+ .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
.setUserId(userId)
.setIgnoreTargetSecurity(ignoreTargetSecurity)
.setFilterCallingUid(isResolver ? 0 /* system */ : targetUid)
@@ -1701,7 +1698,7 @@
.setVoiceInteractor(interactor)
.setStartFlags(startFlags)
.setProfilerInfo(profilerInfo)
- .setActivityOptions(bOptions)
+ .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
.setUserId(userId)
.setBackgroundStartPrivileges(BackgroundStartPrivileges.ALLOW_BAL)
.execute();
@@ -1728,7 +1725,7 @@
.setCallingPackage(callingPackage)
.setCallingFeatureId(callingFeatureId)
.setResolvedType(resolvedType)
- .setActivityOptions(bOptions)
+ .setActivityOptions(createSafeActivityOptionsWithBalAllowed(bOptions))
.setUserId(userId)
.setBackgroundStartPrivileges(BackgroundStartPrivileges.ALLOW_BAL)
.execute();
@@ -2011,7 +2008,8 @@
return;
}
- if (r.isState(RESUMED) && r == mRootWindowContainer.getTopResumedActivity()) {
+ if ((touchedActivity == null || r == touchedActivity) && r.isState(RESUMED)
+ && r == mRootWindowContainer.getTopResumedActivity()) {
setLastResumedActivityUncheckLocked(r, "setFocusedTask-alreadyTop");
return;
}
@@ -5356,7 +5354,7 @@
if (app != null && app.getPid() > 0) {
ArrayList<Integer> firstPids = new ArrayList<Integer>();
firstPids.add(app.getPid());
- dumpStackTraces(tracesFile.getAbsolutePath(), firstPids, null, null, null);
+ dumpStackTraces(tracesFile.getAbsolutePath(), firstPids, null, null, null, null);
}
File lastTracesFile = null;
@@ -5507,6 +5505,31 @@
return checkPermission(permission, -1, sourceUid) == PackageManager.PERMISSION_GRANTED;
}
+ /**
+ * Wrap the {@link ActivityOptions} in {@link SafeActivityOptions} and attach caller options
+ * that allow using the callers permissions to start background activities.
+ */
+ private SafeActivityOptions createSafeActivityOptionsWithBalAllowed(
+ @Nullable ActivityOptions options) {
+ if (options == null) {
+ options = ActivityOptions.makeBasic().setPendingIntentBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
+ } else if (options.getPendingIntentBackgroundActivityStartMode()
+ == ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED) {
+ options.setPendingIntentBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
+ }
+ return new SafeActivityOptions(options);
+ }
+
+ /**
+ * Wrap the options {@link Bundle} in {@link SafeActivityOptions} and attach caller options
+ * that allow using the callers permissions to start background activities.
+ */
+ private SafeActivityOptions createSafeActivityOptionsWithBalAllowed(@Nullable Bundle bOptions) {
+ return createSafeActivityOptionsWithBalAllowed(ActivityOptions.fromBundle(bOptions));
+ }
+
final class H extends Handler {
static final int REPORT_TIME_TRACKER_MSG = 1;
static final int UPDATE_PROCESS_ANIMATING_STATE = 2;
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index 597c8bf..805bff2 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -1030,12 +1030,11 @@
canPromote = false;
}
- // If the current window container is task and it have adjacent task, it means
- // both tasks will open or close app toghther but we want get their opening or
- // closing animation target independently so do not promote.
+ // If the current window container is a task with adjacent task set, the both
+ // adjacent tasks will be opened or closed together. To get their opening or
+ // closing animation target independently, skip promoting their animation targets.
if (current.asTask() != null
- && current.asTask().getAdjacentTaskFragment() != null
- && current.asTask().getAdjacentTaskFragment().asTask() != null) {
+ && current.asTask().getAdjacentTask() != null) {
canPromote = false;
}
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index 11d84ff..0c196d7 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -227,6 +227,7 @@
backType = BackNavigationInfo.TYPE_CALLBACK;
}
infoBuilder.setOnBackInvokedCallback(callbackInfo.getCallback());
+ infoBuilder.setAnimationCallback(callbackInfo.isAnimationCallback());
mNavigationMonitor.startMonitor(window, navigationObserver);
}
diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
index a83a033..3dc3be9 100644
--- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
+++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
@@ -135,12 +135,6 @@
ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Register display organizer=%s uid=%d",
organizer.asBinder(), uid);
if (mOrganizersByFeatureIds.get(feature) != null) {
- if (mOrganizersByFeatureIds.get(feature).mOrganizer.asBinder()
- .isBinderAlive()) {
- throw new IllegalStateException(
- "Replacing existing organizer currently unsupported");
- }
-
mOrganizersByFeatureIds.remove(feature).destroy();
Slog.d(TAG, "Replacing dead organizer for feature=" + feature);
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index c2bc459..bad64d3 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -656,6 +656,14 @@
*/
private InputTarget mLastImeInputTarget;
+
+ /**
+ * Tracks the windowToken of the input method input target and the corresponding
+ * {@link WindowContainerListener} for monitoring changes (e.g. the requested visibility
+ * change).
+ */
+ private @Nullable Pair<IBinder, WindowContainerListener> mImeTargetTokenListenerPair;
+
/**
* This controls the visibility and animation of the input method window.
*/
@@ -4267,7 +4275,38 @@
@VisibleForTesting
void setImeInputTarget(InputTarget target) {
+ if (mImeTargetTokenListenerPair != null) {
+ // Unregister the listener before changing to the new IME input target.
+ final WindowToken oldToken = mTokenMap.get(mImeTargetTokenListenerPair.first);
+ if (oldToken != null) {
+ oldToken.unregisterWindowContainerListener(mImeTargetTokenListenerPair.second);
+ }
+ mImeTargetTokenListenerPair = null;
+ }
mImeInputTarget = target;
+ // Notify listeners about IME input target window visibility by the target change.
+ if (target != null) {
+ // TODO(b/276743705): Let InputTarget register the visibility change of the hierarchy.
+ final WindowState targetWin = target.getWindowState();
+ if (targetWin != null) {
+ mImeTargetTokenListenerPair = new Pair<>(targetWin.mToken.token,
+ new WindowContainerListener() {
+ @Override
+ public void onVisibleRequestedChanged(boolean isVisibleRequested) {
+ // Notify listeners for IME input target window visibility change
+ // requested by the parent container.
+ mWmService.dispatchImeInputTargetVisibilityChanged(
+ targetWin.mClient.asBinder(), isVisibleRequested,
+ targetWin.mActivityRecord != null
+ && targetWin.mActivityRecord.finishing);
+ }
+ });
+ targetWin.mToken.registerWindowContainerListener(
+ mImeTargetTokenListenerPair.second);
+ mWmService.dispatchImeInputTargetVisibilityChanged(targetWin.mClient.asBinder(),
+ targetWin.isVisible() /* visible */, false /* removed */);
+ }
+ }
if (refreshImeSecureFlag(getPendingTransaction())) {
mWmService.requestTraversal();
}
@@ -4433,6 +4472,10 @@
}
private void attachImeScreenshotOnTarget(WindowState imeTarget) {
+ attachImeScreenshotOnTarget(imeTarget, false);
+ }
+
+ private void attachImeScreenshotOnTarget(WindowState imeTarget, boolean hideImeWindow) {
final SurfaceControl.Transaction t = getPendingTransaction();
// Remove the obsoleted IME snapshot first in case the new snapshot happens to
// override the current one before the transition finish and the surface never be
@@ -4441,6 +4484,11 @@
mImeScreenshot = new ImeScreenshot(
mWmService.mSurfaceControlFactory.apply(null), imeTarget);
mImeScreenshot.attachAndShow(t);
+ if (mInputMethodWindow != null && hideImeWindow) {
+ // Hide the IME window when deciding to show IME snapshot on demand.
+ // InsetsController will make IME visible again before animating it.
+ mInputMethodWindow.hide(false, false);
+ }
}
/**
@@ -4458,7 +4506,7 @@
*/
@VisibleForTesting
void showImeScreenshot(WindowState imeTarget) {
- attachImeScreenshotOnTarget(imeTarget);
+ attachImeScreenshotOnTarget(imeTarget, true /* hideImeWindow */);
}
/**
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 6ed2025..747819e9 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -17,7 +17,6 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
-import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.view.Display.TYPE_INTERNAL;
import static android.view.InsetsFrameProvider.SOURCE_ARBITRARY_RECTANGLE;
import static android.view.InsetsFrameProvider.SOURCE_CONTAINER_BOUNDS;
@@ -128,7 +127,7 @@
import com.android.internal.statusbar.LetterboxDetails;
import com.android.internal.util.ScreenshotHelper;
import com.android.internal.util.ScreenshotRequest;
-import com.android.internal.util.function.TriConsumer;
+import com.android.internal.util.function.TriFunction;
import com.android.internal.view.AppearanceRegion;
import com.android.internal.widget.PointerLocationView;
import com.android.server.LocalServices;
@@ -1081,11 +1080,11 @@
// The index of the provider and corresponding insets types cannot change at
// runtime as ensured in WMS. Make use of the index in the provider directly
// to access the latest provided size at runtime.
- final TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider =
+ final TriFunction<DisplayFrames, WindowContainer, Rect, Integer> frameProvider =
getFrameProvider(win, i, INSETS_OVERRIDE_INDEX_INVALID);
final InsetsFrameProvider.InsetsSizeOverride[] overrides =
provider.getInsetsSizeOverrides();
- final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
+ final SparseArray<TriFunction<DisplayFrames, WindowContainer, Rect, Integer>>
overrideProviders;
if (overrides != null) {
overrideProviders = new SparseArray<>();
@@ -1106,7 +1105,7 @@
}
}
- private static TriConsumer<DisplayFrames, WindowContainer, Rect> getFrameProvider(
+ private static TriFunction<DisplayFrames, WindowContainer, Rect, Integer> getFrameProvider(
WindowState win, int index, int overrideIndex) {
return (displayFrames, windowContainer, inOutFrame) -> {
final LayoutParams lp = win.mAttrs.forRotation(displayFrames.mRotation);
@@ -1152,6 +1151,7 @@
inOutFrame.set(sTmpRect2);
}
}
+ return ifp.getFlags();
};
}
@@ -1179,7 +1179,7 @@
}
}
- TriConsumer<DisplayFrames, WindowContainer, Rect> getImeSourceFrameProvider() {
+ TriFunction<DisplayFrames, WindowContainer, Rect, Integer> getImeSourceFrameProvider() {
return (displayFrames, windowContainer, inOutFrame) -> {
WindowState windowState = windowContainer.asWindowState();
if (windowState == null) {
@@ -1198,6 +1198,7 @@
} else {
inOutFrame.inset(windowState.mGivenContentInsets);
}
+ return 0;
};
}
@@ -2206,16 +2207,15 @@
private int updateSystemBarsLw(WindowState win, int disableFlags) {
final TaskDisplayArea defaultTaskDisplayArea = mDisplayContent.getDefaultTaskDisplayArea();
- final boolean multiWindowTaskVisible =
+ final boolean adjacentTasksVisible =
defaultTaskDisplayArea.getRootTask(task -> task.isVisible()
- && task.getTopLeafTask().getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW)
+ && task.getTopLeafTask().getAdjacentTask() != null)
!= null;
final boolean freeformRootTaskVisible =
defaultTaskDisplayArea.isRootTaskVisible(WINDOWING_MODE_FREEFORM);
- // We need to force showing system bars when the multi-window or freeform root task is
- // visible.
- mForceShowSystemBars = multiWindowTaskVisible || freeformRootTaskVisible;
+ // We need to force showing system bars when adjacent tasks or freeform roots visible.
+ mForceShowSystemBars = adjacentTasksVisible || freeformRootTaskVisible;
// We need to force the consumption of the system bars if they are force shown or if they
// are controlled by a remote insets controller.
mForceConsumeSystemBars = mForceShowSystemBars
@@ -2236,7 +2236,7 @@
int appearance = APPEARANCE_OPAQUE_NAVIGATION_BARS | APPEARANCE_OPAQUE_STATUS_BARS;
appearance = configureStatusBarOpacity(appearance);
- appearance = configureNavBarOpacity(appearance, multiWindowTaskVisible,
+ appearance = configureNavBarOpacity(appearance, adjacentTasksVisible,
freeformRootTaskVisible);
// Show immersive mode confirmation if needed.
diff --git a/services/core/java/com/android/server/wm/ImeTargetChangeListener.java b/services/core/java/com/android/server/wm/ImeTargetChangeListener.java
new file mode 100644
index 0000000..8bc445b
--- /dev/null
+++ b/services/core/java/com/android/server/wm/ImeTargetChangeListener.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wm;
+
+import android.annotation.NonNull;
+import android.os.IBinder;
+
+/**
+ * Callback the IME targeting window visibility change state for
+ * {@link com.android.server.inputmethod.InputMethodManagerService} to manage the IME surface
+ * visibility and z-ordering.
+ */
+public interface ImeTargetChangeListener {
+ /**
+ * Called when a non-IME-focusable overlay window being the IME layering target (e.g. a
+ * window with {@link android.view.WindowManager.LayoutParams#FLAG_NOT_FOCUSABLE} and
+ * {@link android.view.WindowManager.LayoutParams#FLAG_ALT_FOCUSABLE_IM} flags)
+ * has changed its window visibility.
+ *
+ * @param overlayWindowToken the window token of the overlay window.
+ * @param visible the visibility of the overlay window, {@code true} means visible
+ * and {@code false} otherwise.
+ * @param removed Whether the IME target overlay window has being removed.
+ */
+ default void onImeTargetOverlayVisibilityChanged(@NonNull IBinder overlayWindowToken,
+ boolean visible, boolean removed) {
+ }
+
+ /**
+ * Called when the visibility of IME input target window has changed.
+ *
+ * @param imeInputTarget the window token of the IME input target window.
+ * @param visible the new window visibility made by {@param imeInputTarget}. visible is
+ * {@code true} when switching to the new visible IME input target
+ * window and started input, or the same input target relayout to
+ * visible from invisible. In contrast, visible is {@code false} when
+ * closing the input target, or the same input target relayout to
+ * invisible from visible.
+ * @param removed Whether the IME input target window has being removed.
+ */
+ default void onImeInputTargetVisibilityChanged(@NonNull IBinder imeInputTarget, boolean visible,
+ boolean removed) {
+ }
+}
diff --git a/services/core/java/com/android/server/wm/ImeTargetVisibilityPolicy.java b/services/core/java/com/android/server/wm/ImeTargetVisibilityPolicy.java
index 71dd917..1d9f24c 100644
--- a/services/core/java/com/android/server/wm/ImeTargetVisibilityPolicy.java
+++ b/services/core/java/com/android/server/wm/ImeTargetVisibilityPolicy.java
@@ -19,6 +19,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.IBinder;
import android.view.WindowManager;
@@ -36,16 +37,15 @@
* @param displayId A unique id to identify the display.
* @return {@code true} if success, {@code false} otherwise.
*/
- public abstract boolean showImeScreenShot(IBinder imeTarget, int displayId);
+ public abstract boolean showImeScreenshot(@NonNull IBinder imeTarget, int displayId);
/**
- * Updates the IME parent for target window.
+ * Removes the IME screenshot on the given display.
*
- * @param imeTarget The target window to update the IME parent.
- * @param displayId A unique id to identify the display.
+ * @param displayId The target display of showing IME screenshot.
* @return {@code true} if success, {@code false} otherwise.
*/
- public abstract boolean updateImeParent(IBinder imeTarget, int displayId);
+ public abstract boolean removeImeScreenshot(int displayId);
/**
* Called when {@link DisplayContent#computeImeParent()} to check if it's valid to keep
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index 3e03b99..b7eaf25 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -47,7 +47,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.protolog.common.ProtoLog;
-import com.android.internal.util.function.TriConsumer;
+import com.android.internal.util.function.TriFunction;
import com.android.server.wm.SurfaceAnimator.AnimationType;
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
@@ -73,8 +73,9 @@
private @Nullable InsetsControlTarget mFakeControlTarget;
private @Nullable ControlAdapter mAdapter;
- private TriConsumer<DisplayFrames, WindowContainer, Rect> mFrameProvider;
- private SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> mOverrideFrameProviders;
+ private TriFunction<DisplayFrames, WindowContainer, Rect, Integer> mFrameProvider;
+ private SparseArray<TriFunction<DisplayFrames, WindowContainer, Rect, Integer>>
+ mOverrideFrameProviders;
private final SparseArray<Rect> mOverrideFrames = new SparseArray<Rect>();
private boolean mIsLeashReadyForDispatching;
private final Rect mSourceFrame = new Rect();
@@ -149,8 +150,8 @@
* resulting frame that should be reported to given window type.
*/
void setWindowContainer(@Nullable WindowContainer windowContainer,
- @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider,
- @Nullable SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
+ @Nullable TriFunction<DisplayFrames, WindowContainer, Rect, Integer> frameProvider,
+ @Nullable SparseArray<TriFunction<DisplayFrames, WindowContainer, Rect, Integer>>
overrideFrameProviders) {
if (mWindowContainer != null) {
if (mControllable) {
@@ -203,7 +204,7 @@
if (mServerVisible) {
mTmpRect.set(mWindowContainer.getBounds());
if (mFrameProvider != null) {
- mFrameProvider.accept(mWindowContainer.getDisplayContent().mDisplayFrames,
+ mFrameProvider.apply(mWindowContainer.getDisplayContent().mDisplayFrames,
mWindowContainer, mTmpRect);
}
} else {
@@ -216,8 +217,11 @@
mSourceFrame.set(frame);
if (mFrameProvider != null) {
- mFrameProvider.accept(mWindowContainer.getDisplayContent().mDisplayFrames,
- mWindowContainer, mSourceFrame);
+ final int flags = mFrameProvider.apply(
+ mWindowContainer.getDisplayContent().mDisplayFrames,
+ mWindowContainer,
+ mSourceFrame);
+ mSource.setFlags(flags);
}
updateSourceFrameForServerVisibility();
@@ -233,10 +237,10 @@
} else {
overrideFrame = new Rect(frame);
}
- final TriConsumer<DisplayFrames, WindowContainer, Rect> provider =
+ final TriFunction<DisplayFrames, WindowContainer, Rect, Integer> provider =
mOverrideFrameProviders.get(windowType);
if (provider != null) {
- mOverrideFrameProviders.get(windowType).accept(
+ mOverrideFrameProviders.get(windowType).apply(
mWindowContainer.getDisplayContent().mDisplayFrames, mWindowContainer,
overrideFrame);
}
@@ -274,7 +278,7 @@
source.setVisible(mSource.isVisible());
mTmpRect.set(frame);
if (mFrameProvider != null) {
- mFrameProvider.accept(displayFrames, mWindowContainer, mTmpRect);
+ mFrameProvider.apply(displayFrames, mWindowContainer, mTmpRect);
}
source.setFrame(mTmpRect);
return source;
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index ff1deaf..6ef6fa7 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -48,9 +48,9 @@
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE;
+import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE;
import static android.view.WindowManager.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS;
-import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION;
import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__BOTTOM;
@@ -236,7 +236,7 @@
private final Boolean mBooleanPropertyIgnoreRequestedOrientation;
@Nullable
- private final Boolean mBooleanPropertyIgnoreOrientationRequestWhenLoopDetected;
+ private final Boolean mBooleanPropertyAllowIgnoringOrientationRequestWhenLoopDetected;
@Nullable
private final Boolean mBooleanPropertyFakeFocus;
@@ -259,10 +259,10 @@
readComponentProperty(packageManager, mActivityRecord.packageName,
mLetterboxConfiguration::isPolicyForIgnoringRequestedOrientationEnabled,
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION);
- mBooleanPropertyIgnoreOrientationRequestWhenLoopDetected =
+ mBooleanPropertyAllowIgnoringOrientationRequestWhenLoopDetected =
readComponentProperty(packageManager, mActivityRecord.packageName,
mLetterboxConfiguration::isPolicyForIgnoringRequestedOrientationEnabled,
- PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED);
+ PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED);
mBooleanPropertyFakeFocus =
readComponentProperty(packageManager, mActivityRecord.packageName,
mLetterboxConfiguration::isCompatFakeFocusEnabled,
@@ -445,7 +445,7 @@
/* gatingCondition */ mLetterboxConfiguration
::isPolicyForIgnoringRequestedOrientationEnabled,
mIsOverrideEnableCompatIgnoreOrientationRequestWhenLoopDetectedEnabled,
- mBooleanPropertyIgnoreOrientationRequestWhenLoopDetected)) {
+ mBooleanPropertyAllowIgnoringOrientationRequestWhenLoopDetected)) {
return false;
}
diff --git a/services/core/java/com/android/server/wm/StartingData.java b/services/core/java/com/android/server/wm/StartingData.java
index 300a894..cff86ad 100644
--- a/services/core/java/com/android/server/wm/StartingData.java
+++ b/services/core/java/com/android/server/wm/StartingData.java
@@ -41,6 +41,26 @@
/** Whether the starting window is drawn. */
boolean mIsDisplayed;
+ /**
+ * For Shell transition.
+ * There will be a transition happen on attached activity, do not remove starting window during
+ * this period, because the transaction to show app window may not apply before remove starting
+ * window.
+ * Note this isn't equal to transition playing, the period should be
+ * Sync finishNow -> Start transaction apply.
+ */
+ boolean mWaitForSyncTransactionCommit;
+
+ /**
+ * For Shell transition.
+ * This starting window should be removed after applying the start transaction of transition,
+ * which ensures the app window has shown.
+ */
+ boolean mRemoveAfterTransaction;
+
+ /** Whether to prepare the removal animation. */
+ boolean mPrepareRemoveAnimation;
+
protected StartingData(WindowManagerService service, int typeParams) {
mService = service;
mTypeParams = typeParams;
diff --git a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java
index 2e5ab1a..7572a64 100644
--- a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java
+++ b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java
@@ -221,11 +221,11 @@
if (!mAnimationStartDeferred && mPreProcessingAnimations.isEmpty()) {
mChoreographer.postFrameCallback(this::startAnimations);
}
-
- // Some animations (e.g. move animations) require the initial transform to be
- // applied immediately.
- applyTransformation(runningAnim, t, 0 /* currentPlayTime */);
}
+
+ // Some animations (e.g. move animations) require the initial transform to be
+ // applied immediately.
+ applyTransformation(runningAnim, t, 0 /* currentPlayTime */);
}
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 9363eb5..5c33e64 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -2362,6 +2362,22 @@
return parentTask == null ? null : parentTask.getCreatedByOrganizerTask();
}
+ /** @return the first adjacent task of this task or its parent. */
+ @Nullable
+ Task getAdjacentTask() {
+ final TaskFragment adjacentTaskFragment = getAdjacentTaskFragment();
+ if (adjacentTaskFragment != null && adjacentTaskFragment.asTask() != null) {
+ return adjacentTaskFragment.asTask();
+ }
+
+ final WindowContainer parent = getParent();
+ if (parent == null || parent.asTask() == null) {
+ return null;
+ }
+
+ return parent.asTask().getAdjacentTask();
+ }
+
// TODO(task-merge): Figure out what's the right thing to do for places that used it.
boolean isRootTask() {
return getRootTask() == this;
@@ -2747,7 +2763,7 @@
Rect outSurfaceInsets) {
// If this task has its adjacent task, it means they should animate together. Use display
// bounds for them could move same as full screen task.
- if (getAdjacentTaskFragment() != null && getAdjacentTaskFragment().asTask() != null) {
+ if (getAdjacentTask() != null) {
super.getAnimationFrames(outFrame, outInsets, outStableInsets, outSurfaceInsets);
return;
}
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index b0a879e..e80cbb3 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -1081,12 +1081,12 @@
if (sourceTask != null && sourceTask == candidateTask) {
// Do nothing when task that is getting opened is same as the source.
} else if (sourceTask != null
- && mLaunchAdjacentFlagRootTask.getAdjacentTaskFragment() != null
+ && mLaunchAdjacentFlagRootTask.getAdjacentTask() != null
&& (sourceTask == mLaunchAdjacentFlagRootTask
|| sourceTask.isDescendantOf(mLaunchAdjacentFlagRootTask))) {
// If the adjacent launch is coming from the same root, launch to
// adjacent root instead.
- return mLaunchAdjacentFlagRootTask.getAdjacentTaskFragment().asTask();
+ return mLaunchAdjacentFlagRootTask.getAdjacentTask();
} else {
return mLaunchAdjacentFlagRootTask;
}
@@ -1095,10 +1095,8 @@
for (int i = mLaunchRootTasks.size() - 1; i >= 0; --i) {
if (mLaunchRootTasks.get(i).contains(windowingMode, activityType)) {
final Task launchRootTask = mLaunchRootTasks.get(i).task;
- final TaskFragment adjacentTaskFragment = launchRootTask != null
- ? launchRootTask.getAdjacentTaskFragment() : null;
- final Task adjacentRootTask =
- adjacentTaskFragment != null ? adjacentTaskFragment.asTask() : null;
+ final Task adjacentRootTask = launchRootTask != null
+ ? launchRootTask.getAdjacentTask() : null;
if (sourceTask != null && adjacentRootTask != null
&& (sourceTask == adjacentRootTask
|| sourceTask.isDescendantOf(adjacentRootTask))) {
@@ -1116,16 +1114,14 @@
// A pinned task relaunching should be handled by its task organizer. Skip fallback
// launch target of a pinned task from source task.
|| candidateTask.getWindowingMode() != WINDOWING_MODE_PINNED)) {
- Task launchTarget = sourceTask.getCreatedByOrganizerTask();
- if (launchTarget != null && launchTarget.getAdjacentTaskFragment() != null) {
- if (candidateTask != null) {
- final Task candidateRoot = candidateTask.getCreatedByOrganizerTask();
- if (candidateRoot != null && candidateRoot != launchTarget
- && launchTarget == candidateRoot.getAdjacentTaskFragment()) {
- launchTarget = candidateRoot;
- }
+ final Task adjacentTarget = sourceTask.getAdjacentTask();
+ if (adjacentTarget != null) {
+ if (candidateTask != null
+ && (candidateTask == adjacentTarget
+ || candidateTask.isDescendantOf(adjacentTarget))) {
+ return adjacentTarget;
}
- return launchTarget;
+ return sourceTask.getCreatedByOrganizerTask();
}
}
diff --git a/services/core/java/com/android/server/wm/TaskFpsCallbackController.java b/services/core/java/com/android/server/wm/TaskFpsCallbackController.java
index c099628..8c79875 100644
--- a/services/core/java/com/android/server/wm/TaskFpsCallbackController.java
+++ b/services/core/java/com/android/server/wm/TaskFpsCallbackController.java
@@ -26,8 +26,8 @@
final class TaskFpsCallbackController {
private final Context mContext;
- private final HashMap<ITaskFpsCallback, Long> mTaskFpsCallbacks;
- private final HashMap<ITaskFpsCallback, IBinder.DeathRecipient> mDeathRecipients;
+ private final HashMap<IBinder, Long> mTaskFpsCallbacks;
+ private final HashMap<IBinder, IBinder.DeathRecipient> mDeathRecipients;
TaskFpsCallbackController(Context context) {
mContext = context;
@@ -36,32 +36,42 @@
}
void registerListener(int taskId, ITaskFpsCallback callback) {
- if (mTaskFpsCallbacks.containsKey(callback)) {
+ if (callback == null) {
+ return;
+ }
+
+ IBinder binder = callback.asBinder();
+ if (mTaskFpsCallbacks.containsKey(binder)) {
return;
}
final long nativeListener = nativeRegister(callback, taskId);
- mTaskFpsCallbacks.put(callback, nativeListener);
+ mTaskFpsCallbacks.put(binder, nativeListener);
final IBinder.DeathRecipient deathRecipient = () -> unregisterListener(callback);
try {
- callback.asBinder().linkToDeath(deathRecipient, 0);
- mDeathRecipients.put(callback, deathRecipient);
+ binder.linkToDeath(deathRecipient, 0);
+ mDeathRecipients.put(binder, deathRecipient);
} catch (RemoteException e) {
// ignore
}
}
void unregisterListener(ITaskFpsCallback callback) {
- if (!mTaskFpsCallbacks.containsKey(callback)) {
+ if (callback == null) {
return;
}
- callback.asBinder().unlinkToDeath(mDeathRecipients.get(callback), 0);
- mDeathRecipients.remove(callback);
+ IBinder binder = callback.asBinder();
+ if (!mTaskFpsCallbacks.containsKey(binder)) {
+ return;
+ }
- nativeUnregister(mTaskFpsCallbacks.get(callback));
- mTaskFpsCallbacks.remove(callback);
+ binder.unlinkToDeath(mDeathRecipients.get(binder), 0);
+ mDeathRecipients.remove(binder);
+
+ nativeUnregister(mTaskFpsCallbacks.get(binder));
+ mTaskFpsCallbacks.remove(binder);
}
private static native long nativeRegister(ITaskFpsCallback callback, int taskId);
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 184293e..5626aa7 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -681,6 +681,7 @@
final StartingWindowRemovalInfo removalInfo = new StartingWindowRemovalInfo();
removalInfo.taskId = task.mTaskId;
removalInfo.playRevealAnimation = prepareAnimation
+ && task.getDisplayContent() != null
&& task.getDisplayInfo().state == Display.STATE_ON;
final boolean playShiftUpAnimation = !task.inMultiWindowMode();
final ActivityRecord topActivity = task.topActivityContainsStartingWindow();
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 969afe5..792ec2e 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -444,6 +444,11 @@
public abstract IBinder getFocusedWindowTokenFromWindowStates();
/**
+ * Moves the given display to the top.
+ */
+ public abstract void moveDisplayToTopIfAllowed(int displayId);
+
+ /**
* @return Whether the keyguard is engaged.
*/
public abstract boolean isKeyguardLocked();
@@ -848,6 +853,16 @@
}
/**
+ * Sets by the {@link com.android.server.inputmethod.InputMethodManagerService} to monitor
+ * the visibility change of the IME targeted windows.
+ *
+ * @see ImeTargetChangeListener#onImeTargetOverlayVisibilityChanged
+ * @see ImeTargetChangeListener#onImeInputTargetVisibilityChanged
+ */
+ public abstract void setInputMethodTargetChangeListener(
+ @NonNull ImeTargetChangeListener listener);
+
+ /**
* Moves the {@link WindowToken} {@code binder} to the display specified by {@code displayId}.
*/
public abstract void moveWindowTokenToDisplay(IBinder binder, int displayId);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 8fecf11..8822193 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -723,6 +723,9 @@
boolean mHardKeyboardAvailable;
WindowManagerInternal.OnHardKeyboardStatusChangeListener mHardKeyboardStatusChangeListener;
+
+ @Nullable ImeTargetChangeListener mImeTargetChangeListener;
+
SettingsObserver mSettingsObserver;
final EmbeddedWindowController mEmbeddedWindowController;
final AnrController mAnrController;
@@ -1807,6 +1810,10 @@
if (imMayMove) {
displayContent.computeImeTarget(true /* updateImeTarget */);
+ if (win.isImeOverlayLayeringTarget()) {
+ dispatchImeTargetOverlayVisibilityChanged(client.asBinder(),
+ win.isVisibleRequestedOrAdding(), false /* removed */);
+ }
}
// Don't do layout here, the window must call
@@ -2328,6 +2335,8 @@
winAnimator.mSurfaceController.setSecure(win.isSecureLocked());
}
+ final boolean wasVisible = win.isVisible();
+
win.mRelayoutCalled = true;
win.mInRelayout = true;
@@ -2336,7 +2345,6 @@
"Relayout %s: oldVis=%d newVis=%d. %s", win, oldVisibility,
viewVisibility, new RuntimeException().fillInStackTrace());
-
win.setDisplayLayoutNeeded();
win.mGivenInsetsPending = (flags & WindowManagerGlobal.RELAYOUT_INSETS_PENDING) != 0;
@@ -2501,6 +2509,18 @@
}
win.mInRelayout = false;
+ final boolean winVisibleChanged = win.isVisible() != wasVisible;
+ if (win.isImeOverlayLayeringTarget() && winVisibleChanged) {
+ dispatchImeTargetOverlayVisibilityChanged(client.asBinder(),
+ win.isVisible(), false /* removed */);
+ }
+ // Notify listeners about IME input target window visibility change.
+ final boolean isImeInputTarget = win.getDisplayContent().getImeInputTarget() == win;
+ if (isImeInputTarget && winVisibleChanged) {
+ dispatchImeInputTargetVisibilityChanged(win.mClient.asBinder(),
+ win.isVisible() /* visible */, false /* removed */);
+ }
+
if (outSyncIdBundle != null) {
final int maybeSyncSeqId;
if (USE_BLAST_SYNC && win.useBLASTSync() && viewVisibility == View.VISIBLE
@@ -3325,6 +3345,30 @@
});
}
+ void dispatchImeTargetOverlayVisibilityChanged(@NonNull IBinder token, boolean visible,
+ boolean removed) {
+ if (mImeTargetChangeListener != null) {
+ if (DEBUG_INPUT_METHOD) {
+ Slog.d(TAG, "onImeTargetOverlayVisibilityChanged, win=" + mWindowMap.get(token)
+ + "visible=" + visible + ", removed=" + removed);
+ }
+ mH.post(() -> mImeTargetChangeListener.onImeTargetOverlayVisibilityChanged(token,
+ visible, removed));
+ }
+ }
+
+ void dispatchImeInputTargetVisibilityChanged(@NonNull IBinder token, boolean visible,
+ boolean removed) {
+ if (mImeTargetChangeListener != null) {
+ if (DEBUG_INPUT_METHOD) {
+ Slog.d(TAG, "onImeInputTargetVisibilityChanged, win=" + mWindowMap.get(token)
+ + "visible=" + visible + ", removed=" + removed);
+ }
+ mH.post(() -> mImeTargetChangeListener.onImeInputTargetVisibilityChanged(token,
+ visible, removed));
+ }
+ }
+
@Override
public void setSwitchingUser(boolean switching) {
if (!checkCallingPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
@@ -7672,6 +7716,11 @@
}
@Override
+ public void moveDisplayToTopIfAllowed(int displayId) {
+ WindowManagerService.this.moveDisplayToTopIfAllowed(displayId);
+ }
+
+ @Override
public boolean isKeyguardLocked() {
return WindowManagerService.this.isKeyguardLocked();
}
@@ -8262,13 +8311,19 @@
}
return null;
}
+
+ @Override
+ public void setInputMethodTargetChangeListener(@NonNull ImeTargetChangeListener listener) {
+ synchronized (mGlobalLock) {
+ mImeTargetChangeListener = listener;
+ }
+ }
}
private final class ImeTargetVisibilityPolicyImpl extends ImeTargetVisibilityPolicy {
- // TODO(b/258048231): Track IME visibility change in bugreport when invocations.
@Override
- public boolean showImeScreenShot(@NonNull IBinder imeTarget, int displayId) {
+ public boolean showImeScreenshot(@NonNull IBinder imeTarget, int displayId) {
synchronized (mGlobalLock) {
final WindowState imeTargetWindow = mWindowMap.get(imeTarget);
if (imeTargetWindow == null) {
@@ -8284,24 +8339,18 @@
return true;
}
}
-
- // TODO(b/258048231): Track IME visibility change in bugreport when invocations.
@Override
- public boolean updateImeParent(@NonNull IBinder imeTarget, int displayId) {
+ public boolean removeImeScreenshot(int displayId) {
synchronized (mGlobalLock) {
- final WindowState imeTargetWindow = mWindowMap.get(imeTarget);
- if (imeTargetWindow == null) {
- return false;
- }
final DisplayContent dc = mRoot.getDisplayContent(displayId);
if (dc == null) {
- Slog.w(TAG, "Invalid displayId:" + displayId + ", fail to update ime parent");
+ Slog.w(TAG, "Invalid displayId:" + displayId
+ + ", fail to remove ime screenshot");
return false;
}
-
- dc.updateImeParent();
- return true;
+ dc.removeImeSurfaceImmediately();
}
+ return true;
}
}
@@ -8526,6 +8575,14 @@
// while in overview
return;
}
+ final WindowState w = t.getWindowState();
+ if (w != null) {
+ final Task task = w.getTask();
+ if (task != null && w.mTransitionController.isTransientHide(task)) {
+ // Don't disturb transient animation by accident touch.
+ return;
+ }
+ }
ProtoLog.i(WM_DEBUG_FOCUS_LIGHT, "onPointerDownOutsideFocusLocked called on %s",
t);
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index e5a49c3..a299592 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -166,6 +166,7 @@
import static com.android.server.wm.WindowStateProto.IS_READY_FOR_DISPLAY;
import static com.android.server.wm.WindowStateProto.IS_VISIBLE;
import static com.android.server.wm.WindowStateProto.KEEP_CLEAR_AREAS;
+import static com.android.server.wm.WindowStateProto.MERGED_LOCAL_INSETS_SOURCES;
import static com.android.server.wm.WindowStateProto.PENDING_SEAMLESS_ROTATION;
import static com.android.server.wm.WindowStateProto.REMOVED;
import static com.android.server.wm.WindowStateProto.REMOVE_ON_EXIT;
@@ -353,6 +354,7 @@
// overlay window is hidden because the owning app is suspended
private boolean mHiddenWhileSuspended;
private boolean mAppOpVisibility = true;
+
boolean mPermanentlyHidden; // the window should never be shown again
// This is a non-system overlay window that is currently force hidden.
private boolean mForceHideNonSystemOverlayWindow;
@@ -2349,6 +2351,10 @@
}
super.removeImmediately();
+ if (isImeOverlayLayeringTarget()) {
+ mWmService.dispatchImeTargetOverlayVisibilityChanged(mClient.asBinder(),
+ false /* visible */, true /* removed */);
+ }
final DisplayContent dc = getDisplayContent();
if (isImeLayeringTarget()) {
// Remove the attached IME screenshot surface.
@@ -2359,6 +2365,8 @@
dc.computeImeTarget(true /* updateImeTarget */);
}
if (dc.getImeInputTarget() == this && !inRelaunchingActivity()) {
+ mWmService.dispatchImeInputTargetVisibilityChanged(mClient.asBinder(),
+ false /* visible */, true /* removed */);
dc.updateImeInputAndControlTarget(null);
}
@@ -4027,6 +4035,11 @@
for (Rect r : mUnrestrictedKeepClearAreas) {
r.dumpDebug(proto, UNRESTRICTED_KEEP_CLEAR_AREAS);
}
+ if (mMergedLocalInsetsSources != null) {
+ for (int i = 0; i < mMergedLocalInsetsSources.size(); ++i) {
+ mMergedLocalInsetsSources.valueAt(i).dumpDebug(proto, MERGED_LOCAL_INSETS_SOURCES);
+ }
+ }
proto.end(token);
}
@@ -5330,6 +5343,17 @@
&& imeTarget.compareTo(this) <= 0;
return inTokenWithAndAboveImeTarget;
}
+
+ // The condition is for the system dialog not belonging to any Activity.
+ // (^FLAG_NOT_FOCUSABLE & FLAG_ALT_FOCUSABLE_IM) means the dialog is still focusable but
+ // should be placed above the IME window.
+ if ((mAttrs.flags & (FLAG_NOT_FOCUSABLE | FLAG_ALT_FOCUSABLE_IM))
+ == FLAG_ALT_FOCUSABLE_IM && isTrustedOverlay() && canAddInternalSystemWindow()) {
+ // Check the current IME target so that it does not lift this window above the IME if
+ // the Z-order of the current IME layering target is greater than it.
+ final WindowState imeTarget = getImeLayeringTarget();
+ return imeTarget != null && imeTarget != this && imeTarget.compareTo(this) <= 0;
+ }
return false;
}
@@ -5482,6 +5506,14 @@
return getDisplayContent().getImeTarget(IME_TARGET_LAYERING) == this;
}
+ /**
+ * Whether the window is non-focusable IME overlay layering target.
+ */
+ boolean isImeOverlayLayeringTarget() {
+ return isImeLayeringTarget()
+ && (mAttrs.flags & (FLAG_ALT_FOCUSABLE_IM | FLAG_NOT_FOCUSABLE)) != 0;
+ }
+
WindowState getImeLayeringTarget() {
final InsetsControlTarget target = getDisplayContent().getImeTarget(IME_TARGET_LAYERING);
return target != null ? target.getWindow() : null;
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index d64b5a1..cf57b33 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -485,17 +485,7 @@
}
dump += "\n";
- mInputManager->getReader().dump(dump);
- dump += "\n";
-
- mInputManager->getBlocker().dump(dump);
- dump += "\n";
-
- mInputManager->getProcessor().dump(dump);
- dump += "\n";
-
- mInputManager->getDispatcher().dump(dump);
- dump += "\n";
+ mInputManager->dump(dump);
}
bool NativeInputManager::checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
@@ -539,7 +529,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ InputReaderConfiguration::Change::DISPLAY_INFO);
}
base::Result<std::unique_ptr<InputChannel>> NativeInputManager::createInputChannel(
@@ -760,7 +750,6 @@
void NativeInputManager::notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) {
ATRACE_CALL();
- mInputManager->getBlocker().notifyInputDevicesChanged(inputDevices);
JNIEnv* env = jniEnv();
size_t count = inputDevices.size();
@@ -1090,7 +1079,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ InputReaderConfiguration::Change::DISPLAY_INFO);
}
void NativeInputManager::setPointerSpeed(int32_t speed) {
@@ -1106,7 +1095,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_POINTER_SPEED);
+ InputReaderConfiguration::Change::POINTER_SPEED);
}
void NativeInputManager::setPointerAcceleration(float acceleration) {
@@ -1122,7 +1111,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_POINTER_SPEED);
+ InputReaderConfiguration::Change::POINTER_SPEED);
}
void NativeInputManager::setTouchpadPointerSpeed(int32_t speed) {
@@ -1138,7 +1127,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_TOUCHPAD_SETTINGS);
+ InputReaderConfiguration::Change::TOUCHPAD_SETTINGS);
}
void NativeInputManager::setTouchpadNaturalScrollingEnabled(bool enabled) {
@@ -1154,7 +1143,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_TOUCHPAD_SETTINGS);
+ InputReaderConfiguration::Change::TOUCHPAD_SETTINGS);
}
void NativeInputManager::setTouchpadTapToClickEnabled(bool enabled) {
@@ -1170,7 +1159,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_TOUCHPAD_SETTINGS);
+ InputReaderConfiguration::Change::TOUCHPAD_SETTINGS);
}
void NativeInputManager::setTouchpadRightClickZoneEnabled(bool enabled) {
@@ -1186,7 +1175,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_TOUCHPAD_SETTINGS);
+ InputReaderConfiguration::Change::TOUCHPAD_SETTINGS);
}
void NativeInputManager::setInputDeviceEnabled(uint32_t deviceId, bool enabled) {
@@ -1204,7 +1193,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_ENABLED_STATE);
+ InputReaderConfiguration::Change::ENABLED_STATE);
}
void NativeInputManager::setShowTouches(bool enabled) {
@@ -1220,7 +1209,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_SHOW_TOUCHES);
+ InputReaderConfiguration::Change::SHOW_TOUCHES);
}
void NativeInputManager::requestPointerCapture(const sp<IBinder>& windowToken, bool enabled) {
@@ -1233,7 +1222,7 @@
void NativeInputManager::reloadCalibration() {
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_TOUCH_AFFINE_TRANSFORMATION);
+ InputReaderConfiguration::Change::TOUCH_AFFINE_TRANSFORMATION);
}
void NativeInputManager::setPointerIconType(PointerIconStyle iconId) {
@@ -1311,17 +1300,17 @@
JNIEnv* env = jniEnv();
switch (inputEvent->getType()) {
- case AINPUT_EVENT_TYPE_KEY:
- inputEventObj = android_view_KeyEvent_fromNative(env,
- static_cast<const KeyEvent*>(inputEvent));
- break;
- case AINPUT_EVENT_TYPE_MOTION:
- inputEventObj =
- android_view_MotionEvent_obtainAsCopy(env,
- static_cast<const MotionEvent&>(*inputEvent));
- break;
- default:
- return true; // dispatch the event normally
+ case InputEventType::KEY:
+ inputEventObj =
+ android_view_KeyEvent_fromNative(env, static_cast<const KeyEvent*>(inputEvent));
+ break;
+ case InputEventType::MOTION:
+ inputEventObj = android_view_MotionEvent_obtainAsCopy(env,
+ static_cast<const MotionEvent&>(
+ *inputEvent));
+ break;
+ default:
+ return true; // dispatch the event normally
}
if (!inputEventObj) {
@@ -1527,7 +1516,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_POINTER_CAPTURE);
+ InputReaderConfiguration::Change::POINTER_CAPTURE);
}
void NativeInputManager::loadPointerIcon(SpriteIcon* icon, int32_t displayId) {
@@ -1637,7 +1626,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_STYLUS_BUTTON_REPORTING);
+ InputReaderConfiguration::Change::STYLUS_BUTTON_REPORTING);
}
FloatPoint NativeInputManager::getMouseCursorPosition() {
@@ -1660,7 +1649,7 @@
} // release lock
mInputManager->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ InputReaderConfiguration::Change::DISPLAY_INFO);
}
// ----------------------------------------------------------------------------
@@ -2311,14 +2300,14 @@
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_KEYBOARD_LAYOUTS);
+ InputReaderConfiguration::Change::KEYBOARD_LAYOUTS);
}
static void nativeReloadDeviceAliases(JNIEnv* env, jobject nativeImplObj) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DEVICE_ALIAS);
+ InputReaderConfiguration::Change::DEVICE_ALIAS);
}
static void nativeSysfsNodeChanged(JNIEnv* env, jobject nativeImplObj, jstring path) {
@@ -2414,7 +2403,7 @@
static void nativeNotifyPortAssociationsChanged(JNIEnv* env, jobject nativeImplObj) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ InputReaderConfiguration::Change::DISPLAY_INFO);
}
static void nativeSetDisplayEligibilityForPointerCapture(JNIEnv* env, jobject nativeImplObj,
@@ -2427,19 +2416,19 @@
static void nativeChangeUniqueIdAssociation(JNIEnv* env, jobject nativeImplObj) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
+ InputReaderConfiguration::Change::DISPLAY_INFO);
}
static void nativeChangeTypeAssociation(JNIEnv* env, jobject nativeImplObj) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DEVICE_TYPE);
+ InputReaderConfiguration::Change::DEVICE_TYPE);
}
static void changeKeyboardLayoutAssociation(JNIEnv* env, jobject nativeImplObj) {
NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
im->getInputManager()->getReader().requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_KEYBOARD_LAYOUT_ASSOCIATION);
+ InputReaderConfiguration::Change::KEYBOARD_LAYOUT_ASSOCIATION);
}
static void nativeSetMotionClassifierEnabled(JNIEnv* env, jobject nativeImplObj, jboolean enabled) {
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
index 5a71808..fc7fd1a 100644
--- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
@@ -61,6 +61,8 @@
super(context, sessionCallback, lock, userId, callingUid, request, callback,
RequestInfo.TYPE_CREATE,
callingAppInfo, enabledProviders, cancellationSignal, startedTimestamp);
+ mRequestSessionMetric.collectCreateFlowInitialMetricInfo(
+ /*origin=*/request.getOrigin() != null);
}
/**
diff --git a/services/credentials/java/com/android/server/credentials/GetRequestSession.java b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
index 3dba4a9..f39de43 100644
--- a/services/credentials/java/com/android/server/credentials/GetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
@@ -59,7 +59,8 @@
int numTypes = (request.getCredentialOptions().stream()
.map(CredentialOption::getType).collect(
Collectors.toSet())).size(); // Dedupe type strings
- mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes);
+ mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes,
+ /*origin=*/request.getOrigin() != null);
}
/**
diff --git a/services/credentials/java/com/android/server/credentials/MetricUtilities.java b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
index 703ab7c..47b45ac 100644
--- a/services/credentials/java/com/android/server/credentials/MetricUtilities.java
+++ b/services/credentials/java/com/android/server/credentials/MetricUtilities.java
@@ -43,7 +43,9 @@
public static final String USER_CANCELED_SUBSTRING = "TYPE_USER_CANCELED";
public static final int DEFAULT_INT_32 = -1;
+ public static final String DEFAULT_STRING = "";
public static final int[] DEFAULT_REPEATED_INT_32 = new int[0];
+ public static final String[] DEFAULT_REPEATED_STR = new String[0];
// Used for single count metric emits, such as singular amounts of various types
public static final int UNIT = 1;
// Used for zero count metric emits, such as zero amounts of various types
@@ -143,7 +145,12 @@
finalPhaseMetric.getAuthenticationEntryCount(),
/* clicked_entries */ browsedClickedEntries,
/* provider_of_clicked_entry */ browsedProviderUid,
- /* api_status */ apiStatus
+ /* api_status */ apiStatus,
+ DEFAULT_REPEATED_INT_32,
+ DEFAULT_REPEATED_INT_32,
+ DEFAULT_REPEATED_STR,
+ DEFAULT_REPEATED_INT_32,
+ DEFAULT_STRING
);
} catch (Exception e) {
Log.w(TAG, "Unexpected error during metric logging: " + e);
@@ -222,7 +229,11 @@
/* candidate_provider_credential_entry_type_count */
candidateCredentialTypeCountList,
/* candidate_provider_remote_entry_count */ candidateRemoteEntryCountList,
- /* candidate_provider_authentication_entry_count */ candidateAuthEntryCountList
+ /* candidate_provider_authentication_entry_count */ candidateAuthEntryCountList,
+ DEFAULT_REPEATED_STR,
+ false,
+ DEFAULT_REPEATED_STR,
+ DEFAULT_REPEATED_INT_32
);
} catch (Exception e) {
Log.w(TAG, "Unexpected error during metric logging: " + e);
@@ -285,8 +296,12 @@
/* initial_timestamp_reference_nanoseconds */
initialPhaseMetric.getCredentialServiceStartedTimeNanoseconds(),
/* count_credential_request_classtypes */
- initialPhaseMetric.getCountRequestClassType()
+ initialPhaseMetric.getCountRequestClassType(),
// TODO(b/271135048) - add total count of request options
+ // TODO(b/271135048) - Uncomment once built past PWG review -
+ DEFAULT_REPEATED_STR,
+ DEFAULT_REPEATED_INT_32,
+ initialPhaseMetric.isOriginSpecified()
);
} catch (Exception e) {
Log.w(TAG, "Unexpected error during metric logging: " + e);
diff --git a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
index 9e7a87e..1c3d213c 100644
--- a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
@@ -59,7 +59,8 @@
int numTypes = (request.getCredentialOptions().stream()
.map(CredentialOption::getType).collect(
Collectors.toSet())).size(); // Dedupe type strings
- mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes);
+ mRequestSessionMetric.collectGetFlowInitialMetricInfo(numTypes,
+ /*origin=*/request.getOrigin() != null);
mPrepareGetCredentialCallback = prepareGetCredentialCallback;
}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java b/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
index a73495f..0210b14 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/InitialPhaseMetric.java
@@ -42,6 +42,10 @@
// over to the next latency object.
private long mCredentialServiceBeginQueryTimeNanoseconds = -1;
+ // Indicates if the origin was specified when making this API request
+ // TODO(b/271135048) - Emit once metrics approved
+ private boolean mOriginSpecified = false;
+
public InitialPhaseMetric() {
}
@@ -115,4 +119,12 @@
public int getCountRequestClassType() {
return mCountRequestClassType;
}
+
+ public void setOriginSpecified(boolean originSpecified) {
+ mOriginSpecified = originSpecified;
+ }
+
+ public boolean isOriginSpecified() {
+ return mOriginSpecified;
+ }
}
diff --git a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
index 325b7e1..10bf56c 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
@@ -149,13 +149,28 @@
}
/**
- * Collects request class type count in the RequestSession flow.
+ * Collects initializations for Create flow metrics.
+ *
+ * @param origin indicates if an origin was passed in or not
+ */
+ public void collectCreateFlowInitialMetricInfo(boolean origin) {
+ try {
+ mInitialPhaseMetric.setOriginSpecified(origin);
+ } catch (Exception e) {
+ Log.w(TAG, "Unexpected error during metric logging: " + e);
+ }
+ }
+
+ /**
+ * Collects initializations for Get flow metrics.
*
* @param requestClassTypeCount the number of class types in the request
+ * @param origin indicates if an origin was passed in or not
*/
- public void collectGetFlowInitialMetricInfo(int requestClassTypeCount) {
+ public void collectGetFlowInitialMetricInfo(int requestClassTypeCount, boolean origin) {
try {
mInitialPhaseMetric.setCountRequestClassType(requestClassTypeCount);
+ mInitialPhaseMetric.setOriginSpecified(origin);
} catch (Exception e) {
Log.w(TAG, "Unexpected error during metric logging: " + e);
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java b/services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java
index ee73f8a..82f9aad 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/BundlePolicySerializer.java
@@ -17,50 +17,28 @@
package com.android.server.devicepolicy;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.app.admin.BundlePolicyValue;
import android.app.admin.PackagePolicyKey;
import android.app.admin.PolicyKey;
import android.os.Bundle;
-import android.os.Environment;
import android.os.Parcelable;
-import android.util.AtomicFile;
-import android.util.Slog;
-import android.util.Xml;
+import android.util.Log;
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.XmlUtils;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
-import libcore.io.IoUtils;
-
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;
-// TODO(b/266704763): clean this up and stop creating separate files for each value, the code here
-// is copied from UserManagerService, however it doesn't currently handle setting different
-// restrictions for the same package in different users, it also will not remove the files for
-// outdated restrictions, this will all get fixed when we save it as part of the policies file
-// rather than in its own files.
final class BundlePolicySerializer extends PolicySerializer<Bundle> {
private static final String TAG = "BundlePolicySerializer";
- private static final String ATTR_FILE_NAME = "file-name";
-
- private static final String RESTRICTIONS_FILE_PREFIX = "AppRestrictions_";
- private static final String XML_SUFFIX = ".xml";
-
- private static final String TAG_RESTRICTIONS = "restrictions";
private static final String TAG_ENTRY = "entry";
private static final String TAG_VALUE = "value";
private static final String ATTR_KEY = "key";
@@ -83,62 +61,26 @@
throw new IllegalArgumentException("policyKey is not of type "
+ "PackagePolicyKey");
}
- String packageName = ((PackagePolicyKey) policyKey).getPackageName();
- String fileName = packageToRestrictionsFileName(packageName, value);
- writeApplicationRestrictionsLAr(fileName, value);
- serializer.attribute(/* namespace= */ null, ATTR_FILE_NAME, fileName);
+ writeBundle(value, serializer);
}
- @Nullable
@Override
BundlePolicyValue readFromXml(TypedXmlPullParser parser) {
- String fileName = parser.getAttributeValue(/* namespace= */ null, ATTR_FILE_NAME);
-
- return new BundlePolicyValue(readApplicationRestrictions(fileName));
- }
-
- private static String packageToRestrictionsFileName(String packageName, Bundle restrictions) {
- return RESTRICTIONS_FILE_PREFIX + packageName + Objects.hash(restrictions) + XML_SUFFIX;
- }
-
- @GuardedBy("mAppRestrictionsLock")
- private static Bundle readApplicationRestrictions(String fileName) {
- AtomicFile restrictionsFile =
- new AtomicFile(new File(Environment.getDataSystemDirectory(), fileName));
- return readApplicationRestrictions(restrictionsFile);
- }
-
- @VisibleForTesting
- @GuardedBy("mAppRestrictionsLock")
- static Bundle readApplicationRestrictions(AtomicFile restrictionsFile) {
- final Bundle restrictions = new Bundle();
- final ArrayList<String> values = new ArrayList<>();
- if (!restrictionsFile.getBaseFile().exists()) {
- return restrictions;
- }
-
- FileInputStream fis = null;
+ Bundle bundle = new Bundle();
+ ArrayList<String> values = new ArrayList<>();
try {
- fis = restrictionsFile.openRead();
- final TypedXmlPullParser parser = Xml.resolvePullParser(fis);
- XmlUtils.nextElement(parser);
- if (parser.getEventType() != XmlPullParser.START_TAG) {
- Slog.e(TAG, "Unable to read restrictions file "
- + restrictionsFile.getBaseFile());
- return restrictions;
+ final int outerDepth = parser.getDepth();
+ while (XmlUtils.nextElementWithin(parser, outerDepth)) {
+ readBundle(bundle, values, parser);
}
- while (parser.next() != XmlPullParser.END_DOCUMENT) {
- readEntry(restrictions, values, parser);
- }
- } catch (IOException | XmlPullParserException e) {
- Slog.w(TAG, "Error parsing " + restrictionsFile.getBaseFile(), e);
- } finally {
- IoUtils.closeQuietly(fis);
+ } catch (XmlPullParserException | IOException e) {
+ Log.e(TAG, "Error parsing Bundle policy.", e);
+ return null;
}
- return restrictions;
+ return new BundlePolicyValue(bundle);
}
- private static void readEntry(Bundle restrictions, ArrayList<String> values,
+ private static void readBundle(Bundle restrictions, ArrayList<String> values,
TypedXmlPullParser parser) throws XmlPullParserException, IOException {
int type = parser.getEventType();
if (type == XmlPullParser.START_TAG && parser.getName().equals(TAG_ENTRY)) {
@@ -186,37 +128,11 @@
Bundle childBundle = new Bundle();
int outerDepth = parser.getDepth();
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
- readEntry(childBundle, values, parser);
+ readBundle(childBundle, values, parser);
}
return childBundle;
}
- private static void writeApplicationRestrictionsLAr(String fileName, Bundle restrictions) {
- AtomicFile restrictionsFile = new AtomicFile(
- new File(Environment.getDataSystemDirectory(), fileName));
- writeApplicationRestrictionsLAr(restrictions, restrictionsFile);
- }
-
- static void writeApplicationRestrictionsLAr(Bundle restrictions, AtomicFile restrictionsFile) {
- FileOutputStream fos = null;
- try {
- fos = restrictionsFile.startWrite();
- final TypedXmlSerializer serializer = Xml.resolveSerializer(fos);
- serializer.startDocument(null, true);
- serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
-
- serializer.startTag(null, TAG_RESTRICTIONS);
- writeBundle(restrictions, serializer);
- serializer.endTag(null, TAG_RESTRICTIONS);
-
- serializer.endDocument();
- restrictionsFile.finishWrite(fos);
- } catch (Exception e) {
- restrictionsFile.failWrite(fos);
- Slog.e(TAG, "Error writing application restrictions list", e);
- }
- }
-
private static void writeBundle(Bundle restrictions, TypedXmlSerializer serializer)
throws IOException {
for (String key : restrictions.keySet()) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
index 702602a..415440b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
@@ -632,6 +632,38 @@
}
/**
+ * Returns all the {@code policyKeys} set by any admin that share the same
+ * {@link PolicyKey#getIdentifier()} as the provided {@code policyDefinition}.
+ *
+ * <p>For example, getLocalPolicyKeysSetByAllAdmins(PERMISSION_GRANT) returns all permission
+ * grants set by any admin.
+ *
+ * <p>Note that this will always return at most one item for policies that do not require
+ * additional params (e.g. {@link PolicyDefinition#LOCK_TASK} vs
+ * {@link PolicyDefinition#PERMISSION_GRANT(String, String)}).
+ *
+ */
+ @NonNull
+ <V> Set<PolicyKey> getLocalPolicyKeysSetByAllAdmins(
+ @NonNull PolicyDefinition<V> policyDefinition,
+ int userId) {
+ Objects.requireNonNull(policyDefinition);
+
+ synchronized (mLock) {
+ if (policyDefinition.isGlobalOnlyPolicy() || !mLocalPolicies.contains(userId)) {
+ return Set.of();
+ }
+ Set<PolicyKey> keys = new HashSet<>();
+ for (PolicyKey key : mLocalPolicies.get(userId).keySet()) {
+ if (key.hasSameIdentifierAs(policyDefinition.getPolicyKey())) {
+ keys.add(key);
+ }
+ }
+ return keys;
+ }
+ }
+
+ /**
* Returns all user restriction policies set by the given admin.
*
* <p>Pass in {@link UserHandle#USER_ALL} for {@code userId} to get global restrictions set by
@@ -985,8 +1017,12 @@
int userId = user.id;
// Apply local policies present on parent to newly created child profile.
UserInfo parentInfo = mUserManager.getProfileParent(userId);
- if (parentInfo == null || parentInfo.getUserHandle().getIdentifier() == userId) return;
-
+ if (parentInfo == null || parentInfo.getUserHandle().getIdentifier() == userId) {
+ return;
+ }
+ if (!mLocalPolicies.contains(parentInfo.getUserHandle().getIdentifier())) {
+ return;
+ }
for (Map.Entry<PolicyKey, PolicyState<?>> entry : mLocalPolicies.get(
parentInfo.getUserHandle().getIdentifier()).entrySet()) {
enforcePolicyOnUser(userId, entry.getValue());
@@ -1210,6 +1246,31 @@
synchronized (mLock) {
clear();
new DevicePoliciesReaderWriter().readFromFileLocked();
+ reapplyAllPolicies();
+ }
+ }
+
+ private <V> void reapplyAllPolicies() {
+ for (PolicyKey policy : mGlobalPolicies.keySet()) {
+ PolicyState<?> policyState = mGlobalPolicies.get(policy);
+ // Policy definition and value will always be of the same type
+ PolicyDefinition<V> policyDefinition =
+ (PolicyDefinition<V>) policyState.getPolicyDefinition();
+ PolicyValue<V> policyValue = (PolicyValue<V>) policyState.getCurrentResolvedPolicy();
+ enforcePolicy(policyDefinition, policyValue, UserHandle.USER_ALL);
+ }
+ for (int i = 0; i < mLocalPolicies.size(); i++) {
+ int userId = mLocalPolicies.keyAt(i);
+ for (PolicyKey policy : mLocalPolicies.get(userId).keySet()) {
+ PolicyState<?> policyState = mLocalPolicies.get(userId).get(policy);
+ // Policy definition and value will always be of the same type
+ PolicyDefinition<V> policyDefinition =
+ (PolicyDefinition<V>) policyState.getPolicyDefinition();
+ PolicyValue<V> policyValue =
+ (PolicyValue<V>) policyState.getCurrentResolvedPolicy();
+ enforcePolicy(policyDefinition, policyValue, userId);
+
+ }
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 5cad4e2..7e5d5aa 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -85,6 +85,7 @@
import static android.Manifest.permission.SET_TIME;
import static android.Manifest.permission.SET_TIME_ZONE;
import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
+import static android.accounts.AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION;
import static android.app.ActivityManager.LOCK_TASK_MODE_NONE;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.MODE_DEFAULT;
@@ -280,6 +281,7 @@
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.StatusBarManager;
+import android.app.admin.AccountTypePolicyKey;
import android.app.admin.BooleanPolicyValue;
import android.app.admin.BundlePolicyValue;
import android.app.admin.ComponentNamePolicyValue;
@@ -531,6 +533,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
@@ -1139,6 +1142,11 @@
}
}
}
+
+ if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
+ calculateHasIncompatibleAccounts();
+ }
+
if (Intent.ACTION_BOOT_COMPLETED.equals(action)
&& userHandle == mOwners.getDeviceOwnerUserId()) {
mBugreportCollectionManager.checkForPendingBugreportAfterBoot();
@@ -1252,6 +1260,8 @@
} else if (ACTION_MANAGED_PROFILE_AVAILABLE.equals(action)) {
notifyIfManagedSubscriptionsAreUnavailable(
UserHandle.of(userHandle), /* managedProfileAvailable= */ true);
+ } else if (LOGIN_ACCOUNTS_CHANGED_ACTION.equals(action)) {
+ calculateHasIncompatibleAccounts();
}
}
@@ -2104,6 +2114,7 @@
filter.addAction(Intent.ACTION_USER_STOPPED);
filter.addAction(Intent.ACTION_USER_SWITCHED);
filter.addAction(Intent.ACTION_USER_UNLOCKED);
+ filter.addAction(LOGIN_ACCOUNTS_CHANGED_ACTION);
filter.addAction(ACTION_MANAGED_PROFILE_UNAVAILABLE);
filter.addAction(ACTION_MANAGED_PROFILE_AVAILABLE);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
@@ -2130,7 +2141,7 @@
mUserManagerInternal.addUserLifecycleListener(new UserLifecycleListener());
mDeviceManagementResourcesProvider.load();
- if (isPermissionCheckFlagEnabled()) {
+ if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
mDevicePolicyEngine.load();
}
@@ -3279,8 +3290,10 @@
policy.validatePasswordOwner();
updateMaximumTimeToLockLocked(userHandle);
- updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userHandle);
- updateLockTaskFeaturesLocked(policy.mLockTaskFeatures, userHandle);
+ if (!isPolicyEngineForFinanceFlagEnabled()) {
+ updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userHandle);
+ updateLockTaskFeaturesLocked(policy.mLockTaskFeatures, userHandle);
+ }
if (policy.mStatusBarDisabled) {
setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
}
@@ -3592,7 +3605,7 @@
}
startOwnerService(userId, "start-user");
- if (isPermissionCheckFlagEnabled()) {
+ if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
mDevicePolicyEngine.handleStartUser(userId);
}
}
@@ -3619,7 +3632,7 @@
void handleUnlockUser(int userId) {
startOwnerService(userId, "unlock-user");
- if (isPermissionCheckFlagEnabled()) {
+ if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
mDevicePolicyEngine.handleUnlockUser(userId);
}
}
@@ -3631,7 +3644,7 @@
void handleStopUser(int userId) {
updateNetworkPreferenceForUser(userId, List.of(PreferentialNetworkServiceConfig.DEFAULT));
mDeviceAdminServiceController.stopServicesForUser(userId, /* actionForLog= */ "stop-user");
- if (isPermissionCheckFlagEnabled()) {
+ if (isPermissionCheckFlagEnabled() || isPolicyEngineForFinanceFlagEnabled()) {
mDevicePolicyEngine.handleStopUser(userId);
}
}
@@ -7711,30 +7724,72 @@
private void updateTelephonyCrossProfileIntentFilters(int parentUserId, int profileUserId,
boolean enableWorkTelephony) {
try {
- String packageName = mContext.getOpPackageName();
- if (enableWorkTelephony) {
- // Reset call/sms cross profile intent filters to be handled by managed profile.
- for (DefaultCrossProfileIntentFilter filter :
- DefaultCrossProfileIntentFiltersUtils
- .getDefaultManagedProfileTelephonyFilters()) {
- IntentFilter intentFilter = filter.filter.getIntentFilter();
- if (!mIPackageManager.removeCrossProfileIntentFilter(intentFilter, packageName,
- profileUserId, parentUserId, filter.flags)) {
- Slogf.w(LOG_TAG,
- "Failed to remove cross-profile intent filter: " + intentFilter);
- }
-
- mIPackageManager.addCrossProfileIntentFilter(intentFilter, packageName,
- parentUserId, profileUserId, PackageManager.SKIP_CURRENT_PROFILE);
+ // This should only occur when managed profile is being removed.
+ if (!enableWorkTelephony && profileUserId == UserHandle.USER_NULL) {
+ mIPackageManager.clearCrossProfileIntentFilters(parentUserId,
+ mContext.getPackageName());
+ return;
+ }
+ for (DefaultCrossProfileIntentFilter filter :
+ DefaultCrossProfileIntentFiltersUtils
+ .getDefaultCrossProfileTelephonyIntentFilters(!enableWorkTelephony)) {
+ if (removeCrossProfileIntentFilter(filter, parentUserId, profileUserId)) {
+ Slogf.w(LOG_TAG,
+ "Failed to remove cross-profile intent filter: "
+ + filter.filter.getIntentFilter() + ", enableWorkTelephony: "
+ + enableWorkTelephony);
}
- } else {
- mIPackageManager.clearCrossProfileIntentFilters(parentUserId, packageName);
+ }
+ for (DefaultCrossProfileIntentFilter filter :
+ DefaultCrossProfileIntentFiltersUtils
+ .getDefaultCrossProfileTelephonyIntentFilters(enableWorkTelephony)) {
+ addCrossProfileIntentFilter(filter, parentUserId, profileUserId);
}
} catch (RemoteException re) {
Slogf.wtf(LOG_TAG, "Error updating telephony cross profile intent filters", re);
}
}
+ void addCrossProfileIntentFilter(DefaultCrossProfileIntentFilter filter, int parentUserId,
+ int profileUserId)
+ throws RemoteException {
+ if (filter.direction == DefaultCrossProfileIntentFilter.Direction.TO_PROFILE) {
+ mIPackageManager.addCrossProfileIntentFilter(
+ filter.filter.getIntentFilter(),
+ mContext.getOpPackageName(),
+ parentUserId,
+ profileUserId,
+ filter.flags);
+ } else {
+ mIPackageManager.addCrossProfileIntentFilter(
+ filter.filter.getIntentFilter(),
+ mContext.getOpPackageName(),
+ profileUserId,
+ parentUserId,
+ filter.flags);
+ }
+ }
+
+ boolean removeCrossProfileIntentFilter(DefaultCrossProfileIntentFilter filter, int parentUserId,
+ int profileUserId)
+ throws RemoteException {
+ if (filter.direction == DefaultCrossProfileIntentFilter.Direction.TO_PROFILE) {
+ return mIPackageManager.removeCrossProfileIntentFilter(
+ filter.filter.getIntentFilter(),
+ mContext.getOpPackageName(),
+ parentUserId,
+ profileUserId,
+ filter.flags);
+ } else {
+ return mIPackageManager.removeCrossProfileIntentFilter(
+ filter.filter.getIntentFilter(),
+ mContext.getOpPackageName(),
+ profileUserId,
+ parentUserId,
+ filter.flags);
+ }
+ }
+
/**
* @param factoryReset null: legacy behaviour, false: attempt to remove user, true: attempt to
* factory reset
@@ -9515,6 +9570,7 @@
synchronized (getLockObject()) {
enforceCanSetDeviceOwnerLocked(caller, admin, userId, hasIncompatibleAccountsOrNonAdb);
+
Preconditions.checkArgument(isPackageInstalledForUser(admin.getPackageName(), userId),
"Invalid component " + admin + " for device owner");
final ActiveAdmin activeAdmin = getActiveAdminUncheckedLocked(admin, userId);
@@ -10204,7 +10260,9 @@
policy.mUserProvisioningState = DevicePolicyManager.STATE_USER_UNMANAGED;
policy.mAffiliationIds.clear();
policy.mLockTaskPackages.clear();
- updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userId);
+ if (!isPolicyEngineForFinanceFlagEnabled()) {
+ updateLockTaskPackagesLocked(mContext, policy.mLockTaskPackages, userId);
+ }
policy.mLockTaskFeatures = DevicePolicyManager.LOCK_TASK_FEATURE_NONE;
saveSettingsLocked(userId);
@@ -10994,8 +11052,7 @@
return false;
}
- if (!isPermissionCheckFlagEnabled()) {
- // TODO: Figure out if something like this needs to be restored for policy engine
+ if (!isPermissionCheckFlagEnabled() && !isPolicyEngineForFinanceFlagEnabled()) {
final ComponentName profileOwner = getProfileOwnerAsUser(userId);
if (profileOwner == null) {
return false;
@@ -11009,17 +11066,6 @@
return true;
}
-
- private void enforceCanCallLockTaskLocked(CallerIdentity caller) {
- Preconditions.checkCallAuthorization(isProfileOwner(caller)
- || isDefaultDeviceOwner(caller) || isFinancedDeviceOwner(caller));
-
- final int userId = caller.getUserId();
- if (!canUserUseLockTaskLocked(userId)) {
- throw new SecurityException("User " + userId + " is not allowed to use lock task");
- }
- }
-
private void enforceCanQueryLockTaskLocked(ComponentName who, String callerPackageName) {
CallerIdentity caller = getCallerIdentity(who, callerPackageName);
final int userId = caller.getUserId();
@@ -11047,6 +11093,16 @@
return enforcingAdmin;
}
+ private void enforceCanCallLockTaskLocked(CallerIdentity caller) {
+ Preconditions.checkCallAuthorization(isProfileOwner(caller)
+ || isDefaultDeviceOwner(caller) || isFinancedDeviceOwner(caller));
+
+ final int userId = caller.getUserId();
+ if (!canUserUseLockTaskLocked(userId)) {
+ throw new SecurityException("User " + userId + " is not allowed to use lock task");
+ }
+ }
+
private boolean isSystemUid(CallerIdentity caller) {
return UserHandle.isSameApp(caller.getUid(), Process.SYSTEM_UID);
}
@@ -11583,7 +11639,7 @@
caller.getUserId());
}
setBackwardsCompatibleAppRestrictions(
- packageName, restrictions, caller.getUserHandle());
+ caller, packageName, restrictions, caller.getUserHandle());
} else {
Preconditions.checkCallAuthorization((caller.hasAdminComponent()
&& (isProfileOwner(caller) || isDefaultDeviceOwner(caller)))
@@ -11604,17 +11660,28 @@
}
/**
- * Set app restrictions in user manager to keep backwards compatibility for the old
- * getApplicationRestrictions API.
+ * Set app restrictions in user manager for DPC callers only to keep backwards compatibility
+ * for the old getApplicationRestrictions API.
*/
private void setBackwardsCompatibleAppRestrictions(
- String packageName, Bundle restrictions, UserHandle userHandle) {
- Bundle restrictionsToApply = restrictions == null || restrictions.isEmpty()
- ? getAppRestrictionsSetByAnyAdmin(packageName, userHandle)
- : restrictions;
- mInjector.binderWithCleanCallingIdentity(() -> {
- mUserManager.setApplicationRestrictions(packageName, restrictionsToApply, userHandle);
- });
+ CallerIdentity caller, String packageName, Bundle restrictions, UserHandle userHandle) {
+ if ((caller.hasAdminComponent() && (isProfileOwner(caller) || isDefaultDeviceOwner(caller)))
+ || (caller.hasPackage() && isCallerDelegate(caller, DELEGATION_APP_RESTRICTIONS))) {
+ Bundle restrictionsToApply = restrictions == null || restrictions.isEmpty()
+ ? getAppRestrictionsSetByAnyAdmin(packageName, userHandle)
+ : restrictions;
+ mInjector.binderWithCleanCallingIdentity(() -> {
+ mUserManager.setApplicationRestrictions(packageName, restrictionsToApply,
+ userHandle);
+ });
+ } else {
+ // Notify package of changes via an intent - only sent to explicitly registered
+ // receivers. Sending here because For DPCs, this is being sent in UMS.
+ final Intent changeIntent = new Intent(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED);
+ changeIntent.setPackage(packageName);
+ changeIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ mContext.sendBroadcastAsUser(changeIntent, userHandle);
+ }
}
private Bundle getAppRestrictionsSetByAnyAdmin(String packageName, UserHandle userHandle) {
@@ -13978,16 +14045,28 @@
caller = getCallerIdentity(who);
}
synchronized (getLockObject()) {
- final ActiveAdmin ap;
if (isPermissionCheckFlagEnabled()) {
+ int affectedUser = getAffectedUser(parent);
EnforcingAdmin enforcingAdmin = enforcePermissionAndGetEnforcingAdmin(
who,
MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT,
caller.getPackageName(),
- getAffectedUser(parent)
+ affectedUser
);
- ap = enforcingAdmin.getActiveAdmin();
+ if (disabled) {
+ mDevicePolicyEngine.setLocalPolicy(
+ PolicyDefinition.ACCOUNT_MANAGEMENT_DISABLED(accountType),
+ enforcingAdmin,
+ new BooleanPolicyValue(disabled),
+ affectedUser);
+ } else {
+ mDevicePolicyEngine.removeLocalPolicy(
+ PolicyDefinition.ACCOUNT_MANAGEMENT_DISABLED(accountType),
+ enforcingAdmin,
+ affectedUser);
+ }
} else {
+ final ActiveAdmin ap;
Objects.requireNonNull(who, "ComponentName is null");
/*
* When called on the parent DPM instance (parent == true), affects active admin
@@ -14004,13 +14083,13 @@
ap = getParentOfAdminIfRequired(
getProfileOwnerOrDeviceOwnerLocked(caller.getUserId()), parent);
}
+ if (disabled) {
+ ap.accountTypesWithManagementDisabled.add(accountType);
+ } else {
+ ap.accountTypesWithManagementDisabled.remove(accountType);
+ }
+ saveSettingsLocked(UserHandle.getCallingUserId());
}
- if (disabled) {
- ap.accountTypesWithManagementDisabled.add(accountType);
- } else {
- ap.accountTypesWithManagementDisabled.remove(accountType);
- }
- saveSettingsLocked(UserHandle.getCallingUserId());
}
}
@@ -14028,41 +14107,64 @@
}
CallerIdentity caller;
Preconditions.checkArgumentNonnegative(userId, "Invalid userId");
+ final ArraySet<String> resultSet = new ArraySet<>();
if (isPermissionCheckFlagEnabled()) {
+ int affectedUser = parent ? getProfileParentId(userId) : userId;
caller = getCallerIdentity(callerPackageName);
if (!hasPermission(MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT,
- caller.getPackageName(), userId)
+ callerPackageName, affectedUser)
&& !hasFullCrossUsersPermission(caller, userId)) {
throw new SecurityException("Caller does not have permission to call this on user: "
- + userId);
+ + affectedUser);
}
- } else {
- caller = getCallerIdentity();
- Preconditions.checkCallAuthorization(hasFullCrossUsersPermission(caller, userId));
- }
+ Set<PolicyKey> keys = mDevicePolicyEngine.getLocalPolicyKeysSetByAllAdmins(
+ PolicyDefinition.GENERIC_ACCOUNT_MANAGEMENT_DISABLED,
+ affectedUser);
- synchronized (getLockObject()) {
- final ArraySet<String> resultSet = new ArraySet<>();
+ for (PolicyKey key : keys) {
+ if (!(key instanceof AccountTypePolicyKey)) {
+ throw new IllegalStateException("PolicyKey for "
+ + "MANAGE_DEVICE_POLICY_ACCOUNT_MANAGEMENT is not of type "
+ + "AccountTypePolicyKey");
+ }
+ AccountTypePolicyKey parsedKey =
+ (AccountTypePolicyKey) key;
+ String accountType = Objects.requireNonNull(parsedKey.getAccountType());
- if (!parent) {
- final DevicePolicyData policy = getUserData(userId);
- for (ActiveAdmin admin : policy.mAdminList) {
- resultSet.addAll(admin.accountTypesWithManagementDisabled);
+ Boolean disabled = mDevicePolicyEngine.getResolvedPolicy(
+ PolicyDefinition.ACCOUNT_MANAGEMENT_DISABLED(accountType),
+ affectedUser);
+ if (disabled != null && disabled) {
+ resultSet.add(accountType);
}
}
- // Check if there's a profile owner of an org-owned device and the method is called for
- // the parent user of this profile owner.
- final ActiveAdmin orgOwnedAdmin =
- getProfileOwnerOfOrganizationOwnedDeviceLocked(userId);
- final boolean shouldGetParentAccounts = orgOwnedAdmin != null && (parent
- || UserHandle.getUserId(orgOwnedAdmin.getUid()) != userId);
- if (shouldGetParentAccounts) {
- resultSet.addAll(
- orgOwnedAdmin.getParentActiveAdmin().accountTypesWithManagementDisabled);
+ } else {
+ caller = getCallerIdentity();
+ Preconditions.checkCallAuthorization(hasFullCrossUsersPermission(caller, userId));
+
+ synchronized (getLockObject()) {
+ if (!parent) {
+ final DevicePolicyData policy = getUserData(userId);
+ for (ActiveAdmin admin : policy.mAdminList) {
+ resultSet.addAll(admin.accountTypesWithManagementDisabled);
+ }
+ }
+
+ // Check if there's a profile owner of an org-owned device and the method is called
+ // for the parent user of this profile owner.
+ final ActiveAdmin orgOwnedAdmin =
+ getProfileOwnerOfOrganizationOwnedDeviceLocked(userId);
+ final boolean shouldGetParentAccounts = orgOwnedAdmin != null && (parent
+ || UserHandle.getUserId(orgOwnedAdmin.getUid()) != userId);
+ if (shouldGetParentAccounts) {
+ resultSet.addAll(
+ orgOwnedAdmin.getParentActiveAdmin()
+ .accountTypesWithManagementDisabled);
+ }
}
- return resultSet.toArray(new String[resultSet.size()]);
}
+ return resultSet.toArray(new String[resultSet.size()]);
}
@Override
@@ -14637,7 +14739,7 @@
if (isPolicyEngineForFinanceFlagEnabled()) {
EnforcingAdmin enforcingAdmin;
synchronized (getLockObject()) {
- enforcingAdmin = enforceCanCallLockTaskLocked(who, callerPackageName);
+ enforcingAdmin = enforceCanCallLockTaskLocked(who, caller.getPackageName());
}
if (packages.length == 0) {
mDevicePolicyEngine.removeLocalPolicy(
@@ -14764,8 +14866,7 @@
if (isPolicyEngineForFinanceFlagEnabled()) {
EnforcingAdmin enforcingAdmin;
synchronized (getLockObject()) {
- enforcingAdmin = enforceCanCallLockTaskLocked(who,
- callerPackageName);
+ enforcingAdmin = enforceCanCallLockTaskLocked(who, caller.getPackageName());
enforceCanSetLockTaskFeaturesOnFinancedDevice(caller, flags);
}
LockTaskPolicy currentPolicy = mDevicePolicyEngine.getLocalPolicySetByAdmin(
@@ -14842,6 +14943,7 @@
}
final List<String> lockTaskPackages = getUserData(userId).mLockTaskPackages;
+ // TODO(b/278438525): handle in the policy engine
if (!lockTaskPackages.isEmpty()) {
Slogf.d(LOG_TAG,
"User id " + userId + " not affiliated. Clearing lock task packages");
@@ -18305,6 +18407,26 @@
return isUserAffiliatedWithDeviceLocked(userId);
}
+ private boolean hasIncompatibleAccountsOnAnyUser() {
+ if (mHasIncompatibleAccounts == null) {
+ // Hasn't loaded for the first time yet - assume the worst
+ return true;
+ }
+
+ for (boolean hasIncompatible : mHasIncompatibleAccounts.values()) {
+ if (hasIncompatible) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean hasIncompatibleAccounts(int userId) {
+ return mHasIncompatibleAccounts == null ? true
+ : mHasIncompatibleAccounts.getOrDefault(userId, /* default= */ false);
+ }
+
/**
* Return true if a given user has any accounts that'll prevent installing a device or profile
* owner {@code owner}.
@@ -18342,7 +18464,7 @@
}
}
- boolean compatible = !hasIncompatibleAccounts(am, accounts);
+ boolean compatible = !hasIncompatibleAccounts(userId);
if (compatible) {
Slogf.w(LOG_TAG, "All accounts are compatible");
} else {
@@ -18352,37 +18474,67 @@
});
}
- private boolean hasIncompatibleAccounts(AccountManager am, Account[] accounts) {
- // TODO(b/244284408): Add test
- final String[] feature_allow =
- { DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED };
- final String[] feature_disallow =
- { DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED };
-
- for (Account account : accounts) {
- if (hasAccountFeatures(am, account, feature_disallow)) {
- Slogf.e(LOG_TAG, "%s has %s", account, feature_disallow[0]);
- return true;
- }
- if (!hasAccountFeatures(am, account, feature_allow)) {
- Slogf.e(LOG_TAG, "%s doesn't have %s", account, feature_allow[0]);
- return true;
- }
- }
-
- return false;
+ @Override
+ public void calculateHasIncompatibleAccounts() {
+ new CalculateHasIncompatibleAccountsTask().executeOnExecutor(
+ AsyncTask.THREAD_POOL_EXECUTOR, null);
}
- private boolean hasAccountFeatures(AccountManager am, Account account, String[] features) {
- try {
- // TODO(267156507): Restore without blocking binder thread
- return false;
-// return am.hasFeatures(account, features, null, null).getResult();
- } catch (Exception e) {
- Slogf.w(LOG_TAG, "Failed to get account feature", e);
+ @Nullable
+ private volatile Map<Integer, Boolean> mHasIncompatibleAccounts;
+
+ class CalculateHasIncompatibleAccountsTask extends AsyncTask<
+ Void, Void, Map<Integer, Boolean>> {
+ private static final String[] FEATURE_ALLOW =
+ {DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED};
+ private static final String[] FEATURE_DISALLOW =
+ {DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED};
+
+ @Override
+ protected Map<Integer, Boolean> doInBackground(Void... args) {
+ List<UserInfo> users = mUserManagerInternal.getUsers(/* excludeDying= */ true);
+ Map<Integer, Boolean> results = new HashMap<>();
+ for (UserInfo userInfo : users) {
+ results.put(userInfo.id, userHasIncompatibleAccounts(userInfo.id));
+ }
+
+ return results;
+ }
+
+ private boolean userHasIncompatibleAccounts(int id) {
+ AccountManager am = mContext.createContextAsUser(UserHandle.of(id), /* flags= */ 0)
+ .getSystemService(AccountManager.class);
+ Account[] accounts = am.getAccounts();
+
+ for (Account account : accounts) {
+ if (hasAccountFeatures(am, account, FEATURE_DISALLOW)) {
+ return true;
+ }
+ if (!hasAccountFeatures(am, account, FEATURE_ALLOW)) {
+ return true;
+ }
+ }
+
return false;
}
- }
+
+ @Override
+ protected void onPostExecute(Map<Integer, Boolean> results) {
+ mHasIncompatibleAccounts = Collections.unmodifiableMap(results);
+
+ Slogf.i(LOG_TAG, "Finished calculating hasIncompatibleAccountsTask");
+ }
+
+ private static boolean hasAccountFeatures(AccountManager am, Account account,
+ String[] features) {
+ try {
+ return am.hasFeatures(account, features, null, null).getResult();
+ } catch (Exception e) {
+ Slogf.w(LOG_TAG, "Failed to get account feature", e);
+ return false;
+ }
+ }
+ };
private boolean isAdb(CallerIdentity caller) {
return isShellUid(caller) || isRootUid(caller);
@@ -22214,26 +22366,6 @@
}
}
- private boolean hasIncompatibleAccountsOnAnyUser() {
- long callingIdentity = Binder.clearCallingIdentity();
- try {
- for (UserInfo user : mUserManagerInternal.getUsers(/* excludeDying= */ true)) {
- AccountManager am = mContext.createContextAsUser(
- UserHandle.of(user.id), /* flags= */ 0)
- .getSystemService(AccountManager.class);
- Account[] accounts = am.getAccounts();
-
- if (hasIncompatibleAccounts(am, accounts)) {
- return true;
- }
- }
-
- return false;
- } finally {
- Binder.restoreCallingIdentity(callingIdentity);
- }
- }
-
private void setBypassDevicePolicyManagementRoleQualificationStateInternal(
String currentRoleHolder, boolean allowBypass) {
boolean stateChanged = false;
@@ -22474,11 +22606,26 @@
"manage_device_policy_microphone_toggle";
// DPC types
+ private static final int NOT_A_DPC = -1;
private static final int DEFAULT_DEVICE_OWNER = 0;
private static final int FINANCED_DEVICE_OWNER = 1;
private static final int PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE = 2;
private static final int PROFILE_OWNER_ON_USER_0 = 3;
private static final int PROFILE_OWNER = 4;
+ private static final int PROFILE_OWNER_ON_USER = 5;
+ private static final int AFFILIATED_PROFILE_OWNER_ON_USER = 6;
+ // DPC types
+ @IntDef(value = {
+ NOT_A_DPC,
+ DEFAULT_DEVICE_OWNER,
+ FINANCED_DEVICE_OWNER,
+ PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE,
+ PROFILE_OWNER_ON_USER_0,
+ PROFILE_OWNER,
+ PROFILE_OWNER_ON_USER,
+ AFFILIATED_PROFILE_OWNER_ON_USER
+ })
+ private @interface DpcType {}
// Permissions of existing DPC types.
private static final List<String> DEFAULT_DEVICE_OWNER_PERMISSIONS = List.of(
@@ -22632,7 +22779,9 @@
SET_TIME_ZONE
);
-
+ /**
+ * All the additional permissions granted to a Profile Owner on user 0.
+ */
private static final List<String> ADDITIONAL_PROFILE_OWNER_ON_USER_0_PERMISSIONS =
List.of(
MANAGE_DEVICE_POLICY_AIRPLANE_MODE,
@@ -22657,6 +22806,20 @@
);
/**
+ * All the additional permissions granted to a Profile Owner on an unaffiliated user.
+ */
+ private static final List<String> ADDITIONAL_PROFILE_OWNER_ON_USER_PERMISSIONS =
+ List.of(
+ MANAGE_DEVICE_POLICY_LOCK_TASK
+ );
+
+ /**
+ * All the additional permissions granted to a Profile Owner on an affiliated user.
+ */
+ private static final List<String> ADDITIONAL_AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS =
+ List.of();
+
+ /**
* Combination of {@link PROFILE_OWNER_PERMISSIONS} and
* {@link ADDITIONAL_PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE_PERMISSIONS}.
*/
@@ -22670,6 +22833,20 @@
private static final List<String> PROFILE_OWNER_ON_USER_0_PERMISSIONS =
new ArrayList();
+ /**
+ * Combination of {@link PROFILE_OWNER_PERMISSIONS} and
+ * {@link ADDITIONAL_AFFILIATED_PROFIL_OWNER_ON_USER_PERMISSIONS}.
+ */
+ private static final List<String> AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS =
+ new ArrayList();
+
+ /**
+ * Combination of {@link PROFILE_OWNER_PERMISSIONS} and
+ * {@link ADDITIONAL_PROFILE_OWNER_ON_USER_PERMISSIONS}.
+ */
+ private static final List<String> PROFILE_OWNER_ON_USER_PERMISSIONS =
+ new ArrayList();
+
private static final HashMap<Integer, List<String>> DPC_PERMISSIONS = new HashMap<>();
{
@@ -22682,6 +22859,16 @@
// some extra permissions.
PROFILE_OWNER_ON_USER_0_PERMISSIONS.addAll(PROFILE_OWNER_PERMISSIONS);
PROFILE_OWNER_ON_USER_0_PERMISSIONS.addAll(ADDITIONAL_PROFILE_OWNER_ON_USER_0_PERMISSIONS);
+ // Profile owners on users have all the permission of a profile owner plus
+ // some extra permissions.
+ PROFILE_OWNER_ON_USER_PERMISSIONS.addAll(PROFILE_OWNER_PERMISSIONS);
+ PROFILE_OWNER_ON_USER_PERMISSIONS.addAll(
+ ADDITIONAL_PROFILE_OWNER_ON_USER_PERMISSIONS);
+ // Profile owners on affiliated users have all the permission of a profile owner on a user
+ // plus some extra permissions.
+ AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS.addAll(PROFILE_OWNER_ON_USER_PERMISSIONS);
+ AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS.addAll(
+ ADDITIONAL_AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS);
DPC_PERMISSIONS.put(DEFAULT_DEVICE_OWNER, DEFAULT_DEVICE_OWNER_PERMISSIONS);
DPC_PERMISSIONS.put(FINANCED_DEVICE_OWNER, FINANCED_DEVICE_OWNER_PERMISSIONS);
@@ -22689,6 +22876,9 @@
PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE_PERMISSIONS);
DPC_PERMISSIONS.put(PROFILE_OWNER_ON_USER_0, PROFILE_OWNER_ON_USER_0_PERMISSIONS);
DPC_PERMISSIONS.put(PROFILE_OWNER, PROFILE_OWNER_PERMISSIONS);
+ DPC_PERMISSIONS.put(PROFILE_OWNER_ON_USER, PROFILE_OWNER_ON_USER_PERMISSIONS);
+ DPC_PERMISSIONS.put(AFFILIATED_PROFILE_OWNER_ON_USER,
+ AFFILIATED_PROFILE_OWNER_ON_USER_PERMISSIONS);
}
//Map of Permission to Delegate Scope.
private static final HashMap<String, String> DELEGATE_SCOPES = new HashMap<>();
@@ -23066,22 +23256,9 @@
if (mContext.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED) {
return true;
}
- // Check the permissions of DPCs
- if (isDefaultDeviceOwner(caller)) {
- return DPC_PERMISSIONS.get(DEFAULT_DEVICE_OWNER).contains(permission);
- }
- if (isFinancedDeviceOwner(caller)) {
- return DPC_PERMISSIONS.get(FINANCED_DEVICE_OWNER).contains(permission);
- }
- if (isProfileOwnerOfOrganizationOwnedDevice(caller)) {
- return DPC_PERMISSIONS.get(PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE).contains(
- permission);
- }
- if (isProfileOwnerOnUser0(caller)) {
- return DPC_PERMISSIONS.get(PROFILE_OWNER_ON_USER_0).contains(permission);
- }
- if (isProfileOwner(caller)) {
- return DPC_PERMISSIONS.get(PROFILE_OWNER).contains(permission);
+ int dpcType = getDpcType(caller);
+ if (dpcType != NOT_A_DPC) {
+ return DPC_PERMISSIONS.get(dpcType).contains(permission);
}
// Check the permission for the role-holder
if (isCallerDevicePolicyManagementRoleHolder(caller)) {
@@ -23151,6 +23328,35 @@
return calledOnParent ? getProfileParentId(callingUserId) : callingUserId;
}
+ /**
+ * Return the DPC type of the given caller.
+ */
+ private @DpcType int getDpcType(CallerIdentity caller) {
+ // Check the permissions of DPCs
+ if (isDefaultDeviceOwner(caller)) {
+ return DEFAULT_DEVICE_OWNER;
+ }
+ if (isFinancedDeviceOwner(caller)) {
+ return FINANCED_DEVICE_OWNER;
+ }
+ if (isProfileOwner(caller)) {
+ if (isProfileOwnerOfOrganizationOwnedDevice(caller)) {
+ return PROFILE_OWNER_OF_ORGANIZATION_OWNED_DEVICE;
+ }
+ if (isManagedProfile(caller.getUserId())) {
+ return PROFILE_OWNER;
+ }
+ if (isProfileOwnerOnUser0(caller)) {
+ return PROFILE_OWNER_ON_USER_0;
+ }
+ if (isUserAffiliatedWithDevice(caller.getUserId())) {
+ return AFFILIATED_PROFILE_OWNER_ON_USER;
+ }
+ return PROFILE_OWNER_ON_USER;
+ }
+ return NOT_A_DPC;
+ }
+
private boolean isPermissionCheckFlagEnabled() {
return DeviceConfig.getBoolean(
NAMESPACE_DEVICE_POLICY_MANAGER,
@@ -23346,14 +23552,16 @@
applyManagedSubscriptionsPolicyIfRequired();
int policyType = getManagedSubscriptionsPolicy().getPolicyType();
- if (policyType == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) {
- final long id = mInjector.binderClearCallingIdentity();
- try {
+ final long id = mInjector.binderClearCallingIdentity();
+ try {
+ if (policyType == ManagedSubscriptionsPolicy.TYPE_ALL_MANAGED_SUBSCRIPTIONS) {
installOemDefaultDialerAndSmsApp(caller.getUserId());
updateTelephonyCrossProfileIntentFilters(parentUserId, caller.getUserId(), true);
- } finally {
- mInjector.binderRestoreCallingIdentity(id);
+ } else if (policyType == ManagedSubscriptionsPolicy.TYPE_ALL_PERSONAL_SUBSCRIPTIONS) {
+ updateTelephonyCrossProfileIntentFilters(parentUserId, caller.getUserId(), false);
}
+ } finally {
+ mInjector.binderRestoreCallingIdentity(id);
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
index 8c2468a..638596b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.admin.AccountTypePolicyKey;
import android.app.admin.BooleanPolicyValue;
import android.app.admin.DevicePolicyIdentifiers;
import android.app.admin.DevicePolicyManager;
@@ -281,6 +282,32 @@
DevicePolicyIdentifiers.APPLICATION_HIDDEN_POLICY, packageName));
}
+ // This is saved in the static map sPolicyDefinitions so that we're able to reconstruct the
+ // actual policy with the correct arguments (i.e. packageName) when reading the policies from
+ // xml.
+ static PolicyDefinition<Boolean> GENERIC_ACCOUNT_MANAGEMENT_DISABLED =
+ new PolicyDefinition<>(
+ new AccountTypePolicyKey(
+ DevicePolicyIdentifiers.ACCOUNT_MANAGEMENT_DISABLED_POLICY),
+ TRUE_MORE_RESTRICTIVE,
+ POLICY_FLAG_LOCAL_ONLY_POLICY,
+ // Nothing is enforced, we just need to store it
+ (Boolean value, Context context, Integer userId, PolicyKey policyKey) -> true,
+ new BooleanPolicySerializer());
+
+ /**
+ * Passing in {@code null} for {@code accountType} will return
+ * {@link #GENERIC_ACCOUNT_MANAGEMENT_DISABLED}.
+ */
+ static PolicyDefinition<Boolean> ACCOUNT_MANAGEMENT_DISABLED(String accountType) {
+ if (accountType == null) {
+ return GENERIC_ACCOUNT_MANAGEMENT_DISABLED;
+ }
+ return GENERIC_ACCOUNT_MANAGEMENT_DISABLED.createPolicyDefinition(
+ new AccountTypePolicyKey(
+ DevicePolicyIdentifiers.ACCOUNT_MANAGEMENT_DISABLED_POLICY, accountType));
+ }
+
private static final Map<String, PolicyDefinition<?>> POLICY_DEFINITIONS = new HashMap<>();
private static Map<String, Integer> USER_RESTRICTION_FLAGS = new HashMap<>();
@@ -304,6 +331,8 @@
KEYGUARD_DISABLED_FEATURES);
POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.APPLICATION_HIDDEN_POLICY,
GENERIC_APPLICATION_HIDDEN);
+ POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.ACCOUNT_MANAGEMENT_DISABLED_POLICY,
+ GENERIC_ACCOUNT_MANAGEMENT_DISABLED);
// User Restriction Policies
USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_MODIFY_ACCOUNTS, /* flags= */ 0);
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
index 7d4f87d..a6ada4d 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
@@ -38,6 +38,7 @@
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
+import android.view.Display;
import android.view.inputmethod.InputMethodManager;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -144,6 +145,26 @@
}
}
+ @Test
+ public void testShowImeScreenshot() {
+ synchronized (ImfLock.class) {
+ mVisibilityApplier.showImeScreenshot(mWindowToken, Display.DEFAULT_DISPLAY,
+ null /* statsToken */);
+ }
+
+ verify(mMockImeTargetVisibilityPolicy).showImeScreenshot(eq(mWindowToken),
+ eq(Display.DEFAULT_DISPLAY));
+ }
+
+ @Test
+ public void testRemoveImeScreenshot() {
+ synchronized (ImfLock.class) {
+ mVisibilityApplier.removeImeScreenshot(Display.DEFAULT_DISPLAY);
+ }
+
+ verify(mMockImeTargetVisibilityPolicy).removeImeScreenshot(eq(Display.DEFAULT_DISPLAY));
+ }
+
private InputBindResult startInputOrWindowGainedFocus(IBinder windowToken, int softInputMode) {
return mInputMethodManagerService.startInputOrWindowGainedFocus(
StartInputReason.WINDOW_FOCUS_GAIN /* startInputReason */,
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
index 2a256f2..3871e1d 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ImeVisibilityStateComputerTest.java
@@ -24,7 +24,15 @@
import static android.view.WindowManager.DISPLAY_IME_POLICY_LOCAL;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.REMOVE_IME_SCREENSHOT_FROM_IMMS;
+import static com.android.internal.inputmethod.SoftInputShowHideReason.SHOW_IME_SCREENSHOT_FROM_IMMS;
import static com.android.server.inputmethod.ImeVisibilityStateComputer.ImeTargetWindowState;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.ImeVisibilityResult;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_HIDE_IME_EXPLICIT;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_REMOVE_IME_SNAPSHOT;
+import static com.android.server.inputmethod.ImeVisibilityStateComputer.STATE_SHOW_IME_SNAPSHOT;
import static com.android.server.inputmethod.InputMethodManagerService.FALLBACK_DISPLAY_ID;
import static com.android.server.inputmethod.InputMethodManagerService.ImeDisplayValidator;
@@ -37,11 +45,13 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.server.wm.ImeTargetChangeListener;
import com.android.server.wm.WindowManagerInternal;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
/**
* Test the behavior of {@link ImeVisibilityStateComputer} and {@link ImeVisibilityApplier} when
@@ -53,6 +63,7 @@
@RunWith(AndroidJUnit4.class)
public class ImeVisibilityStateComputerTest extends InputMethodManagerServiceTestBase {
private ImeVisibilityStateComputer mComputer;
+ private ImeTargetChangeListener mListener;
private int mImeDisplayPolicy = DISPLAY_IME_POLICY_LOCAL;
@Before
@@ -69,7 +80,11 @@
return displayId -> mImeDisplayPolicy;
}
};
+ ArgumentCaptor<ImeTargetChangeListener> captor = ArgumentCaptor.forClass(
+ ImeTargetChangeListener.class);
+ verify(mMockWindowManagerInternal).setInputMethodTargetChangeListener(captor.capture());
mComputer = new ImeVisibilityStateComputer(mInputMethodManagerService, injector);
+ mListener = captor.getValue();
}
@Test
@@ -196,6 +211,53 @@
lastState.isRequestedImeVisible());
}
+ @Test
+ public void testOnInteractiveChanged() {
+ mComputer.getOrCreateWindowState(mWindowToken);
+ // Precondition: ensure IME has shown before hiding request.
+ mComputer.requestImeVisibility(mWindowToken, true);
+ mComputer.setInputShown(true);
+
+ // No need any visibility change When initially shows IME on the device was interactive.
+ ImeVisibilityStateComputer.ImeVisibilityResult result = mComputer.onInteractiveChanged(
+ mWindowToken, true /* interactive */);
+ assertThat(result).isNull();
+
+ // Show the IME screenshot to capture the last IME visible state when the device inactive.
+ result = mComputer.onInteractiveChanged(mWindowToken, false /* interactive */);
+ assertThat(result).isNotNull();
+ assertThat(result.getState()).isEqualTo(STATE_SHOW_IME_SNAPSHOT);
+ assertThat(result.getReason()).isEqualTo(SHOW_IME_SCREENSHOT_FROM_IMMS);
+
+ // Remove the IME screenshot when the device became interactive again.
+ result = mComputer.onInteractiveChanged(mWindowToken, true /* interactive */);
+ assertThat(result).isNotNull();
+ assertThat(result.getState()).isEqualTo(STATE_REMOVE_IME_SNAPSHOT);
+ assertThat(result.getReason()).isEqualTo(REMOVE_IME_SCREENSHOT_FROM_IMMS);
+ }
+
+ @Test
+ public void testOnApplyImeVisibilityFromComputer() {
+ final IBinder testImeTargetOverlay = new Binder();
+ final IBinder testImeInputTarget = new Binder();
+
+ // Simulate a test IME layering target overlay fully occluded the IME input target.
+ mListener.onImeTargetOverlayVisibilityChanged(testImeTargetOverlay, true, false);
+ mListener.onImeInputTargetVisibilityChanged(testImeInputTarget, false, false);
+ final ArgumentCaptor<IBinder> targetCaptor = ArgumentCaptor.forClass(IBinder.class);
+ final ArgumentCaptor<ImeVisibilityResult> resultCaptor = ArgumentCaptor.forClass(
+ ImeVisibilityResult.class);
+ verify(mInputMethodManagerService).onApplyImeVisibilityFromComputer(targetCaptor.capture(),
+ resultCaptor.capture());
+ final IBinder imeInputTarget = targetCaptor.getValue();
+ final ImeVisibilityResult result = resultCaptor.getValue();
+
+ // Verify the computer will callback hiding IME state to IMMS.
+ assertThat(imeInputTarget).isEqualTo(testImeInputTarget);
+ assertThat(result.getState()).isEqualTo(STATE_HIDE_IME_EXPLICIT);
+ assertThat(result.getReason()).isEqualTo(HIDE_WHEN_INPUT_TARGET_INVISIBLE);
+ }
+
private ImeTargetWindowState initImeTargetWindowState(IBinder windowToken) {
final ImeTargetWindowState state = new ImeTargetWindowState(SOFT_INPUT_STATE_UNCHANGED,
0, true, true, true);
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
index 9829e57..c80ecbf 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -34,9 +34,10 @@
import android.app.ActivityManagerInternal;
import android.content.Context;
import android.content.pm.PackageManagerInternal;
+import android.content.res.Configuration;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.IInputManager;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.os.Binder;
import android.os.IBinder;
import android.os.Process;
@@ -61,6 +62,7 @@
import com.android.server.SystemService;
import com.android.server.input.InputManagerInternal;
import com.android.server.pm.UserManagerInternal;
+import com.android.server.wm.ImeTargetVisibilityPolicy;
import com.android.server.wm.WindowManagerInternal;
import org.junit.After;
@@ -112,6 +114,7 @@
@Mock protected IInputMethod mMockInputMethod;
@Mock protected IBinder mMockInputMethodBinder;
@Mock protected IInputManager mMockIInputManager;
+ @Mock protected ImeTargetVisibilityPolicy mMockImeTargetVisibilityPolicy;
protected Context mContext;
protected MockitoSession mMockingSession;
@@ -121,6 +124,7 @@
protected IInputMethodInvoker mMockInputMethodInvoker;
protected InputMethodManagerService mInputMethodManagerService;
protected ServiceThread mServiceThread;
+ protected boolean mIsLargeScreen;
@BeforeClass
public static void setupClass() {
@@ -145,6 +149,8 @@
spyOn(mContext);
mTargetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
+ mIsLargeScreen = mContext.getResources().getConfiguration()
+ .isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
mCallingUserId = UserHandle.getCallingUserId();
mEditorInfo = new EditorInfo();
mEditorInfo.packageName = TEST_EDITOR_PKG_NAME;
@@ -162,6 +168,8 @@
.when(() -> LocalServices.getService(DisplayManagerInternal.class));
doReturn(mMockUserManagerInternal)
.when(() -> LocalServices.getService(UserManagerInternal.class));
+ doReturn(mMockImeTargetVisibilityPolicy)
+ .when(() -> LocalServices.getService(ImeTargetVisibilityPolicy.class));
doReturn(mMockIInputMethodManager)
.when(() -> ServiceManager.getServiceOrThrow(Context.INPUT_METHOD_SERVICE));
doReturn(mMockIPlatformCompat)
@@ -178,7 +186,7 @@
// Injecting and mocked InputMethodBindingController and InputMethod.
mMockInputMethodInvoker = IInputMethodInvoker.create(mMockInputMethod);
- InputManager.resetInstance(mMockIInputManager);
+ InputManagerGlobal.resetInstance(mMockIInputManager);
synchronized (ImfLock.class) {
when(mMockInputMethodBindingController.getCurMethod())
.thenReturn(mMockInputMethodInvoker);
@@ -214,6 +222,7 @@
false);
mInputMethodManagerService = new InputMethodManagerService(mContext, mServiceThread,
mMockInputMethodBindingController);
+ spyOn(mInputMethodManagerService);
// Start a InputMethodManagerService.Lifecycle to publish and manage the lifecycle of
// InputMethodManagerService, which is closer to the real situation.
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
index c6b355c..cea65b5 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
@@ -124,7 +124,8 @@
switch (mSoftInputState) {
case SOFT_INPUT_STATE_UNSPECIFIED:
- boolean showSoftInput = mSoftInputAdjustment == SOFT_INPUT_ADJUST_RESIZE;
+ boolean showSoftInput =
+ (mSoftInputAdjustment == SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen;
verifyShowSoftInput(
showSoftInput /* setVisible */, showSoftInput /* showSoftInput */);
// Soft input was hidden by default, so it doesn't need to call
@@ -165,7 +166,8 @@
switch (mSoftInputState) {
case SOFT_INPUT_STATE_UNSPECIFIED:
- boolean hideSoftInput = mSoftInputAdjustment != SOFT_INPUT_ADJUST_RESIZE;
+ boolean hideSoftInput =
+ (mSoftInputAdjustment != SOFT_INPUT_ADJUST_RESIZE) && !mIsLargeScreen;
verifyShowSoftInput(false /* setVisible */, false /* showSoftInput */);
// Soft input was hidden by default, so it doesn't need to call
// {@code IMS#hideSoftInput()}.
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/values/dimens.xml b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/values/dimens.xml
index 1a4959e..5d91bd2 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/values/dimens.xml
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/values/dimens.xml
@@ -16,9 +16,9 @@
-->
<resources>
- <dimen name="text_size_normal">24dp</dimen>
+ <dimen name="text_size_normal">20dp</dimen>
<dimen name="text_size_symbol">14dp</dimen>
- <dimen name="keyboard_header_height">40dp</dimen>
- <dimen name="keyboard_row_height">50dp</dimen>
+ <dimen name="keyboard_header_height">30dp</dimen>
+ <dimen name="keyboard_row_height">40dp</dimen>
</resources>
\ No newline at end of file
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
index 8c84014..dc92376 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
@@ -199,10 +199,11 @@
}
public Intent getResult() {
- try {
- return mResult.take();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
+ while (true) {
+ try {
+ return mResult.take();
+ } catch (InterruptedException e) {
+ }
}
}
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java b/services/tests/mockingservicestests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java
new file mode 100644
index 0000000..d9fbba5
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/display/HighBrightnessModeMetadataMapperTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class HighBrightnessModeMetadataMapperTest {
+
+ private HighBrightnessModeMetadataMapper mHighBrightnessModeMetadataMapper;
+
+ @Before
+ public void setUp() {
+ mHighBrightnessModeMetadataMapper = new HighBrightnessModeMetadataMapper();
+ }
+
+ @Test
+ public void testGetHighBrightnessModeMetadata() {
+ // Display device is null
+ final LogicalDisplay display = mock(LogicalDisplay.class);
+ when(display.getPrimaryDisplayDeviceLocked()).thenReturn(null);
+ assertNull(mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display));
+
+ // No HBM metadata stored for this display yet
+ final DisplayDevice device = mock(DisplayDevice.class);
+ when(display.getPrimaryDisplayDeviceLocked()).thenReturn(device);
+ HighBrightnessModeMetadata hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ assertTrue(hbmMetadata.getHbmEventQueue().isEmpty());
+ assertTrue(hbmMetadata.getRunningStartTimeMillis() < 0);
+
+ // Modify the metadata
+ long startTimeMillis = 100;
+ long endTimeMillis = 200;
+ long setTime = 300;
+ hbmMetadata.addHbmEvent(new HbmEvent(startTimeMillis, endTimeMillis));
+ hbmMetadata.setRunningStartTimeMillis(setTime);
+ hbmMetadata =
+ mHighBrightnessModeMetadataMapper.getHighBrightnessModeMetadataLocked(display);
+ assertEquals(1, hbmMetadata.getHbmEventQueue().size());
+ assertEquals(startTimeMillis,
+ hbmMetadata.getHbmEventQueue().getFirst().getStartTimeMillis());
+ assertEquals(endTimeMillis, hbmMetadata.getHbmEventQueue().getFirst().getEndTimeMillis());
+ assertEquals(setTime, hbmMetadata.getRunningStartTimeMillis());
+ }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java
index 07a81ff..c23d4b1 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/WakelockControllerTest.java
@@ -244,6 +244,15 @@
verifyZeroInteractions(mDisplayPowerCallbacks);
}
+ @Test
+ public void testReleaseAll() throws Exception {
+ // Use WAKE_LOCK_MAX to verify it has been correctly set and used in releaseAll().
+ verifyWakelockAcquisition(WakelockController.WAKE_LOCK_MAX,
+ () -> mWakelockController.hasUnfinishedBusiness());
+ mWakelockController.releaseAll();
+ assertFalse(mWakelockController.hasUnfinishedBusiness());
+ }
+
private void verifyWakelockAcquisitionAndReaquisition(int wakelockId,
Callable<Boolean> isWakelockAcquiredCallable)
throws Exception {
@@ -284,6 +293,4 @@
assertFalse(mWakelockController.releaseWakelock(wakelockId));
assertFalse(isWakelockAcquiredCallable.call());
}
-
-
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
index 8f38f25..9cd22dd 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java
@@ -1132,7 +1132,7 @@
@Test
public void testRareJobBatching() {
spyOn(mService);
- doNothing().when(mService).evaluateControllerStatesLocked(any());
+ doReturn(false).when(mService).evaluateControllerStatesLocked(any());
doNothing().when(mService).noteJobsPending(any());
doReturn(true).when(mService).isReadyToBeExecutedLocked(any(), anyBoolean());
advanceElapsedClock(24 * HOUR_IN_MILLIS);
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
index 06ba5dd..931a2bf 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
@@ -308,6 +308,7 @@
whenever(mocks.systemConfig.sharedLibraries).thenReturn(DEFAULT_SHARED_LIBRARIES_LIST)
whenever(mocks.systemConfig.defaultVrComponents).thenReturn(ArraySet())
whenever(mocks.systemConfig.hiddenApiWhitelistedApps).thenReturn(ArraySet())
+ whenever(mocks.systemConfig.appMetadataFilePaths).thenReturn(ArrayMap())
wheneverStatic { SystemProperties.set(anyString(), anyString()) }.thenDoNothing()
wheneverStatic { SystemProperties.getBoolean("fw.free_cache_v2", true) }.thenReturn(true)
wheneverStatic { Environment.getApexDirectory() }.thenReturn(apexDirectory)
diff --git a/services/tests/mockingservicestests/src/com/android/server/rollback/OWNERS b/services/tests/mockingservicestests/src/com/android/server/rollback/OWNERS
new file mode 100644
index 0000000..daa0211
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/rollback/OWNERS
@@ -0,0 +1,3 @@
+ancr@google.com
+harshitmahajan@google.com
+robertogil@google.com
diff --git a/services/tests/mockingservicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java b/services/tests/mockingservicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
index 541b077..a140730 100644
--- a/services/tests/mockingservicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/rollback/RollbackPackageHealthObserverTest.java
@@ -21,10 +21,14 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.RollbackInfo;
@@ -71,9 +75,12 @@
RollbackInfo mRollbackInfo;
@Mock
PackageRollbackInfo mPackageRollbackInfo;
+ @Mock
+ PackageManager mMockPackageManager;
private MockitoSession mSession;
private static final String APP_A = "com.package.a";
+ private static final String APP_B = "com.package.b";
private static final long VERSION_CODE = 1L;
private static final String LOG_TAG = "RollbackPackageHealthObserverTest";
@@ -116,7 +123,7 @@
RollbackPackageHealthObserver observer =
spy(new RollbackPackageHealthObserver(mMockContext));
VersionedPackage testFailedPackage = new VersionedPackage(APP_A, VERSION_CODE);
-
+ VersionedPackage secondFailedPackage = new VersionedPackage(APP_B, VERSION_CODE);
when(mMockContext.getSystemService(RollbackManager.class)).thenReturn(mRollbackManager);
@@ -137,13 +144,16 @@
assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_30,
observer.onHealthCheckFailed(null,
PackageWatchdog.FAILURE_REASON_NATIVE_CRASH, 1));
- // non-native crash
+ // non-native crash for the package
assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_30,
observer.onHealthCheckFailed(testFailedPackage,
PackageWatchdog.FAILURE_REASON_APP_CRASH, 1));
- // Second non-native crash again
+ // non-native crash for a different package
assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_70,
- observer.onHealthCheckFailed(testFailedPackage,
+ observer.onHealthCheckFailed(secondFailedPackage,
+ PackageWatchdog.FAILURE_REASON_APP_CRASH, 1));
+ assertEquals(PackageWatchdog.PackageHealthObserverImpact.USER_IMPACT_LEVEL_70,
+ observer.onHealthCheckFailed(secondFailedPackage,
PackageWatchdog.FAILURE_REASON_APP_CRASH, 2));
// Subsequent crashes when rollbacks have completed
when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of());
@@ -152,6 +162,51 @@
PackageWatchdog.FAILURE_REASON_APP_CRASH, 3));
}
+ @Test
+ public void testIsPersistent() {
+ RollbackPackageHealthObserver observer =
+ spy(new RollbackPackageHealthObserver(mMockContext));
+ assertTrue(observer.isPersistent());
+ }
+
+ @Test
+ public void testMayObservePackage_withoutAnyRollback() {
+ RollbackPackageHealthObserver observer =
+ spy(new RollbackPackageHealthObserver(mMockContext));
+ when(mMockContext.getSystemService(RollbackManager.class)).thenReturn(mRollbackManager);
+ when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of());
+ assertFalse(observer.mayObservePackage(APP_A));
+ }
+
+ @Test
+ public void testMayObservePackage_forPersistentApp()
+ throws PackageManager.NameNotFoundException {
+ RollbackPackageHealthObserver observer =
+ spy(new RollbackPackageHealthObserver(mMockContext));
+ ApplicationInfo info = new ApplicationInfo();
+ info.flags = ApplicationInfo.FLAG_PERSISTENT | ApplicationInfo.FLAG_SYSTEM;
+ when(mMockContext.getSystemService(RollbackManager.class)).thenReturn(mRollbackManager);
+ when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(mRollbackInfo));
+ when(mRollbackInfo.getPackages()).thenReturn(List.of(mPackageRollbackInfo));
+ when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
+ when(mMockPackageManager.getApplicationInfo(APP_A, 0)).thenReturn(info);
+ assertTrue(observer.mayObservePackage(APP_A));
+ }
+
+ @Test
+ public void testMayObservePackage_forNonPersistentApp()
+ throws PackageManager.NameNotFoundException {
+ RollbackPackageHealthObserver observer =
+ spy(new RollbackPackageHealthObserver(mMockContext));
+ when(mMockContext.getSystemService(RollbackManager.class)).thenReturn(mRollbackManager);
+ when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(mRollbackInfo));
+ when(mRollbackInfo.getPackages()).thenReturn(List.of(mPackageRollbackInfo));
+ when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
+ when(mMockPackageManager.getApplicationInfo(APP_A, 0))
+ .thenThrow(new PackageManager.NameNotFoundException());
+ assertFalse(observer.mayObservePackage(APP_A));
+ }
+
/**
* Test that isAutomaticRollbackDenied works correctly when packages that are not
* denied are sent.
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java
index d9461aa..b62dbcd 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java
@@ -108,6 +108,7 @@
@Mock private StatusBarManager mMockStatusBarManager;
@Mock private ScreenshotHelper mMockScreenshotHelper;
@Mock private SystemActionPerformer.SystemActionsChangedListener mMockListener;
+ @Mock private SystemActionPerformer.DisplayUpdateCallBack mMockCallback;
@Before
public void setup() {
@@ -125,7 +126,7 @@
mMockContext,
mMockWindowManagerInternal,
() -> mMockScreenshotHelper,
- mMockListener);
+ mMockListener, mMockCallback);
}
private void setupWithRealContext() {
@@ -133,7 +134,7 @@
InstrumentationRegistry.getContext(),
mMockWindowManagerInternal,
() -> mMockScreenshotHelper,
- mMockListener);
+ mMockListener, mMockCallback);
}
// We need below two help functions because AccessbilityAction.equals function only compares
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
index 913d8c1..11e4120 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationControllerTest.java
@@ -35,6 +35,7 @@
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -435,9 +436,9 @@
mMockConnection.invokeCallbacks();
assertFalse(mWindowMagnificationManager.isWindowMagnifierEnabled(TEST_DISPLAY));
- verify(mScreenMagnificationController).setScaleAndCenter(TEST_DISPLAY,
- DEFAULT_SCALE, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y,
- animate, TEST_SERVICE_ID);
+ verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
+ eq(DEFAULT_SCALE), eq(MAGNIFIED_CENTER_X), eq(MAGNIFIED_CENTER_Y),
+ any(MagnificationAnimationCallback.class), eq(TEST_SERVICE_ID));
}
@Test
@@ -504,6 +505,42 @@
}
@Test
+ public void configTransitionToFullScreenWithAnimation_windowMagnifying_notifyService()
+ throws RemoteException {
+ final boolean animate = true;
+ activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
+
+ reset(mService);
+ MagnificationConfig config = (new MagnificationConfig.Builder())
+ .setMode(MODE_FULLSCREEN).build();
+ mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
+ config, animate, TEST_SERVICE_ID);
+ verify(mScreenMagnificationController).setScaleAndCenter(eq(TEST_DISPLAY),
+ /* scale= */ anyFloat(), /* centerX= */ anyFloat(), /* centerY= */ anyFloat(),
+ mCallbackArgumentCaptor.capture(), /* id= */ anyInt());
+ mCallbackArgumentCaptor.getValue().onResult(true);
+ mMockConnection.invokeCallbacks();
+
+ verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
+ }
+
+ @Test
+ public void configTransitionToFullScreenWithoutAnimation_windowMagnifying_notifyService()
+ throws RemoteException {
+ final boolean animate = false;
+ activateMagnifier(MODE_WINDOW, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
+
+ reset(mService);
+ MagnificationConfig config = (new MagnificationConfig.Builder())
+ .setMode(MODE_FULLSCREEN).build();
+ mMagnificationController.transitionMagnificationConfigMode(TEST_DISPLAY,
+ config, animate, TEST_SERVICE_ID);
+ mMockConnection.invokeCallbacks();
+
+ verify(mService).changeMagnificationMode(TEST_DISPLAY, MODE_FULLSCREEN);
+ }
+
+ @Test
public void interruptDuringTransitionToWindow_disablingFullScreen_discardPreviousTransition()
throws RemoteException {
activateMagnifier(MODE_FULLSCREEN, MAGNIFIED_CENTER_X, MAGNIFIED_CENTER_Y);
diff --git a/services/tests/servicestests/src/com/android/server/am/AnrHelperTest.java b/services/tests/servicestests/src/com/android/server/am/AnrHelperTest.java
index 9578993..acdfee9 100644
--- a/services/tests/servicestests/src/com/android/server/am/AnrHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/AnrHelperTest.java
@@ -26,6 +26,7 @@
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
@@ -48,8 +49,10 @@
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
@@ -63,8 +66,9 @@
private AnrHelper mAnrHelper;
private ProcessRecord mAnrApp;
- private ExecutorService mExecutorService;
+ private ExecutorService mAuxExecutorService;
+ private Future<File> mEarlyDumpFuture;
@Rule
public ServiceThreadRule mServiceThreadRule = new ServiceThreadRule();
@@ -91,9 +95,12 @@
return mServiceThreadRule.getThread().getThreadHandler();
}
}, mServiceThreadRule.getThread());
- mExecutorService = mock(ExecutorService.class);
+ mAuxExecutorService = mock(ExecutorService.class);
+ final ExecutorService earlyDumpExecutorService = mock(ExecutorService.class);
+ mEarlyDumpFuture = mock(Future.class);
+ doReturn(mEarlyDumpFuture).when(earlyDumpExecutorService).submit(any(Callable.class));
- mAnrHelper = new AnrHelper(service, mExecutorService);
+ mAnrHelper = new AnrHelper(service, mAuxExecutorService, earlyDumpExecutorService);
});
}
@@ -125,8 +132,8 @@
verify(mAnrApp.mErrorState, timeout(TIMEOUT_MS)).appNotResponding(
eq(activityShortComponentName), eq(appInfo), eq(parentShortComponentName),
- eq(parentProcess), eq(aboveSystem), eq(timeoutRecord), eq(mExecutorService),
- eq(false) /* onlyDumpSelf */, eq(false) /*isContinuousAnr*/);
+ eq(parentProcess), eq(aboveSystem), eq(timeoutRecord), eq(mAuxExecutorService),
+ eq(false) /* onlyDumpSelf */, eq(false) /*isContinuousAnr*/, eq(mEarlyDumpFuture));
}
@Test
@@ -139,7 +146,7 @@
processingLatch.await();
return null;
}).when(mAnrApp.mErrorState).appNotResponding(anyString(), any(), any(), any(),
- anyBoolean(), any(), any(), anyBoolean(), anyBoolean());
+ anyBoolean(), any(), any(), anyBoolean(), anyBoolean(), any());
final ApplicationInfo appInfo = new ApplicationInfo();
final TimeoutRecord timeoutRecord = TimeoutRecord.forInputDispatchWindowUnresponsive(
"annotation");
@@ -162,7 +169,7 @@
processingLatch.countDown();
// There is only one ANR reported.
verify(mAnrApp.mErrorState, timeout(TIMEOUT_MS).only()).appNotResponding(
- anyString(), any(), any(), any(), anyBoolean(), any(), eq(mExecutorService),
- anyBoolean(), anyBoolean());
+ anyString(), any(), any(), any(), anyBoolean(), any(), eq(mAuxExecutorService),
+ anyBoolean(), anyBoolean(), any());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/am/ProcessRecordTests.java b/services/tests/servicestests/src/com/android/server/am/ProcessRecordTests.java
index 6350e22..d92b9f8 100644
--- a/services/tests/servicestests/src/com/android/server/am/ProcessRecordTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ProcessRecordTests.java
@@ -203,6 +203,6 @@
processErrorState.appNotResponding(null /* activityShortComponentName */, null /* aInfo */,
null /* parentShortComponentName */, null /* parentProcess */,
false /* aboveSystem */, timeoutRecord, mExecutorService, false /* onlyDumpSelf */,
- false /*isContinuousAnr*/);
+ false /*isContinuousAnr*/, null);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
index dad9fe8..31599ee 100644
--- a/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceBrokerTest.java
@@ -74,7 +74,7 @@
mSpyDevInventory = spy(new AudioDeviceInventory(mSpyAudioSystem));
mSpySystemServer = spy(new NoOpSystemServerAdapter());
mAudioDeviceBroker = new AudioDeviceBroker(mContext, mMockAudioService, mSpyDevInventory,
- mSpySystemServer);
+ mSpySystemServer, mSpyAudioSystem);
mSpyDevInventory.setDeviceBroker(mAudioDeviceBroker);
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthResultCoordinatorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthResultCoordinatorTest.java
index ebf7fd8..2102b09 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthResultCoordinatorTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthResultCoordinatorTest.java
@@ -17,7 +17,8 @@
package com.android.server.biometrics.sensors;
import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_DEFAULT;
-import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_LOCKED;
+import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_PERMANENT_LOCKED;
+import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_TIMED_LOCKED;
import static com.android.server.biometrics.sensors.AuthResultCoordinator.AUTHENTICATOR_UNLOCKED;
import static com.google.common.truth.Truth.assertThat;
@@ -76,7 +77,22 @@
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
AUTHENTICATOR_DEFAULT);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
+ }
+
+ @Test
+ public void testConvenientLockoutTimed() {
+ mAuthResultCoordinator.lockOutTimed(
+ BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE);
+
+ final Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
+
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
+ AUTHENTICATOR_DEFAULT);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
+ AUTHENTICATOR_DEFAULT);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
}
@Test
@@ -97,16 +113,31 @@
@Test
public void testWeakLockout() {
mAuthResultCoordinator.lockedOutFor(
- BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE);
+ BiometricManager.Authenticators.BIOMETRIC_WEAK);
Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
AUTHENTICATOR_DEFAULT);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
- AUTHENTICATOR_DEFAULT);
+ AUTHENTICATOR_PERMANENT_LOCKED);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
+ }
+
+ @Test
+ public void testWeakLockoutTimed() {
+ mAuthResultCoordinator.lockOutTimed(
+ BiometricManager.Authenticators.BIOMETRIC_WEAK);
+
+ Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
+
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
+ AUTHENTICATOR_DEFAULT);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
}
@Test
@@ -132,13 +163,27 @@
Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
}
+ @Test
+ public void testStrongLockoutTimed() {
+ mAuthResultCoordinator.lockOutTimed(
+ BiometricManager.Authenticators.BIOMETRIC_STRONG);
+
+ Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
+
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
+ AUTHENTICATOR_TIMED_LOCKED);
+ }
@Test
public void testStrongUnlock() {
@@ -167,10 +212,30 @@
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)).isEqualTo(
AUTHENTICATOR_DEFAULT);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)).isEqualTo(
- AUTHENTICATOR_LOCKED);
+ AUTHENTICATOR_PERMANENT_LOCKED);
}
+ @Test
+ public void testLockoutAndAuth() {
+ mAuthResultCoordinator.lockedOutFor(
+ BiometricManager.Authenticators.BIOMETRIC_WEAK);
+ mAuthResultCoordinator.authenticatedFor(
+ BiometricManager.Authenticators.BIOMETRIC_STRONG);
+
+ final Map<Integer, Integer> authMap = mAuthResultCoordinator.getResult();
+
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_STRONG)
+ & AUTHENTICATOR_UNLOCKED).isEqualTo(
+ AUTHENTICATOR_UNLOCKED);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_WEAK)
+ & AUTHENTICATOR_UNLOCKED).isEqualTo(
+ AUTHENTICATOR_UNLOCKED);
+ assertThat(authMap.get(BiometricManager.Authenticators.BIOMETRIC_CONVENIENCE)
+ & AUTHENTICATOR_UNLOCKED).isEqualTo(
+ AUTHENTICATOR_UNLOCKED);
+ }
+
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthSessionCoordinatorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthSessionCoordinatorTest.java
index c3b9cb1..9d84a07 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthSessionCoordinatorTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/AuthSessionCoordinatorTest.java
@@ -135,7 +135,7 @@
}
@Test
- public void testUserCanAuthDuringLockoutOfSameSession() {
+ public void testUserLockedDuringLockoutOfSameSession() {
mCoordinator.resetLockoutFor(PRIMARY_USER, BIOMETRIC_STRONG, 0 /* requestId */);
assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
@@ -151,10 +151,10 @@
0 /* requestId */);
assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
- LockoutTracker.LOCKOUT_NONE);
+ LockoutTracker.LOCKOUT_PERMANENT);
assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
- LockoutTracker.LOCKOUT_NONE);
- assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
+ LockoutTracker.LOCKOUT_PERMANENT);
+ assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
}
@@ -191,10 +191,10 @@
0 /* requestId */);
assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
- LockoutTracker.LOCKOUT_NONE);
+ LockoutTracker.LOCKOUT_PERMANENT);
assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
- LockoutTracker.LOCKOUT_NONE);
- assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
+ LockoutTracker.LOCKOUT_PERMANENT);
+ assertThat(mCoordinator.getLockoutStateFor(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/MultiBiometricLockoutStateTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/MultiBiometricLockoutStateTest.java
index 968844e4c..c28de55 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/MultiBiometricLockoutStateTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/MultiBiometricLockoutStateTest.java
@@ -49,7 +49,7 @@
private Clock mClock;
private static void unlockAllBiometrics(MultiBiometricLockoutState lockoutState, int userId) {
- lockoutState.setAuthenticatorTo(userId, BIOMETRIC_STRONG, true /* canAuthenticate */);
+ lockoutState.clearPermanentLockOut(userId, BIOMETRIC_STRONG);
assertThat(lockoutState.getLockoutState(userId, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(lockoutState.getLockoutState(userId, BIOMETRIC_WEAK)).isEqualTo(
@@ -59,7 +59,7 @@
}
private static void lockoutAllBiometrics(MultiBiometricLockoutState lockoutState, int userId) {
- lockoutState.setAuthenticatorTo(userId, BIOMETRIC_STRONG, false /* canAuthenticate */);
+ lockoutState.setPermanentLockOut(userId, BIOMETRIC_STRONG);
assertThat(lockoutState.getLockoutState(userId, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_PERMANENT);
assertThat(lockoutState.getLockoutState(userId, BIOMETRIC_WEAK)).isEqualTo(
@@ -96,8 +96,7 @@
@Test
public void testConvenienceLockout() {
unlockAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_CONVENIENCE,
- false /* canAuthenticate */);
+ mLockoutState.setPermanentLockOut(PRIMARY_USER, BIOMETRIC_CONVENIENCE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -110,7 +109,7 @@
@Test
public void testWeakLockout() {
unlockAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_WEAK, false /* canAuthenticate */);
+ mLockoutState.setPermanentLockOut(PRIMARY_USER, BIOMETRIC_WEAK);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -123,8 +122,7 @@
@Test
public void testStrongLockout() {
lockoutAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_STRONG,
- false /* canAuthenticate */);
+ mLockoutState.setPermanentLockOut(PRIMARY_USER, BIOMETRIC_STRONG);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_PERMANENT);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -137,8 +135,7 @@
@Test
public void testConvenienceUnlock() {
lockoutAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_CONVENIENCE,
- true /* canAuthenticate */);
+ mLockoutState.clearPermanentLockOut(PRIMARY_USER, BIOMETRIC_CONVENIENCE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_PERMANENT);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -150,7 +147,7 @@
@Test
public void testWeakUnlock() {
lockoutAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_WEAK, true /* canAuthenticate */);
+ mLockoutState.clearPermanentLockOut(PRIMARY_USER, BIOMETRIC_WEAK);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_PERMANENT);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -162,8 +159,7 @@
@Test
public void testStrongUnlock() {
lockoutAllBiometrics();
- mLockoutState.setAuthenticatorTo(PRIMARY_USER, BIOMETRIC_STRONG,
- true /* canAuthenticate */);
+ mLockoutState.clearPermanentLockOut(PRIMARY_USER, BIOMETRIC_STRONG);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -180,7 +176,7 @@
lockoutAllBiometrics(lockoutState, userOne);
lockoutAllBiometrics(lockoutState, userTwo);
- lockoutState.setAuthenticatorTo(userOne, BIOMETRIC_WEAK, true /* canAuthenticate */);
+ lockoutState.clearPermanentLockOut(userOne, BIOMETRIC_WEAK);
assertThat(lockoutState.getLockoutState(userOne, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_PERMANENT);
assertThat(lockoutState.getLockoutState(userOne, BIOMETRIC_WEAK)).isEqualTo(
@@ -205,8 +201,7 @@
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
- mLockoutState.increaseLockoutTime(PRIMARY_USER, BIOMETRIC_STRONG,
- System.currentTimeMillis() + 1);
+ mLockoutState.setTimedLockout(PRIMARY_USER, BIOMETRIC_STRONG);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_TIMED);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -225,8 +220,7 @@
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
- when(mClock.millis()).thenReturn(0L);
- mLockoutState.increaseLockoutTime(PRIMARY_USER, BIOMETRIC_STRONG, 1);
+ mLockoutState.setTimedLockout(PRIMARY_USER, BIOMETRIC_STRONG);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_TIMED);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
@@ -235,7 +229,7 @@
mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_CONVENIENCE)).isEqualTo(
LockoutTracker.LOCKOUT_TIMED);
- when(mClock.millis()).thenReturn(2L);
+ mLockoutState.clearTimedLockout(PRIMARY_USER, BIOMETRIC_STRONG);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_STRONG)).isEqualTo(
LockoutTracker.LOCKOUT_NONE);
assertThat(mLockoutState.getLockoutState(PRIMARY_USER, BIOMETRIC_WEAK)).isEqualTo(
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java
index 1f29bec..9c9d3f8 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/SensorTest.java
@@ -19,6 +19,8 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.verify;
@@ -109,7 +111,8 @@
mUserSwitchCallback);
mHalCallback = new Sensor.HalSessionCallback(mContext, new Handler(mLooper.getLooper()),
TAG, mScheduler, SENSOR_ID,
- USER_ID, mLockoutCache, mLockoutResetDispatcher, mHalSessionCallback);
+ USER_ID, mLockoutCache, mLockoutResetDispatcher, mAuthSessionCoordinator,
+ mHalSessionCallback);
final SensorProps sensor1 = new SensorProps();
sensor1.commonProps = new CommonProps();
@@ -164,5 +167,6 @@
private void verifyNotLocked() {
assertEquals(LockoutTracker.LOCKOUT_NONE, mLockoutCache.getLockoutModeForUser(USER_ID));
verify(mLockoutResetDispatcher).notifyLockoutResetCallbacks(eq(SENSOR_ID));
+ verify(mAuthSessionCoordinator).resetLockoutFor(eq(USER_ID), anyInt(), anyLong());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java
index 7ae4e17..0c13466 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/SensorTest.java
@@ -18,6 +18,8 @@
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.verify;
@@ -97,7 +99,8 @@
mUserSwitchCallback);
mHalCallback = new Sensor.HalSessionCallback(mContext, new Handler(mLooper.getLooper()),
TAG, mScheduler, SENSOR_ID,
- USER_ID, mLockoutCache, mLockoutResetDispatcher, mHalSessionCallback);
+ USER_ID, mLockoutCache, mLockoutResetDispatcher, mAuthSessionCoordinator,
+ mHalSessionCallback);
}
@Test
@@ -130,5 +133,6 @@
private void verifyNotLocked() {
assertEquals(LockoutTracker.LOCKOUT_NONE, mLockoutCache.getLockoutModeForUser(USER_ID));
verify(mLockoutResetDispatcher).notifyLockoutResetCallbacks(eq(SENSOR_ID));
+ verify(mAuthSessionCoordinator).resetLockoutFor(eq(USER_ID), anyInt(), anyLong());
}
}
diff --git a/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionServiceTest.java b/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionServiceTest.java
new file mode 100644
index 0000000..3ed95eb
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/companion/datatransfer/contextsync/CallMetadataSyncConnectionServiceTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.companion.datatransfer.contextsync;
+
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import android.platform.test.annotations.Presubmit;
+import android.telecom.PhoneAccount;
+import android.testing.AndroidTestingRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@Presubmit
+@RunWith(AndroidTestingRunner.class)
+public class CallMetadataSyncConnectionServiceTest {
+
+ private CallMetadataSyncConnectionService mSyncConnectionService;
+
+ @Before
+ public void setUp() throws Exception {
+ mSyncConnectionService = new CallMetadataSyncConnectionService() {
+ @Override
+ public String getPackageName() {
+ return "android";
+ }
+ };
+ }
+
+ @Test
+ public void createPhoneAccount_success() {
+ final PhoneAccount phoneAccount = mSyncConnectionService.createPhoneAccount(
+ "com.google.test", "Test App");
+ assertWithMessage("Could not create phone account").that(phoneAccount).isNotNull();
+ }
+
+ @Test
+ public void createPhoneAccount_alreadyExists_doesNotCreateAnother() {
+ final PhoneAccount phoneAccount = mSyncConnectionService.createPhoneAccount(
+ "com.google.test", "Test App");
+ final PhoneAccount phoneAccount2 = mSyncConnectionService.createPhoneAccount(
+ "com.google.test", "Test App #2");
+ assertWithMessage("Could not create phone account").that(phoneAccount).isNotNull();
+ assertWithMessage("Unexpectedly created second phone account").that(phoneAccount2).isNull();
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
index 3cc6b01..5cadc0a 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
@@ -25,7 +25,7 @@
import android.hardware.input.IInputDevicesChangedListener;
import android.hardware.input.IInputManager;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.os.RemoteException;
import android.testing.TestableLooper;
import android.view.InputDevice;
@@ -38,7 +38,8 @@
import java.util.stream.IntStream;
/**
- * A test utility class used to share the logic for setting up {@link InputManager}'s callback for
+ * A test utility class used to share the logic for setting up
+ * {@link android.hardware.input.InputManager}'s callback for
* when a virtual input device being added.
*/
class InputManagerMockHelper {
@@ -76,7 +77,7 @@
// Set a new instance of InputManager for testing that uses the IInputManager mock as the
// interface to the server.
- InputManager.resetInstance(mIInputManagerMock);
+ InputManagerGlobal.resetInstance(mIInputManagerMock);
}
private long handleNativeOpenInputDevice(InvocationOnMock inv) {
diff --git a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateNotificationControllerTest.java b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateNotificationControllerTest.java
index e396263..728606f 100644
--- a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateNotificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateNotificationControllerTest.java
@@ -17,8 +17,13 @@
package com.android.server.devicestate;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -41,6 +46,8 @@
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
+import java.util.Locale;
+
/**
* Unit tests for {@link DeviceStateNotificationController}.
* <p/>
@@ -77,6 +84,8 @@
Notification.class);
private final NotificationManager mNotificationManager = mock(NotificationManager.class);
+ private DeviceStateNotificationController.NotificationInfoProvider mNotificationInfoProvider;
+
@Before
public void setup() throws Exception {
Context context = InstrumentationRegistry.getInstrumentation().getContext();
@@ -97,6 +106,11 @@
THERMAL_TITLE_2, THERMAL_CONTENT_2,
POWER_SAVE_TITLE_2, POWER_SAVE_CONTENT_2));
+ mNotificationInfoProvider =
+ new DeviceStateNotificationController.NotificationInfoProvider(context);
+ mNotificationInfoProvider = spy(mNotificationInfoProvider);
+ doReturn(notificationInfos).when(mNotificationInfoProvider).loadNotificationInfos();
+
when(packageManager.getNameForUid(VALID_APP_UID)).thenReturn(VALID_APP_NAME);
when(packageManager.getNameForUid(INVALID_APP_UID)).thenReturn(INVALID_APP_NAME);
when(packageManager.getApplicationInfo(eq(VALID_APP_NAME), ArgumentMatchers.any()))
@@ -106,7 +120,7 @@
when(applicationInfo.loadLabel(eq(packageManager))).thenReturn(VALID_APP_LABEL);
mController = new DeviceStateNotificationController(
- context, handler, cancelStateRunnable, notificationInfos,
+ context, handler, cancelStateRunnable, mNotificationInfoProvider,
packageManager, mNotificationManager);
}
@@ -223,4 +237,26 @@
eq(DeviceStateNotificationController.NOTIFICATION_ID),
mNotificationCaptor.capture());
}
+
+ @Test
+ public void test_notificationInfoProvider() {
+ assertNull(mNotificationInfoProvider.getCachedLocale());
+
+ mNotificationInfoProvider.getNotificationInfos(Locale.ENGLISH);
+ verify(mNotificationInfoProvider).refreshNotificationInfos(eq(Locale.ENGLISH));
+ assertEquals(Locale.ENGLISH, mNotificationInfoProvider.getCachedLocale());
+ clearInvocations(mNotificationInfoProvider);
+
+ // If the same locale is used again, the provider uses the cached value, so it won't refresh
+ mNotificationInfoProvider.getNotificationInfos(Locale.ENGLISH);
+ verify(mNotificationInfoProvider, never()).refreshNotificationInfos(eq(Locale.ENGLISH));
+ assertEquals(Locale.ENGLISH, mNotificationInfoProvider.getCachedLocale());
+ clearInvocations(mNotificationInfoProvider);
+
+ // If a different locale is used, the provider refreshes.
+ mNotificationInfoProvider.getNotificationInfos(Locale.ITALY);
+ verify(mNotificationInfoProvider).refreshNotificationInfos(eq(Locale.ITALY));
+ assertEquals(Locale.ITALY, mNotificationInfoProvider.getCachedLocale());
+ clearInvocations(mNotificationInfoProvider);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt b/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt
index e1a04ad5..416b1f4 100644
--- a/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt
+++ b/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt
@@ -19,8 +19,6 @@
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothManager
-import android.content.Context
-import android.content.ContextWrapper
import android.hardware.BatteryState.STATUS_CHARGING
import android.hardware.BatteryState.STATUS_DISCHARGING
import android.hardware.BatteryState.STATUS_FULL
@@ -31,12 +29,14 @@
import android.hardware.input.IInputDevicesChangedListener
import android.hardware.input.IInputManager
import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
import android.os.Binder
import android.os.IBinder
import android.os.test.TestLooper
import android.platform.test.annotations.Presubmit
+import android.testing.TestableContext
import android.view.InputDevice
-import androidx.test.InstrumentationRegistry
+import androidx.test.core.app.ApplicationProvider
import com.android.server.input.BatteryController.BluetoothBatteryManager
import com.android.server.input.BatteryController.BluetoothBatteryManager.BluetoothBatteryListener
import com.android.server.input.BatteryController.POLLING_PERIOD_MILLIS
@@ -66,7 +66,6 @@
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
-import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
@@ -197,17 +196,18 @@
private lateinit var bluetoothBatteryManager: BluetoothBatteryManager
private lateinit var batteryController: BatteryController
- private lateinit var context: Context
+ private lateinit var context: TestableContext
private lateinit var testLooper: TestLooper
private lateinit var devicesChangedListener: IInputDevicesChangedListener
private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
@Before
fun setup() {
- context = spy(ContextWrapper(InstrumentationRegistry.getContext()))
+ context = TestableContext(ApplicationProvider.getApplicationContext())
testLooper = TestLooper()
- val inputManager = InputManager.resetInstance(iInputManager)
- `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
+ InputManagerGlobal.resetInstance(iInputManager)
+ val inputManager = InputManager(context)
+ context.addMockSystemService(InputManager::class.java, inputManager)
`when`(iInputManager.inputDeviceIds).then {
deviceGenerationMap.keys.toIntArray()
}
@@ -256,7 +256,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt
index 705a5da..c10f651 100644
--- a/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt
+++ b/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt
@@ -20,6 +20,7 @@
import android.content.ContextWrapper
import android.hardware.input.IInputManager
import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
import android.os.test.TestLooper
import android.platform.test.annotations.Presubmit
import android.provider.Settings
@@ -102,7 +103,8 @@
dataStore,
testLooper.looper
)
- val inputManager = InputManager.resetInstance(iInputManager)
+ InputManagerGlobal.resetInstance(iInputManager)
+ val inputManager = InputManager(context)
Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
.thenReturn(inputManager)
Mockito.`when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
@@ -110,7 +112,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt
index 00eb80d..0f4d4e8 100644
--- a/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt
+++ b/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt
@@ -23,6 +23,7 @@
import android.hardware.input.IKeyboardBacklightListener
import android.hardware.input.IKeyboardBacklightState
import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
import android.hardware.lights.Light
import android.os.UEventObserver
import android.os.test.TestLooper
@@ -116,7 +117,8 @@
testLooper = TestLooper()
keyboardBacklightController =
KeyboardBacklightController(context, native, dataStore, testLooper.looper)
- val inputManager = InputManager.resetInstance(iInputManager)
+ InputManagerGlobal.resetInstance(iInputManager)
+ val inputManager = InputManager(context)
`when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
`when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
`when`(native.setLightColor(anyInt(), anyInt(), anyInt())).then {
@@ -131,7 +133,7 @@
@After
fun tearDown() {
- InputManager.clearInstance()
+ InputManagerGlobal.clearInstance()
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt
index 7729fa2..ea3f3bc 100644
--- a/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt
+++ b/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt
@@ -25,6 +25,7 @@
import android.content.pm.ServiceInfo
import android.hardware.input.IInputManager
import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
import android.hardware.input.KeyboardLayout
import android.icu.util.ULocale
import android.os.Bundle
@@ -144,7 +145,8 @@
}
private fun setupInputDevices() {
- val inputManager = InputManager.resetInstance(iInputManager)
+ InputManagerGlobal.resetInstance(iInputManager)
+ val inputManager = InputManager(context)
Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
.thenReturn(inputManager)
@@ -852,4 +854,4 @@
)
}
}
-}
\ No newline at end of file
+}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
index ad63da5..e960e99 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java
@@ -16,9 +16,6 @@
package com.android.server.locksettings;
-import static android.app.admin.DevicePolicyManager.DEPRECATE_USERMANAGERINTERNAL_DEVICEPOLICY_FLAG;
-import static android.provider.DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER;
-
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -50,7 +47,6 @@
import android.os.UserManager;
import android.os.storage.IStorageManager;
import android.os.storage.StorageManager;
-import android.provider.DeviceConfig;
import android.provider.Settings;
import android.security.KeyStore;
@@ -235,9 +231,6 @@
// Adding a fake Device Owner app which will enable escrow token support in LSS.
when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(
new ComponentName("com.dummy.package", ".FakeDeviceOwner"));
- // TODO(b/258213147): Remove
- DeviceConfig.setProperty(NAMESPACE_DEVICE_POLICY_MANAGER,
- DEPRECATE_USERMANAGERINTERNAL_DEVICEPOLICY_FLAG, "true", /* makeDefault= */ false);
when(mUserManagerInternal.isDeviceManaged()).thenReturn(true);
when(mDeviceStateCache.isUserOrganizationManaged(anyInt())).thenReturn(true);
when(mDeviceStateCache.isDeviceProvisioned()).thenReturn(true);
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTestable.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTestable.java
index 3f3b8d7..36dc6c5 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTestable.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTestable.java
@@ -87,7 +87,10 @@
PersistentDataBlockManagerInternal getPersistentDataBlockManager() {
return mPersistentDataBlockManager;
}
-
+ @Override
+ public boolean isAutoPinConfirmSettingEnabled(int userId) {
+ return true;
+ }
private File remapToStorageDir(File origPath) {
File mappedPath = new File(mStorageDir, origPath.toString());
mappedPath.getParentFile().mkdirs();
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
index e8ef398..a48d2cc 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java
@@ -113,6 +113,11 @@
}
@Override
+ public boolean isAutoPinConfirmationFeatureAvailable() {
+ return true;
+ }
+
+ @Override
protected IWeaver getWeaverHidlService() throws RemoteException {
return mWeaverService;
}
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
index bdc5be6..bfb6b0f1 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
@@ -607,6 +607,24 @@
}
@Test
+ public void testStorePinLengthOnDisk() {
+ int userId = 1;
+ LockscreenCredential lockscreenCredentialPin = LockscreenCredential.createPin("123456");
+ MockSyntheticPasswordManager manager = new MockSyntheticPasswordManager(mContext, mStorage,
+ mGateKeeperService, mUserManager, mPasswordSlotManager);
+ SyntheticPassword sp = manager.newSyntheticPassword(userId);
+ long protectorId = manager.createLskfBasedProtector(mGateKeeperService,
+ lockscreenCredentialPin, sp,
+ userId);
+ PasswordMetrics passwordMetrics =
+ PasswordMetrics.computeForCredential(lockscreenCredentialPin);
+ boolean result = manager.refreshPinLengthOnDisk(passwordMetrics, protectorId, userId);
+
+ assertEquals(manager.getPinLength(protectorId, userId), lockscreenCredentialPin.size());
+ assertTrue(result);
+ }
+
+ @Test
public void testPasswordDataV2VersionCredentialTypePin_deserialize() {
// Test that we can deserialize existing PasswordData and don't inadvertently change the
// wire format.
diff --git a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
index 136507d..726a4e2 100644
--- a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
@@ -57,6 +57,8 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.concurrent.CountDownLatch;
+
/**
* Tests for {@link com.android.server.power.hint.HintManagerService}.
*
@@ -149,29 +151,28 @@
// Set session to background and calling updateHintAllowed() would invoke pause();
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0, 0);
- final Object sync = new Object();
+
+ // Using CountDownLatch to ensure above onUidStateChanged() job was digested.
+ final CountDownLatch latch = new CountDownLatch(1);
FgThread.getHandler().post(() -> {
- synchronized (sync) {
- sync.notify();
- }
+ latch.countDown();
});
- synchronized (sync) {
- sync.wait();
- }
+ latch.await();
+
assumeFalse(a.updateHintAllowed());
verify(mNativeWrapperMock, times(1)).halPauseHintSession(anyLong());
// Set session to foreground and calling updateHintAllowed() would invoke resume();
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0, 0);
+
+ // Using CountDownLatch to ensure above onUidStateChanged() job was digested.
+ final CountDownLatch latch2 = new CountDownLatch(1);
FgThread.getHandler().post(() -> {
- synchronized (sync) {
- sync.notify();
- }
+ latch2.countDown();
});
- synchronized (sync) {
- sync.wait();
- }
+ latch2.await();
+
assumeTrue(a.updateHintAllowed());
verify(mNativeWrapperMock, times(1)).halResumeHintSession(anyLong());
}
@@ -237,15 +238,14 @@
// Set session to background, then the duration would not be updated.
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 0, 0);
- final Object sync = new Object();
+
+ // Using CountDownLatch to ensure above onUidStateChanged() job was digested.
+ final CountDownLatch latch = new CountDownLatch(1);
FgThread.getHandler().post(() -> {
- synchronized (sync) {
- sync.notify();
- }
+ latch.countDown();
});
- synchronized (sync) {
- sync.wait();
- }
+ latch.await();
+
assumeFalse(a.updateHintAllowed());
a.reportActualWorkDuration(DURATIONS_THREE, TIMESTAMPS_THREE);
verify(mNativeWrapperMock, never()).halReportActualWorkDuration(anyLong(), any(), any());
@@ -287,15 +287,14 @@
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0);
- final Object sync = new Object();
+
+ // Using CountDownLatch to ensure above onUidStateChanged() job was digested.
+ final CountDownLatch latch = new CountDownLatch(1);
FgThread.getHandler().post(() -> {
- synchronized (sync) {
- sync.notify();
- }
+ latch.countDown();
});
- synchronized (sync) {
- sync.wait();
- }
+ latch.await();
+
assertFalse(a.updateHintAllowed());
}
diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
index aca96ad..aad373f 100644
--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
@@ -445,14 +445,14 @@
+ " <library \n"
+ " name=\"foo\"\n"
+ " file=\"" + mFooJar + "\"\n"
- + " on-bootclasspath-before=\"Q\"\n"
+ + " on-bootclasspath-before=\"A\"\n"
+ " on-bootclasspath-since=\"W\"\n"
+ " />\n\n"
+ " </permissions>";
parseSharedLibraries(contents);
assertFooIsOnlySharedLibrary();
SystemConfig.SharedLibraryEntry entry = mSysConfig.getSharedLibraries().get("foo");
- assertThat(entry.onBootclasspathBefore).isEqualTo("Q");
+ assertThat(entry.onBootclasspathBefore).isEqualTo("A");
assertThat(entry.onBootclasspathSince).isEqualTo("W");
}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java b/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java
index 07b4345..2ab79fc 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java
@@ -77,16 +77,19 @@
private TestLooper mTestLooper;
private ContextWrapper mContextSpy;
+ private InputManager mInputManager;
private InputDeviceDelegate mInputDeviceDelegate;
private IInputDevicesChangedListener mIInputDevicesChangedListener;
@Before
public void setUp() throws Exception {
mTestLooper = new TestLooper();
- InputManager inputManager = InputManager.resetInstance(mIInputManagerMock);
+ InputManagerGlobal.resetInstance(mIInputManagerMock);
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
- when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager);
+ mInputManager = new InputManager(mContextSpy);
+ when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
+ .thenReturn(mInputManager);
doAnswer(invocation -> mIInputDevicesChangedListener = invocation.getArgument(0))
.when(mIInputManagerMock).registerInputDevicesChangedListener(any());
@@ -97,7 +100,7 @@
@After
public void tearDown() throws Exception {
- InputManager.clearInstance();
+ InputManagerGlobal.clearInstance();
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
index d50aca9..2efd9fc 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
@@ -618,13 +618,19 @@
}
@Test
- public void shouldCancelVibrationOnScreenOff_withUidZero_returnsFalseForTouchAndHardware() {
+ public void shouldCancelVibrationOnScreenOff_withUidZero_returnsFalseForUsagesInAllowlist() {
long vibrateStartTime = 100;
mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN);
+ Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+ USAGE_TOUCH,
+ USAGE_ACCESSIBILITY,
+ USAGE_PHYSICAL_EMULATION,
+ USAGE_HARDWARE_FEEDBACK
+ ));
+
for (int usage : ALL_USAGES) {
- if (usage == USAGE_TOUCH || usage == USAGE_HARDWARE_FEEDBACK
- || usage == USAGE_PHYSICAL_EMULATION) {
+ if (expectedAllowedVibrations.contains(usage)) {
assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
} else {
@@ -635,13 +641,19 @@
}
@Test
- public void shouldCancelVibrationOnScreenOff_withSystemUid_returnsFalseForTouchAndHardware() {
+ public void shouldCancelVibrationOnScreenOff_withSystemUid__returnsFalseForUsagesInAllowlist() {
long vibrateStartTime = 100;
mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD);
+ Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+ USAGE_TOUCH,
+ USAGE_ACCESSIBILITY,
+ USAGE_PHYSICAL_EMULATION,
+ USAGE_HARDWARE_FEEDBACK
+ ));
+
for (int usage : ALL_USAGES) {
- if (usage == USAGE_TOUCH || usage == USAGE_HARDWARE_FEEDBACK
- || usage == USAGE_PHYSICAL_EMULATION) {
+ if (expectedAllowedVibrations.contains(usage)) {
assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
} else {
@@ -652,13 +664,19 @@
}
@Test
- public void shouldCancelVibrationOnScreenOff_withSysUiPkg_returnsFalseForTouchAndHardware() {
+ public void shouldCancelVibrationOnScreenOff_withSysUiPkg_returnsFalseForUsagesInAllowlist() {
long vibrateStartTime = 100;
mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_HDMI);
+ Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+ USAGE_TOUCH,
+ USAGE_ACCESSIBILITY,
+ USAGE_PHYSICAL_EMULATION,
+ USAGE_HARDWARE_FEEDBACK
+ ));
+
for (int usage : ALL_USAGES) {
- if (usage == USAGE_TOUCH || usage == USAGE_HARDWARE_FEEDBACK
- || usage == USAGE_PHYSICAL_EMULATION) {
+ if (expectedAllowedVibrations.contains(usage)) {
assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
} else {
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
index 6bd280a..f158ce1 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
@@ -47,6 +47,7 @@
import android.content.pm.PackageManagerInternal;
import android.hardware.input.IInputManager;
import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
import android.hardware.vibrator.IVibrator;
import android.hardware.vibrator.IVibratorManager;
import android.media.AudioAttributes;
@@ -184,11 +185,13 @@
private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
mRegisteredAppsOnVirtualDeviceListener;
+ private InputManager mInputManager;
+
@Before
public void setUp() throws Exception {
mTestLooper = new TestLooper();
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
- InputManager inputManager = InputManager.resetInstance(mIInputManagerMock);
+ InputManagerGlobal.resetInstance(mIInputManagerMock);
mVibrationConfig = new VibrationConfig(mContextSpy.getResources());
ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
@@ -196,7 +199,10 @@
mVibrator = new FakeVibrator(mContextSpy);
when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibrator);
- when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager);
+
+ mInputManager = new InputManager(mContextSpy);
+ when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
+ .thenReturn(mInputManager);
when(mContextSpy.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManagerMock);
when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
when(mPackageManagerInternalMock.getSystemUiServiceComponent())
@@ -259,6 +265,7 @@
LocalServices.removeServiceForTest(PowerManagerInternal.class);
// Ignore potential exceptions about the looper having never dispatched any messages.
mTestLooper.stopAutoDispatchAndIgnoreExceptions();
+ InputManagerGlobal.clearInstance();
}
private VibratorManagerService createSystemReadyService() {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
index 90d1488..4406d83 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
@@ -71,10 +71,10 @@
import android.testing.TestableContext;
import android.util.ArraySet;
import android.util.Pair;
-import com.android.modules.utils.TypedXmlPullParser;
-import com.android.modules.utils.TypedXmlSerializer;
import android.util.Xml;
+import com.android.modules.utils.TypedXmlPullParser;
+import com.android.modules.utils.TypedXmlSerializer;
import com.android.server.UiServiceTestCase;
import com.google.common.collect.ImmutableList;
@@ -92,6 +92,7 @@
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
public class NotificationListenersTest extends UiServiceTestCase {
@@ -626,6 +627,58 @@
.onNotificationChannelGroupModification(anyString(), any(), any(), anyInt());
}
+ @Test
+ public void testNotificationListenerFilter_threadSafety() throws Exception {
+ testThreadSafety(() -> {
+ mListeners.setNotificationListenerFilter(
+ new Pair<>(new ComponentName("pkg1", "cls1"), 0),
+ new NotificationListenerFilter());
+ mListeners.setNotificationListenerFilter(
+ new Pair<>(new ComponentName("pkg2", "cls2"), 10),
+ new NotificationListenerFilter());
+ mListeners.setNotificationListenerFilter(
+ new Pair<>(new ComponentName("pkg3", "cls3"), 11),
+ new NotificationListenerFilter());
+
+ mListeners.onUserRemoved(10);
+ mListeners.onPackagesChanged(true, new String[]{"pkg1", "pkg2"}, new int[]{0, 0});
+ }, 20, 50);
+ }
+
+ /**
+ * Helper method to test the thread safety of some operations.
+ *
+ * <p>Runs the supplied {@code operationToTest}, {@code nRunsPerThread} times,
+ * concurrently using {@code nThreads} threads, and waits for all of them to finish.
+ */
+ private static void testThreadSafety(Runnable operationToTest, int nThreads,
+ int nRunsPerThread) throws InterruptedException {
+ final CountDownLatch startLatch = new CountDownLatch(1);
+ final CountDownLatch doneLatch = new CountDownLatch(nThreads);
+
+ for (int i = 0; i < nThreads; i++) {
+ Runnable threadRunnable = () -> {
+ try {
+ startLatch.await();
+ for (int j = 0; j < nRunsPerThread; j++) {
+ operationToTest.run();
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ doneLatch.countDown();
+ }
+ };
+ new Thread(threadRunnable, "Test Thread #" + i).start();
+ }
+
+ // Ready set go
+ startLatch.countDown();
+
+ // Wait for all test threads to be done.
+ doneLatch.await();
+ }
+
private ManagedServices.ManagedServiceInfo getParcelingListener(
final NotificationChannelGroup toParcel)
throws RemoteException {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 9cfdaa7..dd9f3cb 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -5447,6 +5447,29 @@
}
@Test
+ public void testVisitUris_callStyle() {
+ Icon personIcon = Icon.createWithContentUri("content://media/person");
+ Icon verificationIcon = Icon.createWithContentUri("content://media/verification");
+ Person callingPerson = new Person.Builder().setName("Someone")
+ .setIcon(personIcon)
+ .build();
+ PendingIntent hangUpIntent = PendingIntent.getActivity(mContext, 0, new Intent(),
+ PendingIntent.FLAG_IMMUTABLE);
+ Notification n = new Notification.Builder(mContext, "a")
+ .setStyle(Notification.CallStyle.forOngoingCall(callingPerson, hangUpIntent)
+ .setVerificationIcon(verificationIcon))
+ .setContentTitle("Calling...")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .build();
+
+ Consumer<Uri> visitor = (Consumer<Uri>) spy(Consumer.class);
+ n.visitUris(visitor);
+
+ verify(visitor, times(1)).accept(eq(personIcon.getUri()));
+ verify(visitor, times(1)).accept(eq(verificationIcon.getUri()));
+ }
+
+ @Test
public void testVisitUris_audioContentsString() throws Exception {
final Uri audioContents = Uri.parse("content://com.example/audio");
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 4e001fe..37c4b37 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java
@@ -28,6 +28,7 @@
import static com.google.common.truth.Truth.assertWithMessage;
+import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
@@ -501,6 +502,12 @@
onActivityLaunched(mTrampolineActivity);
mActivityMetricsLogger.notifyActivityLaunching(mTopActivity.intent,
mTrampolineActivity /* caller */, mTrampolineActivity.getUid());
+
+ // Simulate a corner case that the trampoline activity is removed by CLEAR_TASK.
+ // The 2 launch events can still be coalesced to one by matching the uid.
+ mTrampolineActivity.takeFromHistory();
+ assertNull(mTrampolineActivity.getTask());
+
notifyActivityLaunched(START_SUCCESS, mTopActivity);
transitToDrawnAndVerifyOnLaunchFinished(mTopActivity);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index 8f2b470..0033e3e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -2399,7 +2399,10 @@
holder.addConnection(connection);
assertTrue(holder.isActivityVisible());
final int[] count = new int[1];
- final Consumer<Object> c = conn -> count[0]++;
+ final Consumer<Object> c = conn -> {
+ count[0]++;
+ assertFalse(Thread.holdsLock(activity));
+ };
holder.forEachConnection(c);
assertEquals(1, count[0]);
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
index 7d16fb2..4890f3e6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
@@ -44,11 +44,13 @@
import android.app.ActivityOptions;
import android.app.KeyguardManager;
import android.app.admin.DevicePolicyManagerInternal;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.SuspendDialogInfo;
import android.content.pm.UserInfo;
@@ -445,12 +447,15 @@
}
@Test
- public void testSandboxServiceInterceptionHappensToSandboxedActivityAction()
- throws InterruptedException {
-
+ public void testSandboxServiceInterceptionHappensToIntentWithSandboxActivityAction() {
ActivityInterceptorCallback spyCallback = Mockito.spy(info -> null);
mActivityInterceptorCallbacks.put(MAINLINE_SDK_SANDBOX_ORDER_ID, spyCallback);
+ PackageManager packageManagerMock = mock(PackageManager.class);
+ String sandboxPackageNameMock = "com.sandbox.mock";
+ when(mContext.getPackageManager()).thenReturn(packageManagerMock);
+ when(packageManagerMock.getSdkSandboxPackageName()).thenReturn(sandboxPackageNameMock);
+
Intent intent = new Intent().setAction(ACTION_START_SANDBOXED_ACTIVITY);
mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
@@ -459,13 +464,68 @@
}
@Test
- public void testSandboxServiceInterceptionNotCalledForNotSandboxedActivityAction() {
+ public void testSandboxServiceInterceptionHappensToIntentWithSandboxPackage() {
ActivityInterceptorCallback spyCallback = Mockito.spy(info -> null);
mActivityInterceptorCallbacks.put(MAINLINE_SDK_SANDBOX_ORDER_ID, spyCallback);
+ PackageManager packageManagerMock = mock(PackageManager.class);
+ String sandboxPackageNameMock = "com.sandbox.mock";
+ when(mContext.getPackageManager()).thenReturn(packageManagerMock);
+ when(packageManagerMock.getSdkSandboxPackageName()).thenReturn(sandboxPackageNameMock);
+
+ Intent intent = new Intent().setPackage(sandboxPackageNameMock);
+ mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+
+ verify(spyCallback, times(1)).onInterceptActivityLaunch(
+ any(ActivityInterceptorCallback.ActivityInterceptorInfo.class));
+ }
+
+ @Test
+ public void testSandboxServiceInterceptionHappensToIntentWithComponentNameWithSandboxPackage() {
+ ActivityInterceptorCallback spyCallback = Mockito.spy(info -> null);
+ mActivityInterceptorCallbacks.put(MAINLINE_SDK_SANDBOX_ORDER_ID, spyCallback);
+
+ PackageManager packageManagerMock = mock(PackageManager.class);
+ String sandboxPackageNameMock = "com.sandbox.mock";
+ when(mContext.getPackageManager()).thenReturn(packageManagerMock);
+ when(packageManagerMock.getSdkSandboxPackageName()).thenReturn(sandboxPackageNameMock);
+
+ Intent intent = new Intent().setComponent(new ComponentName(sandboxPackageNameMock, ""));
+ mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+
+ verify(spyCallback, times(1)).onInterceptActivityLaunch(
+ any(ActivityInterceptorCallback.ActivityInterceptorInfo.class));
+ }
+
+ @Test
+ public void testSandboxServiceInterceptionNotCalledWhenIntentNotRelatedToSandbox() {
+ ActivityInterceptorCallback spyCallback = Mockito.spy(info -> null);
+ mActivityInterceptorCallbacks.put(MAINLINE_SDK_SANDBOX_ORDER_ID, spyCallback);
+
+ PackageManager packageManagerMock = mock(PackageManager.class);
+ String sandboxPackageNameMock = "com.sandbox.mock";
+ when(mContext.getPackageManager()).thenReturn(packageManagerMock);
+ when(packageManagerMock.getSdkSandboxPackageName()).thenReturn(sandboxPackageNameMock);
+
+ // Intent: null
+ mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null);
+
+ // Action: null, Package: null, ComponentName: null
Intent intent = new Intent();
mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+ // Wrong Action
+ intent = new Intent().setAction(Intent.ACTION_VIEW);
+ mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+
+ // Wrong Package
+ intent = new Intent().setPackage("Random");
+ mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+
+ // Wrong ComponentName's package
+ intent = new Intent().setComponent(new ComponentName("Random", ""));
+ mInterceptor.intercept(intent, null, mAInfo, null, null, null, 0, 0, null);
+
verify(spyCallback, never()).onInterceptActivityLaunch(
any(ActivityInterceptorCallback.ActivityInterceptorInfo.class));
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
index 17ae215..6d7f2c1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
@@ -232,11 +232,36 @@
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
window.setOnBackInvokedCallbackInfo(
- new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT));
+ new OnBackInvokedCallbackInfo(
+ callback,
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT,
+ /* isAnimationCallback = */ false));
BackNavigationInfo backNavigationInfo = startBackNavigation();
assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull();
assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK);
+ assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(false);
+ assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback);
+ }
+
+ @Test
+ public void backInfoWithAnimationCallback() {
+ WindowState window = createWindow(null, WindowManager.LayoutParams.TYPE_WALLPAPER,
+ "Wallpaper");
+ addToWindowMap(window, true);
+ makeWindowVisibleAndDrawn(window);
+
+ IOnBackInvokedCallback callback = createOnBackInvokedCallback();
+ window.setOnBackInvokedCallbackInfo(
+ new OnBackInvokedCallbackInfo(
+ callback,
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT,
+ /* isAnimationCallback = */ true));
+
+ BackNavigationInfo backNavigationInfo = startBackNavigation();
+ assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull();
+ assertThat(backNavigationInfo.getType()).isEqualTo(BackNavigationInfo.TYPE_CALLBACK);
+ assertThat(backNavigationInfo.isAnimationCallback()).isEqualTo(true);
assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback);
}
@@ -364,7 +389,10 @@
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
window.setOnBackInvokedCallbackInfo(
- new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT));
+ new OnBackInvokedCallbackInfo(
+ callback,
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT,
+ /* isAnimationCallback = */ false));
BackNavigationInfo backNavigationInfo = startBackNavigation();
assertThat(backNavigationInfo).isNull();
@@ -450,14 +478,20 @@
private IOnBackInvokedCallback withSystemCallback(Task task) {
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo(
- new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_SYSTEM));
+ new OnBackInvokedCallbackInfo(
+ callback,
+ OnBackInvokedDispatcher.PRIORITY_SYSTEM,
+ /* isAnimationCallback = */ false));
return callback;
}
private IOnBackInvokedCallback withAppCallback(Task task) {
IOnBackInvokedCallback callback = createOnBackInvokedCallback();
task.getTopMostActivity().getTopChild().setOnBackInvokedCallbackInfo(
- new OnBackInvokedCallbackInfo(callback, OnBackInvokedDispatcher.PRIORITY_DEFAULT));
+ new OnBackInvokedCallbackInfo(
+ callback,
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT,
+ /* isAnimationCallback = */ false));
return callback;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java
index 2686a24..d2f0385 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaOrganizerTest.java
@@ -112,13 +112,6 @@
}
@Test
- public void testRegisterOrganizer_alreadyRegisteredFeature() {
- registerMockOrganizer(FEATURE_VENDOR_FIRST);
- assertThrows(IllegalStateException.class,
- () -> registerMockOrganizer(FEATURE_VENDOR_FIRST));
- }
-
- @Test
public void testRegisterOrganizer_ignoreUntrustedDisplay() throws RemoteException {
doReturn(false).when(mDisplayContent).isTrusted();
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java
index 10540dc..1ad04a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayAreaTest.java
@@ -619,19 +619,6 @@
}
@Test
- public void testRegisterSameFeatureOrganizer_expectThrowsException() {
- final IDisplayAreaOrganizer mockDisplayAreaOrganizer = mock(IDisplayAreaOrganizer.class);
- final IBinder binder = mock(IBinder.class);
- doReturn(true).when(binder).isBinderAlive();
- doReturn(binder).when(mockDisplayAreaOrganizer).asBinder();
- final DisplayAreaOrganizerController controller =
- mWm.mAtmService.mWindowOrganizerController.mDisplayAreaOrganizerController;
- controller.registerOrganizer(mockDisplayAreaOrganizer, FEATURE_VENDOR_FIRST);
- assertThrows(IllegalStateException.class,
- () -> controller.registerOrganizer(mockDisplayAreaOrganizer, FEATURE_VENDOR_FIRST));
- }
-
- @Test
public void testRegisterUnregisterOrganizer() {
final IDisplayAreaOrganizer mockDisplayAreaOrganizer = mock(IDisplayAreaOrganizer.class);
doReturn(mock(IBinder.class)).when(mockDisplayAreaOrganizer).asBinder();
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
index 2065540..a8fc25f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
@@ -84,12 +84,14 @@
}
@Test
- public void testControlsForDispatch_multiWindowTaskVisible() {
+ public void testControlsForDispatch_adjacentTasksVisible() {
addStatusBar();
addNavigationBar();
- final WindowState win = createWindow(null, WINDOWING_MODE_MULTI_WINDOW,
- ACTIVITY_TYPE_STANDARD, TYPE_APPLICATION, mDisplayContent, "app");
+ final Task task1 = createTask(mDisplayContent);
+ final Task task2 = createTask(mDisplayContent);
+ task1.setAdjacentTaskFragment(task2);
+ final WindowState win = createAppWindow(task1, WINDOWING_MODE_MULTI_WINDOW, "app");
final InsetsSourceControl[] controls = addWindowAndGetControlsForDispatch(win);
// The app must not control any system bars.
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
index 5e513f1..3934b02 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java
@@ -94,6 +94,7 @@
mProvider.setWindowContainer(statusBar,
(displayFrames, windowState, rect) -> {
rect.set(10, 10, 20, 20);
+ return 0;
}, null);
mProvider.updateSourceFrame(statusBar.getFrame());
mProvider.onPostLayout();
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
index ff2944a..d1d83f6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
@@ -52,7 +52,7 @@
import androidx.test.filters.SmallTest;
-import com.android.internal.util.function.TriConsumer;
+import com.android.internal.util.function.TriFunction;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -289,10 +289,12 @@
InsetsSourceProvider statusBarProvider =
getController().getOrCreateSourceProvider(ID_STATUS_BAR, statusBars());
- final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> imeOverrideProviders =
- new SparseArray<>();
- imeOverrideProviders.put(TYPE_INPUT_METHOD, ((displayFrames, windowState, rect) ->
- rect.set(0, 1, 2, 3)));
+ final SparseArray<TriFunction<DisplayFrames, WindowContainer, Rect, Integer>>
+ imeOverrideProviders = new SparseArray<>();
+ imeOverrideProviders.put(TYPE_INPUT_METHOD, ((displayFrames, windowState, rect) -> {
+ rect.set(0, 1, 2, 3);
+ return 0;
+ }));
statusBarProvider.setWindowContainer(statusBar, null, imeOverrideProviders);
getController().getOrCreateSourceProvider(ID_IME, ime())
.setWindowContainer(ime, null, null);
diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
index a15ee69..03c93e9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java
@@ -39,9 +39,9 @@
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE;
+import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE;
import static android.view.WindowManager.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS;
-import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -207,7 +207,7 @@
throws Exception {
doReturn(true).when(mLetterboxConfiguration)
.isPolicyForIgnoringRequestedOrientationEnabled();
- mockThatProperty(PROPERTY_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED,
+ mockThatProperty(PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED,
/* value */ false);
doReturn(false).when(mActivity).isLetterboxedForFixedOrientationAndAspectRatio();
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
index 49d8da1..9d597b1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -586,6 +586,15 @@
// Making the activity0 be the focused activity and ensure the focused app is updated.
activity0.moveFocusableActivityToTop("test");
assertEquals(activity0, mDisplayContent.mFocusedApp);
+
+ // Moving activity1 to top and make both the two activities resumed.
+ activity1.moveFocusableActivityToTop("test");
+ activity0.setState(RESUMED, "test");
+ activity1.setState(RESUMED, "test");
+
+ // Verifies that the focus app can be updated to an Activity in the adjacent TF
+ mAtm.setFocusedTask(task.mTaskId, activity0);
+ assertEquals(activity0, mDisplayContent.mFocusedApp);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index fdb3502..460a603 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -20,6 +20,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.InsetsSource.ID_IME;
import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_270;
@@ -43,6 +44,8 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
+import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
+import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -83,17 +86,25 @@
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.InputConfig;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.util.ArraySet;
+import android.util.MergedConfiguration;
import android.view.Gravity;
+import android.view.IWindow;
+import android.view.IWindowSessionCallback;
import android.view.InputWindowHandle;
import android.view.InsetsSource;
+import android.view.InsetsSourceControl;
import android.view.InsetsState;
import android.view.SurfaceControl;
+import android.view.View;
+import android.view.WindowInsets;
import android.view.WindowManager;
+import android.window.ClientWindowFrames;
import android.window.ITaskFragmentOrganizer;
import android.window.TaskFragmentOrganizer;
@@ -969,6 +980,33 @@
assertFalse(sameTokenWindow.needsRelativeLayeringToIme());
}
+ @UseTestDisplay(addWindows = {W_ACTIVITY, W_INPUT_METHOD})
+ @Test
+ public void testNeedsRelativeLayeringToIme_systemDialog() {
+ WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY,
+ mDisplayContent,
+ "SystemDialog", true);
+ mDisplayContent.setImeLayeringTarget(mAppWindow);
+ mAppWindow.getRootTask().setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
+ makeWindowVisible(mImeWindow);
+ systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM;
+ assertTrue(systemDialogWindow.needsRelativeLayeringToIme());
+ }
+
+ @UseTestDisplay(addWindows = {W_INPUT_METHOD})
+ @Test
+ public void testNeedsRelativeLayeringToIme_notificationShadeShouldNotHideSystemDialog() {
+ WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY,
+ mDisplayContent,
+ "SystemDialog", true);
+ mDisplayContent.setImeLayeringTarget(systemDialogWindow);
+ makeWindowVisible(mImeWindow);
+ WindowState notificationShade = createWindow(null, TYPE_NOTIFICATION_SHADE,
+ mDisplayContent, "NotificationShade", true);
+ notificationShade.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM;
+ assertFalse(notificationShade.needsRelativeLayeringToIme());
+ }
+
@Test
public void testSetFreezeInsetsState() {
final WindowState app = createWindow(null, TYPE_APPLICATION, "app");
@@ -1251,4 +1289,118 @@
assertEquals(new ArraySet(Arrays.asList(expectedArea1, expectedArea2)),
new ArraySet(unrestrictedKeepClearAreas));
}
+
+ @Test
+ public void testImeTargetChangeListener_OnImeInputTargetVisibilityChanged() {
+ final TestImeTargetChangeListener listener = new TestImeTargetChangeListener();
+ mWm.mImeTargetChangeListener = listener;
+
+ final WindowState imeTarget = createWindow(null /* parent */, TYPE_BASE_APPLICATION,
+ createActivityRecord(mDisplayContent), "imeTarget");
+
+ imeTarget.mActivityRecord.setVisibleRequested(true);
+ makeWindowVisible(imeTarget);
+ mDisplayContent.setImeInputTarget(imeTarget);
+ waitHandlerIdle(mWm.mH);
+
+ assertThat(listener.mImeTargetToken).isEqualTo(imeTarget.mClient.asBinder());
+ assertThat(listener.mIsRemoved).isFalse();
+ assertThat(listener.mIsVisibleForImeInputTarget).isTrue();
+
+ imeTarget.mActivityRecord.setVisibleRequested(false);
+ waitHandlerIdle(mWm.mH);
+
+ assertThat(listener.mImeTargetToken).isEqualTo(imeTarget.mClient.asBinder());
+ assertThat(listener.mIsRemoved).isFalse();
+ assertThat(listener.mIsVisibleForImeInputTarget).isFalse();
+
+ imeTarget.removeImmediately();
+ assertThat(listener.mImeTargetToken).isEqualTo(imeTarget.mClient.asBinder());
+ assertThat(listener.mIsRemoved).isTrue();
+ assertThat(listener.mIsVisibleForImeInputTarget).isFalse();
+ }
+
+ @SetupWindows(addWindows = {W_INPUT_METHOD})
+ @Test
+ public void testImeTargetChangeListener_OnImeTargetOverlayVisibilityChanged() {
+ final TestImeTargetChangeListener listener = new TestImeTargetChangeListener();
+ mWm.mImeTargetChangeListener = listener;
+
+ // Scenario 1: test addWindow/relayoutWindow to add Ime layering overlay window as visible.
+ final WindowToken windowToken = createTestWindowToken(TYPE_APPLICATION_OVERLAY,
+ mDisplayContent);
+ final IWindow client = new TestIWindow();
+ final Session session = new Session(mWm, new IWindowSessionCallback.Stub() {
+ @Override
+ public void onAnimatorScaleChanged(float v) throws RemoteException {
+
+ }
+ });
+ final ClientWindowFrames outFrames = new ClientWindowFrames();
+ final MergedConfiguration outConfig = new MergedConfiguration();
+ final SurfaceControl outSurfaceControl = new SurfaceControl();
+ final InsetsState outInsetsState = new InsetsState();
+ final InsetsSourceControl.Array outControls = new InsetsSourceControl.Array();
+ final Bundle outBundle = new Bundle();
+ final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
+ TYPE_APPLICATION_OVERLAY);
+ params.setTitle("imeLayeringTargetOverlay");
+ params.token = windowToken.token;
+ params.flags = FLAG_NOT_FOCUSABLE | FLAG_ALT_FOCUSABLE_IM;
+
+ mWm.addWindow(session, client, params, View.VISIBLE, DEFAULT_DISPLAY,
+ 0 /* userUd */, WindowInsets.Type.defaultVisible(), null, new InsetsState(),
+ new InsetsSourceControl.Array(), new Rect(), new float[1]);
+ mWm.relayoutWindow(session, client, params, 100, 200, View.VISIBLE, 0, 0, 0,
+ outFrames, outConfig, outSurfaceControl, outInsetsState, outControls, outBundle);
+ waitHandlerIdle(mWm.mH);
+
+ final WindowState imeLayeringTargetOverlay = mDisplayContent.getWindow(
+ w -> w.mClient.asBinder() == client.asBinder());
+ assertThat(imeLayeringTargetOverlay.isVisible()).isTrue();
+ assertThat(listener.mImeTargetToken).isEqualTo(client.asBinder());
+ assertThat(listener.mIsRemoved).isFalse();
+ assertThat(listener.mIsVisibleForImeTargetOverlay).isTrue();
+
+ // Scenario 2: test relayoutWindow to let the Ime layering target overlay window invisible.
+ mWm.relayoutWindow(session, client, params, 100, 200, View.GONE, 0, 0, 0,
+ outFrames, outConfig, outSurfaceControl, outInsetsState, outControls, outBundle);
+ waitHandlerIdle(mWm.mH);
+
+ assertThat(imeLayeringTargetOverlay.isVisible()).isFalse();
+ assertThat(listener.mImeTargetToken).isEqualTo(client.asBinder());
+ assertThat(listener.mIsRemoved).isFalse();
+ assertThat(listener.mIsVisibleForImeTargetOverlay).isFalse();
+
+ // Scenario 3: test removeWindow to remove the Ime layering target overlay window.
+ mWm.removeWindow(session, client);
+ waitHandlerIdle(mWm.mH);
+
+ assertThat(listener.mImeTargetToken).isEqualTo(client.asBinder());
+ assertThat(listener.mIsRemoved).isTrue();
+ assertThat(listener.mIsVisibleForImeTargetOverlay).isFalse();
+ }
+
+ private static class TestImeTargetChangeListener implements ImeTargetChangeListener {
+ private IBinder mImeTargetToken;
+ private boolean mIsRemoved;
+ private boolean mIsVisibleForImeTargetOverlay;
+ private boolean mIsVisibleForImeInputTarget;
+
+ @Override
+ public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken, boolean visible,
+ boolean removed) {
+ mImeTargetToken = overlayWindowToken;
+ mIsVisibleForImeTargetOverlay = visible;
+ mIsRemoved = removed;
+ }
+
+ @Override
+ public void onImeInputTargetVisibilityChanged(IBinder imeInputTarget,
+ boolean visibleRequested, boolean removed) {
+ mImeTargetToken = imeInputTarget;
+ mIsVisibleForImeInputTarget = visibleRequested;
+ mIsRemoved = removed;
+ }
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
index 74ba45c..3ec6f42 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
@@ -22,6 +22,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
@@ -31,6 +32,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
@@ -553,6 +555,30 @@
}
@Test
+ public void testSystemDialogWindow_expectHigherThanIme_inMultiWindow() {
+ // Simulate the app window is in multi windowing mode and being IME target
+ mAppWindow.getConfiguration().windowConfiguration.setWindowingMode(
+ WINDOWING_MODE_MULTI_WINDOW);
+ mDisplayContent.setImeLayeringTarget(mAppWindow);
+ mDisplayContent.setImeInputTarget(mAppWindow);
+ makeWindowVisible(mImeWindow);
+
+ // Create a popupWindow
+ final WindowState systemDialogWindow = createWindow(null, TYPE_SECURE_SYSTEM_OVERLAY,
+ mDisplayContent, "SystemDialog", true);
+ systemDialogWindow.mAttrs.flags |= FLAG_ALT_FOCUSABLE_IM;
+ spyOn(systemDialogWindow);
+
+ mDisplayContent.assignChildLayers(mTransaction);
+
+ // Verify the surface layer of the popupWindow should higher than IME
+ verify(systemDialogWindow).needsRelativeLayeringToIme();
+ assertThat(systemDialogWindow.needsRelativeLayeringToIme()).isTrue();
+ assertZOrderGreaterThan(mTransaction, systemDialogWindow.getSurfaceControl(),
+ mDisplayContent.getImeContainer().getSurfaceControl());
+ }
+
+ @Test
public void testImeScreenshotLayer() {
final Task task = createTask(mDisplayContent);
final WindowState imeAppTarget = createAppWindow(task, TYPE_APPLICATION, "imeAppTarget");
diff --git a/services/voiceinteraction/TEST_MAPPING b/services/voiceinteraction/TEST_MAPPING
index f098155..e3d2549 100644
--- a/services/voiceinteraction/TEST_MAPPING
+++ b/services/voiceinteraction/TEST_MAPPING
@@ -42,6 +42,14 @@
"exclude-annotation": "androidx.test.filters.FlakyTest"
}
]
+ },
+ {
+ "name": "CtsSoundTriggerTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
}
]
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 1bbea89..790be8d 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -73,7 +73,6 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
-import android.os.Parcel;
import android.os.ParcelUuid;
import android.os.PowerManager;
import android.os.RemoteException;
@@ -342,21 +341,6 @@
}
@Override
- public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
- throws RemoteException {
- try {
- return super.onTransact(code, data, reply, flags);
- } catch (RuntimeException e) {
- // The activity manager only throws security exceptions, so let's
- // log all others.
- if (!(e instanceof SecurityException)) {
- Slog.wtf(TAG, "SoundTriggerService Crash", e);
- }
- throw e;
- }
- }
-
- @Override
public int startRecognition(GenericSoundModel soundModel,
IRecognitionStatusCallback callback,
RecognitionConfig config, boolean runInBatterySaverMode) {
diff --git a/telephony/OWNERS b/telephony/OWNERS
index 025869d..3158ad8 100644
--- a/telephony/OWNERS
+++ b/telephony/OWNERS
@@ -11,12 +11,6 @@
amruthr@google.com
sasindran@google.com
-# Temporarily reduced the owner during refactoring
-per-file SubscriptionManager.java=set noparent
-per-file SubscriptionManager.java=jackyu@google.com,amruthr@google.com
-per-file SubscriptionInfo.java=set noparent
-per-file SubscriptionInfo.java=jackyu@google.com,amruthr@google.com
-
# Requiring TL ownership for new carrier config keys.
per-file CarrierConfigManager.java=set noparent
per-file CarrierConfigManager.java=amruthr@google.com,tgunn@google.com,rgreenwalt@google.com,satk@google.com
diff --git a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
index 905a90c..caafce2 100644
--- a/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
+++ b/telephony/common/com/android/internal/telephony/TelephonyPermissions.java
@@ -331,8 +331,8 @@
* Same as {@link #checkCallingOrSelfReadSubscriberIdentifiers(Context, int, String, String,
* String)} except this allows an additional parameter reportFailure. Caller may not want to
* report a failure when this is an internal/intermediate check, for example,
- * SubscriptionController calls this with an INVALID_SUBID to check if caller has the required
- * permissions to bypass carrier privilege checks.
+ * SubscriptionManagerService calls this with an INVALID_SUBID to check if caller has the
+ * required permissions to bypass carrier privilege checks.
* @param reportFailure Indicates if failure should be reported.
*/
public static boolean checkCallingOrSelfReadSubscriberIdentifiers(Context context, int subId,
diff --git a/telephony/java/android/telephony/AnomalyReporter.java b/telephony/java/android/telephony/AnomalyReporter.java
index d676eee..db38f88 100644
--- a/telephony/java/android/telephony/AnomalyReporter.java
+++ b/telephony/java/android/telephony/AnomalyReporter.java
@@ -105,6 +105,8 @@
* @param carrierId the carrier of the id associated with this event.
*/
public static void reportAnomaly(@NonNull UUID eventId, String description, int carrierId) {
+ Rlog.i(TAG, "reportAnomaly: Received anomaly event report with eventId= " + eventId
+ + " and description= " + description);
if (sContext == null) {
Rlog.w(TAG, "AnomalyReporter not yet initialized, dropping event=" + eventId);
return;
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 559faf9..64e4356 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -91,8 +91,7 @@
import java.util.stream.Collectors;
/**
- * SubscriptionManager is the application interface to SubscriptionController
- * and provides information about the current Telephony Subscriptions.
+ * Subscription manager provides the mobile subscription information.
*/
@SystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION)
@@ -119,13 +118,12 @@
public static final int DEFAULT_SUBSCRIPTION_ID = Integer.MAX_VALUE;
/**
- * Indicates the caller wants the default phone id.
- * Used in SubscriptionController and Phone but do we really need it???
+ * Indicates the default phone id.
* @hide
*/
public static final int DEFAULT_PHONE_INDEX = Integer.MAX_VALUE;
- /** Indicates the caller wants the default slot id. NOT used remove? */
+ /** Indicates the default slot index. */
/** @hide */
public static final int DEFAULT_SIM_SLOT_INDEX = Integer.MAX_VALUE;
@@ -141,29 +139,10 @@
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
public static final Uri CONTENT_URI = SimInfo.CONTENT_URI;
- private static final String CACHE_KEY_DEFAULT_SUB_ID_PROPERTY =
- "cache_key.telephony.get_default_sub_id";
-
- private static final String CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY =
- "cache_key.telephony.get_default_data_sub_id";
-
- private static final String CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY =
- "cache_key.telephony.get_default_sms_sub_id";
-
- private static final String CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY =
- "cache_key.telephony.get_active_data_sub_id";
-
- private static final String CACHE_KEY_SLOT_INDEX_PROPERTY =
- "cache_key.telephony.get_slot_index";
-
/** The IPC cache key shared by all subscription manager service cacheable properties. */
private static final String CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY =
"cache_key.telephony.subscription_manager_service";
- /** The temporarily cache key to indicate whether subscription manager service is enabled. */
- private static final String CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY =
- "cache_key.telephony.subscription_manager_service_enabled";
-
/** @hide */
public static final String GET_SIM_SPECIFIC_SETTINGS_METHOD_NAME = "getSimSpecificSettings";
@@ -273,83 +252,41 @@
}
}
- private static VoidPropertyInvalidatedCache<Integer> sDefaultSubIdCache =
- new VoidPropertyInvalidatedCache<>(ISub::getDefaultSubId,
- CACHE_KEY_DEFAULT_SUB_ID_PROPERTY,
- INVALID_SUBSCRIPTION_ID);
-
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultSubIdCache =
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSubId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SUBSCRIPTION_ID);
- private static VoidPropertyInvalidatedCache<Integer> sDefaultDataSubIdCache =
- new VoidPropertyInvalidatedCache<>(ISub::getDefaultDataSubId,
- CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY,
- INVALID_SUBSCRIPTION_ID);
-
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultDataSubIdCache =
new VoidPropertyInvalidatedCache<>(ISub::getDefaultDataSubId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SUBSCRIPTION_ID);
- private static VoidPropertyInvalidatedCache<Integer> sDefaultSmsSubIdCache =
- new VoidPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
- CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY,
- INVALID_SUBSCRIPTION_ID);
-
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultSmsSubIdCache =
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SUBSCRIPTION_ID);
- private static VoidPropertyInvalidatedCache<Integer> sActiveDataSubIdCache =
- new VoidPropertyInvalidatedCache<>(ISub::getActiveDataSubscriptionId,
- CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY,
- INVALID_SUBSCRIPTION_ID);
-
private static VoidPropertyInvalidatedCache<Integer> sGetActiveDataSubscriptionIdCache =
new VoidPropertyInvalidatedCache<>(ISub::getActiveDataSubscriptionId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SUBSCRIPTION_ID);
- private static IntegerPropertyInvalidatedCache<Integer> sSlotIndexCache =
- new IntegerPropertyInvalidatedCache<>(ISub::getSlotIndex,
- CACHE_KEY_SLOT_INDEX_PROPERTY,
- INVALID_SIM_SLOT_INDEX);
-
private static IntegerPropertyInvalidatedCache<Integer> sGetSlotIndexCache =
new IntegerPropertyInvalidatedCache<>(ISub::getSlotIndex,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SIM_SLOT_INDEX);
- private static IntegerPropertyInvalidatedCache<Integer> sSubIdCache =
- new IntegerPropertyInvalidatedCache<>(ISub::getSubId,
- CACHE_KEY_SLOT_INDEX_PROPERTY,
- INVALID_SUBSCRIPTION_ID);
-
private static IntegerPropertyInvalidatedCache<Integer> sGetSubIdCache =
new IntegerPropertyInvalidatedCache<>(ISub::getSubId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_SUBSCRIPTION_ID);
- /** Cache depends on getDefaultSubId, so we use the defaultSubId cache key */
- private static IntegerPropertyInvalidatedCache<Integer> sPhoneIdCache =
- new IntegerPropertyInvalidatedCache<>(ISub::getPhoneId,
- CACHE_KEY_DEFAULT_SUB_ID_PROPERTY,
- INVALID_PHONE_INDEX);
-
private static IntegerPropertyInvalidatedCache<Integer> sGetPhoneIdCache =
new IntegerPropertyInvalidatedCache<>(ISub::getPhoneId,
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
INVALID_PHONE_INDEX);
- //TODO: Removed before U AOSP public release.
- private static VoidPropertyInvalidatedCache<Boolean> sIsSubscriptionManagerServiceEnabled =
- new VoidPropertyInvalidatedCache<>(ISub::isSubscriptionManagerServiceEnabled,
- CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY,
- false);
-
/**
* Generates a content {@link Uri} used to receive updates on simInfo change
* on the given subscriptionId
@@ -1455,17 +1392,6 @@
mContext = context;
}
- /**
- * @return {@code true} if the new subscription manager service is used. This is temporary and
- * will be removed before Android 14 release.
- *
- * @hide
- */
- //TODO: Removed before U AOSP public release.
- public static boolean isSubscriptionManagerServiceEnabled() {
- return sIsSubscriptionManagerServiceEnabled.query(null);
- }
-
private NetworkPolicyManager getNetworkPolicyManager() {
return (NetworkPolicyManager) mContext
.getSystemService(Context.NETWORK_POLICY_SERVICE);
@@ -1520,7 +1446,7 @@
+ " listener=" + listener);
}
// We use the TelephonyRegistry as it runs in the system and thus is always
- // available. Where as SubscriptionController could crash and not be available
+ // available.
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
if (telephonyRegistryManager != null) {
@@ -1550,7 +1476,7 @@
+ " listener=" + listener);
}
// We use the TelephonyRegistry as it runs in the system and thus is always
- // available where as SubscriptionController could crash and not be available
+ // available.
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
if (telephonyRegistryManager != null) {
@@ -1608,7 +1534,7 @@
}
// We use the TelephonyRegistry as it runs in the system and thus is always
- // available where as SubscriptionController could crash and not be available
+ // available.
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
if (telephonyRegistryManager != null) {
@@ -2149,9 +2075,9 @@
Log.e(LOG_TAG, "[removeSubscriptionInfoRecord]- ISub service is null");
return;
}
- int result = iSub.removeSubInfo(uniqueId, subscriptionType);
- if (result < 0) {
- Log.e(LOG_TAG, "Removal of subscription didn't succeed: error = " + result);
+ boolean result = iSub.removeSubInfo(uniqueId, subscriptionType);
+ if (!result) {
+ Log.e(LOG_TAG, "Removal of subscription didn't succeed");
} else {
logd("successfully removed subscription");
}
@@ -2236,8 +2162,7 @@
* subscriptionId doesn't have an associated slot index.
*/
public static int getSlotIndex(int subscriptionId) {
- if (isSubscriptionManagerServiceEnabled()) return sGetSlotIndexCache.query(subscriptionId);
- return sSlotIndexCache.query(subscriptionId);
+ return sGetSlotIndexCache.query(subscriptionId);
}
/**
@@ -2294,15 +2219,13 @@
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
- if (isSubscriptionManagerServiceEnabled()) return sGetSubIdCache.query(slotIndex);
- return sSubIdCache.query(slotIndex);
+ return sGetSubIdCache.query(slotIndex);
}
/** @hide */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
public static int getPhoneId(int subId) {
- if (isSubscriptionManagerServiceEnabled()) return sGetPhoneIdCache.query(subId);
- return sPhoneIdCache.query(subId);
+ return sGetPhoneIdCache.query(subId);
}
private static void logd(String msg) {
@@ -2323,8 +2246,7 @@
* @return the "system" default subscription id.
*/
public static int getDefaultSubscriptionId() {
- if (isSubscriptionManagerServiceEnabled()) return sGetDefaultSubIdCache.query(null);
- return sDefaultSubIdCache.query(null);
+ return sGetDefaultSubIdCache.query(null);
}
/**
@@ -2412,8 +2334,7 @@
* @return the default SMS subscription Id.
*/
public static int getDefaultSmsSubscriptionId() {
- if (isSubscriptionManagerServiceEnabled()) return sGetDefaultSmsSubIdCache.query(null);
- return sDefaultSmsSubIdCache.query(null);
+ return sGetDefaultSmsSubIdCache.query(null);
}
/**
@@ -2447,8 +2368,7 @@
* @return the default data subscription Id.
*/
public static int getDefaultDataSubscriptionId() {
- if (isSubscriptionManagerServiceEnabled()) return sGetDefaultDataSubIdCache.query(null);
- return sDefaultDataSubIdCache.query(null);
+ return sGetDefaultDataSubIdCache.query(null);
}
/**
@@ -3912,10 +3832,7 @@
* @see TelephonyCallback.ActiveDataSubscriptionIdListener
*/
public static int getActiveDataSubscriptionId() {
- if (isSubscriptionManagerServiceEnabled()) {
- return sGetActiveDataSubscriptionIdCache.query(null);
- }
- return sActiveDataSubIdCache.query(null);
+ return sGetActiveDataSubscriptionIdCache.query(null);
}
/**
@@ -3934,61 +3851,16 @@
}
/** @hide */
- public static void invalidateDefaultSubIdCaches() {
- PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SUB_ID_PROPERTY);
- }
-
- /** @hide */
- public static void invalidateDefaultDataSubIdCaches() {
- PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY);
- }
-
- /** @hide */
- public static void invalidateDefaultSmsSubIdCaches() {
- PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY);
- }
-
- /** @hide */
- public static void invalidateActiveDataSubIdCaches() {
- if (isSubscriptionManagerServiceEnabled()) {
- PropertyInvalidatedCache.invalidateCache(
- CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY);
- } else {
- PropertyInvalidatedCache.invalidateCache(CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY);
- }
- }
-
- /** @hide */
- public static void invalidateSlotIndexCaches() {
- PropertyInvalidatedCache.invalidateCache(CACHE_KEY_SLOT_INDEX_PROPERTY);
- }
-
- /** @hide */
public static void invalidateSubscriptionManagerServiceCaches() {
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY);
}
- /** @hide */
- //TODO: Removed before U AOSP public release.
- public static void invalidateSubscriptionManagerServiceEnabledCaches() {
- PropertyInvalidatedCache.invalidateCache(
- CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY);
- }
-
/**
* Allows a test process to disable client-side caching operations.
*
* @hide
*/
public static void disableCaching() {
- sDefaultSubIdCache.disableLocal();
- sDefaultDataSubIdCache.disableLocal();
- sActiveDataSubIdCache.disableLocal();
- sDefaultSmsSubIdCache.disableLocal();
- sSlotIndexCache.disableLocal();
- sSubIdCache.disableLocal();
- sPhoneIdCache.disableLocal();
-
sGetDefaultSubIdCache.disableLocal();
sGetDefaultDataSubIdCache.disableLocal();
sGetActiveDataSubscriptionIdCache.disableLocal();
@@ -3996,8 +3868,6 @@
sGetSlotIndexCache.disableLocal();
sGetSubIdCache.disableLocal();
sGetPhoneIdCache.disableLocal();
-
- sIsSubscriptionManagerServiceEnabled.disableLocal();
}
/**
@@ -4005,14 +3875,6 @@
*
* @hide */
public static void clearCaches() {
- sDefaultSubIdCache.clear();
- sDefaultDataSubIdCache.clear();
- sActiveDataSubIdCache.clear();
- sDefaultSmsSubIdCache.clear();
- sSlotIndexCache.clear();
- sSubIdCache.clear();
- sPhoneIdCache.clear();
-
sGetDefaultSubIdCache.clear();
sGetDefaultDataSubIdCache.clear();
sGetActiveDataSubscriptionIdCache.clear();
@@ -4020,8 +3882,6 @@
sGetSlotIndexCache.clear();
sGetSubIdCache.clear();
sGetPhoneIdCache.clear();
-
- sIsSubscriptionManagerServiceEnabled.clear();
}
/**
diff --git a/telephony/java/android/telephony/TelephonyScanManager.java b/telephony/java/android/telephony/TelephonyScanManager.java
index 19f2a9b..b761709 100644
--- a/telephony/java/android/telephony/TelephonyScanManager.java
+++ b/telephony/java/android/telephony/TelephonyScanManager.java
@@ -153,8 +153,9 @@
nsi = mScanInfo.get(message.arg2);
}
if (nsi == null) {
- throw new RuntimeException(
- "Failed to find NetworkScanInfo with id " + message.arg2);
+ Rlog.e(TAG, "Unexpceted message " + message.what
+ + " as there is no NetworkScanInfo with id " + message.arg2);
+ return;
}
final NetworkScanCallback callback = nsi.mCallback;
diff --git a/telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl b/telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl
new file mode 100644
index 0000000..4f1a136
--- /dev/null
+++ b/telephony/java/android/telephony/satellite/stub/ISatelliteGateway.aidl
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.telephony.satellite.stub;
+
+/**
+ * {@hide}
+ */
+oneway interface ISatelliteGateway {
+ // An empty service because Telephony does not need to use any APIs from this service.
+ // Once satellite modem is enabled, Telephony will bind to the ISatelliteGateway service; and
+ // when satellite modem is disabled, Telephony will unbind to the service.
+}
diff --git a/telephony/java/android/telephony/satellite/stub/SatelliteGatewayService.java b/telephony/java/android/telephony/satellite/stub/SatelliteGatewayService.java
new file mode 100644
index 0000000..f4514a6
--- /dev/null
+++ b/telephony/java/android/telephony/satellite/stub/SatelliteGatewayService.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.telephony.satellite.stub;
+
+import android.annotation.SdkConstant;
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import com.android.telephony.Rlog;
+
+/**
+ * Main SatelliteGatewayService implementation, which binds via the Telephony SatelliteController.
+ * Services that extend SatelliteGatewayService must register the service in their AndroidManifest
+ * to be detected by the framework. The application must declare that they require the
+ * "android.permission.BIND_SATELLITE_GATEWAY_SERVICE" permission to ensure that nothing else can
+ * bind to their service except the Telephony framework. The SatelliteGatewayService definition in
+ * the manifest must follow the following format:
+ *
+ * ...
+ * <service android:name=".EgSatelliteGatewayService"
+ * android:permission="android.permission.BIND_SATELLITE_GATEWAY_SERVICE" >
+ * ...
+ * <intent-filter>
+ * <action android:name="android.telephony.satellite.SatelliteGatewayService" />
+ * </intent-filter>
+ * </service>
+ * ...
+ *
+ * The telephony framework will then bind to the SatelliteGatewayService defined in the manifest if
+ * it is the default SatelliteGatewayService defined in the device overlay
+ * "config_satellite_gateway_service_package".
+ * @hide
+ */
+public abstract class SatelliteGatewayService extends Service {
+ private static final String TAG = "SatelliteGatewayService";
+
+ @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+ public static final String SERVICE_INTERFACE =
+ "android.telephony.satellite.SatelliteGatewayService";
+
+ private final IBinder mBinder = new ISatelliteGateway.Stub() {};
+
+ /**
+ * @hide
+ */
+ @Override
+ public final IBinder onBind(Intent intent) {
+ if (SERVICE_INTERFACE.equals(intent.getAction())) {
+ Rlog.d(TAG, "SatelliteGatewayService bound");
+ return mBinder;
+ }
+ return null;
+ }
+
+ /**
+ * @return The binder for the ISatelliteGateway.
+ * @hide
+ */
+ public final IBinder getBinder() {
+ return mBinder;
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl
index 6a5380d..21a6b44 100644
--- a/telephony/java/com/android/internal/telephony/ISub.aidl
+++ b/telephony/java/com/android/internal/telephony/ISub.aidl
@@ -129,9 +129,9 @@
* @param uniqueId This is the unique identifier for the subscription within the specific
* subscription type.
* @param subscriptionType the type of subscription to be removed
- * @return 0 if success, < 0 on error.
+ * @return true if success, false on error.
*/
- int removeSubInfo(String uniqueId, int subscriptionType);
+ boolean removeSubInfo(String uniqueId, int subscriptionType);
/**
* Set SIM icon tint color by simInfo index
@@ -260,7 +260,7 @@
int[] getActiveSubIdList(boolean visibleOnly);
- int setSubscriptionProperty(int subId, String propKey, String propValue);
+ void setSubscriptionProperty(int subId, String propKey, String propValue);
String getSubscriptionProperty(int subId, String propKey, String callingPackage,
String callingFeatureId);
@@ -353,13 +353,6 @@
*/
List<SubscriptionInfo> getSubscriptionInfoListAssociatedWithUser(in UserHandle userHandle);
- /**
- * @return {@code true} if using SubscriptionManagerService instead of
- * SubscriptionController.
- */
- //TODO: Removed before U AOSP public release.
- boolean isSubscriptionManagerServiceEnabled();
-
/**
* Called during setup wizard restore flow to attempt to restore the backed up sim-specific
* configs to device for all existing SIMs in the subscription database
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index ee9d6c1..282b64d 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -2991,6 +2991,15 @@
boolean setSatelliteServicePackageName(in String servicePackageName);
/**
+ * This API can be used by only CTS to update satellite gateway service package name.
+ *
+ * @param servicePackageName The package name of the satellite gateway service.
+ * @return {@code true} if the satellite gateway service is set successfully,
+ * {@code false} otherwise.
+ */
+ boolean setSatelliteGatewayServicePackageName(in String servicePackageName);
+
+ /**
* This API can be used by only CTS to update the timeout duration in milliseconds that
* satellite should stay at listening mode to wait for the next incoming page before disabling
* listening mode.
diff --git a/tests/ActivityManagerPerfTests/utils/Android.bp b/tests/ActivityManagerPerfTests/utils/Android.bp
index 99c43c8..5902c1c 100644
--- a/tests/ActivityManagerPerfTests/utils/Android.bp
+++ b/tests/ActivityManagerPerfTests/utils/Android.bp
@@ -32,6 +32,6 @@
static_libs: [
"androidx.test.rules",
"junit",
- "ub-uiautomator",
+ "androidx.test.uiautomator_uiautomator",
],
}
diff --git a/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java b/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
index fc787ba..9bd94f2 100644
--- a/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
+++ b/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
@@ -19,10 +19,10 @@
import android.content.Intent;
import android.os.RemoteException;
import android.os.ResultReceiver;
-import android.support.test.uiautomator.UiDevice;
import android.util.Log;
import androidx.test.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
import java.io.IOException;
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
index 1b4d6ad..10ce5ea 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
@@ -16,7 +16,6 @@
package com.android.server.wm.flicker.ime
-import android.platform.test.annotations.FlakyTest
import android.platform.test.annotations.IwTest
import android.platform.test.annotations.Presubmit
import android.tools.common.datatypes.component.ComponentNameMatcher
@@ -80,7 +79,7 @@
flicker.navBarLayerPositionAtStartAndEnd()
}
- @FlakyTest
+ @Presubmit
@Test
fun navBarLayerPositionAtStartAndEndLandscapeOrSeascapeAtStart() {
Assume.assumeFalse(flicker.scenario.isTablet)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowToFixedPortraitAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowToFixedPortraitAppTest.kt
index 3a8db45..3f87aef 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowToFixedPortraitAppTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowToFixedPortraitAppTest.kt
@@ -15,7 +15,7 @@
*/
package com.android.server.wm.flicker.ime
-import android.platform.test.annotations.Postsubmit
+import android.platform.test.annotations.Presubmit
import android.tools.common.NavBar
import android.tools.common.Rotation
import android.tools.common.datatypes.component.ComponentNameMatcher
@@ -60,19 +60,19 @@
}
}
- @Postsubmit
+ @Presubmit
@Test
fun imeLayerVisibleStart() {
flicker.assertLayersStart { this.isVisible(ComponentNameMatcher.IME) }
}
- @Postsubmit
+ @Presubmit
@Test
fun imeLayerExistsEnd() {
flicker.assertLayersEnd { this.isVisible(ComponentNameMatcher.IME) }
}
- @Postsubmit
+ @Presubmit
@Test
fun imeLayerVisibleRegionKeepsTheSame() {
var imeLayerVisibleRegionBeforeTransition: RegionSubject? = null
@@ -85,7 +85,7 @@
}
}
- @Postsubmit
+ @Presubmit
@Test
fun appWindowWithLetterboxCoversExactlyOnScreen() {
val displayBounds = WindowUtils.getDisplayBounds(flicker.scenario.startRotation)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt
index 12c0874..b1a267a 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationCold.kt
@@ -16,12 +16,9 @@
package com.android.server.wm.flicker.launch
-import android.platform.test.annotations.FlakyTest
import android.platform.test.annotations.Postsubmit
-import android.platform.test.annotations.Presubmit
import android.platform.test.rule.SettingOverrideRule
import android.provider.Settings
-import android.tools.common.datatypes.component.ComponentNameMatcher
import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
import android.tools.device.flicker.legacy.FlickerBuilder
import android.tools.device.flicker.legacy.FlickerTest
@@ -68,12 +65,6 @@
}
/** {@inheritDoc} */
- @FlakyTest(bugId = 203538234)
- @Test
- override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
- super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
- /** {@inheritDoc} */
@Test @Ignore("Display is off at the start") override fun navBarLayerPositionAtStartAndEnd() {}
/** {@inheritDoc} */
@@ -89,6 +80,11 @@
/** {@inheritDoc} */
@Test
@Ignore("Display is off at the start")
+ override fun taskBarWindowIsAlwaysVisible() {}
+
+ /** {@inheritDoc} */
+ @Test
+ @Ignore("Display is off at the start")
override fun statusBarLayerIsVisibleAtStartAndEnd() =
super.statusBarLayerIsVisibleAtStartAndEnd()
@@ -97,14 +93,6 @@
@Ignore("Not applicable to this CUJ. Display starts locked and app is full screen at the end")
override fun navBarWindowIsVisibleAtStartAndEnd() = super.navBarWindowIsVisibleAtStartAndEnd()
- /**
- * Checks the position of the [ComponentNameMatcher.STATUS_BAR] at the start and end of the
- * transition
- */
- @Presubmit
- @Test
- override fun statusBarLayerPositionAtEnd() = super.statusBarLayerPositionAtEnd()
-
/** {@inheritDoc} */
@Test
@Ignore("Not applicable to this CUJ. Display starts locked and app is full screen at the end")
@@ -143,7 +131,7 @@
val disableUnseenNotifFilterRule =
SettingOverrideRule(
Settings.Secure.LOCK_SCREEN_SHOW_ONLY_UNSEEN_NOTIFICATIONS,
- /* value= */ "0",
+ /* value = */ "0",
)
}
}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWarm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWarm.kt
index 222caed..e414325 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWarm.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWarm.kt
@@ -97,6 +97,11 @@
/** {@inheritDoc} */
@Test
+ @Ignore("Not applicable to this CUJ. Display starts locked and app is full screen at the end")
+ override fun taskBarWindowIsAlwaysVisible() {}
+
+ /** {@inheritDoc} */
+ @Test
@Ignore("Not applicable to this CUJ. Display starts off and app is full screen at the end")
override fun statusBarLayerPositionAtStartAndEnd() {}
@@ -128,9 +133,6 @@
override fun navBarWindowIsAlwaysVisible() {}
/** {@inheritDoc} */
- @FlakyTest @Test override fun appWindowBecomesVisible() = super.appWindowBecomesVisible()
-
- /** {@inheritDoc} */
@FlakyTest(bugId = 246284526)
@Test
override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt
index 4efee55..0b09e24 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockNotificationWithLockOverlayApp.kt
@@ -109,14 +109,19 @@
override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd()
/** {@inheritDoc} */
- @FlakyTest(bugId = 209599395)
+ @Presubmit
@Test
override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible()
- @FlakyTest(bugId = 266730606)
+ @Presubmit
@Test
override fun entireScreenCovered() = super.entireScreenCovered()
+ @FlakyTest(bugId = 278227468)
+ @Test
+ override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
+ super.visibleWindowsShownMoreThanOneConsecutiveEntry()
+
companion object {
/**
* Creates the test configurations.
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromNotificationWarm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromNotificationWarm.kt
index 4a9507a..23cb1d4 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromNotificationWarm.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromNotificationWarm.kt
@@ -191,12 +191,6 @@
@Postsubmit
override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible()
- /** {@inheritDoc} */
- @Postsubmit
- @Test
- override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
- super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
companion object {
/**
* Creates the test configurations.
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppNonResizeableTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppNonResizeableTest.kt
index 9ab6156..17f5638 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppNonResizeableTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppNonResizeableTest.kt
@@ -17,7 +17,6 @@
package com.android.server.wm.flicker.launch
import android.platform.test.annotations.FlakyTest
-import android.platform.test.annotations.Postsubmit
import android.platform.test.annotations.Presubmit
import android.tools.common.NavBar
import android.tools.common.Rotation
@@ -70,7 +69,7 @@
* Checks that the [ComponentNameMatcher.NAV_BAR] layer starts invisible, becomes visible during
* unlocking animation and remains visible at the end
*/
- @FlakyTest(bugId = 227083463)
+ @Presubmit
@Test
fun navBarLayerVisibilityChanges() {
Assume.assumeFalse(flicker.scenario.isTablet)
@@ -155,8 +154,19 @@
@Ignore("Not applicable to this CUJ. Display starts off and app is full screen at the end")
override fun statusBarWindowIsAlwaysVisible() {}
+ /** {@inheritDoc} */
+ @Presubmit
+ @Test
+ override fun appWindowBecomesFirstAndOnlyTopWindow() =
+ super.appWindowBecomesFirstAndOnlyTopWindow()
+
+ /** {@inheritDoc} */
+ @Presubmit
+ @Test
+ override fun appWindowBecomesVisible() = super.appWindowBecomesVisible()
+
/** Checks the [ComponentNameMatcher.NAV_BAR] is visible at the end of the transition */
- @Postsubmit
+ @Presubmit
@Test
fun navBarLayerIsVisibleAtEnd() {
Assume.assumeFalse(flicker.scenario.isTablet)
@@ -185,18 +195,11 @@
super.appLayerBecomesVisible()
}
- /** {@inheritDoc} */
- @FlakyTest @Test override fun entireScreenCovered() = super.entireScreenCovered()
-
- @FlakyTest(bugId = 218470989)
+ @Presubmit
@Test
override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
super.visibleWindowsShownMoreThanOneConsecutiveEntry()
- @FlakyTest(bugId = 227143265)
- @Test
- override fun appWindowBecomesTopWindow() = super.appWindowBecomesTopWindow()
-
@FlakyTest(bugId = 251217585)
@Test
override fun focusChanges() {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenCameraOnDoubleClickPowerButton.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenCameraOnDoubleClickPowerButton.kt
index 786bb32..ae9ca80 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenCameraOnDoubleClickPowerButton.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenCameraOnDoubleClickPowerButton.kt
@@ -24,11 +24,12 @@
import android.tools.device.flicker.legacy.FlickerBuilder
import android.tools.device.flicker.legacy.FlickerTest
import android.tools.device.flicker.legacy.FlickerTestFactory
+import android.tools.device.flicker.rules.RemoveAllTasksButHomeRule
import android.view.KeyEvent
import androidx.test.filters.RequiresDevice
import com.android.server.wm.flicker.helpers.setRotation
-import android.tools.device.flicker.rules.RemoveAllTasksButHomeRule
import org.junit.FixMethodOrder
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
@@ -44,6 +45,7 @@
* Make sure no apps are running on the device
* Launch an app [testApp] and wait animation to complete
* ```
+ *
* Notes:
* ```
* 1. Some default assertions (e.g., nav bar, status bar and screen covered)
@@ -100,7 +102,7 @@
@Postsubmit @Test override fun entireScreenCovered() = super.entireScreenCovered()
- @Postsubmit
+ @Ignore("Not applicable to this CUJ. App is full screen at the end")
@Test
override fun navBarLayerIsVisibleAtStartAndEnd() = super.navBarLayerIsVisibleAtStartAndEnd()
@@ -112,24 +114,24 @@
@Test
override fun navBarWindowIsAlwaysVisible() = super.navBarWindowIsAlwaysVisible()
- @Postsubmit
+ @Ignore("Status bar visibility depends on whether the permission dialog is displayed or not")
@Test
override fun statusBarLayerIsVisibleAtStartAndEnd() =
super.statusBarLayerIsVisibleAtStartAndEnd()
- @Postsubmit
+ @Ignore("Status bar visibility depends on whether the permission dialog is displayed or not")
@Test
override fun statusBarLayerPositionAtStartAndEnd() = super.statusBarLayerPositionAtStartAndEnd()
- @Postsubmit
+ @Ignore("Status bar visibility depends on whether the permission dialog is displayed or not")
@Test
override fun statusBarWindowIsAlwaysVisible() = super.statusBarWindowIsAlwaysVisible()
- @Postsubmit
+ @Ignore("Not applicable to this CUJ. App is full screen at the end")
@Test
override fun taskBarLayerIsVisibleAtStartAndEnd() = super.taskBarLayerIsVisibleAtStartAndEnd()
- @Postsubmit
+ @Ignore("Not applicable to this CUJ. App is full screen at the end")
@Test
override fun taskBarWindowIsAlwaysVisible() = super.taskBarWindowIsAlwaysVisible()
@@ -143,7 +145,7 @@
override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
super.visibleWindowsShownMoreThanOneConsecutiveEntry()
- @Postsubmit
+ @Ignore("Not applicable to this CUJ. App is full screen at the end")
@Test
override fun navBarWindowIsVisibleAtStartAndEnd() {
super.navBarWindowIsVisibleAtStartAndEnd()
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
index 6fa65fd..be73547 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
@@ -118,7 +118,7 @@
}
/** Checks that a color background is visible while the task transition is occurring. */
- @Presubmit
+ @FlakyTest(bugId = 265007895)
@Test
fun transitionHasColorBackground() {
val backgroundColorLayer = ComponentNameMatcher("", "Animation Background")
diff --git a/tests/InputMethodStressTest/Android.bp b/tests/InputMethodStressTest/Android.bp
index 0ad3876..27640a5 100644
--- a/tests/InputMethodStressTest/Android.bp
+++ b/tests/InputMethodStressTest/Android.bp
@@ -32,5 +32,8 @@
"general-tests",
"vts",
],
- sdk_version: "31",
+ data: [
+ ":SimpleTestIme",
+ ],
+ sdk_version: "current",
}
diff --git a/tests/InputMethodStressTest/AndroidManifest.xml b/tests/InputMethodStressTest/AndroidManifest.xml
index 2d183bc..62eee02 100644
--- a/tests/InputMethodStressTest/AndroidManifest.xml
+++ b/tests/InputMethodStressTest/AndroidManifest.xml
@@ -17,7 +17,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.inputmethod.stresstest">
-
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application>
<activity android:name=".ImeStressTestUtil$TestActivity"
android:configChanges="orientation|screenSize"/>
diff --git a/tests/InputMethodStressTest/AndroidTest.xml b/tests/InputMethodStressTest/AndroidTest.xml
index 9ac4135..bedf099 100644
--- a/tests/InputMethodStressTest/AndroidTest.xml
+++ b/tests/InputMethodStressTest/AndroidTest.xml
@@ -25,6 +25,7 @@
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
+ <option name="test-file-name" value="SimpleTestIme.apk" />
<option name="test-file-name" value="InputMethodStressTest.apk" />
</target_preparer>
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
index 0c7e452..3d257b2 100644
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
@@ -32,6 +32,7 @@
import android.app.Instrumentation;
import android.content.Intent;
+import android.content.res.Configuration;
import android.os.SystemClock;
import android.platform.test.annotations.RootPermissionTest;
import android.platform.test.rule.UnlockScreenRule;
@@ -60,17 +61,11 @@
@RunWith(Parameterized.class)
public final class AutoShowTest {
- @Rule(order = 0) public DisableLockScreenRule mDisableLockScreenRule =
- new DisableLockScreenRule();
- @Rule(order = 1) public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
- @Rule(order = 2) public ScreenOrientationRule mScreenOrientationRule =
- new ScreenOrientationRule(true /* isPortrait */);
- @Rule(order = 3) public PressHomeBeforeTestRule mPressHomeBeforeTestRule =
- new PressHomeBeforeTestRule();
- @Rule(order = 4) public ScreenCaptureRule mScreenCaptureRule =
+ @Rule(order = 0) public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
+ @Rule(order = 1) public ImeStressTestRule mImeStressTestRule =
+ new ImeStressTestRule(true /* useSimpleTestIme */);
+ @Rule(order = 2) public ScreenCaptureRule mScreenCaptureRule =
new ScreenCaptureRule("/sdcard/InputMethodStressTest");
-
- // TODO(b/240359838): add test case {@code Configuration.SCREENLAYOUT_SIZE_LARGE}.
@Parameterized.Parameters(
name = "windowFocusFlags={0}, softInputVisibility={1}, softInputAdjustment={2}")
public static List<Object[]> windowAndSoftInputFlagParameters() {
@@ -80,11 +75,14 @@
private final int mSoftInputFlags;
private final int mWindowFocusFlags;
private final Instrumentation mInstrumentation;
+ private final boolean mIsLargeScreen;
public AutoShowTest(int windowFocusFlags, int softInputVisibility, int softInputAdjustment) {
mSoftInputFlags = softInputVisibility | softInputAdjustment;
mWindowFocusFlags = windowFocusFlags;
mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mIsLargeScreen = mInstrumentation.getContext().getResources()
+ .getConfiguration().isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
}
/**
@@ -322,8 +320,7 @@
verifyClickBehavior(activity);
}
- public static void verifyAutoShowBehavior_forwardWithKeyboardOff(TestActivity activity) {
- // public: also used by ImeOpenCloseStressTest
+ private void verifyAutoShowBehavior_forwardWithKeyboardOff(TestActivity activity) {
if (hasUnfocusableWindowFlags(activity)) {
verifyImeAlwaysHiddenWithWindowFlagSet(activity);
return;
@@ -353,12 +350,12 @@
break;
}
case WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED: {
- if (softInputAdjustment
- == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
+ if ((softInputAdjustment
+ == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen) {
// The current system behavior will choose to show IME automatically when
// navigating forward to an app that has no visibility state specified
// (i.e. SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE
- // flag.
+ // flag or running on a large screen device.
waitOnMainUntilImeIsShown(editText);
} else {
verifyImeIsAlwaysHidden(editText);
@@ -370,7 +367,7 @@
}
}
- private static void verifyAutoShowBehavior_forwardWithKeyboardOn(TestActivity activity) {
+ private void verifyAutoShowBehavior_forwardWithKeyboardOn(TestActivity activity) {
int windowFlags = activity.getWindow().getAttributes().flags;
int softInputMode = activity.getWindow().getAttributes().softInputMode;
int softInputVisibility = softInputMode & WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE;
@@ -414,12 +411,12 @@
break;
}
case WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED: {
- if (softInputAdjustment
- == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
+ if ((softInputAdjustment
+ == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen) {
// The current system behavior will choose to show IME automatically when
- // navigating
- // forward to an app that has no visibility state specified (i.e.
- // SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE flag.
+ // navigating forward to an app that has no visibility state specified (i.e.
+ // SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE flag or
+ // running on a large screen device.
waitOnMainUntilImeIsShown(editText);
} else {
verifyImeIsAlwaysHidden(editText);
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DefaultImeVisibilityTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DefaultImeVisibilityTest.java
new file mode 100644
index 0000000..299cbf1
--- /dev/null
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DefaultImeVisibilityTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.stresstest;
+
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED;
+
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.REQUEST_FOCUS_ON_CREATE;
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.TestActivity.createIntent;
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.callOnMainSync;
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.verifyWindowAndViewFocus;
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.waitOnMainUntilImeIsHidden;
+import static com.android.inputmethod.stresstest.ImeStressTestUtil.waitOnMainUntilImeIsShown;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Intent;
+import android.platform.test.annotations.RootPermissionTest;
+import android.platform.test.rule.UnlockScreenRule;
+import android.widget.EditText;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Test IME visibility by using system default IME to ensure the behavior is consistent
+ * across Android platform versions.
+ */
+@RootPermissionTest
+@RunWith(Parameterized.class)
+public final class DefaultImeVisibilityTest {
+
+ @Rule(order = 0)
+ public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
+ // Use system default IME for test.
+ @Rule(order = 1)
+ public ImeStressTestRule mImeStressTestRule =
+ new ImeStressTestRule(false /* useSimpleTestIme */);
+
+ @Rule(order = 2)
+ public ScreenCaptureRule mScreenCaptureRule =
+ new ScreenCaptureRule("/sdcard/InputMethodStressTest");
+
+ private static final int NUM_TEST_ITERATIONS = 10;
+
+ @Parameterized.Parameters(name = "isPortrait={0}")
+ public static List<Boolean> isPortraitCases() {
+ // Test in both portrait and landscape mode.
+ return Arrays.asList(true, false);
+ }
+
+ public DefaultImeVisibilityTest(boolean isPortrait) {
+ mImeStressTestRule.setIsPortrait(isPortrait);
+ }
+
+ @Test
+ public void showHideDefaultIme() {
+ Intent intent =
+ createIntent(
+ 0x0, /* No window focus flags */
+ SOFT_INPUT_STATE_UNSPECIFIED | SOFT_INPUT_ADJUST_RESIZE,
+ Collections.singletonList(REQUEST_FOCUS_ON_CREATE));
+ ImeStressTestUtil.TestActivity activity = ImeStressTestUtil.TestActivity.start(intent);
+ EditText editText = activity.getEditText();
+ for (int i = 0; i < NUM_TEST_ITERATIONS; i++) {
+
+ boolean showResult = callOnMainSync(activity::showImeWithInputMethodManager);
+ assertThat(showResult).isTrue();
+ verifyWindowAndViewFocus(editText, true, true);
+ waitOnMainUntilImeIsShown(editText);
+
+ boolean hideResult = callOnMainSync(activity::hideImeWithInputMethodManager);
+ assertThat(hideResult).isTrue();
+ waitOnMainUntilImeIsHidden(editText);
+ }
+ }
+}
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DisableLockScreenRule.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DisableLockScreenRule.java
deleted file mode 100644
index d95decf..0000000
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/DisableLockScreenRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.inputmethod.stresstest;
-
-import android.support.test.uiautomator.UiDevice;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-
-import java.io.IOException;
-
-/** Disable lock screen during the test. */
-public class DisableLockScreenRule extends TestWatcher {
- private static final String LOCK_SCREEN_OFF_COMMAND = "locksettings set-disabled true";
- private static final String LOCK_SCREEN_ON_COMMAND = "locksettings set-disabled false";
-
- private final UiDevice mUiDevice =
- UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-
- @Override
- protected void starting(Description description) {
- try {
- mUiDevice.executeShellCommand(LOCK_SCREEN_OFF_COMMAND);
- } catch (IOException e) {
- throw new RuntimeException("Could not disable lock screen.", e);
- }
- }
-
- @Override
- protected void finished(Description description) {
- try {
- mUiDevice.executeShellCommand(LOCK_SCREEN_ON_COMMAND);
- } catch (IOException e) {
- throw new RuntimeException("Could not enable lock screen.", e);
- }
- }
-}
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeOpenCloseStressTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeOpenCloseStressTest.java
index 9d4aefb..7632ab0 100644
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeOpenCloseStressTest.java
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeOpenCloseStressTest.java
@@ -68,14 +68,10 @@
private static final String TAG = "ImeOpenCloseStressTest";
private static final int NUM_TEST_ITERATIONS = 10;
- @Rule(order = 0) public DisableLockScreenRule mDisableLockScreenRule =
- new DisableLockScreenRule();
- @Rule(order = 1) public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
- @Rule(order = 2) public ScreenOrientationRule mScreenOrientationRule =
- new ScreenOrientationRule(true /* isPortrait */);
- @Rule(order = 3) public PressHomeBeforeTestRule mPressHomeBeforeTestRule =
- new PressHomeBeforeTestRule();
- @Rule(order = 4) public ScreenCaptureRule mScreenCaptureRule =
+ @Rule(order = 0) public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
+ @Rule(order = 1) public ImeStressTestRule mImeStressTestRule =
+ new ImeStressTestRule(true /* useSimpleTestIme */);
+ @Rule(order = 2) public ScreenCaptureRule mScreenCaptureRule =
new ScreenCaptureRule("/sdcard/InputMethodStressTest");
private final Instrumentation mInstrumentation;
@@ -499,8 +495,6 @@
@Test
public void testRotateScreenWithKeyboardOn() throws Exception {
- // TODO(b/256739702): Keyboard disappears after rotating screen to landscape mode if
- // android:configChanges="orientation|screenSize" is not set
Intent intent =
createIntent(
mWindowFocusFlags,
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeStressTestRule.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeStressTestRule.java
new file mode 100644
index 0000000..12104b2
--- /dev/null
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ImeStressTestRule.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.stresstest;
+
+import android.app.Instrumentation;
+import android.os.RemoteException;
+import android.support.test.uiautomator.UiDevice;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+import java.io.IOException;
+
+/**
+ * Do setup and cleanup for Ime stress tests, including disabling lock and auto-rotate screen,
+ * pressing home and enabling a simple test Ime during the tests.
+ */
+public class ImeStressTestRule extends TestWatcher {
+ private static final String LOCK_SCREEN_OFF_COMMAND = "locksettings set-disabled true";
+ private static final String LOCK_SCREEN_ON_COMMAND = "locksettings set-disabled false";
+ private static final String SET_PORTRAIT_MODE_COMMAND = "settings put system user_rotation 0";
+ private static final String SET_LANDSCAPE_MODE_COMMAND = "settings put system user_rotation 1";
+ private static final String SIMPLE_IME_ID =
+ "com.android.apps.inputmethod.simpleime/.SimpleInputMethodService";
+ private static final String ENABLE_IME_COMMAND = "ime enable " + SIMPLE_IME_ID;
+ private static final String SET_IME_COMMAND = "ime set " + SIMPLE_IME_ID;
+ private static final String DISABLE_IME_COMMAND = "ime disable " + SIMPLE_IME_ID;
+ private static final String RESET_IME_COMMAND = "ime reset";
+
+ @NonNull private final Instrumentation mInstrumentation;
+ @NonNull private final UiDevice mUiDevice;
+ // Whether the screen orientation is set to portrait.
+ private boolean mIsPortrait;
+ // Whether to use a simple test Ime or system default Ime for test.
+ private final boolean mUseSimpleTestIme;
+
+ public ImeStressTestRule(boolean useSimpleTestIme) {
+ mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mUiDevice = UiDevice.getInstance(mInstrumentation);
+ // Default is portrait mode
+ mIsPortrait = true;
+ mUseSimpleTestIme = useSimpleTestIme;
+ }
+
+ public void setIsPortrait(boolean isPortrait) {
+ mIsPortrait = isPortrait;
+ }
+
+ @Override
+ protected void starting(Description description) {
+ disableLockScreen();
+ setOrientation();
+ mUiDevice.pressHome();
+ if (mUseSimpleTestIme) {
+ enableSimpleIme();
+ } else {
+ resetImeToDefault();
+ }
+
+ mInstrumentation.waitForIdleSync();
+ }
+
+ @Override
+ protected void finished(Description description) {
+ if (mUseSimpleTestIme) {
+ disableSimpleIme();
+ }
+ unfreezeRotation();
+ restoreLockScreen();
+ }
+
+ private void disableLockScreen() {
+ try {
+ executeShellCommand(LOCK_SCREEN_OFF_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not disable lock screen.", e);
+ }
+ }
+
+ private void restoreLockScreen() {
+ try {
+ executeShellCommand(LOCK_SCREEN_ON_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not enable lock screen.", e);
+ }
+ }
+
+ private void setOrientation() {
+ try {
+ mUiDevice.freezeRotation();
+ executeShellCommand(
+ mIsPortrait ? SET_PORTRAIT_MODE_COMMAND : SET_LANDSCAPE_MODE_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not set screen orientation.", e);
+ } catch (RemoteException e) {
+ throw new RuntimeException("Could not freeze rotation.", e);
+ }
+ }
+
+ private void unfreezeRotation() {
+ try {
+ mUiDevice.unfreezeRotation();
+ } catch (RemoteException e) {
+ throw new RuntimeException("Could not unfreeze screen rotation.", e);
+ }
+ }
+
+ private void enableSimpleIme() {
+ try {
+ executeShellCommand(ENABLE_IME_COMMAND);
+ executeShellCommand(SET_IME_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not enable SimpleTestIme.", e);
+ }
+ }
+
+ private void disableSimpleIme() {
+ try {
+ executeShellCommand(DISABLE_IME_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not disable SimpleTestIme.", e);
+ }
+ }
+
+ private void resetImeToDefault() {
+ try {
+ executeShellCommand(RESET_IME_COMMAND);
+ } catch (IOException e) {
+ throw new RuntimeException("Could not reset Ime to default.", e);
+ }
+ }
+
+ private @NonNull String executeShellCommand(@NonNull String cmd) throws IOException {
+ return mUiDevice.executeShellCommand(cmd);
+ }
+}
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
index d2708ad..f4a04a1 100644
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
@@ -77,11 +77,10 @@
private static final BySelector REPLY_SEND_BUTTON_SELECTOR =
By.res("com.android.systemui", "remote_input_send").enabled(true);
- @Rule
- public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
-
- @Rule
- public ScreenCaptureRule mScreenCaptureRule =
+ @Rule(order = 0) public UnlockScreenRule mUnlockScreenRule = new UnlockScreenRule();
+ @Rule(order = 1) public ImeStressTestRule mImeStressTestRule =
+ new ImeStressTestRule(true /* useSimpleTestIme */);
+ @Rule(order = 2) public ScreenCaptureRule mScreenCaptureRule =
new ScreenCaptureRule("/sdcard/InputMethodStressTest");
private Context mContext;
@@ -141,7 +140,8 @@
// Post inline reply notification.
PendingIntent pendingIntent = PendingIntent.getBroadcast(
- mContext, REPLY_REQUEST_CODE, new Intent().setAction(ACTION_REPLY),
+ mContext, REPLY_REQUEST_CODE,
+ new Intent().setAction(ACTION_REPLY).setClass(mContext, NotificationTest.class),
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
RemoteInput remoteInput = new RemoteInput.Builder(REPLY_INPUT_KEY)
.setLabel(REPLY_INPUT_LABEL)
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/PressHomeBeforeTestRule.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/PressHomeBeforeTestRule.java
deleted file mode 100644
index 6586f63..0000000
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/PressHomeBeforeTestRule.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.inputmethod.stresstest;
-
-import android.support.test.uiautomator.UiDevice;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-
-/** This rule will press home before a test case. */
-public class PressHomeBeforeTestRule extends TestWatcher {
- private final UiDevice mUiDevice =
- UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-
- @Override
- protected void starting(Description description) {
- mUiDevice.pressHome();
- }
-}
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ScreenOrientationRule.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ScreenOrientationRule.java
deleted file mode 100644
index bc3b1ef..0000000
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/ScreenOrientationRule.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.inputmethod.stresstest;
-
-import android.os.RemoteException;
-import android.support.test.uiautomator.UiDevice;
-
-import androidx.test.platform.app.InstrumentationRegistry;
-
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
-
-import java.io.IOException;
-
-/**
- * Disable auto-rotate during the test and set the screen orientation to portrait or landscape
- * before the test starts.
- */
-public class ScreenOrientationRule extends TestWatcher {
- private static final String SET_PORTRAIT_MODE_CMD = "settings put system user_rotation 0";
- private static final String SET_LANDSCAPE_MODE_CMD = "settings put system user_rotation 1";
-
- private final boolean mIsPortrait;
- private final UiDevice mUiDevice =
- UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-
- ScreenOrientationRule(boolean isPortrait) {
- mIsPortrait = isPortrait;
- }
-
- @Override
- protected void starting(Description description) {
- try {
- mUiDevice.freezeRotation();
- mUiDevice.executeShellCommand(mIsPortrait ? SET_PORTRAIT_MODE_CMD :
- SET_LANDSCAPE_MODE_CMD);
- } catch (IOException e) {
- throw new RuntimeException("Could not set screen orientation.", e);
- } catch (RemoteException e) {
- throw new RuntimeException("Could not freeze rotation.", e);
- }
- }
-
- @Override
- protected void finished(Description description) {
- try {
- mUiDevice.unfreezeRotation();
- } catch (RemoteException e) {
- throw new RuntimeException("Could not unfreeze screen rotation.", e);
- }
- }
-}
diff --git a/tests/SharedLibraryLoadingTest/AndroidTest.xml b/tests/SharedLibraryLoadingTest/AndroidTest.xml
index 947453d..ad05847 100644
--- a/tests/SharedLibraryLoadingTest/AndroidTest.xml
+++ b/tests/SharedLibraryLoadingTest/AndroidTest.xml
@@ -22,7 +22,6 @@
<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
- <option name="cleanup" value="false" />
<option name="remount-system" value="true" />
<option name="push"
value="SharedLibraryLoadingTests_StandardSharedLibrary.apk->/product/app/SharedLibraryLoadingTests_StandardSharedLibrary.apk" />
diff --git a/tests/SilkFX/assets/gainmaps/city_night.jpg b/tests/SilkFX/assets/gainmaps/city_night.jpg
index cdb4311..ba26ed6 100644
--- a/tests/SilkFX/assets/gainmaps/city_night.jpg
+++ b/tests/SilkFX/assets/gainmaps/city_night.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/desert_palms.jpg b/tests/SilkFX/assets/gainmaps/desert_palms.jpg
index c337aad..0481786 100644
--- a/tests/SilkFX/assets/gainmaps/desert_palms.jpg
+++ b/tests/SilkFX/assets/gainmaps/desert_palms.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/desert_sunset.jpg b/tests/SilkFX/assets/gainmaps/desert_sunset.jpg
index fa15f56..919a157 100644
--- a/tests/SilkFX/assets/gainmaps/desert_sunset.jpg
+++ b/tests/SilkFX/assets/gainmaps/desert_sunset.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/desert_wanda.jpg b/tests/SilkFX/assets/gainmaps/desert_wanda.jpg
index 33f69a9..f5a2ef9 100644
--- a/tests/SilkFX/assets/gainmaps/desert_wanda.jpg
+++ b/tests/SilkFX/assets/gainmaps/desert_wanda.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/fountain_night.jpg b/tests/SilkFX/assets/gainmaps/fountain_night.jpg
index 863127b..d8b2d75 100644
--- a/tests/SilkFX/assets/gainmaps/fountain_night.jpg
+++ b/tests/SilkFX/assets/gainmaps/fountain_night.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/grand_canyon.jpg b/tests/SilkFX/assets/gainmaps/grand_canyon.jpg
index 12cd966..2f605bb 100644
--- a/tests/SilkFX/assets/gainmaps/grand_canyon.jpg
+++ b/tests/SilkFX/assets/gainmaps/grand_canyon.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/lamps.jpg b/tests/SilkFX/assets/gainmaps/lamps.jpg
index 65bda89..768665f 100644
--- a/tests/SilkFX/assets/gainmaps/lamps.jpg
+++ b/tests/SilkFX/assets/gainmaps/lamps.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/mountain_lake.jpg b/tests/SilkFX/assets/gainmaps/mountain_lake.jpg
index b2b10d2..b7981fd 100644
--- a/tests/SilkFX/assets/gainmaps/mountain_lake.jpg
+++ b/tests/SilkFX/assets/gainmaps/mountain_lake.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/mountains.jpg b/tests/SilkFX/assets/gainmaps/mountains.jpg
index 82acd45..fe69993 100644
--- a/tests/SilkFX/assets/gainmaps/mountains.jpg
+++ b/tests/SilkFX/assets/gainmaps/mountains.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/sunflower.jpg b/tests/SilkFX/assets/gainmaps/sunflower.jpg
index 55b1b14..4b17614 100644
--- a/tests/SilkFX/assets/gainmaps/sunflower.jpg
+++ b/tests/SilkFX/assets/gainmaps/sunflower.jpg
Binary files differ
diff --git a/tests/SilkFX/assets/gainmaps/train_station_night.jpg b/tests/SilkFX/assets/gainmaps/train_station_night.jpg
index 45142bb..ecd45ee 100644
--- a/tests/SilkFX/assets/gainmaps/train_station_night.jpg
+++ b/tests/SilkFX/assets/gainmaps/train_station_night.jpg
Binary files differ
diff --git a/tests/testables/src/android/testing/TestWithLooperRule.java b/tests/testables/src/android/testing/TestWithLooperRule.java
new file mode 100644
index 0000000..99b303e
--- /dev/null
+++ b/tests/testables/src/android/testing/TestWithLooperRule.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.testing;
+
+import android.testing.TestableLooper.LooperFrameworkMethod;
+import android.testing.TestableLooper.RunWithLooper;
+
+import org.junit.internal.runners.statements.InvokeMethod;
+import org.junit.rules.MethodRule;
+import org.junit.runner.RunWith;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * This rule is meant to be an alternative of using AndroidTestingRunner.
+ * It let tests to start from background thread, and assigns mainLooper or new
+ * Looper for the Statement.
+ */
+public class TestWithLooperRule implements MethodRule {
+
+ /*
+ * This rule requires to be the inner most Rule, so the next statement is RunAfters
+ * instead of another rule. You can set it by '@Rule(order = Integer.MAX_VALUE)'
+ */
+ @Override
+ public Statement apply(Statement base, FrameworkMethod method, Object target) {
+ // getting testRunner check, if AndroidTestingRunning then we skip this rule
+ RunWith runWithAnnotation = target.getClass().getAnnotation(RunWith.class);
+ if (runWithAnnotation != null) {
+ // if AndroidTestingRunner or it's subclass is in use, do nothing
+ if (AndroidTestingRunner.class.isAssignableFrom(runWithAnnotation.value())) {
+ return base;
+ }
+ }
+
+ // check if RunWithLooper annotation is used. If not skip this rule
+ RunWithLooper looperAnnotation = method.getAnnotation(RunWithLooper.class);
+ if (looperAnnotation == null) {
+ looperAnnotation = target.getClass().getAnnotation(RunWithLooper.class);
+ }
+ if (looperAnnotation == null) {
+ return base;
+ }
+
+ try {
+ wrapMethodInStatement(base, method, target);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ return base;
+ }
+
+ // This method is based on JUnit4 test runner flow. It might need to be revisited when JUnit is
+ // upgraded
+ // TODO(b/277743626): use a cleaner way to wrap each statements; may require some JUnit
+ // patching to facilitate this.
+ private void wrapMethodInStatement(Statement base, FrameworkMethod method, Object target)
+ throws Exception {
+ Statement next = base;
+ try {
+ while (next != null) {
+ switch (next.getClass().getSimpleName()) {
+ case "RunAfters":
+ this.<List<FrameworkMethod>>wrapFieldMethodFor(next,
+ next.getClass(), "afters", method, target);
+ next = getNextStatement(next, "next");
+ break;
+ case "RunBefores":
+ this.<List<FrameworkMethod>>wrapFieldMethodFor(next,
+ next.getClass(), "befores", method, target);
+ next = getNextStatement(next, "next");
+ break;
+ case "FailOnTimeout":
+ // Note: withPotentialTimeout() from BlockJUnit4ClassRunner might use
+ // FailOnTimeout which always wraps a new thread during InvokeMethod
+ // method evaluation.
+ next = getNextStatement(next, "originalStatement");
+ break;
+ case "InvokeMethod":
+ this.<FrameworkMethod>wrapFieldMethodFor(next,
+ InvokeMethod.class, "testMethod", method, target);
+ return;
+ default:
+ throw new Exception(
+ String.format("Unexpected Statement received: [%s]",
+ next.getClass().getName())
+ );
+ }
+ }
+ } catch (Exception e) {
+ throw e;
+ }
+ }
+
+ // Wrapping the befores, afters, and InvokeMethods with LooperFrameworkMethod
+ // within the statement.
+ private <T> void wrapFieldMethodFor(Statement base, Class<?> targetClass, String fieldStr,
+ FrameworkMethod method, Object target)
+ throws NoSuchFieldException, IllegalAccessException {
+ Field field = targetClass.getDeclaredField(fieldStr);
+ field.setAccessible(true);
+ T fieldInstance = (T) field.get(base);
+ if (fieldInstance instanceof FrameworkMethod) {
+ field.set(base, looperWrap(method, target, (FrameworkMethod) fieldInstance));
+ } else {
+ // Befores and afters methods lists
+ field.set(base, looperWrap(method, target, (List<FrameworkMethod>) fieldInstance));
+ }
+ }
+
+ // Retrieve the next wrapped statement based on the selected field string
+ private Statement getNextStatement(Statement base, String fieldStr)
+ throws NoSuchFieldException, IllegalAccessException {
+ Field nextField = base.getClass().getDeclaredField(fieldStr);
+ nextField.setAccessible(true);
+ Object value = nextField.get(base);
+ return value instanceof Statement ? (Statement) value : null;
+ }
+
+ protected FrameworkMethod looperWrap(FrameworkMethod method, Object test,
+ FrameworkMethod base) {
+ RunWithLooper annotation = method.getAnnotation(RunWithLooper.class);
+ if (annotation == null) annotation = test.getClass().getAnnotation(RunWithLooper.class);
+ if (annotation != null) {
+ return LooperFrameworkMethod.get(base, annotation.setAsMainLooper(), test);
+ }
+ return base;
+ }
+
+ protected List<FrameworkMethod> looperWrap(FrameworkMethod method, Object test,
+ List<FrameworkMethod> methods) {
+ RunWithLooper annotation = method.getAnnotation(RunWithLooper.class);
+ if (annotation == null) annotation = test.getClass().getAnnotation(RunWithLooper.class);
+ if (annotation != null) {
+ methods = new ArrayList<>(methods);
+ for (int i = 0; i < methods.size(); i++) {
+ methods.set(i, LooperFrameworkMethod.get(methods.get(i),
+ annotation.setAsMainLooper(), test));
+ }
+ }
+ return methods;
+ }
+}
diff --git a/tests/testables/tests/AndroidManifest.xml b/tests/testables/tests/AndroidManifest.xml
index 1731f6b..2bfb04f 100644
--- a/tests/testables/tests/AndroidManifest.xml
+++ b/tests/testables/tests/AndroidManifest.xml
@@ -21,7 +21,7 @@
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
- <application android:debuggable="true" android:testOnly="true">
+ <application android:debuggable="true">
<uses-library android:name="android.test.runner" />
</application>
diff --git a/tests/testables/tests/AndroidTest.xml b/tests/testables/tests/AndroidTest.xml
deleted file mode 100644
index 6d29794..0000000
--- a/tests/testables/tests/AndroidTest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ 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.
- -->
-<configuration description="Runs Testable Tests.">
- <option name="test-tag" value="TestablesTests" />
- <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
- <option name="cleanup-apks" value="true" />
- <option name="install-arg" value="-t" />
- <option name="test-file-name" value="TestablesTests.apk" />
- </target_preparer>
- <test class="com.android.tradefed.testtype.AndroidJUnitTest">
- <option name="package" value="com.android.testables"/>
- </test>
-</configuration>
diff --git a/tools/validatekeymaps/Android.bp b/tools/validatekeymaps/Android.bp
index 25373f9..554f64e 100644
--- a/tools/validatekeymaps/Android.bp
+++ b/tools/validatekeymaps/Android.bp
@@ -15,7 +15,7 @@
cc_binary_host {
name: "validatekeymaps",
-
+ cpp_std: "c++20",
srcs: ["Main.cpp"],
cflags: [
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
index 166fbdd..c6e675a 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
@@ -84,6 +84,12 @@
public @interface DeviceType {
}
+ /**
+ * Key in extras bundle indicating that the device battery is charging.
+ * @hide
+ */
+ public static final String EXTRA_KEY_IS_BATTERY_CHARGING = "is_battery_charging";
+
@DeviceType
private final int mDeviceType;
private final String mDeviceName;